zoukankan      html  css  js  c++  java
  • kubernetes资源清单之Deployment

    Deployment为Pod和ReplicaSets提供声明性更新

    示例

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
         name: deploy-myweb
         namespace: default
    spec:
         replicas: 3
         selector:
             matchLabels:
                 app: myweb
                 tier: frontend
         template:
             metadata:
                 namespace: default
                 labels:
                     app: myweb
                     tier: frontend
             spec:
                 containers:
                   - name: container-myweb
                     image: mycloudedu/myweb:v1
                     imagePullPolicy: IfNotPresent

    将清单提交给kubernetes集群,将创建定义的Deployment及其管理的ReplicaSet与pod

    [root@master kubernetes]# kubectl apply -f deploy-myweb.yaml

    验证

    [root@master kubernetes]# kubectl get deployment
    NAME           READY   UP-TO-DATE   AVAILABLE   AGE
    deploy-myweb   3/3     3            3           89s

    [root@master kubernetes]# kubectl get rs
    NAME                      DESIRED   CURRENT   READY   AGE
    deploy-myweb-85996f4d65   3         3         3       111s

    [root@master kubernetes]# kubectl get pod
    NAME                            READY   STATUS    RESTARTS   AGE
    deploy-myweb-85996f4d65-4dr58   1/1     Running   0          6s
    deploy-myweb-85996f4d65-8vfhl   1/1     Running   0          6s
    deploy-myweb-85996f4d65-qsfmj   1/1     Running   0          6s

    这里只阐述几个字段:.spec.replicas、.spec.selector、.spec.strategy、.spec.revisionHistoryLimit、.spec.template五个字段。其他字段跟前两篇文章差不多,这里不作阐述。想了解请点击这里

    kubectl explain deployment.spec

    replicas    <integer>                          #是指期望值的pod数

    selector <Object> -required-              #标签选择器,kubernetes根据这个标签查看有几个pod。符不符ReplicaSet合期望值

    strategy <Object>                             #更新pod的策略

    template <Object> -required-             #创建pod的模板

    revisionHistoryLimit    <integer>         #保存几个历史版本,默认是10个

    kubectl explain deployment.spec.selector有两种用法:

    matchExpressions  <[]Object>

    matchLabels    <map[string]string>

    示例一:键与值的关系

    matchExpressions:

    - key:KEY

      operator: (In, NotIn, Exists and DoesNotExist)

      values: [VALUES1,VALUES2,…]

    示例二:

    matchLabels:

         KEY:VALUES

    kubectl explain deployment.spec.strategy

    rollingUpdate <Object>       #当type是RollingUpdate,这个字段才生效

    type    <string>                  #类型有两种Recreate与RollingUpdate,默认是RollingUpdate

    当type=Recreate时,重新创建pod。当type=RollingUpdata时,重新创建pod是由策略规划。

    这里讲解一下type=RollingUpdata。

    kubectl explain deployment.spec.strategy.rollingUpdate有两个字段:

    maxSurge    <string>              #最多能多几个pod

    maxUnavailable    <string>      #最多能少几个pod

    示例:

    rollingUpdate:

         maxSurge: <integer>

         maxUnavailable: <integer>

    这里template不阐述,说几个注意事项:

    1.metadata.name这项可以不定义。因为定义了也不会生效。

    2.metadata.labels必须含有selector的标签。

    3.spec与pod的spec是一样的,这里就不在说明了。需要了解的查看上面文章。

    综合示例

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
         name: deploy-myweb
         namespace: default
    spec:
         replicas: 3
         selector:
             matchLabels:
                 app: myweb
                 tier: frontend
         strategy:
             type: RollingUpdate
             rollingUpdate:
                 maxSurge: 1
                 maxUnavailable: 1
         revisionHistoryLimit: 3
         template:
             metadata:
                 namespace: default
                 labels:
                     app: myweb
                     tier: frontend
             spec:
                 containers:
                   - name: container-myweb
                     image: mycloudedu/myweb:v1
                     imagePullPolicy: IfNotPresent

    验证

    [root@master kubernetes]# kubectl describe deploy deploy-myweb

    RollingUpdateStrategy:  1 max unavailable, 1 max surge

    用打补丁的方式修改策略

    [root@master kubernetes]# kubectl patch deployments deploy-myweb -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":2,"maxUnavailable":0}}}}'
    deployment.apps/deploy-myweb patched

    验证

    [root@master kubernetes]# kubectl describe deploy deploy-myweb

    RollingUpdateStrategy:  0 max unavailable, 2 max surge

    更新版本,定义更新一个版本暂停。是否跟定义更新策略进行更新

    [root@master kubernetes]# kubectl set image deployments deploy-myweb container-myweb=mycloudedu/myweb:v2 && kubectl rollout pause deployment/deploy-myweb
    deployment.apps/deploy-myweb image updated
    deployment.apps/deploy-myweb paused

    [root@master ~]# kubectl get pod -w
    NAME                            READY   STATUS    RESTARTS   AGE
    deploy-myweb-85996f4d65-4dr58   1/1     Running   0          57m
    deploy-myweb-85996f4d65-8vfhl   1/1     Running   0          57m
    deploy-myweb-85996f4d65-qsfmj   1/1     Running   0          57m
    deploy-myweb-7fff44cfb8-cvbxf   0/1     Pending   0          0s
    deploy-myweb-7fff44cfb8-h47lb   0/1     Pending   0          0s
    deploy-myweb-7fff44cfb8-cvbxf   0/1     Pending   0          0s
    deploy-myweb-7fff44cfb8-h47lb   0/1     Pending   0          0s
    deploy-myweb-7fff44cfb8-cvbxf   0/1     ContainerCreating   0          0s
    deploy-myweb-7fff44cfb8-h47lb   0/1     ContainerCreating   0          0s
    deploy-myweb-7fff44cfb8-h47lb   1/1     Running             0          3s
    deploy-myweb-7fff44cfb8-cvbxf   1/1     Running             0          3s

    原本三个pod还是运行,后面创建一个pod。上面定义的策略是:允许最多多两个,不能减少pod。结论:符合更新策略

    取消暂时更新

    [root@master kubernetes]# kubectl rollout resume deploy/deploy-myweb
    deployment.apps/deploy-myweb resumed

    验证

    [root@master ~]# kubectl rollout status deploy deploy-myweb
    Waiting for deployment "deploy-myweb" rollout to finish: 2 out of 3 new replicas have been updated...
    Waiting for deployment spec update to be observed...
    Waiting for deployment spec update to be observed...
    Waiting for deployment "deploy-myweb" rollout to finish: 2 out of 3 new replicas have been updated...
    Waiting for deployment "deploy-myweb" rollout to finish: 2 out of 3 new replicas have been updated...
    Waiting for deployment "deploy-myweb" rollout to finish: 1 old replicas are pending termination...
    Waiting for deployment "deploy-myweb" rollout to finish: 1 old replicas are pending termination...
    deployment "deploy-myweb" successfully rolled out

    [root@master kubernetes]# kubectl get deploy -o wide
    NAME           READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS        IMAGES                SELECTOR
    deploy-myweb   3/3     3            3           65m   container-myweb   mycloudedu/myweb:v2   app=myweb,tier=frontend

    查看历史版本

    [root@master kubernetes]# kubectl rollout history deployments deploy-myweb
    deployment.apps/deploy-myweb
    REVISION  CHANGE-CAUSE
    1         <none>
    2         <none>

    回滚历史版本

    [root@master kubernetes]# kubectl rollout undo deploy/deploy-myweb --to-revision=1
    deployment.apps/deploy-myweb rolled back

    验证

    [root@master kubernetes]# kubectl get deploy -o wide
    NAME           READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS        IMAGES                SELECTOR
    deploy-myweb   3/3     3            3           67m   container-myweb  mycloudedu/myweb:v1   app=myweb,tier=frontend

  • 相关阅读:
    一元回归1_基础(python代码实现)
    fisher's exact test
    卡方检验(python代码实现)
    Hough transform(霍夫变换)
    【算法】怎样把一个单链表反序?
    HTTP请求格式和HTTP响应格式
    TCP/IP、SOCKET、HTTP之间的联系与区别
    Graphical vi-vim Cheat Sheet and Tutorial
    Linux远程上传、下载文件的方法
    matlab工作空间,变量的保存和载入
  • 原文地址:https://www.cnblogs.com/mycloudedu/p/12034050.html
Copyright © 2011-2022 走看看