UP | HOME

Kubernetes 從 Pod 開始

欲閱讀本篇文章至少需要知道何為 container,由於範例將採用 Docker 為例,所以也預設讀者已經具備操作 Docker 的能力;且讀過 kubernetes 的基礎概念只是還沒開始用而已

Kubernetes 最小部署的單位為 Pod,一個 Pod 是 1 至 N 個 container 的群組,它們共享了網路(Network)和儲存空間(Storage)

這麼設計的好處之一是某些本來就耦合的比較嚴重的元件可以被封裝起來,而不需要硬是重寫成一個元件

雖然 Pod 是一組 container,對外部而言,那裡只有 Pod 而已,而通常我們還會再用 Service(Kubernetes 的另一種 Resource)包裝一群 Pod

比起是誰在服務,更重要的是有沒有服務

Pod 在 Kubernetes 中會被配給一個邏輯 IP(值得注意的是,這個 IP 是跨 namespace 的),這即是其他內部(Kubernetes cluster 內)元件連結該 Pod 的通道

不過在其他東西之前,我想先提有哪些工具可以用來 debug 一個 Pod

p.s. 在接下來的指令中,我都會直接用 k 替代 kubectl=(想知道怎弄就去 google),=$ 的變數開頭表示是你要按情況修改的參數

Auto completion 的一些討論: https://discuss.kubernetes.io/t/kubectl-tips-and-tricks/192/10

那麼,讓我們開始寫第一個 Pod 吧

# alpine.yaml
apiVersion: v1
kind: Pod
metadata:
  name: debugger
  namespace: default
spec:
  containers:
    - name: alpine
      image: alpine
      command: ["sh", "-c", "echo The debugger is running && sleep 3600"]
  restartPolicy: Always

選擇這個樣板作為開始是因為我經常用這玩意來 debug 跟測試,所以推薦各位建立兩個這樣的 Pod 作為除錯/測試之用

接著我解釋一下這個設定檔:

Pod 可能在以下五種狀態之一,稱之為 Pod lifecycle:

restartPolicy 可以為

Pod lifecycle#example-states 中有更詳盡的舉例可以學習

現在我們可以使用這個設定檔建立我們的 Pod 了,指令是 k apply -f alpine.yaml

apply -f 會套用你給的設定檔建立 Resource,同時也會檢查該設定檔的錯誤,如有錯誤是不會建立資源的

接著你應該會看到 pod/alpine created 這樣的回應,這就代表我們的 Pod 成功建立了

然後我們用 logs 指令去查看紀錄

$ k logs alpine
The debugger is running

你可以看到啟動時要求 container 執行的指令輸出

那麼這篇就告一段落,關於 Volume,有興趣的朋友可以先看 Volumes 這篇官方介紹

1. References:

1.1. Kubernetes in Action

  • Author: Marko Lukša
  • ISBN: 978-1-617-29372-6
Date: 2018-10-27 Sat 00:00
Author: Lîm Tsú-thuàn