沙大斌K8sKubernetes

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#
上一篇 下一篇

猜你喜欢

热点阅读