Kubernetes集群节点维护
按照kubernetse设计原则,node节点只运行程序,由kubelet采集和提交数据与kube-apiserver交互更新,最终数据落入etcd中
由于node节点存在异常,需要
1. 将异常node节点打污点标记,防止再被调度
2. 异常节点node上的pod驱逐(若有)
3. 异常node节点维护(更新程序、重启等)
4. 取消异常node节点的五点标签
# 服务中断时间=停机等待5分钟时间+重建时间+服务启动时间+readiness探针检测正常时间
# 集群健康检查
kubectl get cs
kubectl get node -owide
kubectl get pod -A | grep -v Running
# 命令查询
kubectl taint nodes node1 key1=value1:NoSchedule #设置node1节点不可调度
kubectl taint nodes node1 key1=value1:NoSchedule- #设置node1节点可调度
# NoSchedule: 一定不能被调度
# PreferNoSchedule: 尽量不要调度
# NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod
# 将 node 节点标记为不可调度,不影响现有 pod,daemonSet 不受影响
kubectl cordon node-name
# 驱逐该节点的 pod
kubectl drain node-name
# 驱逐pod,同时为node加上污点标签
kubectl drain node --ignore-daemonsets
--delete-local-data # 删除本地数据,清空emptyDir
--ignore-daemonsets # 忽略DeamonSet
--force # 不加force参数只会删除该node节点上的ReplicationController, ReplicaSet, DaemonSet,StatefulSet or Job,加上后所有pod都将删除
# 维护结束,节点重新投入使用
kubectl uncordon node-name
# 删除节点
kubectl delete node node-name