iT邦幫忙

2022 iThome 鐵人賽

DAY 20
0

前幾天我們將最最基本的一些元件講完了,接著我們要來講稍微進階一些,但依舊基本的一些元件。

ReplicaSet

首先是 Pod 的進階版 ReplicaSet ,簡單說就是一堆 Pod 的複製人,主要是讓我們的服務可以不用單打獨鬥,可以有需多相同服務共同分擔。

那我們的服務要如何從原本的 Pod 變成 ReplicaSet 呢?

我們可以像下面這個 YAML 檔一樣。

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: ubuntu-replicaset
spec:
  replicas: 5
  minReadySeconds: 10
  selector:
    matchLabels:
      app: ubuntu-pod
  template:
    metadata:
      name: ubuntu-replicaset
      labels:
        app: ubuntu-pod
    spec:
      containers:
        - name: ubuntu
          image: ubuntu:20.04
          args:
            [
              bash,
              -c,
              'for ((i = 0; ; i++)); do echo "$i: $(date)"; sleep 100; done',
            ]

基本上就是把 Pod 外面再套一層殼,加上要預計要開多少個同樣的服務即可。

各位是否記得在 Kubernetes 的 Control Plane 中有個元件叫做 kube-controller-manager ,這個元件會監測 selector 所指定標籤,並將具有指定標籤的 Pod 維護至預期的數量,一旦少了就會自動補上。

成功開起來之後,我們可以透過以下指令查看 ReplicaSet 的狀態。

$ kubectl get replicaset
# or
$ kubectl get rs

或是查看 Pod 數量是否正確。

$ kubectl get pods
# or
$ kubectl get po

而我們也可以手動將其中幾個 Pod 刪除,這時就可以看到 ReplicaSet 自動將缺少的 Pod 補回來。

Deployment

而 ReplicaSet 只能將服務維持在固定數量,如果我們這時候要更新就必須將 ReplicaSet 砍掉在重新建立,稍微有點麻煩;麻煩一點就算了,服務還會暫時停止一小段時間。因此 Kubernetes 提供了一個更加方便的資源,叫做 Deployment ,可以同時維護多個 ReplicaSet ,我們的服務可以透過指令更新, Kubernetes 會自動將服務在不會中斷的情況下慢慢的過渡到新的狀態,我們的服務就不會因此停止。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ubuntu-deployment
  labels:
    app: ubuntu-deployment
spec:
  replicas: 5
  strategy:
    rollingUpdate:
      maxUnavailable: 1
  selector:
    matchLabels:
      app: ubuntu-pod
  template:
    metadata:
      name: ubuntu-deployment
      labels:
        app: ubuntu-pod
    spec:
      containers:
        - name: ubuntu
          image: ubuntu:20.04
          args:
            [
              bash,
              -c,
              'for ((i = 0; ; i++)); do echo "$i: $(date)"; sleep 100; done',
            ]

基本上跟 ReplicaSet 差不多,但是多了一個 strategy 讓我們可以選擇更新時的政策,可以保持任何情況下皆有數個服務在線,讓我們的服務不至於中斷。

我們同樣可以使用指令來查看 Deployment 的狀態。

$ kubectl get deployment
# or
$ kubectl get deploy

詳細內容可參考官方文件 ReplicaSetDeployment

那麼就先到這邊, Pod 的進階版主要是讓我們使用及維護起來更加方便,話說如果遇到 Pod 砍掉會再生的記得先去查看有沒有 ReplicaSet 或 Deployment ,不要在那邊拚手速。

大家掰~掰~


上一篇
Day 19 Volume, PersistentVolume & PersistentVolumeClaim
下一篇
Day 21 Job & CronJob
系列文
30天漫遊雲端之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言