3 min read

Kubernetes集群运维录

前言

常在Kubernetes上走,难免会有些需求要录。将常用的运维操作收录一二,以备用时之需求。

笔记1: 控制平面更换操作系统

有时候需要针对Master节点操作系统更换,比如CentOS7版本EOL久矣,我们需要逐渐将操作系统更换为其它,RockyLinux、AlmaLinux、OpenEuler、Kylin等。亦或是该Master节点操作系统有故障需重装。

  1. 删除Etcd成员
// 查看当前ETCD集群的成员与节点ID
ETCDCTL_API=3 etcdctl \
  --endpoints 127.0.0.1:2379 \
  --cacert /etc/kubernetes/pki/etcd/ca.crt \
  --cert /etc/kubernetes/pki/etcd/server.crt \
  --key /etc/kubernetes/pki/etcd/server.key \
  member list
  
  
  // 正式删除节点成员
  ETCDCTL_API=3 etcdctl \
  --endpoints 127.0.0.1:2379 \
  --cacert /etc/kubernetes/pki/etcd/ca.crt \
  --cert /etc/kubernetes/pki/etcd/server.crt \
  --key /etc/kubernetes/pki/etcd/server.key \
  member remove ID

2. 从K8S集群中删除该节点

$ kubectl delete node XXX

3. 生成加入Token

 $ kubeadm init phase upload-certs --upload-certs
 $ kubeadm token create --print-join-command --certificate-key 上一步生成的值

4. 重装加入到K8S

按步骤3生成的命令,在节点中执行即可

笔记2: ETCD持久化目录

由于不同的客户环境有不同的内部标准,比如数据分区的挂载目录位置,默认为/data,/opt,甚至还有各种目录。在初始化K8S集群时并没有留意这些,而是在完成之后才发现。举例将etcd 的持久化目录改到数据分区上面。

  1. 停止kubectl、containerd服务
# systemctl stop kubelet containerd

2. 移动etcd目录到其它目录,并创建软链接,比如/opt

# mv /data/etcd /opt/etcd
# ln -svf /opt/etcd /data/etcd

3. 启动kubectl、containerd服务

# systemctl start kubelet containerd
提示:如果不做软链接时,需要将etcd中的manifest YAML定义的hostPath 更新(单master上面正常通过,但如果是集群遇到过etcd无法起来的问题)

笔记3: Worker节点证书轮转

K8S集群的服务服务逾期了许久,虽然重新生成了,但worker节点一直NotReady。

控制平面生成对应节点的kubelet.conf文件

[root@vqiu-master-01 tmp]# install -d /tmp/kubelet

# 生成节点所需的 kubelet.conf文件。
[root@master kubelet]# kubeadm init --kubernetes-version=v1.26.15 phase kubeconfig kubelet --node-name vqiu-worker-01 --kubeconfig-dir /tmp/kubelet/
[kubeconfig] Writing “kubelet.conf” kubeconfig file

将生成的kubelet.conf文件传输到对应的worker节点中,操作如下:

[root@vqiu-worker-01 ~]# mv kubelet.conf /etc/kubernetes/kubelet.conf 
[root@vqiu-worker-01 ~]# systemctl restart kubelet

此时worker节点会生成新的证书

 # ls -l /var/lib/kubelet/pki/

kubelet证书的逾期时间

[root@vqiu-worker-01 ~]# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text | grep Not
 
 
#切换到master(192.168.0.190)上,查看CSR。(未操作)

控制平面中查看证书签名请求

[root@vqiu-master-01 tmp]# kubectl get csr

笔记4: 集群Token管理

生成一个永久Token

# kubeadm token create --ttl=0 --print-join-command

生成一个加入控制平面的Token

# CERT_KEY=$(kubeadm init phase upload-certs --upload-certs | tail -n 1)
# kubeadm  token create --ttl=1h --certificate-key=${CERT_KEY} --print-join-command