kubeadm常用
参考: https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/
配置kubeadm自动补全
# 配置kubeadm自动补全
source /usr/share/bash-completion/bash_completion
source <(kubeadm completion bash)
echo 'source <(kubeadm completion bash)' >>~/.bashrc
kubeadm completion bash >/etc/bash_completion.d/kubeadm
初始化一个master节点
kubeadm init
# 通过yaml初始化
kubeadm init --config kube-init.yaml
导出kubeadm默认配置文件
参考: https://www.jianshu.com/p/42e4792e142c
# 导出kubeadm默认配置文件
kubeadm config print init-defaults > kubeadm-init-config.yaml
将node节点加入集群
# 将node节点加入集群
kubeadm join ${token}
生成node配置
# 生成节点的kubeadm-config.yaml文件,在node节点操作。
sudo kubeadm config print join-defaults > kubeadm-config.yaml
# 加入集群
sudo kubeadm join --config kubeadm-config.yaml
升级k8s版本
参考: https://kubernetes.io/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
# 查看node版本
kubectl get node
# 查看kubeadm版本
kubeadm version
# 查看kubelet版本
kubelet version
# 切换到ek8s集群
kubectl config use-context ek8s
# 指定节点为不可调度
kubectl cordon k8s-master-0
# 驱逐节点上的所有pod(腾空节点)
kubectl darin k8s-master-0 --ignore-daemonsets
# 升级kubeadm,kubelet,kubectl
## ubuntu升级kubeadm,kubelet和kubectl到1.22.2
apt update && apt-mark unhold kubeadm kubelet kubectl && \
apt install kubeadm=1.22.2-00 kubelet=1.22.2-00 kubectl=1.22.2-00 --allow-change-held-packages -y && \
apt-mark hold kubeadm kubelet kubectl
## Centos升级kubeadm,kubelet和kubectl到1.22.2
yum install -y kubeadm=1.22.2-00 kubelet=1.22.2-00 kubectl=1.22.2-00
# 验证升级计划
kubeadm upgrade plan
# 升级k8s到1.20.1版本,且不升级etcd
kubeadm upgrade apply v1.22.2 --etcd-upgrade=false
# 重启kubelet服务
sudo systemctl daemon-reload
sudo systemctl restart kubelet
# 解除节点保护,将节点标记为可调度
kubectl uncordon k8s-master-0
# 确认node节点的版本
kubectl get node
kubeadm升级node
生产环境下没见过升级node的操作,都是一台一台踢掉,更新组件,然后ndoe重新加入集群
node 节点的升级实际上在升级完 master 节点以后不需要什么特殊操作,node 节点唯一需要升级的就是 kubelet
组件;首先在 node 节点执行 kubeadm upgrade node 命令,该命令会拉取集群内的 kubelet 配置文件,然后重新安装 kubelet 重启既可;同样升级 node 节点时不要忘记开启维护模式。针对于 CNI 组件请按需手动升级,并且确认好 CNI 组件的兼容版本。
# node节点排水
kubectl darin node1
# 升级node1的kubelet
ssh node1 # ssh到node1上
apt install kubelet=1.22.7-00 # 升级node1的kubelet版本和master版本一致
systemctl restart kubelet # 重启kubelet
# 允许node调度
kubectl uncordon k8s-node1
# 升级node
kubeadm upgrade node
维护或下线node节点
管理kubeadm join使用的令牌
默认token有效期24小时,当过期之后,需要重建token
参考: https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-token/
https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-join/
# 打印join时使用的token
kubeadm token create --print-join-command
重新初始化集群
在所有节点上执行
清空kubeadm init 或者kubeadm join对主机所作的任何更改
如果集群出错,可以重新初始化,初始化完成后再次加入node即可
注意: 数据会完全清空,生产环境慎用
官方重置方法
在
所有节点
上执行
# 重置master
kubeadm reset
## 如果有多个cri,要指定cri套接字
kubeadm reset -f --cri-socket=unix:///var/run/cri-dockerd.sock
# 重置过程不会清除CNI 配置,必须手动删除 /etc/cni/net.d
rm -rf /etc/cni/net.d
# 清理lvs策略
ipvsadm --clear
暴力重置方法
不推荐,实验也没有成功
参考: https://cloud.tencent.com/developer/article/1706820
# 删除/etc/kubernetes/文件夹下的所有文件
rm -rf /etc/kubernetes/*
# 删除$HOME/.kube文件夹
rm -rf ~/.kube/*
# 删除/var/lib/etcd文件夹
rm -rf /var/lib/etcd/*
# 停用端口号, 把下面的这些端口号都停用就ok
yum install -y lsof
lsof -i :6443|grep -v "PID"|awk '{print "kill -9",$2}'|sh
lsof -i :10259|grep -v "PID"|awk '{print "kill -9",$2}'|sh
lsof -i :10257|grep -v "PID"|awk '{print "kill -9",$2}'|sh
lsof -i :2379|grep -v "PID"|awk '{print "kill -9",$2}'|sh
lsof -i :2380|grep -v "PID"|awk '{print "kill -9",$2}'|sh
查看kubeadm配置信息
# 查看kubeadm配置信息
kubeadm config print
打印Kubeadm版本
# 打印Kubeadm版本
kubeadm version
预览kubeadm可用的新功能
kubeadm alpha