{"id":2710,"date":"2023-02-25T20:00:00","date_gmt":"2023-02-25T12:00:00","guid":{"rendered":"https:\/\/jovepater.com\/?p=2710"},"modified":"2023-03-13T00:26:28","modified_gmt":"2023-03-12T16:26:28","slug":"for-k8s-beginner-ep-8-kubernetes-deployment","status":"publish","type":"post","link":"https:\/\/jovepater.com\/article\/for-k8s-beginner-ep-8-kubernetes-deployment\/","title":{"rendered":"For K8S Beginner EP 8\uff1a\u90e8\u7f72Kubernetes Deployment\uff0c\u4e26\u4f7f\u7528\u7248\u672c\u7ba1\u7406\u8207\u56de\u6efe\u6a5f\u5236"},"content":{"rendered":"\n
Kubernetes\u9664\u4e86\u900f\u904eReplicaSet\u63d0\u4f9b\u9ad8\u53ef\u7528\u6027\u53ca\u63d0\u5347\u670d\u52d9\u5bb9\u91cf\u5916\uff0c\u82e5\u8981\u7ba1\u7406ReplicaSet\u3001\u65b0\u820a\u7248\u672c\u7684ReplicaSet\u8981Roll Back\u6216\u66f4\u65b0\uff0c\u5c31\u9700\u8981\u7528\u5230Kubernetes Deployment\u6a5f\u5236\u3002<\/p>\n\n\n\n
Kubernetes Deployment\u5b98\u65b9\u8aaa\u660e\uff1aLink<\/a><\/p>\n\n\n\n \u672c\u7bc7\u5c07\u90e8\u7f72\u4e00\u500bDeployment\uff0c\u65b0\u820a\u7248\u672c(\u820a\uff1av1\u3001\u65b0\uff1av2)\u4f7f\u7528\u4e0d\u540c\u7684Image\uff0c\u820a\u7248\u672c(v1)\u4f7f\u7528nginx\uff0c\u65b0\u7248\u672c(v2)\u4f7f\u7528httpd (Apache HTTP Server)\u3002<\/p>\n\n\n \u6b65\u9a5f1\uff1a<\/strong>Deployment\u7684YAML\u5167\u5bb9\u8207ReplicaSet\u57fa\u672c\u4e0a\u53ea\u6709kind\u4e0d\u540c\uff0c\u9700\u6307\u5b9akind\u70baDeployment<\/strong>\u3002<\/p>\n\n\n\n \u6b65\u9a5f2\uff1a<\/strong>\u56e0\u70ba\u662f\u76f8\u540c\u7684\u5167\u5bb9\uff0c\u53ea\u6709\u540d\u7a31\u7a0d\u5fae\u8abf\u6574\uff0c\u6240\u4ee5\u9019\u908a\u76f4\u63a5\u63d0\u4f9bYAML\u5167\u5bb9(\u6a94\u540d\u70badeployment.yaml)\uff1a<\/p>\n\n\n \u6b65\u9a5f3\uff1a<\/strong>\u4f7f\u7528kubectl create\u4f86\u90e8\u7f72Deployment\uff1a<\/p>\n\n\n\n \u6b65\u9a5f1\uff1a<\/strong>\u4f7f\u7528kubectl get all\uff1a<\/p>\n\n\n \u6b65\u9a5f2\uff1a<\/strong>\u4f7f\u7528kubectl describe\u770b\u4e00\u4e0bDeployment\uff1a<\/p>\n\n\n \u6b65\u9a5f1\uff1a<\/strong>\u5c07sepc->template->spec->containers->image\u5f9enginx\u6539\u70bahttpd\uff1a<\/p>\n\n\n \u6b65\u9a5f2\uff1a<\/strong>\u4f7f\u7528kubeclt apply\u4f86\u66f4\u65b0\u9019\u500bdeployment\uff1a<\/p>\n\n\n\n \u57f7\u884c\u6307\u4ee4\u5f8c\u6703\u986f\u793a\u8b66\u544a\u8a0a\u606f\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n \u539f\u56e0\u6211\u5011\u5f8c\u9762\u518d\u4f86\u8aaa\u660e\uff0c\u4f46\u5176\u5be6\u7cfb\u7d71\u5df2\u7d93\u5b8c\u6210\u57f7\u884c\u4e86\u3002<\/p>\n\n\n\n \u6b65\u9a5f3\uff1a<\/strong>\u6b64\u6642\u518d\u4f7f\u7528kubectl describe\u4f86\u67e5\u770bdeployment\uff1a<\/p>\n\n\n \u6b65\u9a5f4\uff1a<\/strong>\u900f\u904ekubectl rollout history\u6307\u4ee4\u67e5\u770b\u7248\u672c\u8cc7\u8a0a\uff0c\u4e00\u500bDeployment\u4e4b\u4e0b\u5df2\u7d93\u6709\u5169\u500b\u7248\u672c\uff1a<\/p>\n\n\n\n \u8a3b\uff1a\u56e0\u70ba\u6c92\u6709\u7279\u5225\u4e0b\u8a3b\u89e3\uff0c\u6240\u4ee5CHANGE-CAUSE\u6c92\u6709\u5167\u5bb9\u3002<\/p>\n\n\n\n \u6b65\u9a5f1\uff1a<\/strong>\u56de\u6efe\u7248\u672c\u7684\u6307\u4ee4\u8a9e\u6cd5\uff1a<\/p>\n\n\n\n \u5728\u6b64\uff0c\u56de\u6efe\u81f3\u820a\u7248(v1)\u6307\u4ee4\u5982\u4e0b\uff1a<\/p>\n\n\n\n \u6b65\u9a5f2\uff1a<\/strong>\u4f7f\u7528kubectl describe\u4f86\u67e5\u770b\u662f\u5426\u6709\u56de\u6efe\uff1a<\/p>\n\n\n ~ END ~<\/p>\n\n\n\n\u90e8\u7f72Deployment<\/strong><\/h2>\n\n\n\n
apiVersion: apps\/v1 # \u540c\u6a23\u662f\u6307\u5b9aapi\u7248\u672c\u70baapps\/v1\nkind: Deployment # \u6307\u5b9akind\u70baDeployment<\/code><\/pre>\n\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: 2\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
$ kubectl create -f deployment.yaml<\/code><\/pre>\n\n\n
\u67e5\u770bKubernetes Deployment<\/strong><\/h2>\n\n\n\n
\n# \u9019\u500bDeployment\u7684ReplicaSet\u4e0b\u6709\u5169\u500bPod\nNAME READY STATUS RESTARTS AGE\npod\/nginx-server-deployment-6c6f9cff4f-nz4b4 1\/1 Running 0 2m43s\npod\/nginx-server-deployment-6c6f9cff4f-s2xv8 1\/1 Running 0 2m43s\n\nNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nservice\/kubernetes ClusterIP 10.96.0.1 <none> 443\/TCP 6d9h\n\n# \u53ef\u4ee5\u770b\u5230\u90e8\u7f72\u4e86\u4e00\u500bDeployment\nNAME READY UP-TO-DATE AVAILABLE AGE\ndeployment.apps\/nginx-server-deployment 2\/2 2 2 2m43s\n\n# \u9084\u6709\u4e00\u500bReplicaSet\nNAME DESIRED CURRENT READY AGE\nreplicaset.apps\/nginx-server-deployment-6c6f9cff4f 2 2 2 2m43s\n<\/pre><\/div>\n\n\n
\nName: nginx-server-deployment\nNamespace: default\nCreationTimestamp: Sat, 28 Jan 2023 23:32:26 +0800\nLabels: app=frontend\n env=production\n# \u986f\u793a\u7248\u672c\u70barevision: 1\uff0c\u5f8c\u9762\u6578\u5b57\u6703\u96a8\u66f4\u65b0\u7684\u6b21\u6578\u7d2f\u52a0\nAnnotations: deployment.kubernetes.io\/revision: 1\nSelector: app=frontend\nReplicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable\nStrategyType: RollingUpdate\nMinReadySeconds: 0\nRollingUpdateStrategy: 25% max unavailable, 25% max surge\nPod Template:\n Labels: app=frontend\n Containers:\n nginx-server:\n # \u4f7f\u7528nginx\u9019\u500bimage\n Image: nginx\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-deployment-67b95b8b9c (2\/2 replicas created)\nEvents:\n Type Reason Age From Message\n ---- ------ ---- ---- -------\n Normal ScalingReplicaSet 20s deployment-controller Scaled up replica set nginx-server-deployment-67b95b8b9c to 2\n<\/pre><\/div>\n\n\n
\u66f4\u65b0\u7248\u672c\uff1a\u6539image\u70bahttpd<\/strong><\/h2>\n\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: 2\n template:\n metadata:\n name: nginx-server\n labels:\n app: frontend\n spec:\n containers:\n - name: nginx-server\n image: httpd\n<\/pre><\/div>\n\n\n
$ kubectl apply -f deployment.yaml<\/code><\/pre>\n\n\n\n
Warning: resource deployments\/nginx-server-deployment is missing the kubectl.kubernetes.io\/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.\ndeployment.apps\/nginx-server-deployment configured<\/code><\/pre>\n\n\n\n
\nName: nginx-server-deployment\nNamespace: default\nCreationTimestamp: Sat, 28 Jan 2023 23:32:26 +0800\nLabels: app=frontend\n env=production\n# \u56e0\u70ba\u66f4\u65b0\u904eimage\uff0c\u6240\u4ee5\u7248\u672c\u7d2f\u52a0\u70ba2\nAnnotations: deployment.kubernetes.io\/revision: 2\nSelector: app=frontend\nReplicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable\nStrategyType: RollingUpdate\nMinReadySeconds: 0\nRollingUpdateStrategy: 25% max unavailable, 25% max surge\nPod Template:\n Labels: app=frontend\n Containers:\n nginx-server:\n # v2\u8abf\u6574\u70bahttpd\u9019\u500bimage\n Image: httpd\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-deployment-6c6f9cff4f (2\/2 replicas created)\n# \u6709\u66f4\u591a\u4e8b\u4ef6\uff0c\u986f\u793aPod\u66f4\u65b0image\u7684\u904e\u7a0b\nEvents:\n Type Reason Age From Message\n ---- ------ ---- ---- -------\n Normal ScalingReplicaSet 6m12s deployment-controller Scaled up replica set nginx-server-deployment-67b95b8b9c to 2\n Normal ScalingReplicaSet 88s deployment-controller Scaled up replica set nginx-server-deployment-6c6f9cff4f to 1\n Normal ScalingReplicaSet 84s deployment-controller Scaled down replica set nginx-server-deployment-67b95b8b9c to 1 from 2\n Normal ScalingReplicaSet 84s deployment-controller Scaled up replica set nginx-server-deployment-6c6f9cff4f to 2 from 1\n Normal ScalingReplicaSet 80s deployment-controller Scaled down replica set nginx-server-deployment-67b95b8b9c to 0 from 1\n<\/pre><\/div>\n\n\n
$ kubectl rollout history deployment\/nginx-server-deployment<\/code><\/pre>\n\n\n
\u56de\u6efe\u7248\u672c<\/strong><\/h2>\n\n\n\n
kubectl rollout undo deployment [Deployment\u540d\u7a31] --to-revision=[\u7248\u865f]<\/code><\/pre>\n\n\n\n
$ kubectl rollout undo deployment nginx-server-deployment --to-revision=1<\/code><\/pre>\n\n\n
\nName: nginx-server-deployment\nNamespace: default\nCreationTimestamp: Sat, 28 Jan 2023 23:32:26 +0800\nLabels: app=frontend\n env=production\n# \u56e0\u70ba\u56de\u6efe\u7248\u672c\uff0c\u6240\u4ee5\u7248\u865f\u53c8\u7d2f\u52a0\u52303\uff0c\u53ea\u8981\u6709\u7570\u52d5\uff0c\u5c31\u6703\u4e00\u76f4\u7d2f\u52a0\u4e0a\u53bb\nAnnotations: deployment.kubernetes.io\/revision: 3\nSelector: app=frontend\nReplicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable\nStrategyType: RollingUpdate\nMinReadySeconds: 0\nRollingUpdateStrategy: 25% max unavailable, 25% max surge\nPod Template:\n Labels: app=frontend\n Containers:\n nginx-server:\n # image\u5df2\u7d93\u5f9ev2\u7684httpd\u6539\u56dev1\u7684nginx\n Image: nginx\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-deployment-67b95b8b9c (2\/2 replicas created)\nEvents:\n Type Reason Age From Message\n ---- ------ ---- ---- -------\n Normal ScalingReplicaSet 25m deployment-controller Scaled up replica set nginx-server-deployment-67b95b8b9c to 2\n Normal ScalingReplicaSet 21m deployment-controller Scaled up replica set nginx-server-deployment-6c6f9cff4f to 1\n Normal ScalingReplicaSet 21m deployment-controller Scaled down replica set nginx-server-deployment-67b95b8b9c to 1 from 2\n Normal ScalingReplicaSet 21m deployment-controller Scaled up replica set nginx-server-deployment-6c6f9cff4f to 2 from 1\n Normal ScalingReplicaSet 20m deployment-controller Scaled down replica set nginx-server-deployment-67b95b8b9c to 0 from 1\n Normal ScalingReplicaSet 38s deployment-controller Scaled up replica set nginx-server-deployment-67b95b8b9c to 1 from 0\n Normal ScalingReplicaSet 34s deployment-controller Scaled down replica set nginx-server-deployment-6c6f9cff4f to 1 from 2\n Normal ScalingReplicaSet 34s deployment-controller Scaled up replica set nginx-server-deployment-67b95b8b9c to 2 from 1\n Normal ScalingReplicaSet 30s deployment-controller Scaled down replica set nginx-server-deployment-6c6f9cff4f to 0 from 1\n<\/pre><\/div>\n\n\n
\n\n\n\n