溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何理解Deployment的操作

發(fā)布時(shí)間:2021-11-24 16:36:30 來源:億速云 閱讀:219 作者:柒染 欄目:云計(jì)算

本篇文章給大家分享的是有關(guān)如何理解Deployment的操作,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

我們通過一些簡(jiǎn)單的例子來演示Deployment的創(chuàng)建、查看、更新、刪除等操作,以期快速地掌握Deployment的用法。

創(chuàng)建

首先我們先將以下配置保存到名為deployment.yaml的文件中。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.19.0

該份配置將創(chuàng)建一個(gè)名為nginx-deploymentDeployment資源對(duì)象,根據(jù)spec.replicas中的信息可知,它期望有3個(gè)Pod副本。

接下來使用kubectl create命令將該配置提交給kube-apiserver,如下所示:

[root@ecs-d8b6 manifests]# kubectl create -f deployment.yaml 
deployment.apps/nginx-deployment created

根據(jù)命令行輸出內(nèi)容可知,名為nginx-deploymentDeployment已創(chuàng)建完成。

查看

當(dāng)創(chuàng)建一個(gè)Deployment資源對(duì)象時(shí),Deployment控制器不會(huì)直接創(chuàng)建Pod,而是通過創(chuàng)建ReplicaSet來間接創(chuàng)建Pod。

查看Deployment

查看新創(chuàng)建的Deployment資源:

[root@ecs-d8b6 manifests]# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           90s

命令行輸出中各字段含義如下:

  • NAME:Deployment資源名稱,同配置中的metadata.name;

  • READY:<已處于Reday狀態(tài)的Pod數(shù)量>/<期望的Pod數(shù)量>;

  • UP-TO-DATE:處于最新狀態(tài)的Pod數(shù)量;

  • AVAILABLE:可用的Pod數(shù)量;

  • AGE:應(yīng)用運(yùn)行時(shí)間,也是資源自創(chuàng)建至今經(jīng)過的時(shí)間。

此處READYAVAILABLE有一些細(xì)微的區(qū)別,當(dāng)Pod中指定的容器全部運(yùn)行起來后,就可以認(rèn)定該PodREADY,所以READY含義更傾向于Running,而AVAILABLE要求會(huì)更嚴(yán)格一些,只有當(dāng)Pod處于READY狀態(tài)且持續(xù)一段時(shí)間后才可被認(rèn)定為AVAILABLE,其含義更傾向于可用的數(shù)量。

UP-TO-DATE表示運(yùn)行最新配置的Pod數(shù)量,當(dāng)修改Deployment配置中Pod模版時(shí),新版的Pod會(huì)被創(chuàng)建且短期內(nèi)會(huì)與舊版的Pod并存,UP-TO-DATE正是表示已創(chuàng)建的新版Pod數(shù)量。

查看ReplicaSet

接著查看ReplicaSet:

[root@ecs-d8b6 manifests]# kubectl get replicaset
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-6fd78f555b   3         3         3       104s

Deployment創(chuàng)建的ReplicaSet名稱由Deployment的名稱和一個(gè)隨機(jī)字符串組成。

查看Pod

接著查看最終生成的Pod:

[root@ecs-d8b6 manifests]# kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-6fd78f555b-clf9w   1/1     Running   0          110s
nginx-deployment-6fd78f555b-vlvp6   1/1     Running   0          110s
nginx-deployment-6fd78f555b-wjslg   1/1     Running   0          110s

這些Pod都是由ReplicaSet自動(dòng)創(chuàng)建出來的,其名稱由ReplicaSet名稱和一個(gè)隨機(jī)字符串組成。

更新

由于Deployment控制器通過ReplicaSet來創(chuàng)建并管理Pod,當(dāng)修改Deployment配置中的spec.replicas時(shí),Deployment控制器相應(yīng)地也會(huì)修改Replicasetspec.replicas值,最終由Replicaset控制器來調(diào)整Pod的副本數(shù),該部分功能我們已經(jīng)在介紹ReplicaSet時(shí)演示過,此處不再演示。

我們?cè)诖搜菔疽环NDeployment相較于ReplicaSet更高階的功能,即應(yīng)用版本的升降級(jí)。當(dāng)前應(yīng)用使用的nginx鏡像版本為1.19.0,我們希望把該版本降為1.18.0。

通過以下命令,將spec.template.spec.containers.image值由nginx:1.19.0改為nginx:1.18.0:

[root@ecs-d8b6 manifests]# kubectl edit deployments nginx-deployment

然后再次查看Deployment、ReplicaSetPod

[root@ecs-d8b6 manifests]# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           33m
[root@ecs-d8b6 manifests]# kubectl get replicaset 
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-6fd78f555b   0         0         0       33m
nginx-deployment-7df9bc6ff5   3         3         3       32s
[root@ecs-d8b6 manifests]# kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-7df9bc6ff5-4rz8l   1/1     Running   0          40s
nginx-deployment-7df9bc6ff5-tmxwl   1/1     Running   0          44s
nginx-deployment-7df9bc6ff5-vmdzp   1/1     Running   0          42s

可以看到,之前的ReplicaSet(nginx-deployment-6fd78f555b)副本數(shù)已被修改為0,新的ReplicaSet(nginx-deployment-7df9bc6ff5)被創(chuàng)建了出來,進(jìn)而創(chuàng)建了新的Pod。新的Pod中運(yùn)行的容器鏡像版本就是我們修改后的容器鏡像版本,讀者可以自行驗(yàn)證。

刪除

當(dāng)刪除Deployment資源時(shí),由Deployment控制器創(chuàng)建的ReplicaSet也會(huì)被刪除,因此由ReplicaSet創(chuàng)建的Pod也會(huì)被刪除。

[root@ecs-d8b6 manifests]# kubectl delete deployment nginx-deployment 
deployment.apps "nginx-deployment" deleted
[root@ecs-d8b6 manifests]# kubectl get replicaset
No resources found in default namespace.
[root@ecs-d8b6 manifests]# kubectl get pods
No resources found in default namespace.

以上就是如何理解Deployment的操作,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI