1: Node隔离和恢复
操作功能:
Node隔离和恢复
操作步骤:
node隔离:
yaml文件:
apiVersion: v1
kind: Node
metadata:
name: kubernetes-minion1
labels:
kubernetes.io/hostname: kubernetes-minion1
spec:
unschedulable: true
然后,通过kubectl replace 命令完成对Node状态的修改:(kubectl replace -f unschedule_node.yaml)
查看Node的状态,可以观察到在Node的状态中增加了一项SchedulingDisabled
状态查看命令: kubectl get nodes
这样后续创建的Pod,系统将不会再向该Node进行调度
同样可以不适用配置文件,直接使用kubectl path命令来完成:
kubectl patch node kubernetes-minion1 -p '{"spec":{"unschedulable":true}}'
备注: 将某个Node脱离调度范围时,在其上运行的pod并不会自动停止,管理员需要手动停止在该Node上运行的Pod
node恢复:
如果需要将某个Node重新纳入集群调度范围,则将unschedulable设置为false,再次执行kubectl replace或kubectl patch命令就能恢复系统对该Node的调度。
2: Node扩容
操作功能:
Node扩容
操作步骤:
1: 在Node节点上安装Docker、Kubelet和kube-proxy
2:将kubelet和kube-proxy的启动参数中的Master URL指定为当前kubernetes集群Master的地址
3:最后启动这些服务
基于kubelet的自动修复机制,新的Node将会自动加入现有的kubernetes集群中。
3: Pod动态扩容和缩放
操作功能:
Pod动态扩容和缩放
操作步骤:
以Redis-slave RC 为例子, 已经定义的最初副本数量为2,通过如下的命令可以将redis-slave RC控制的Pod 副本数量从最初的2变为3
kubectl scale rc redis-slave --replicas=3
将--replicas设置为比当前Pod副本数量更小的数字,系统会kill掉一些运行中的pod
kubectl scale rc redis-slave --replicas=1
4:更新资源对象label
操作功能:
更新资源对象label
操作步骤:
给已经创建的Pod “redis-master-bobr0”添加一个标签role=backend
kubectl label pod redis-master-bobr0 role=backend
删除一个Label,只需在命令行最后指定Label的key名并与一个减号连接即可:
kubectl label pod redis-master-bobr0 role-
修改一个Label的值,需要加上--overwrite参数:
kubectl label pod redis-master-bobr0 role=master --overwrite
5:将Pod调度到指定的Node上
操作功能:
将Pod调度到指定的Node上
操作步骤:
1: 通过kubectl label 命令给目标Node打上一个特定的标签
kubectl label nodes <node-name> <label-key>=<label-value>
2:在Pod的配置文件中加入nodeSelector定义
主要定义段:
spec:
nodeSelector:
zone: <label-name>
运行kubectl create -f 命令创建的Pod就不会被调度到排除的Node上
6:kubelet 指定本地镜像
操作功能:
kubelet 指定本地镜像
操作步骤:
cat > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf <<EOF
[Service]
Environment="KUBELET_EXTRA_ARGS=--pod-infra-container- image=local.repo/google_containers/pause-amd64:3.1"
EOF
systemctl daemon-reload
systemctl restart kubelet