Deployment管理与使用

K8S中的Deployment是用于管理应用程序的一种资源对象。Deployment可以定义应用程序的副本数量,并确保指定数量的副本一直在运行并可用。

Deployment通过使用ReplicaSet对象来创建和管理指定数量的Pod副本。它允许您声明所需的副本数量、容器镜像版本和其他配置选项,并根据需要自动进行滚动更新。

当您创建一个Deployment时,Kubernetes会创建一个ReplicaSet并监控其状态是否与所需副本数匹配。如果Pod的数量少于所需的副本数,Kubernetes会创建新的Pod以补充不足的副本数量。如果Pod的数量多于所需的副本数,则Kubernetes会删除多余的Pod。通过这种方式,Deployment确保应用程序的副本数量始终保持在所需的水平上。

此外,Deployment还提供了滚动更新功能,即在更新应用程序时逐步替换旧的Pod副本。这样可以确保应用程序的持续可用性,减少因更新导致的中断时间。

总之,K8S的Deployment用于简化应用程序的部署和管理,并提供了灵活的扩展和更新能力。

一:同通过deployment资源对象创建pod,了解deployment的基本语法

#通过deployment创建一个nginx的pod
#kubectl create deployment 名字  ---这个是创建deployment的基础命令 --image=nginx:1.9.1 --namespace=app  --image是指定pod的镜像名称及版本号 --namespace是指定deployment创建在哪个指定的命名空间下,不指定的话默认创建在default命名空间下
[root@k8s-master1 ~]# kubectl create deployment tomcat-deployment --image=nginx:1.9.1 --namespace=app
deployment.apps/tomcat-deployment created
[root@k8s-master1 ~]# kubectl get pods -n app -o wide
NAME                                 READY   STATUS    RESTARTS   AGE   IP              NODE          NOMINATED NODE   READINESS GATES
tomcat-deployment-76cdf747f5-phjbj   1/1     Running   0          49s   10.10.135.211   k8s-master3   <none>           <none>

#查看某个命名空间下的所有的deployment
[root@k8s-master1 ~]# kubectl get deployment -n app
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
tomcat-deployment   1/1     1            1           4m24s

#查看deployment的详细信息
[root@k8s-master1 ~]# kubectl describe deployment tomcat-deployment -n app
Name:                   tomcat-deployment
Namespace:              app
CreationTimestamp:      Wed, 29 Nov 2023 20:45:05 +0800
Labels:                 app=tomcat-deployment
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=tomcat-deployment
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=tomcat-deployment
  Containers:
   nginx:
    Image:        nginx:1.9.1
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   tomcat-deployment-76cdf747f5 (1/1 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  5m24s  deployment-controller  Scaled up replica set tomcat-deployment-76cdf747f5 to 1

#用来获取 Kubernetes 集群中指定名称的 Deployment 对象的详细信息,并以 YAML 格式输出
[root@k8s-master1 ~]# kubectl get deployment tomcat-deployment -n app -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2023-11-29T12:45:05Z"
  generation: 1
  labels:
    app: tomcat-deployment
  name: tomcat-deployment
  namespace: app
  resourceVersion: "399220"
  uid: 084d01f0-3a19-43e8-a000-c286657cd9ae
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: tomcat-deployment
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: tomcat-deployment
    spec:
      containers:
      - image: nginx:1.9.1
        imagePullPolicy: IfNotPresent
        name: nginx
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status:
  availableReplicas: 1
  conditions:
  - lastTransitionTime: "2023-11-29T12:45:07Z"
    lastUpdateTime: "2023-11-29T12:45:07Z"
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  - lastTransitionTime: "2023-11-29T12:45:05Z"
    lastUpdateTime: "2023-11-29T12:45:07Z"
    message: ReplicaSet "tomcat-deployment-76cdf747f5" has successfully progressed.
    reason: NewReplicaSetAvailable
    status: "True"
    type: Progressing
  observedGeneration: 1
  readyReplicas: 1
  replicas: 1
  updatedReplicas: 1

二:Deployment弹性伸缩

[root@k8s-master1 ~]# kubectl get deployment -n app
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
tomcat-deployment   1/1     1            1           8m32s
# kubectl scale deployment name replicas=2(扩容的个数)
[root@k8s-master1 ~]#  kubectl scale deployment tomcat-deployment --replicas=2 -n app
deployment.apps/tomcat-deployment scaled
[root@k8s-master1 ~]# kubectl get deployment -n app
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
tomcat-deployment   2/2     2            2           10m
[root@k8s-master1 ~]# kubectl get pods -n app -o wide
NAME                                 READY   STATUS    RESTARTS   AGE   IP              NODE          NOMINATED NODE   READINESS GATES
tomcat-deployment-76cdf747f5-pbcjq   1/1     Running   0          55s   10.10.36.85     k8s-node1     <none>           <none>
tomcat-deployment-76cdf747f5-phjbj   1/1     Running   0          10m   10.10.135.211   k8s-master3   <none>           <none>
#除了kubectl scale deployment这个命令可以弹性伸缩容器的个数以外,咱们还可以通过编辑deployment文件来修改
kubectl edit deployment tomcat-deployment -n app
replicas: 2       #编辑deployment文件中的replicas参数的个数即可
``

三:Deployment升级软件版本

```bash
#kubectl rollout history deployment 是一个用于查看特定部署的历史记录的命令,当前nginx-deployment这个deployment的历史纪录就一次
[root@k8s-master1 ~]# kubectl rollout history deployment nginx-deployment -n app
deployment.apps/nginx-deployment
REVISION  CHANGE-CAUSE
1         <none>
#当前容器的nginx镜像是1.9.1版本的,咱们修改一下
[root@k8s-master1 ~]# kubectl describe deployment nginx-deployment -n app |grep Image
    Image:        nginx:1.9.1
[root@k8s-master1 ~]# kubectl edit deployment nginx-deployment -n app
deployment.apps/nginx-deployment edited
You have new mail in /var/spool/mail/root
#容器的deployment发生变更时,容器会分批重启变更
[root@k8s-master1 ~]# kubectl get pods -n app
NAME                                READY   STATUS              RESTARTS   AGE
nginx-deployment-5db98cdb94-lfnz2   0/1     ContainerCreating   0          7s
nginx-deployment-6c4c55bc9-csdl5    1/1     Running             0          4m39s
nginx-deployment-6c4c55bc9-z6kl9    1/1     Running             0          5m37s
#现在查看部署的历史记录就变成两个了
[root@k8s-master1 ~]# kubectl rollout history deployment nginx-deployment -n app
deployment.apps/nginx-deployment
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
#容器的进行概念股版本号变成1.9.2
[root@k8s-master1 ~]# kubectl describe deployment nginx-deployment -n app |grep Image
    Image:        nginx:1.9.2
#查看名为nginx-deployment的部署从版本1开始的更新历史记录
[root@k8s-master1 ~]# kubectl rollout history deployment nginx-deployment --revision=1 -n app
deployment.apps/nginx-deployment with revision #1
Pod Template:
  Labels:       app=nginx-deployment
        pod-template-hash=6c4c55bc9
  Containers:
   nginx:
    Image:      nginx:1.9.1
    Port:       <none>
    Host Port:  <none>
    Environment:        <none>
    Mounts:     <none>
  Volumes:      <none>
 #kubectl rollout undo deployment nginx-deployment --to-revision=1 将名为nginx-deployment的部署回滚到版本1
[root@k8s-master1 ~]# kubectl rollout undo deployment nginx-deployment --to-revision=1 -n app
deployment.apps/nginx-deployment rolled back
[root@k8s-master1 ~]# kubectl get pods -n app
NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-6c4c55bc9-fnl7k   1/1     Running   0          6s
nginx-deployment-6c4c55bc9-nkk6c   1/1     Running   0          4s
[root@k8s-master1 ~]# kubectl describe deployment nginx-deployment -n app |grep Image
    Image:        nginx:1.9.1
[root@k8s-master1 ~]#



  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值