Docker K8s 06 使用 Deployment 服务的标签指定, 副本伸缩, 故障转移

Deployment 服务的扩容缩容

如果使用配置文件, 直接修改 replicas 数量后, 执行 apply 应用即可.

1
2
3
4
# 查看当前 pod 情况
kubectl get pods -o wide
# 执行修改
kubectl apply -f DEPLOYMENT_NAME.yaml

如果是使用命令行, 需要用到 scale 命令, 扩容和缩容相同, 只是目标值与当前值比较多少而已.

1
2
# 扩容缩容只是修改副本集数量
kubectl scale DEPLOYMENT_NAME --replicas=N

注意: 缩容可以将副本集数改为 0, 但是此时并不会删除 Deployment.

Deployment 的故障转移

当 K8s 启动后, 已经正确启动 kublet 和 kube-proxy 的 Node 节点会自动添加到 Master 中. 之后 kubelet 会定时向 Master 汇报 Node 自身情况, Pod 列表等, 以便 Master 可以掌握资源使用情况, 实现高效的调度策略. 如果没有按时上报, 会被标记为 NotReady 状态, 之后触发故障转移流程, 同时有问题节点上的 Pod 服务会被标记为 Unknown 状态. 之后即使节点恢复正常, 也不会重新将服务迁移回来.

通过 kubectl get nodes 获取节点状况, kubelet get pods -o wide 获取当前副本状况.

可以通过关机模拟 Node 故障. 通过 kubectl delete pod POD_NAME 删除 Pod 模拟 Pod 故障.

使用标签控制 Pod 的位置

默认 K8s 会将 Pod 调度到所有可用的 Node 上, 以实现负载均衡. 但是有时需要将特定功能的 Pod 放在指定的 Node 节点上. 比如需要大内存的服务, 需要放在高内存的机器上.

给 Node 打标签

1
2
kubectl label node NODE_NAME TAG_KEY=TAG_VALUE
kubectl get node --show-labels

部署服务配置文件指定标签

1
2
3
4
5
6
7
# ...
spec:
containers:
# ...
# 在这里指定选择具有此标签的 Node 进行部署
nodeSelector:
TAG_KEY: TAG_VALUE

执行生效

1
2
kubectl apply -f DEPLOYMENT_NAME.yaml
kubectl get pods -o wide

删除 Node 标签

1
2
kubectl label node NODE_NAME TAG_KEY-
kubectl get node --show-labels

增加使用 TAG_KEY=TAG_VALUE, 删除使用减号 TAG_KEY-.

注意: 删除标签后, 已经部署的应用不会立即被迁移.

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.