Contents

K8s - Pod 最小單位執行環境

Pod 概念與 Docker 容器很類似,K8s 中最小單位就是一個 Pod ,而不是說 Container ,雖然很接近不過還是有一些不同之處。

1. Pod 基礎

使用 Docker 時候每一個服務會啟動一個 Continer , K8s 也是一樣,不過是一個 POD 方式當作一個實例,一個 Pod 裡面可以有多個 Container,例如 Wordpress 內容發布平台與 MySQL 這組合,可能有人會想把這兩個服務放置同一個 Pod 一起運作,雖然可行,不過對於擴展性、負載就很不好,實際上會將其分開兩個 Pod ,並藉由 TCP/IP 網路互相溝通。

1.1 Pod 創建

創建一個 Pod 十分容易,可以直接使用 Kubectl 命令式要求啟動一個 Pod

1
kubectl run <Pod Name> --image=<image name>

以執行 Nginx 服務為例:

1
2
[k8s@servera ~]$ kubectl run nginx --image=nginx
pod/nginx created

1.2 Pod 查看

透過 get 可以查看已經創建好的服務

1
kubectl get pod <Pod Name>
1
2
3
[k8s@servera ~]$ kubectl get pod 
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          8s
Note
加上 -o wide,可以顯示更多訊息

1.2 Pod 刪除

透過 delete 可以刪除服務

1
kubectl delete pod <Pod Name>
1
2
[k8s@servera ~]$ kubectl delete pod nginx 
pod "nginx" deleted

2. 使用 Pod Manifest

Pod Manifest 可以使用 JSON 或 YAML 來撰寫,通常都是使用 YAML 來定義啟動的 Pod 為何,並宣告要如何產生。

2.1 創建一個 nginx.yaml 範例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx

2.2 執行 pod

1
kubectl apply -f <file.yml>
1
2
[k8s@servera ~]$ kubectl apply -f nginx.yml 
pod/nginx created

2.3 刪除 pod

1
kubectl delete -f <file.yml>
1
2
[k8s@servera ~]$ kubectl delete -f nginx.yml
pod "nignx" deleted

3. Pod 進階

3.1 查看 Pod 詳情

想知道 Pod 實際運作詳細內容可以透過 describe 查看最下方的 Events ,會記錄 Pod 從拉取到創建的詳細訊息。

1
kubectl describe pods <Pod Name>
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[k8s@servera ~]$ kubectl describe pods nginx 
Name:         nginx 
Namespace:    default
Priority:     0
Node:         minikube/192.168.49.2
...
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  14s   default-scheduler  Successfully assigned default/nignx to minikube
  Normal  Pulling    12s   kubelet            Pulling image "nginx"
  Normal  Pulled     9s    kubelet            Successfully pulled image "nginx" in 3.145220237s
  Normal  Created    9s    kubelet            Created container nignx
  Normal  Started    9s    kubelet            Started container nignx

3.2 查看 Log

1
kubectl logs <Pod Name>
1
2
3
4
5
[k8s@servera ~]$ kubectl logs nignx 
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
...


如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!