iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
DevOps

從認識Docker到精通系列 第 18

第十八天 - Deployment

  • 分享至 

  • xImage
  •  

在前一天的文章中,我們理解了 Replication Controller 的運作,以及知道了利用Replication Controller 可以確保 pod 的運作效能符合我們的需求,但對於一些敏捷開開的場景、以及開發流程中常發生的滾動升級及回滾應用,有一個更好的控制器 Deployment 可以更符合我們的需求。

Replica Set

Replica Set被k8s譽為下一代的Replication controller,因其不止功能該有的都有,更有更為方便的 selector

  • 不同於Replication Controller的selector僅可以使用等號來判斷條件,Replica 提供了更多的條件過濾敘述句
    • spec.selector.matchLabels :在 Replica Set的selector裡面提供了matchLabels,Pod的labels必須與matchLabels中指定的值相同,才算符合條件。
    • spec.selector.matchExpressionsmatchExpressions的用法較為彈性,每一筆條件主要由三個部分組成keyoperatorvalue;目前operator支援4種條件InNotInExists, 以及 DoesNotExis
selector:
  matchLabels:
    component: redis
  matchExpressions:
    - {key: tier, operator: In, values: [cache]}
    - {key: environment, operator: NotIn, values: [dev]}

雖然 ReplicaSet 可以獨立使用,但一般還是建議使用 Deployment 来自動管理 ReplicaSet,這樣就無需擔心跟其他機制的不兼容问题

Deployment

Deployment 為 pod和replica set提供聲明式更新

建立一個deployment

apiVersion: apps/v1

kind: Deployment

metadata:

  name: nginx-deployment

spec:

  selector:

    matchLabels:

      app: nginx
  replicas: 2 # 告知 Deployment 運行 2 個 Pod
  template:
    metadata:
      labels:
        app: nginx
    spec:

      containers:

      - name: nginx

        image: nginx:1.14.2

        ports:

        - containerPort: 80

利用指令kubectl apply -f <YAML位置>,便可以創建一個deployment,
而當我們要更新pod的時候,只需要更動YAML檔的內容之後,重新apply就可以了,如下所示:

apiVersion: apps/v1

kind: Deployment

metadata:

  name: nginx-deployment

spec:

  selector:

    matchLabels:

      app: nginx

  replicas: 4 # 將副本數 2 更新為 4

  template:

    metadata:

      labels:

        app: nginx

    spec:

      containers:

      - name: nginx

        image: nginx:1.14.2

        ports:

        - containerPort: 80

並重新用 kubectl 去 apply,nginx 數量便會從 2 個變成 4 個;

刪除deployment

若要刪除deployment,則下 kubectl delete deployment <meta.name> 就可以了!


上一篇
第十七天-Replication Controller
下一篇
第十九天-jobs
系列文
從認識Docker到精通30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言