deployment管理pod的生命周期,保证pod的高可用(支持无状态应用。)手动伸缩,自动伸缩。回滚。等,扩展pod。 创建多个一样的副本。监管pod状态。期望pod数和运行pod数量不一致,将产生新的pod。维持pod资源平衡。业务连续性和资源高可用,版本控制。想象一下升级就是升级镜像,就是更改底层 的镜像而已。

[root@master01 ~]# kubectl create  deployment  my-dep --image=nginx --replicas=2 --dry-run=client -o yaml >deploy.yaml
[root@master01 ~]# vim deploy.yaml 
[root@master01 ~]# cat deploy.yaml 
apiVersion: apps/v1 #api接口
kind: Deployment # 资源类型
metadata:  #元数据
  creationTimestamp: null
  labels:
    app: my-dep #标签
  name: my-dep #deployment名字
spec:
  replicas: 2  #副本数量
  selector:  #筛选器
    matchLabels:
      app: my-dep #这里的筛选器标签
  strategy: {}
  template:  #创建pod的模板 下面就是pod的配置了
    metadata:
      creationTimestamp: null
      labels:
        app: my-dep #同这里关联
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}
[root@master01 ~]# kubectl create  -f deploy.yaml 
[root@master01 ~]# kubectl get deployments.apps  -o wide
NAME     READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES   SELECTOR
my-dep   2/2     2            2           27s   nginx        nginx    app=my-dep

[root@master01 ~]# kubectl get pods -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP               NODE     NOMINATED NODE   READINESS GATES
multipod                2/2     Running   0          69m   10.244.140.96    node02   <none>           <none>
my-dep-84885b44-6w2cn   1/1     Running   0          42s   10.244.196.159   node01   <none>           <none>
my-dep-84885b44-97vrh   1/1     Running   0          42s   10.244.140.97    node02   <none>           <none>

验证保持副本数,删除一个pod ,会自动新建一个副本保证副本数量为2

[root@master01 ~]# kubectl get pods 
NAME                    READY   STATUS    RESTARTS   AGE
multipod                2/2     Running   0          98m
my-dep-84885b44-6w2cn   1/1     Running   0          30m
my-dep-84885b44-97vrh   1/1     Running   0          30m
[root@master01 ~]# kubectl delete pod my-dep-84885b44-6w2cn  
pod "my-dep-84885b44-6w2cn" deleted
[root@master01 ~]# kubectl get pods 
NAME                    READY   STATUS              RESTARTS   AGE
multipod                2/2     Running             0          98m
my-dep-84885b44-97vrh   1/1     Running             0          30m
my-dep-84885b44-tqkd8   0/1     ContainerCreating   0          3s

手动伸缩pod数量:

命令) 扩展至4个
[root@master01 ~]# kubectl scale  --replicas=4 deployment  my-dep 
deployment.apps/my-dep scaled
[root@master01 ~]# kubectl get pods
NAME                    READY   STATUS              RESTARTS   AGE
multipod                2/2     Running             0          100m
my-dep-84885b44-97vrh   1/1     Running             0          32m
my-dep-84885b44-9kr49   0/1     ContainerCreating   0          4s
my-dep-84885b44-d264f   0/1     ContainerCreating   0          4s
my-dep-84885b44-tqkd8   1/1     Running             0          115s
[root@master01 ~]# kubectl get pods
配置文件)缩小到一个
[root@master01 ~]# vim deploy.yaml 
[root@master01 ~]# cat deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: my-dep
  name: my-dep
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-dep
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: my-dep
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}
[root@master01 ~]# kubectl apply  -f deploy.yaml 
Warning: resource deployments/my-dep 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.
deployment.apps/my-dep configured
[root@master01 ~]# kubectl get pods
NAME                    READY   STATUS    RESTARTS   AGE
multipod                2/2     Running   0          102m
my-dep-84885b44-97vrh   1/1     Running   0          33m

升级回滚:理解一下升级到底是干了啥???简单点说就是更新了镜像。想象一下你公司的业务上线。。打包成image,放到内部仓库,k8s只需要更新下镜像就可以实现业务升级,CD概念。
升级,当前镜像为nginx:latest,更新为1.16.1
**–record ** 不然不会显示你的版本操作。 kubectl rollout history 会显示(none)

查看)
[root@master01 ~]# kubectl describe  deployments.apps  my-dep 
Name:                   my-dep
Namespace:              default
CreationTimestamp:      Wed, 15 Feb 2023 16:36:41 +0800
Labels:                 app=my-dep
Annotations:            deployment.kubernetes.io/revision: 3
Selector:               app=my-dep
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=my-dep
  Containers:
   nginx:
    Image:        nginx  #默认latest
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   my-dep-84885b44 (1/1 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  17h   deployment-controller  Scaled up replica set my-dep-84885b44 to 4
  Normal  ScalingReplicaSet  17h   deployment-controller  Scaled down replica set my-dep-84885b44 to 1
  Normal  ScalingReplicaSet  21m   deployment-controller  Scaled up replica set my-dep-6656c6df89 to 1
  Normal  ScalingReplicaSet  20m   deployment-controller  Scaled down replica set my-dep-84885b44 to 0
  Normal  ScalingReplicaSet  10m   deployment-controller  Scaled up replica set my-dep-84885b44 to 1
  Normal  ScalingReplicaSet  10m   deployment-controller  Scaled down replica set my-dep-6656c6df89 to 0
[root@master01 ~]# 
更新)
[root@master01 ~]# kubectl set image deployment/my-dep nginx=1.16.1  --record
deployment.apps/my-dep image updated
[root@master01 ~]# kubectl get deployments.apps my-dep 
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
my-dep   1/1     1            1           17h
[root@master01 ~]# kubectl get pods
NAME                      READY   STATUS              RESTARTS   AGE
multipod                  2/2     Running             0          18h
my-dep-76f4b4b6f9-bvrnl   0/1     ContainerCreating   0          18s
my-dep-84885b44-ft8lk     1/1     Running             0          12m
[root@master01 ~]# kubectl describe deployments.apps my-dep 
Name:                   my-dep
Namespace:              default
CreationTimestamp:      Wed, 15 Feb 2023 16:36:41 +0800
Labels:                 app=my-dep
Annotations:            deployment.kubernetes.io/revision: 4
Selector:               app=my-dep
Replicas:               1 desired | 1 updated | 2 total | 1 available | 1 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=my-dep
  Containers:
   nginx:
    Image:        1.16.1     #镜像改变
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    ReplicaSetUpdated
OldReplicaSets:  my-dep-84885b44 (1/1 replicas created)
NewReplicaSet:   my-dep-76f4b4b6f9 (1/1 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  17h   deployment-controller  Scaled up replica set my-dep-84885b44 to 4
  Normal  ScalingReplicaSet  17h   deployment-controller  Scaled down replica set my-dep-84885b44 to 1
  Normal  ScalingReplicaSet  23m   deployment-controller  Scaled up replica set my-dep-6656c6df89 to 1
  Normal  ScalingReplicaSet  22m   deployment-controller  Scaled down replica set my-dep-84885b44 to 0
  Normal  ScalingReplicaSet  12m   deployment-controller  Scaled up replica set my-dep-84885b44 to 1
  Normal  ScalingReplicaSet  12m   deployment-controller  Scaled down replica set my-dep-6656c6df89 to 0
  Normal  ScalingReplicaSet  34s   deployment-controller  Scaled up replica set my-dep-76f4b4b6f9 to 1
  可以直接更改配置文件)
kubectl edit deployment/nginx-deployment,

回滚:

查看回滚的版本
[root@master01 ~]# kubectl rollout  history deployment my-dep 
版本数量。
[root@master01 ~]# kubectl rollout undo  deployment my-dep  --to-revision=8 
deployment.apps/my-dep rolled back
回滚至第8个版本
文章作者: emporer
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Emporer-Linux
kubernetes deployment kubernetes
喜欢就支持一下吧