Kubernetes (K8S) 搭建教程 发表于 2021-08-01 更新于 2026-06-08
北京
云计算 Cloud Kubernetes (K8S) 搭建教程 晨茗 2021-08-01 2026-06-08 一、安装 Docker
由于常用软件源中的 docker 都比较老了,所以需要添加 docker-ce 的源
APT(Ubuntu) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 apt-get update && apt-get install \ apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" apt-get update && apt-get install \ containerd.io \ docker-ce \ docker-ce-cli -y cat > /etc/docker/daemon.json <<EOF { "registry-mirrors": ["https://registry.docker-cn.com"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF mkdir -p /etc/systemd/system/docker.service.dsystemctl daemon-reload systemctl restart docker
YUM(CentOS) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 yum install -y yum-utils yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce docker-ce-cli containerd.io cat > /etc/docker/daemon.json <<EOF { "registry-mirrors": ["https://registry.docker-cn.com"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF systemctl daemon-reload systemctl restart docker
二、安装 K8S
APT 1 2 3 4 5 6 7 8 9 10 11 12 13 apt-get update && apt-get install -y apt-transport-https curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF swapoff -a free -m apt-get update apt-get install -y kubelet kubeadm kubectl
YUM 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF sudo setenforce 0sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/configsudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
三、配置 K8S
1. 配置代理或阿里云的源 由于 gcp 仓库被国内限制了访问,因此需配置代理或使用阿里云的源,这里建议配置代理,因为阿里云的源不是很全。
使用代理
需自身拥有代理服务器,具体操作请自行查找
使用vr y客户端的安装脚本 进行安装,并将配置文件放到 /usr/local/etc/v2ray/config.json 中。
然后配置 docker 使用代理:
1 2 3 4 5 6 7 8 vim /etc/systemd/system/docker.service.d/proxy.conf [Service] Environment="HTTPS_PROXY=socks5://127.0.0.1:10808" Environment="HTTP_PROXY=socks5://127.0.0.1:10808" systemctl daemon-reload systemctl restart docker
使用阿里云镜像 1 2 3 4 5 6 7 8 for i in `kubeadm config images list`; do imageName=${i#k8s.gcr.io/} docker pull registry.aliyuncs.com/google_containers/$imageName docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName docker rmi registry.aliyuncs.com/google_containers/$imageName done ;
2. Master 节点 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 cat <<EOF > kubeadm-config.yaml kind: ClusterConfiguration apiVersion: kubeadm.k8s.io/v1beta2 kubernetesVersion: <替换为自己的版本> --- kind: KubeletConfiguration apiVersion: kubelet.config.k8s.io/v1beta1 cgroupDriver: systemd EOF kubeadm init --apiserver-advertise-address=<替换为主节点ip> --pod-network-cidr=10.244.0.0/16 --service-cidr=10.244.0.0/12 --config kubeadm-config.yaml --v=5 export KUBECONFIG=/etc/kubernetes/admin.confkubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl taint nodes --all node-role.kubernetes.io/master- kubectl get nodes
3. Salve 节点 1 2 3 kubeadm join 10.42.**.**:6443 --token 0v4nx2.k450c9ak934uzqzw \ --discovery-token-ca-cert-hash sha256:12852a78ea3ea66d743daff4e4b95d53e8adc9e8a5a57251c62b8242fc51f4b0
四、安装 Helm 1. Helm 用途 Helm 是用于 kubernetes 的包管理工具,可以帮助我们快速的构建 kubernetes 应用,它包含以下几个部分:
Chart : 一个Helm包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含Kubernetes集群中的服务定义
可以理解为docker的image
Release : 在Kubernetes集群上运行的 Chart的一个实例。在同一个集群上,一个 Chart可以安装很多次。每次安装都会创建一个新的releas
可以理解为docker的container实例
Repository : 用于发布和存储 Chart 的仓库。
2. Helm 安装 首先前往 https://github.com/helm/helm/releases 查看 Helm 版本信息,然后选择其中一个版本,这里以 3.6.3 为例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 wge thttps://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz tar -zxvf helm-v3.6.3-linux-amd64.tar.gz cd linux-amd64/chmod a+x /usr/local/bin/helmhelm version
五、 安装 K8S Dashboard
该部分参考了教程 https://www.cnblogs.com/baoshu/p/13326480.html
1. 准备工作 这里将使用 Helm 进行 Dashboard 的安装,同时需要提前在 Kubernetes 中安装一个 Ingress 来帮助容器进行反向代理,不然 Kubernetes 外部不能访问到容器内。
Ingress 的安装可以参考https://www.cnblogs.com/baoshu/p/13255909.html#head16
同时配置 Ingress 和 Dashboard 还需要一个域名和对应的 HTTTPS 证书,被根据证书生成 secret。
免费域名 freenom.com,免费证书 ZeroSSL
1 2 3 4 5 6 7 8 cd /usr/local/certkubectl creat secret tls dashboard-tls --key aaa.key --cert bbb.crt -n kube-system
2. 安装 拉取安装配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 helm repo add kubernetes-dashboard <https://kubernetes.github.io/dashboard/> helm repo list helm search repo kubernetes-dashboard mkdir dashboard-chart && cd dashboard-chart helm pull kubernetes-dashboard/kubernetes-dashboard tar -zxvf kubernetes-dashboard-2.3.0.tgz cd kubernetes-dashboard
修改配置 根据 values.yaml 复制出一份新的文件,并对其进行修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 image: repository: kubernetesui/dashboard tag: v2.0.3 pullPolicy: IfNotPresent pullSecrets: [] replicaCount: 1 annotations: {}labels: {}extraEnv: []podAnnotations: seccomp.security.alpha.kubernetes.io/pod: 'runtime/default' nodeSelector: {}tolerations: []affinity: {}resources: requests: cpu: 100m memory: 200Mi limits: cpu: 2 memory: 200Mi protocolHttp: false service: type: ClusterIP externalPort: 443 annotations: {} labels: {} ingress: enabled: true annotations: nginx.ingress.kubernetes.io/secure-backends: "true" nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" paths: - / customPaths: [] hosts: - xxx.xxx.com tls: - secretName: dashboard-tls hosts: - xxx.xxx.com metricsScraper: enabled: false image: repository: kubernetesui/metrics-scraper tag: v1.0.4 resources: {} containerSecurityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true runAsUser: 1001 runAsGroup: 2001 metrics-server: enabled: false rbac: create: true clusterRoleMetrics: true clusterReadOnlyRole: false serviceAccount: create: true name: livenessProbe: initialDelaySeconds: 30 timeoutSeconds: 30 podDisruptionBudget: enabled: false minAvailable: maxUnavailable: containerSecurityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true runAsUser: 1001 runAsGroup: 2001 networkPolicy: enabled: false
根据配置进行构建 1 2 helm install -f new-values.yaml --namespace kube-system kubernetes-dashboard .
查看 Token 并登录 1 2 3 4 5 6 7 kubectl get secret -n kube-system | grep kubernetes-dashboard-token kubectl describe secret kubernetes-dashboard-token-vgp9w -n kube-system
之后便可以访问你的域名,并使用这个 token 进行登录。
注意需要修改你的域名的解析信息
为账户授权 当我们登录进去后,会发现看不到什么资源,这是因为账户权限不够,所以需要授权,这里直接赋予了 admin 权限。
创建dashboard-admin.yaml,内容为以下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard namespace: kube-system roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system
应用资源文件dashboard-admin.yaml
1 kubectl apply -f dashboard-admin.yaml
之后再登录就可以看到资源信息了。