「Kubernetes Objects」- Deployment

问题描述

Deployment(部署),提供管理 Pod 的方法

该笔记将记录:在 Kubernetes 中,与 Deployment 相关的内容,以及常见问题的解决方案;

解决方案

创建(增)

通过 kubectl create deployment 创建:

kubectl create deployment --dry-run -o yaml                \
    --namespace storage-util fio                           \
    --image=xridge/fio --replicas=1 -- sleep infinity | kubectl neat > fio.yaml

导出 Deployment 定义:

kubectl get -n "namespace" deployment "deployment-name" -o yaml --export

修改(改)

修改 Deployment 镜像(How can I edit a Deployment without modify the file manually?):

kubectl set -n "namespace" image "deployment/deploy-foo"  "deploy-foo"="image-name"

打开编辑器修改 Deployment 信息:

kubectl edit deployment/myapp-deployment --image=172.20.34.206:5000/myapp:img:3.0
kubectl edit deployment kubernet-dashboard -n kube-system
kubectl patch deployment "deployment-name" -p "{......}"

查看(查)

查看 Deployment 信息:

kubectl get deployment kubernet-dashboard -n kube-system

更新策略

Rolling update strategy(默认更新策略)

牺牲更新速度,以减少停机时间;

apiVersion: apps/v1  #Older versions of k8s use apps/v1beta1
kind: Deployment
metadata:
  name: hello-deploy
spec:
  minReadySeconds: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
...

Recreation Strategy

更新速度快,但是存在停机时间;

apiVersion: apps/v1  #Older versions of k8s use apps/v1beta1
kind: Deployment
metadata:
  name: hello-deploy
spec:
  minReadySeconds: 10
  strategy:
    type: Recreate
...

Canary Strategy

在 strategy.type 中,没有“Canary”类型,需要进行特殊配置:
1)定义两个不同名称的 Pod 资源,但是具有重复的标签;
2)这样 Service 在通过 Label 选择后端 Pod 时,会将流量转向“Canary Pod”资源;
3)通过设置副本数量,来控制比例;

下面是个简单的示例:

# Pod 1

     name: frontend
     replicas: 3
     ...
     labels:
        app: guestbook
        tier: frontend
        track: stable
     ...
     image: gb-frontend:v3


# Pod 2

     name: frontend-canary
     replicas: 1
     ...
     labels:
        app: guestbook
        tier: frontend
        track: canary
     ...
     image: gb-frontend:v4

# Service

  selector:
     app: guestbook
     tier: frontend

参考文献

『中级篇』k8s 重要的 Deployment(64)
A deep dive into Kubernetes Deployment strategies
Managing Resources | Kubernetes