iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
DevOps

k8s 入門學習 30天系列 第 15

IT 鐵人賽 k8s 入門30天 -- day15 k8s Workload 簡介

  • 分享至 

  • xImage
  •  

前言

今天要講的是 k8s 叢集對於 Workload 管理做講解

Pod 的管理

以下將會解釋一些名詞定義, 以方邊後續解說

Workload

以下引用k8s 官方文件 Workload

一個應用跑在 k8s 叢集上叫作 Workload

Workload 可以是一到多個 Pod 所組成

Pod 生命周期

以下引用k8s 官方文件 Pod 生命周期

Pod 整個運行周期, 可以分成幾個階段

Pending: 當 Pod 被 kubelet 開始生成 Pod 所需資源, 但還沒完成資源建立

Running: 當 Pod 建立完成, 所有資源都建立完成, 但還有些 Container 沒有到 Desired staus 或是即將 Restart

Succeeded: 所有 Container 都成功運行, 並且沒有 Restart

Failed: 所有 Container 都進結束運行, 並且至少有一個是因為失敗而結束

Unknown: 發生某些因素造成 Pod 狀態無法獲取

狀態轉換圖描述如下:

前面有很多章節在講解到 Pod 的發佈, 都是直接透過 Deployment 來處理

然而, 其實還是可以獨立產生一個 Pod

Pod 本身具有上述的生命周期需要注意

所以 k8s 叢集並不是直接與 Pod 做互動

而是透過一些管理元件來處理, 比如說 Deployment, ReplicaSet 等等

這些管理元件被稱為 Workload Resources

要達成一個 Workload 就會透過以下 Workload Resources 來進行管理

ReplicaSet

k8s 叢集用 ReplicaSet 來管控多個相同 Pod 組成的集合能夠維持一定的量

透過 selector 來找尋對應 labels 的 Pod

Deployments

k8s 叢集用 Deployments 來管控多個 ReplicaSet

當 Deployment 建立時, replicas 參數用來設定 ReplicaSet 建立的數量

範例語法如下:

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.14.2
        ports:
        - containerPort: 80

StatefulSet

k8s 叢集用 StatefulSet 來運行一或多個相關具有狀態的 Pod

舉例來說:

當一個 Workload 需要保存狀態, 這時就可以使用 StatefulSet 來建立

並且讓每個 Pod 都有 PersistentVolume 來存放狀態

透過 StatefulSet 可以拓展資料備份, 讓 Workload 更據可靠性

DaemonSet

k8s 叢集用 DaemonSet 來運行提供節點上一些基礎功能的 Pod,

比如一些網路輔助功能工具, 或是一些擴充工具

Job & CronJob

Job 代表一些只跑一次的工作

CrobJobs 則會根據定義的排程周期去執行

後話

在更大的 k8s 生態系, 可能會找到更多第三方提供的 Workload Resources 來定義更多運行方式

k8s 提供 custom resources definition 來使用這些第三方提供的 Workload Resources

這樣就可以提供更多樣性, 更完善的運行 Pod 的方式


上一篇
IT 鐵人賽 k8s 入門30天 -- day14 K8s Services explained
下一篇
IT 鐵人賽 k8s 入門30天 -- day16 k8s Task Deploy a single instance Mysql use StatefulSet
系列文
k8s 入門學習 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言