【06】Kubernets:资源清单(控制器 - Deployment)

写在前面的话

 

上一节主要简单的提了一下控制器都有哪些常用的,并且简单的功能是啥,最后一并提了 ReplicaSet 控制器。

但是 ReplicaSet 一般不需要我们直接配置,多以从本节开始,开始学习 K8S 默认的控制器 Deployment。

 

 

Deployment 资源清单

 

和 rs 一样,deployment 我们也可以简写成 deploy,先简单的看下其资源清单的结构,如下表:

deployment
apiVersion       apps/v1 
kind       Deployment
metadata       和其他 metadata 一样,包括 name / labels 等
spec        
  minReadySeconds     最小准备时间
  paused     暂停
  replicas     副本数量
  revisionHistoryLimit     历史版本保存数量,默认 10
  rollbackTo      
    revision   回滚到指定版本 
  selector      
    matchExpressions   标签选择器
    matchLabels   标签选择器(一般用这个)
  strategy      
    rollingUpdate    
      maxSurge 能被同一时间升级允许的最大 Pod 数,可以是数字或百分比
      maxUnavailable 同一时间不允许升级数,可以是数字或者百分比
    type   选择方式,可以是 RollingUpdate(默认)或者 Recreate
  template      
    metadata   Pod 的 metadata
    spec   Pod 的 spec

 

 

Deployment 示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-demo
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: erp
      release: stable
  template:
    metadata:
      name: deploy-container
      namespace: default
      labels:
        app: erp
        release: stable
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: 443

运行:我们这里将不再使用 create 根据配置文件创建,而是使用 apply 创建:

# 创建
kubectl apply -f deploy-demo.yaml

# 查看
kubectl get deploy
kubectl get rs kubectl get pods

结果如图:

【06】Kubernets:资源清单(控制器 - Deployment)_第1张图片

我们说过 Deployment 属于 ReplicaSet 的更上层,所以我们创建 Deploy 之后是可以查看到 ReplicaSet 的,而且根据命名的特点我们也可以发现:

Deploy --> ReplicaSet --> Pod 命令属于一级一级的增加。其中 rs 名字后面的随机数其实际是模板名称的 hash 值。

此时我们可以做个升级测试,修改 yaml 中的镜像版本由 v1 改为 v2:

kubectl apply -f deploy-demo.yaml

再度应用配置查看:

kubectl get pods -l app=erp -w

通过该方法我们可以看到整个过程,完成后查看 rs:

kubectl get rs -o wide

结果如图:

可以看到原来 v1 版本的 rs 在运行变成了 0,而 v2 版本的变成了 2,但是 v1 版本的 rs 并未删除。

这是由于我们保存历史版本的原因,也就是:

kubectl rollout history deployment deploy-demo

结果如图:

 

使用打补丁的方式直接修改 Pod 数量:

kubectl patch deployment deploy-demo -p '{"spec":{"replicas":3}}'

结果如图:

 

同样,我们可以使用另外的方法更新,比如更新镜像版本:

kubectl set image deployment deploy-demo myapp=ikubernetes/myapp:v3

结果如图: 

 

在更新过程中,我们可以使用 pause 暂停实现金丝雀发布: 

kubectl rollout pause deployment deploy-demo

那么他会根据更新策略进行一次更新后暂停,等待下次 resume 后完全更新:

kubectl rollout resume deployment deploy-demo

这里就不做过多演示了。

 

同样,回滚历史版本:

kubectl rollout undo deployment deploy-demo --to-revision=2

结果如图:

 

小结

 

其实对于 Deployment,我们需要记忆的并不多,因为之前的 Pod 和 RS 中已经将底层的知识记了一遍,我们在这里只是相当于在他的外面继续套了一层套子。

你可能感兴趣的:(【06】Kubernets:资源清单(控制器 - Deployment))