KubeKey 节点扩缩容、高可用与卸载
一、扩缩容节点
新机器需先执行《环境准备与安装 k8s》中的基础环境准备,然后修改 config-cluster.yaml 文件:
export KKZONE=cn
kk add nodes -f config-cluster.yaml # 增加机器
kk delete node <nodeName> -f config-cluster.yaml # 释放机器
二、升级配置
kk upgrade -f config-cluster.yaml
三、高可用(master 节点增删)
正常添加节点
需要注意 address:
*** 主要 address ***
controlPlaneEndpoint:
## Internal loadbalancer for apiservers
# internalLoadbalancer: haproxy
domain: lb.kubesphere.local
*** address: "172.21.106.247" ***
节点可正常连接时删除 master 节点
./kk delete node <nodeName> -f config-cluster.yaml
删除后从 config-cluster.yaml 中再删除该节点信息,加入新的 master 节点信息。
节点不可正常连接时删除 master 节点
kubectl drain nodename --ignore-daemonsets=true --grace-period=200
kubectl delete node nodename
# 从 etcd 集群列出成员
exist_host_ip1=172.17.0.3
exist_host_ip2=172.17.0.252
ETCDCTL_API=3 etcdctl \
--endpoints=https://$exist_host_ip1:2379 \
--cacert=/etc/ssl/etcd/ssl/ca.pem \
--cert=/etc/ssl/etcd/ssl/admin-$exist_host_ip1.pem \
--key=/etc/ssl/etcd/ssl/admin-$exist_host_ip1-key.pem \
member list
# 获取被删除节点在 etcd 中的名称,从 etcd 集群移除(替换最后面的节点 id)
ETCDCTL_API=3 etcdctl \
--endpoints=https://$exist_host_ip1:2379,https://$exist_host_ip2:2379 \
--cacert=/etc/ssl/etcd/ssl/ca.pem \
--cert=/etc/ssl/etcd/ssl/admin-$exist_host_ip1.pem \
--key=/etc/ssl/etcd/ssl/admin-$exist_host_ip1-key.pem \
member remove b66918af2a6cdd2c
删除旧的 master,再加入新 master 节点。
原文
kubectl drain命令中拼写为--ignore-saemonsets,已按 kubectl 实际参数名修正为--ignore-daemonsets。见install/kubernetes/rancher/kubekey/kubekey高可用.md:22。
四、卸载 KubeSphere 和 Kubernetes
# 配置文件方式
kk delete cluster -f config-cluster.yaml
# 命令行直建方式(无配置文件)
./kk delete cluster
五、彻底清理
关闭 kubelet、etcd:
systemctl stop kubelet
systemctl stop etcd
删除 k8s 相关目录:
sudo rm -rvf ~/.kube
sudo rm -rvf /etc/kubernetes/
sudo rm -rvf /etc/systemd/system/kubelet.service.d
sudo rm -rvf /etc/systemd/system/kubelet.service
sudo rm -rvf /usr/bin/kube*
sudo rm -rvf /etc/cni
sudo rm -rvf /opt/cni
sudo rm -rvf /var/lib/etcd
sudo rm -rvf /var/etcd
清除 Docker 所有相关资源:
docker rm -f $(docker ps -aq)
docker rmi -f $(docker images -aq)
docker volume prune
docker network prune