{"id":2856,"date":"2023-03-18T20:00:00","date_gmt":"2023-03-18T12:00:00","guid":{"rendered":"https:\/\/jovepater.com\/?p=2856"},"modified":"2023-04-23T20:54:26","modified_gmt":"2023-04-23T12:54:26","slug":"for-k8s-beginner-ep-12-rolling-update","status":"publish","type":"post","link":"https:\/\/jovepater.com\/article\/for-k8s-beginner-ep-12-rolling-update\/","title":{"rendered":"For K8S Beginner EP 11\uff1a[\u63a2\u7a76] \u66f4\u65b0\u6a5f\u5236 Rolling Update vs. Recreate"},"content":{"rendered":"\n

K8S\u9810\u8a2d\u5c31\u662fRolling Update<\/strong><\/h2>\n\n\n\n

\u5148\u8aaa\u4e00\u500b\u91cd\u8981\u7684\u89c0\u5ff5\uff1a\u300c\u82e5\u6c92\u6709\u4efb\u4f55\u8a2d\u5b9a\uff0cK8S\u9810\u8a2d\u5c07\u4ee5Rolling Update\u7b56\u7565\u57f7\u884c\u66f4\u65b0\uff01\u300d<\/p>\n\n\n\n

Rolling Update vs. Recreate<\/strong><\/h2>\n\n\n\n

Rolling Update\u53c8\u540d\u300c\u6efe\u52d5\u66f4\u65b0\u300d<\/strong>\uff0c\u9867\u540d\u601d\u7fa9\uff0cK8S\u63d0\u4f9b\u4e00\u7a2e\u6efe\u52d5\u7684\u65b9\u5f0f\u4f86\u66f4\u65b0Pod\uff0c\u8b93\u670d\u52d9\u5728\u4e0d\u4e2d\u65b7 (\u6216\u50c5\u6975\u5c11\u7684\u77ac\u65b7) \u7684\u65b9\u5f0f\u5b8c\u6210\u66f4\u65b0\u4f5c\u696d\u3002<\/p>\n\n\n\n

\u793a\u610f\u5716\u5982\u4e0b\uff1a<\/p>\n\n\n

\n
\"Rolling
\u5716\u7247\u4f86\u6e90\uff1ahttps:\/\/kubernetes.io\/blog\/2018\/04\/30\/zero-downtime-deployment-kubernetes-jenkins\/<\/a><\/figcaption><\/figure><\/div>\n\n\n

Recreate\u53c8\u540d\u300c\u91cd\u65b0\u5efa\u7acb\u300d<\/strong>\uff0c\u5c31\u50cf\u50b3\u7d71\u7684\u66f4\u65b0\u4f5c\u696d\uff0cK8S\u5c07\u628a\u65e2\u6709\u7684Pod\u522a\u9664\uff0c\u76f4\u63a5\u4ee5\u65b0\u7684Pod\u53d6\u800c\u4ee3\u4e4b\uff0c\u5728\u9019\u6bb5\u671f\u9593\uff0c\u670d\u52d9\u5c07\u4e2d\u65b7\uff0c\u76f4\u5230\u7b2c\u4e00\u500bPod\u6210\u529f\u555f\u52d5\u81f3\u53ef\u4ee5\u63d0\u4f9b\u670d\u52d9\u70ba\u6b62\u3002<\/p>\n\n\n\n

\u4f7f\u7528Recreate\u7b56\u7565\u90e8\u7f72<\/strong><\/h2>\n\n\n\n

\u6b65\u9a5f1\uff1a<\/strong>YAML\u6a94\u5167\u5bb9\u5982\u4e0b\uff0c\u5728Spec\u5340\u6bb5\u653e\u5165strategy\u6a19\u7c64\uff0c\u5176\u5167\u5bb9\u6307\u5b9a\u70batype: Recreate\u3002<\/p>\n\n\n

\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: nginx-server-replicaset\n  labels:\n    app: frontend\n    env: production\nspec:\n  selector:\n    matchLabels:\n      app: frontend\n  replicas: 3\n  strategy:\n    type: Recreate\n  template:\n    metadata:\n      name: nginx-server\n      labels:\n        app: frontend\n    spec:\n      containers:\n        - name: nginx-server\n          image: nginx;1.23\n<\/pre><\/div>\n\n\n

\u6b65\u9a5f2\uff1a<\/strong>\u4f7f\u7528kubectl set\u6307\u4ee4\u8abf\u6574Pod\u7684Image\u7248\u672c\uff1a<\/p>\n\n\n\n

$ kubectl set image deployment.apps\/nginx-server-replicaset nginx-server=nginx:1.24.0<\/code><\/pre>\n\n\n\n

\u6b65\u9a5f3\uff1a<\/strong>\u4f7f\u7528kubectl describe\u4f86\u770b\u4e00\u4e0bEvents\uff0c\u53ef\u4ee5\u767c\u73feK8S\u4e00\u6b21\u505c\u6b62\u6240\u6709Pod\uff0c\u4e26\u91cd\u65b0\u90e8\u7f72\u65b0\u76843\u500bPod\u3002<\/p>\n\n\n

\nName:               nginx-server-replicaset\nNamespace:          default\nCreationTimestamp:  Sun, 23 Apr 2023 20:09:48 +0800\nLabels:             app=frontend\n                    env=production\nAnnotations:        deployment.kubernetes.io\/revision: 2\nSelector:           app=frontend\nReplicas:           3 desired | 3 updated | 3 total | 3 available | 0 unavailable\nStrategyType:       Recreate\nMinReadySeconds:    0\nPod Template:\n  Labels:  app=frontend\n  Containers:\n   nginx-server:\n    # Image\u7248\u672c\u66f4\u65b0\u70ba1.24.0\n    Image:        nginx:1.24.0\n    Port:         <none>\n    Host Port:    <none>\n    Environment:  <none>\n    Mounts:       <none>\n  Volumes:        <none>\nConditions:\n  Type           Status  Reason\n  ----           ------  ------\n  Available      True    MinimumReplicasAvailable\n  Progressing    True    NewReplicaSetAvailable\nOldReplicaSets:  <none>\nNewReplicaSet:   nginx-server-replicaset-55bc549986 (3\/3 replicas created)\nEvents:\n  Type    Reason             Age   From                   Message\n  ----    ------             ----  ----                   -------\n  Normal  ScalingReplicaSet  10m   deployment-controller  Scaled up replica set nginx-server-replicaset-67b95b8b9c to 3\n  # \u505c\u63893\u500bPod\n  Normal  ScalingReplicaSet  18s   deployment-controller  Scaled down replica set nginx-server-replicaset-67b95b8b9c to 0 from 3\n  # \u555f\u52d53\u500bPod\n  Normal  ScalingReplicaSet  16s   deployment-controller  Scaled up replica set nginx-server-replicaset-55bc549986 to 3\n<\/pre><\/div>\n\n\n

\u4f7f\u7528RollingUpdate\u7b56\u7565\u90e8\u7f72<\/strong><\/h2>\n\n\n\n

\u6b65\u9a5f1\uff1a<\/strong>YAML\u6a94\u5167\u5bb9\u5982\u4e0b\uff0c\u5728Spec\u5340\u6bb5\u653e\u5165strategy\u6a19\u7c64\uff0c\u5176\u5167\u5bb9\u6307\u5b9a\u70baRollingUpdate\u3002<\/p>\n\n\n\n

    \n
  • maxSurge\uff1a\u6bcf\u6b21\u65b0\u5efa\/\u90e8\u7f72\u7684Pod\u6578\u91cf<\/li>\n\n\n\n
  • maxUnavailable\uff1a\u6bcf\u6b21\u7121\u6cd5\u63d0\u4f9b\u670d\u52d9 (\u6216\u522a\u9664\/\u66ab\u505c\/\u79fb\u9664) Pod\u7684\u6578\u91cf<\/li>\n<\/ul>\n\n\n
    \napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: nginx-server-replicaset\n  labels:\n    app: frontend\n    env: production\nspec:\n  selector:\n    matchLabels:\n      app: frontend\n  replicas: 3\n  strategy:\n    type: RollingUpdate\n    rollingUpdate:\n      maxSurge: 1\n      maxUnavailable: 1\n  template:\n    metadata:\n      name: nginx-server\n      labels:\n        app: frontend\n    spec:\n      containers:\n        - name: nginx-server\n          image: nginx\n<\/pre><\/div>\n\n\n

    \u6b65\u9a5f2\uff1a<\/strong>\u4f7f\u7528kubectl set\u6307\u4ee4\u8abf\u6574Pod\u7684Image\u7248\u672c\uff1a<\/p>\n\n\n\n

    $ kubectl set image deployment.apps\/nginx-server-replicaset nginx-server=nginx:1.24.0<\/code><\/pre>\n\n\n\n

    \u6b65\u9a5f3\uff1a<\/strong>\u4f7f\u7528kubectl describe\u4f86\u770b\u4e00\u4e0bEvents\uff0cK8S\u4e00\u6b21\u505c\u6b62\u4e00\u500bPod\uff0c\u4e26\u91cd\u65b0\u90e8\u7f72\u4e00\u500b\u65b0\u7684Pod\uff0c\u76f4\u5230\u5168\u90e8\u66f4\u65b0\u5b8c\u6210\u3002<\/p>\n\n\n

    \nName:                   nginx-server-replicaset\nNamespace:              default\nCreationTimestamp:      Sun, 23 Apr 2023 20:40:23 +0800\nLabels:                 app=frontend\n                        env=production\nAnnotations:            deployment.kubernetes.io\/revision: 2\nSelector:               app=frontend\nReplicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable\nStrategyType:           RollingUpdate\nMinReadySeconds:        0\nRollingUpdateStrategy:  1 max unavailable, 1 max surge\nPod Template:\n  Labels:  app=frontend\n  Containers:\n   nginx-server:\n    Image:        nginx:1.24.0\n    Port:         <none>\n    Host Port:    <none>\n    Environment:  <none>\n    Mounts:       <none>\n  Volumes:        <none>\nConditions:\n  Type           Status  Reason\n  ----           ------  ------\n  Available      True    MinimumReplicasAvailable\n  Progressing    True    NewReplicaSetAvailable\nOldReplicaSets:  <none>\nNewReplicaSet:   nginx-server-replicaset-55bc549986 (3\/3 replicas created)\n# K8S\u4f9d\u5e8f\u4e00\u500b\u4e00\u500bPod\u66f4\u65b0\nEvents:\n  Type    Reason             Age   From                   Message\n  ----    ------             ----  ----                   -------\n  Normal  ScalingReplicaSet  50s   deployment-controller  Scaled up replica set nginx-server-replicaset-67b95b8b9c to 3\n  Normal  ScalingReplicaSet  14s   deployment-controller  Scaled up replica set nginx-server-replicaset-55bc549986 to 1\n  Normal  ScalingReplicaSet  14s   deployment-controller  Scaled down replica set nginx-server-replicaset-67b95b8b9c to 2 from 3\n  Normal  ScalingReplicaSet  14s   deployment-controller  Scaled up replica set nginx-server-replicaset-55bc549986 to 2 from 1\n  Normal  ScalingReplicaSet  10s   deployment-controller  Scaled down replica set nginx-server-replicaset-67b95b8b9c to 1 from 2\n  Normal  ScalingReplicaSet  10s   deployment-controller  Scaled up replica set nginx-server-replicaset-55bc549986 to 3 from 2\n  Normal  ScalingReplicaSet  7s    deployment-controller  Scaled down replica set nginx-server-replicaset-67b95b8b9c to 0 from 1\n<\/pre><\/div>\n\n\n

    ~ END ~<\/p>\n\n\n\n


    \n\n\n\n
    < For K8S Beginner EP 10\uff1aKubernetes Network \u7db2\u8def\u67b6\u69cb<\/a><\/td><\/td><\/tr><\/tbody><\/table><\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"

    \u4f7f\u7528Rolling Update\u6a5f\u5236\uff0c\u8b93\u66f4\u65b0\u670d\u52d9\u4e5f\u4e0d\u6703\u6709Downtime\uff0c\u4f46\u5176\u4e2d\u6709\u5f88\u591a\u5c0f\u7d30\u7bc0\u5fc5\u9808\u8981\u6ce8\u610f\uff01<\/p>\n","protected":false},"author":2,"featured_media":2733,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[191],"tags":[116,197,198],"_links":{"self":[{"href":"https:\/\/jovepater.com\/wp-json\/wp\/v2\/posts\/2856"}],"collection":[{"href":"https:\/\/jovepater.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jovepater.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jovepater.com\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jovepater.com\/wp-json\/wp\/v2\/comments?post=2856"}],"version-history":[{"count":17,"href":"https:\/\/jovepater.com\/wp-json\/wp\/v2\/posts\/2856\/revisions"}],"predecessor-version":[{"id":2952,"href":"https:\/\/jovepater.com\/wp-json\/wp\/v2\/posts\/2856\/revisions\/2952"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jovepater.com\/wp-json\/wp\/v2\/media\/2733"}],"wp:attachment":[{"href":"https:\/\/jovepater.com\/wp-json\/wp\/v2\/media?parent=2856"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jovepater.com\/wp-json\/wp\/v2\/categories?post=2856"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jovepater.com\/wp-json\/wp\/v2\/tags?post=2856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}