Kubernetes 使用Deployment運(yùn)行一個(gè)無狀態(tài)應(yīng)用

2022-06-14 09:38 更新

使用 Deployment 運(yùn)行一個(gè)無狀態(tài)應(yīng)用

本文介紹如何通過 Kubernetes Deployment 對象去運(yùn)行一個(gè)應(yīng)用。

教程目標(biāo)

  • 創(chuàng)建一個(gè) nginx Deployment.
  • 使用 kubectl 列舉關(guān)于 Deployment 的信息.
  • 更新 Deployment。

在開始之前

你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個(gè)節(jié)點(diǎn)的集群上運(yùn)行本教程,且這些節(jié)點(diǎn)不作為控制平面主機(jī)。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個(gè)你自己的集群,或者你可以使用下面任意一個(gè) Kubernetes 工具構(gòu)建:

您的 Kubernetes 服務(wù)器版本必須不低于版本 v1.9. 要獲知版本信息,請輸入 kubectl version。

創(chuàng)建并了解一個(gè) nginx Deployment

你可以通過創(chuàng)建一個(gè) Kubernetes Deployment 對象來運(yùn)行一個(gè)應(yīng)用, 且你可以在一個(gè) YAML 文件中描述 Deployment。例如, 下面這個(gè) YAML 文件描述了一個(gè)運(yùn)行 nginx:1.14.2 Docker 鏡像的 Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # tells deployment to run 2 pods matching the template
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
  1. 通過 YAML 文件創(chuàng)建一個(gè) Deployment:
  2. kubectl apply -f https://k8s.io/examples/application/deployment.yaml
    
  3. 顯示 Deployment 相關(guān)信息:
    kubectl describe deployment nginx-deployment
    

    輸出類似于這樣:

    Name:     nginx-deployment
    Namespace:    default
    CreationTimestamp:  Tue, 30 Aug 2016 18:11:37 -0700
    Labels:     app=nginx
    Annotations:    deployment.kubernetes.io/revision=1
    Selector:   app=nginx
    Replicas:   2 desired | 2 updated | 2 total | 2 available | 0 unavailable
    StrategyType:   RollingUpdate
    MinReadySeconds:  0
    RollingUpdateStrategy:  1 max unavailable, 1 max surge
    Pod Template:
      Labels:       app=nginx
      Containers:
       nginx:
        Image:              nginx:1.7.9
        Port:               80/TCP
        Environment:        <none>
        Mounts:             <none>
      Volumes:              <none>
    Conditions:
      Type          Status  Reason
      ----          ------  ------
      Available     True    MinimumReplicasAvailable
      Progressing   True    NewReplicaSetAvailable
    OldReplicaSets:   <none>
    NewReplicaSet:    nginx-deployment-1771418926 (2/2 replicas created)
    No events.
  4. 列出 Deployment 創(chuàng)建的 Pods:
    kubectl get pods -l app=nginx
    

    輸出類似于這樣:

    NAME                                READY     STATUS    RESTARTS   AGE
    nginx-deployment-1771418926-7o5ns   1/1       Running   0          16h
    nginx-deployment-1771418926-r18az   1/1       Running   0          16h
  5. 展示某一個(gè) Pod 信息:
    kubectl describe pod <pod-name>
    

    這里的 ?<pod-name>? 是某一 Pod 的名稱。

更新 Deployment 

你可以通過更新一個(gè)新的 YAML 文件來更新 Deployment。下面的 YAML 文件指定該 Deployment 鏡像更新為 nginx 1.16.1。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.16.1 # Update the version of nginx from 1.14.2 to 1.16.1
        ports:
        - containerPort: 80
  1. 應(yīng)用新的 YAML:
  2. kubectl apply -f https://k8s.io/examples/application/deployment-update.yaml
    
  3. 查看該 Deployment 以新的名稱創(chuàng)建 Pods 同時(shí)刪除舊的 Pods:
    kubectl get pods -l app=nginx
    

通過增加副本數(shù)來擴(kuò)縮應(yīng)用

你可以通過應(yīng)用新的 YAML 文件來增加 Deployment 中 Pods 的數(shù)量。 下面的 YAML 文件將 ?replicas ?設(shè)置為 4,指定該 Deployment 應(yīng)有 4 個(gè) Pods:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 4 # Update the replicas from 2 to 4
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
  1. 應(yīng)用新的 YAML 文件:
  2. kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml
    
  3. 驗(yàn)證 Deployment 有 4 個(gè) Pods:
    kubectl get pods -l app=nginx
    

    輸出的結(jié)果類似于:

    NAME                               READY     STATUS    RESTARTS   AGE
    nginx-deployment-148880595-4zdqq   1/1       Running   0          25s
    nginx-deployment-148880595-6zgi1   1/1       Running   0          25s
    nginx-deployment-148880595-fxcez   1/1       Running   0          2m
    nginx-deployment-148880595-rwovn   1/1       Running   0          2m

刪除 Deployment

基于名稱刪除 Deployment:

kubectl delete deployment nginx-deployment

ReplicationControllers -- 舊的方式

創(chuàng)建一個(gè)多副本應(yīng)用首選方法是使用 Deployment,Deployment 內(nèi)部使用 ReplicaSet。 在 Deployment 和 ReplicaSet 被引入到 Kubernetes 之前,多副本應(yīng)用通過 ?ReplicationController ?來配置。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號