【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

结果如图:

我们说过 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 中已经将底层的知识记了一遍,我们在这里只是相当于在他的外面继续套了一层套子。

转载于:https://www.cnblogs.com/Dy1an/p/10978755.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值