Kubernetes | 二进制软件包方式部署 -- 部署 ku
2022-05-29 本文已影响0人
奶茶不要奶不要茶
09 部署 kubelet 组件
一个在集群中每个 Node 节点上运行的代理。 负责 Pod 的创建运行。
更多内容请移步 Kubernetes 官网详阅。
9.1 获取二进制软件包
在本地主机上操作。
将 kubelet 分发到 3 台服务器上。
cd /data/k8s-deploy/software
wget https://github.com/pjgmow/kubernetes/releases/download/v1.23.6/kubernetes-node-v1.23.6-linux-amd64.tar.gz
tar xf kubernetes-node-v1.23.6-linux-amd64.tar.gz && cd kubernetes-node-v1.23.6-linux-amd64/
#K8S_HOST=(k8s-master-01 k8s-master-02 k8s-master-03)
#for h in ${K8S_HOST[@]};do scp kubelet root@$h:/usr/local/bin/;done
scp kubelet root@k8s-master-01:/usr/local/bin/
scp kubelet root@k8s-master-02:/usr/local/bin/
scp kubelet root@k8s-master-03:/usr/local/bin/
9.2 生成 kubeconfig 凭证文件
在本地主机上操作。
kubelet 不直接生成证书,而是通过 TLS bootstrapping 机制来自动创建。
生成 bootstrap.kubeconfig 凭证文件,将其分发到 3 台服务器上。
cd /data/k8s-deploy/kubeconfig
Token=$(awk -F',' '{print $1}' /data/k8s-deploy/kubeconfig/token.csv)
kubectl config set-cluster bootstrap \
--certificate-authority=../tls-csr/ca.pem \
--embed-certs=true \
--server=https://192.168.3.201:6443 \
--kubeconfig=bootstrap.kubeconfig
kubectl config set-credentials kubelet-bootstrap \
--token=$Token \
--kubeconfig=bootstrap.kubeconfig
kubectl config set-context bootstrap \
--cluster=bootstrap \
--user=kubelet-bootstrap \
--kubeconfig=bootstrap.kubeconfig
kubectl config use-context bootstrap --kubeconfig=bootstrap.kubeconfig
#K8S_HOST=(k8s-master-01 k8s-master-02 k8s-master-03)
#for h in ${K8S_HOST[@]};do scp bootstrap.kubeconfig root@$h:/etc/kubernetes/kubeconfig/;done
scp bootstrap.kubeconfig root@k8s-master-01:/etc/kubernetes/kubeconfig/
scp bootstrap.kubeconfig root@k8s-master-02:/etc/kubernetes/kubeconfig/
scp bootstrap.kubeconfig root@k8s-master-03:/etc/kubernetes/kubeconfig/
这里的 Token 很关键,是 kube-apiserver 中的 token.csv 第一列的内容。
9.3 生成服务配置文件
在本地主机上操作。
k8s-deploy 已提供了 kubelet 的配置文件模板,kubelet.yaml 文件中有一个内容需要修改:
__DNS__SERVER__:CoreDNS 的IP地址
修改配置文件内容,将其分发到 3 台服务器上。
cd /data/k8s-deploy/config
DNS_SERVER=10.0.0.2
sed -i "s#__DNS__SERVER__#${DNS_SERVER}#" ./kubelet.yaml
#K8S_HOST=(k8s-master-01 k8s-master-02 k8s-master-03)
#for h in ${K8S_HOST[@]};do scp kubelet.conf kubelet.yaml root@$h:/etc/kubernetes/conf/;done
scp kubelet.conf kubelet.yaml root@k8s-master-01:/etc/kubernetes/conf/
scp kubelet.conf kubelet.yaml root@k8s-master-02:/etc/kubernetes/conf/
scp kubelet.conf kubelet.yaml root@k8s-master-03:/etc/kubernetes/conf/
9.4 生成服务启动管理文件
在本地主机上操作。
k8s-deploy 已提供了服务启动管理文件,不需要修改内容,直接分发到 3 台服务器即可。
cd /data/k8s-deploy/service
#K8S_HOST=(k8s-master-01 k8s-master-02 k8s-master-03)
#for h in ${K8S_HOST[@]};do scp kubelet.service root@$h:/etc/systemd/system/;done
scp kubelet.service root@k8s-master-01:/etc/systemd/system/
scp kubelet.service root@k8s-master-02:/etc/systemd/system/
scp kubelet.service root@k8s-master-03:/etc/systemd/system/
9.5 启动 kubelet 服务
分别在 3 台服务器上操作。
服务配置文件和服务启动管理文件都分发之后,分别登录到 3 台服务器上启动 kubelet 服务。
systemctl daemon-reload
systemctl enable kubelet
systemctl start kubelet
systemctl status kubelet
9.6 生成集群管理员的 kubeconfig 凭证文件
在本地主机上操作。
生成集群管理员的凭证,kubectl
使用该凭证去操作集群。
将其分发到 3 台服务器上。
cd /data/k8s-deploy/kubeconfig
kubectl config set-cluster kubernetes \
--certificate-authority=../tls-csr/ca.pem \
--embed-certs=true \
--server=https://192.168.3.201:6443 \
--kubeconfig=admin.kubeconfig
kubectl config set-credentials admin \
--client-certificate=../tls-csr/admin.pem \
--client-key=../tls-csr/admin-key.pem \
--embed-certs=true \
--kubeconfig=admin.kubeconfig
kubectl config set-context kubernetes \
--cluster=kubernetes \
--user=admin \
--kubeconfig=admin.kubeconfig
kubectl config use-context kubernetes --kubeconfig=admin.kubeconfig
# 复制一份到本地主机,后面在本地主机也可以操作集群
mkdir -pv ~/.kube/ && cp admin.kubeconfig ~/.kube/config
#K8S_HOST=(k8s-master-01 k8s-master-02 k8s-master-03)
#for h in ${K8S_HOST[@]};do scp admin.kubeconfig root@$h:/etc/kubernetes/kubeconfig/;done
scp admin.kubeconfig root@k8s-master-01:/etc/kubernetes/kubeconfig/
scp admin.kubeconfig root@k8s-master-02:/etc/kubernetes/kubeconfig/
scp admin.kubeconfig root@k8s-master-03:/etc/kubernetes/kubeconfig/
9.7 授权 kubelet 创建证书签名请求
在本地主机上操作。
使用 kubectl 执行命令,授权 kubelet 创建证书签名请求。
kubectl create clusterrolebinding create-csrs-for-bootstrapping \
--clusterrole=system:node-bootstrapper --group=system:bootstrappers
这里的 --group 很关键,是 kube-apiserver 中的 token.csv 最后一列的内容。
9.8 为 kubelet 签署证书
在本地主机上操作。
当前是手动方式签署证书,熟悉流程之后可以配置自动签署。
# 获取证书签名请求,记下第一列的内容,下面签署证书要用到
kubectl get csr
# 签署证书
kubectl certificate approve <CSR>
示例
root@okokok:/data/k8s-deploy/kubeconfig# kubectl get csr
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
csr-d7tnc 92s kubernetes.io/kube-apiserver-client-kubelet kubelet-bootstrap <none> Pending
csr-fsnfc 93s kubernetes.io/kube-apiserver-client-kubelet kubelet-bootstrap <none> Pending
csr-mbrbc 96s kubernetes.io/kube-apiserver-client-kubelet kubelet-bootstrap <none> Pending
root@okokok:/data/k8s-deploy/kubeconfig# kubectl certificate approve csr-d7tnc
certificatesigningrequest.certificates.k8s.io/csr-d7tnc approved
root@okokok:/data/k8s-deploy/kubeconfig# kubectl get nodes
No resources found
root@okokok:/data/k8s-deploy/kubeconfig# kubectl get nodes
No resources found
root@okokok:/data/k8s-deploy/kubeconfig# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master-03 NotReady <none> 1s v1.23.6
root@okokok:/data/k8s-deploy/kubeconfig#