提升工作效率的利器:资源管理器插件
817
2022-11-30
Kubernets 调度 常用的命令
节点添加删除标签
添加标签
[root@master ~]# kubectl label node master node-role.kubernetes.io/etcd=node/master labeled[root@master ~]# kubectl get nodeNAME STATUS ROLES AGE VERSIONmaster Ready etcd,master 79d v1.19.8node1 Ready pg,worker 79d v1.19.8node2 Ready worker 79d v1.19.8
删除标签
[root@master ~]# kubectl label node master node-role.kubernetes.io/etcd-node/master labeled[root@master ~]# kubectl get nodeNAME STATUS ROLES AGE VERSIONmaster Ready master 79d v1.19.8node1 Ready pg,worker 79d v1.19.8node2 Ready worker 79d v1.19.8
污点的设置、查看和去除
taints 内容包括 key、value、effect:
key 就是配置的键值value 就是内容effect 是标记了这个 taints 行为是什么
目前 Kubernetes 里面有三个 taints 行为:
NoSchedule 禁止新的 Pod 调度上来PreferNoSchedul 尽量不调度到这台NoExecute 会 evict 没有对应 toleration 的 Pods,并且也不会调度新的上来。这个策略是非常严格的,大家在使用的时候要小心一点
k8s的master节点本身就带有effect类型为NoSchedule的污点,这也是为什么k8s在调度Pod时,不会调度到master节点的原因,具体查看如下:(Kubeadm在安装初始化init的时候给master打上了污点,其余节点是没有该污点的。Master节点主要任务是管理集群的,不应该跑具体的业务应用。所以不允许pod落在master节点)
如果不让pod调度到某个节点,那么可以对该节点打污点
[root@k8s-master ~]# kubectl describe node k8s-master Taints: node-role.kubernetes.io/master:NoSchedule kubectl taint nodes k8s-master node-role.kubernetes.io/master=:NoSchedule
注意⚠️ : 为master设置的这个taint中, node-role.kubernetes.io/master为key, value为空, effect为NoSchedule,
如果输入命令时, 你丢掉了=符号, 写成了node-role.kubernetes.io/master:NoSchedule, 会报error: at least one taint update is required错误
过程介绍:
# 设置污点kubectl taint nodes [node name] key1=value:NoSchedule# 节点说明中,查看Taint字段kubectl describe node [node name]# 去除污点kubectl taint nodes [node name] key1:NoSchedule-
迁移Pod
驱逐节点是一种有损操作,驱逐的原理 :
封锁节点 (设为不可调度,避免新的 Pod 调度上来)。将该节点上的 Pod 删除。ReplicaSet 控制器检测到 Pod 减少,会重新创建一个 Pod,调度到新的节点上。
这个过程是先删除,再创建,并非是滚动更新,因此更新过程中,如果一个服务的所有副本都在被驱逐的节点上,则可能导致该服务不可用。
1. 设置节点是否可调度
确定需要迁移和被迁移的节点,将不允许被迁移的节点设置为不可调度。
在 node 节点上有一个 NodeUnschedulable 的标记,我们可以通过 kube-controller 对这个节点直接标记为不可调度,那这个节点就不会被调度了。在 1.16 的版本里,这个 Unschedulable 已经变成了一个 Taints。也就是说需要校验一下 Pod 上打上的 Tolerates 是不是可以容忍这个 Taints;
[root@k8s-master ~]# kubectl cordon k8s-node1[root@k8s-master ~]# kubectl describe node k8s-node1node.kubernetes.io/unschedulable:NoSchedule
# 查看节点kubectl get nodes# 设置节点为不可调度kubectl cordon
2. 执行kubectl drain命令
kubectl drain
示例:
$ kubectl drain bjzw-prek8sredis-99-40 --force --ignore-daemonsetsnode "bjzw-prek8sredis-99-40" already cordonedWARNING: Deleting pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet: kube-proxy-bjzw-prek8sredis-99-40; Ignoring DaemonSet-managed pods: calicoopsmonitor-mfpqs, arachnia-agent-j56n8pod "pre-test-pro2-r-0-redis-2-8-19-1" evictedpod "pre-test-hwh1-r-8-redis-2-8-19-2" evictedpod "pre-eos-hdfs-vector-eos-hdfs-redis-2-8-19-0" evicted
3. 特别说明
对于statefulset创建的Pod,kubectl drain的说明如下:
kubectl drain操作会将相应节点上的旧Pod删除,并在可调度节点上面起一个对应的Pod。当旧Pod没有被正常删除的情况下,新Pod不会起来。例如:旧Pod一直处于Terminating状态。
对应的解决方式是通过重启相应节点的kubelet,或者强制删除该Pod。
示例:
# 重启发生`Terminating`节点的kubeletsystemctl restart kubelet# 强制删除`Terminating`状态的Podkubectl delete pod
4. kubectl drain 流程图
5. TroubleShooting
1、存在不是通过ReplicationController, ReplicaSet, Job, DaemonSet 或者StatefulSet创建的Pod(即静态pod,通过文件方式创建的),所以需要设置强制执行的参数--force。
$ kubectl drain bjzw-prek8sredis-99-40node "bjzw-prek8sredis-99-40" already cordonederror: unable to drain node "bjzw-prek8sredis-99-40", aborting command...There are pending nodes to be drained: bjzw-prek8sredis-99-40error: DaemonSet-managed pods (use --ignore-daemonsets to ignore): calicoopsmonitor-mfpqs, arachnia-agent-j56n8; pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet (use --force to override): kube-proxy-bjzw-prek8sredis-99-40
2、存在DaemonSet方式管理的Pod,需要设置--ignore-daemonsets参数忽略报错。
$ kubectl drain bjzw-prek8sredis-99-40 --forcenode "bjzw-prek8sredis-99-40" already cordonederror: unable to drain node "bjzw-prek8sredis-99-40", aborting command...There are pending nodes to be drained: bjzw-prek8sredis-99-40error: DaemonSet-managed pods (use --ignore-daemonsets to ignore): calicoopsmonitor-mfpqs, arachnia-agent-j56n8
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~