在本機把 k3s 設定好後,接下來我們要進到 k8s 裡面最小的部署單位 POD。k8s 裡面很多 resource object 都是以 POD 型態存在。 所以我們在部署我們自己的 APP 前,首先就是要先了解 POD。

進入今天的議題之前,請先確保自己對於 docker 、 container 之間的關係是熟悉的,如果還不熟的讀者,請先 google 預習一下。

POD 特性

  1. 包含多個 container
  2. 同一 POD 中的 container 可以直接以 127.0.0.1 的方式,互相溝通。
  3. 同一個 POD 中的 container 共享那個 POD 的 volume
  4. 同一個 POD 中的 container 是同時被調度 (因為 k8s 最小部署單位是 POD 不是 container)

所以縱歸以上幾點,可以把 k8s 的 node 當成是一台虛擬機,POD 的當成像虛擬機裡面的 docker,所以你可以在虛擬機裡面透過 docker 跑很多 container 。

那一定會有人疑惑問,為什麼不直接操作 container 而是要多設計一層 POD 來包裝呢?

官方文件有這樣敘述

Pods are designed to support multiple cooperating processes (as containers) that form a cohesive unit of service. The containers in a Pod are automatically co-located and co-scheduled on the same physical or virtual machine in the cluster. The containers can share resources and dependencies, communicate with one another, and coordinate when and how they are terminated.

建立 POD

這邊後面會講到,其實實務上,都不建議大家直接操作 POD ,而是希望大家操作 Deployment,透過 Deployment 才能運用到 k8s 的強大功能 ex scale ….

先把下面的文字存成 first-pod.yaml

apiVersion: v1                         ## k8s 版本號
kind: Pod                              ## 服務類型
metadata:
  name: first-pod                      ## Pod 的名稱
spec:                                  
  containers:
  - name: first-container              ## container 的名稱
    image: nginx                       ## 映像檔位置
    ports:                             ## 暴露 port 給其他資源存取
      - containerPort: 80

然後下指令

kubectl --kubeconfig ~/.kube/k3s.yaml apply -f first-pod.yaml

接下來應該會看到

pod/first-pod created

檢查 POD

kubectl --kubeconfig ~/.kube/k3s.yaml get pods

會看到

NAME        READY   STATUS    RESTARTS   AGE
first-pod   1/1     Running   0          43s

刪除 POD

kubectl --kubeconfig ~/.kube/k3s.yaml delete -f first-pod.yaml

總結

這樣就完成了基礎的 POD 新增修改步驟,大家可以嘗試著自己寫看看部署 yaml ,試著自己部署在自己的環境看看。