1. 程式人生 > >創建和管理多個Pod--Deployment

創建和管理多個Pod--Deployment

創建和管理多個Pod deployment kubernetes的擴容 kubernetes的縮容 k8s

創建和管理多個Pod--Deployment

  1. 說明
    Deployment 為 Pod 和 ReplicaSet 提供了一個聲明式定義(declarative)方法,用來替代以前的ReplicationController 來方便的管理應用。
    你只需要在 Deployment 中描述想要的目標狀態是什麽,Deployment controller 就會幫你將 Pod 和ReplicaSet 的實際狀態改變到你的目標狀態。你可以定義一個全新的 Deployment 來創建 ReplicaSet 或者刪除已有的 Deployment 並創建一個新的來替換。
  2. 復制控制器(Replication Controller,RC)
    RC是K8s集群中最早的保證Pod高可用的API對象。通過監控運行中的Pod來保證集群中運行指定數目的Pod副本。指定的數目可以是多個也可以是1個;少於指定數目,RC就會啟動運行新的Pod副本;多於指定數目,RC就會殺死多余的Pod副本。即使在指定數目為1的情況下,通過RC運行Pod也比直接運行Pod更明智,因為RC也可以發揮它高可用的能力,保證永遠有1個Pod在運行。RC是K8s較早期的技術概念,只適用於長期伺服型的業務類型,比如控制小機器人提供高可用的Web服務。
  3. 副本集(Replica Set,RS)
    RS是新一代RC,提供同樣的高可用能力,區別主要在於RS後來居上,能支持更多種類的匹配模式。副本集對象一般不單獨使用,而是作為Deployment的理想狀態參數使用。
  4. Deployment典型的應用場景包括
    (1)定義Deployment來創建Pod和ReplicaSet
    (2)滾動升級和回滾應用;如果當前狀態不穩定,回滾到之前的Deployment revision。每次回滾都會更新Deployment的revision。
    (3)擴容和縮容,擴容Deployment以滿足更高的負載。
    (4)暫停和繼續Deployment,暫停Deployment來應用PodTemplateSpec的多個修復,然後恢復上線。
  5. 實戰Deployment
    ##定義一個簡單的nginx應用
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
    name: nginx-test
    namespace: test
    spec:
    replicas: 3
    template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
    ##創建deploy(部署)
    kubectl create -f nginx-deployment
    deployment.extensions "nginx-test" created
    ##查看deploy(部署)
    kubectl get deploy --namespace=test
    NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    nginx-test   3         3         3            3           12m
    ##查看rs(副本集)
    kubectl get rs --namespace=test
    NAME                    DESIRED   CURRENT   READY     AGE
    nginx-test-75675f5897   3         3         3         11m
    ##查看pods(容器組)
    kubectl get po --namespace=test
    NAME                          READY     STATUS    RESTARTS   AGE
    nginx-test-75675f5897-9fcrs   1/1       Running   0          13m
    nginx-test-75675f5897-gnc8z   1/1       Running   0          13m
    nginx-test-75675f5897-qbsvm   1/1       Running   0          13m
  6. 實戰擴容
    ##擴容
    將容器組的個數擴容至5個
    "replicas": 5
    #語法格式
    kubectl scale deployment + [deploy的name] + --replicas [count] + --namespace=命名空間
    #命令
    kubectl scale deployment nginx-test --replicas 5 --namespace=test
    deployment.extensions "nginx-test" scaled
    ##說明
    如果集群支持 horizontal pod autoscaling 的話,還可以為Deployment設置自動擴展:
    kubectl autoscale deployment nginx-test --min=10 --max=15 --cpu-percent=80 --namespace=test
    #查看deploy(部署)
    kubectl get deploy --namespace=test
    NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    nginx-test   5         5         5            5           17m
    #查看rs(副本集)
    kubectl get rs --namespace=test
    NAME                    DESIRED   CURRENT   READY     AGE
    nginx-test-75675f5897   5         5         5         18m
    #查看pods(容器組)
    kubectl get po --namespace=test
    NAME                          READY     STATUS    RESTARTS   AGE
    nginx-test-75675f5897-9fcrs   1/1       Running   0          19m
    nginx-test-75675f5897-gnc8z   1/1       Running   0          19m
    nginx-test-75675f5897-hjvjw   1/1       Running   0          3m
    nginx-test-75675f5897-hszs8   1/1       Running   0          3m
    nginx-test-75675f5897-qbsvm   1/1       Running   0          19m
  7. 實戰縮容
    ##縮容
    將容器組的個數縮容至2個
    "replicas": 2
    #命令
    kubectl scale deployment nginx-test --replicas 2 --namespace=test
    deployment.extensions "nginx-test" scaled
    #查看deploy(部署)
    kubectl get deploy --namespace=test
    NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    nginx-test   2         2         2            2           25m
    #查看rs(副本集)
    kubectl get rs --namespace=test
    NAME                    DESIRED   CURRENT   READY     AGE
    nginx-test-75675f5897   2         2         2         25m
    #查看pods(容器組)
    kubectl get po --namespace=test
    NAME                          READY     STATUS    RESTARTS   AGE
    nginx-test-75675f5897-gnc8z   1/1       Running   0          26m
    nginx-test-75675f5897-qbsvm   1/1       Running   0          26m
  8. 實戰滾動升級
    將image: nginx:1.7.9升級為nginx:1.9.1
    #語法格式
    kubectl scale deployment/[deploy的name] + [升級鏡像] + --namespace=命名空間
    #命令
    kubectl set image deployment/nginx-test  nginx=nginx:1.9.1 --namespace=test
    deployment.apps "nginx-test" image updated
    #查看rs(副本集)
    kubectl get rs --namespace=test
    NAME                    DESIRED   CURRENT   READY     AGE
    nginx-test-75675f5897   0         0         0         48m
    nginx-test-c4747d96c    2         2         2         19m
    #查看pods(容器組)
    kubectl get po --namespace=test
    NAME                         READY     STATUS    RESTARTS   AGE
    nginx-test-c4747d96c-cqnqs   1/1       Running   0          21m
    nginx-test-c4747d96c-fpjrk   1/1       Running   0          21m
    #查看nginx版本
    kubectl describe po nginx-test-c4747d96c-cqnqs --namespace=test
    可看到版本信息:
    Image:          nginx:1.9.1
  9. 實戰回滾應用
    #命令
    kubectl rollout undo deployment/nginx-test --namespace=test
    deployment.apps "nginx-test"
    #查看rs(副本集)
    kubectl get rs --namespace=test
    NAME                    DESIRED   CURRENT   READY     AGE
    nginx-test-75675f5897   2         2         2         28m
    nginx-test-c4747d96c    0         0         0         3m
    #查看pods(容器組)
    kubectl get po --namespace=test
    NAME                          READY     STATUS    RESTARTS   AGE
    nginx-test-75675f5897-rqnhb   1/1       Running   0          1m
    nginx-test-75675f5897-zhwgn   1/1       Running   0          1m
    #查看nginx版本
    kubectl describe po nginx-test-75675f5897-rqnhb --namespace=test
    可看到版本信息:
    Image:          nginx:1.7.9
  10. 說明
    以上操作都是在linux終端上進行的,命令有些繁瑣的,我們實際上可以直接登入web界面的kubernetes進行deployment的創建和更改的,如下圖所示:
    技術分享圖片
    技術分享圖片

創建和管理多個Pod--Deployment