今天將要介紹 kubectl 一些常用的指令
這些指令會在後面實作的部份使用到
minikube 已經安裝, 並且已經啟動一個 k8s 叢集
kubectl 已經安裝
kubectl get nodes
如果已經有安裝 minikube 並且跑起來一個 k8s 叢集
會有以下這個結果
kubectl get pod
目前因為還沒建製任何 pod 所以會是以下狀態
kubectl get services
目前還沒建製除了原本 minikube 預設叢集之外的 Services
所以會是以下畫面
kubectl create -h
注意的是 在 k8s 內並不直接建製 Pod
而是透過 建立 Pod 的建製藍圖 Deployment 來做 Pod 設定
然後 k8s 叢集會自動根據 Deployment 建制 Pod
建制 Deployment 指令如下:
kubectl create deployment Name --image=image [--dry-run] [options]
舉例來說: 使用 nginx docker 映象檔來建制 Name 為 nginx-deployment 的 Deployment 指令如下
kubectl create deployment nginx-deployment --image=nginx
注意的是, 這邊沒指令 image 版本, 會直接指定最新的版本
執行之後, 會有以下畫面
kubectl get deployment
在建立 Deployment 後
可以使用上面指令查詢已建立的 Deployment
因為已經建製了一個叫作 nginx-deployment 的 Deployment
因此會得到以下的畫面
kubectl get replicaset
在建立了 Deployment 之後
k8s 叢集會根據 Deployment 建立 Pod 以及 Pod 的 ReplicaSet
所以如果使用上面查詢指令, 會得到以下畫面
如果再用查詢 Pod 的指令, 會得到以下畫面
會發現 ReplicaSet 的 Name 欄位剛好是 Pod 的 Name 欄位 prefix
這個 Pod 屬於這個 ReplicaSet
Deployment 管理 ReplicaSet
ReplicaSet 管理 Pod 的 replicas
Pod 處理 Containers 執行
kubectl edit deployment [Name]
如果要修改 Pod 執行的方式, 可以透過上面的指令去做修改
舉例來說: 修改 nginx-deployment 就可使用以下指令
kubectl edit deployment nginx-deployment
預設會使用 vim 開啟一個預設的 Deployment 設定檔
如果要更換 kubectl edit 的預設開啟編輯器
可以設定 KUBE_EDITOR 這個環境變數
筆者習慣用 nano 所以先執行以下指令
export KUBE_EDITOR=nano
這樣在執行 kubectl edit 指令時, 就是以 nano 開啟 Deployment檔案
筆者這邊把原本的 nginx-deployment 的 image 版本更改為 nginx:1.16 儲存後
這時可以用查詢 Pod 的指令查看
會發現新的 Pod 產生中, 完成後會發現只剩下新的 Pod
然後去查 ReplicaSet
會看到新的 ReplicaSet 產生, 舊的 ReplicaSet 下面就沒有 Pod
kubectl logs $pod_name
會顯示出 Pod 內, 容器化程式實際運行 log
可以拿來除錯時 使用
以下是查詢 Pod mongo-deployment-9fb7f9f76-4cq9x 的範例
kubectl describe pod $pod_name
查詢 Pod 運行時的事件, 可以查到 Pod 運行狀態
舉例來說: 如果用下面指令查詢名稱 mongo-deployment-9fb7f9f76-4cq9x 的 Pod 狀態
kubectl describe pod mongo-deployment-9fb7f9f76-4cq9x
從上圖可以看到 mongo-deployment-9fb7f9f76-4cq9x 的運行狀態
kubectl exec -it $pod_name -- bin/bash
舉例來說: 可以使用以下指令登入 mongo-deployment-9fb7f9f76-4cq9x 的 pod 內運行容器 terminal
kubectl exec -it mongo-deployment-9fb7f9f76-4cq9x -- bin/bash
注意的是, - - 但代表使用 root 身分登入
kubectl delete deployment $deployment_name
如果想要刪除 Pod 的話
可以透過刪除 deployment 的指令來處理
kubectl apply -f $configuration_file_name
隨著發佈的應用愈加複雜, kubectl 所需帶入的參數愈加複雜
因此, 比較好且實際的作法是
把 kubectl 的所有運行選項寫到一個設定檔案
再透過上面的指令選擇一個設定案來執行
舉例來說, 假設一個 nginx-deployment.yaml 如下:
然後執行
kubectl apply -f nginx-deployment.yaml
然後可以用 kubectl get pod 查看
因為 replicas 設定為 2
所以應該會有兩個 Pod 如下
如果要修改, 舉例來說把 replicas 改成 1
就可以直接修改 nginx-deployment.yaml 如下
然後執行
kubectl apply -f nginx-deployment.yaml
然後就可以驗證 Pod 只剩下一個如下
很明顯透過設定檔來執行 kubectl
比互動式的下指令好管理的多
當要佈署的環境很複雜時
而明天將會好好解說設定檔的細節部份