Kubernetes 教學系列 - kubectl 常見指令說明
上次講了在 Kubernetes 中要如何建立 Pod:Kubernetes 教學系列 - 如何建立 Pod ,不外乎有用到許多 kubectl 指令,所以這篇文章主要是講解 kubectl 常見指令。
kubectl 語法講解
首先如果先熟悉 kubectl 的語法的話會更了解該怎麼下指令,以及忘記的話也比較好猜測指令。
kubectl 的語法如下:
1 | kubectl [command] [type] [name] [flags] |
-
command
指定要對一個或多個資源執行的操作,例如
apply
、create
、get
、describe
、delete
例如:
1
2
3
4
5kubetl apply -f pod.yaml
kubectl create -f pod.yaml
kubectl get pod
kubectl describe pod web-app
kubectl delete pod web-app基本上五種的 command 動作就如字面上的意思,而 get 與 describe 差別在於,describe 可以取得該資源本身的設定檔的內容以及相關 event。如果建立資源一直失敗也可以透過看 event 看是否有出現錯誤。
-
type
指定資源類型。這個病不會區分大小寫,可以單數、複數或是縮寫。例如:
-
取得 pod:
1
2
3kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1 -
取得 service:
1
2
3kubectl get service service1
kubectl get services service1
kubectl get svc service1 -
取得 Deployment:
1
2
3kubectl get deployment deployment1
kubectl get deployments deployment1
kubectl get deploy deploymen1
-
-
name
指定資源的名稱,名稱會區分大小寫,如果省略則會顯示所有相關资源的訊息
例如:
1
2
3kubectl get pods
kubectl get services
kubectl get deployments如果要對多個資源執行操作的話,則可以這樣做:
-
對多個類型相同的資源進行操作
1
kubectl get pod example-pod1 example-pod2
-
對多個不同類型的資源進行操作
1
kubectl get pod/example-pod1 service/example-rc1
-
用多個文件指定資源:
1
kubectl get -f ./pod1.yaml -f ./pod2.yaml
-
-
flags
指定可選的參數,這個要根據不同的 command 而有不同的操作
例如:
1
kubectl get pods -o wide
-o wide
意思是可以顯示更多 pods 的相關資訊
常見 kubectl 指令
這邊列出常常會用到的指令,所以這邊我會不定時更新 XD
取得所有 Pods 的資訊
1 | kubectl get pods |
取得某 Pod 的詳細資料
1 | kubectl describe pod <podName> |
直接建立一個 service 與某 Pod 中的 port 做對應,讓外部存取
1 | kubectl expose pod <podName> --type=NodePort --name=<serviceName> |
將某 Pod 中指定的 port number mapping 到 Local 的特定 port
1 | $ kubectl port-forward <podName> <localPort>:<podPort> |
與 Pod 內的 Container 進行互動,可以查看 log 也可以與 stdin 互動
1 | $ kubectl attach <pod> -i |
對 Pod 中的容器执行命令
1 | # 從 pod <pod-name> 中獲取運行 'date' 的輸出,預設是輸出第一個容器。 |
打印 Pod 中容器的 log
1 | kubectl logs <podName> |
在集群上運行指定的 Image
1 | kubectl run -i --tty alpine --image=alpine --restart=Never -- sh |
透過這樣的指令可以直接建立一個 pod,裡面的 Container Image 是 alpine。
然後因為在 Cluster 上的 Pod 在內部可以互相 access 到,可以透過以下指令得知每一個 Pod 的 IP:
1 | kubectl get pods -o wide |
1 | NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES |
所以透過前面的指令的 run alpine,會進到 alpine 的 shell,在裡面安裝 curl:
1 | apk add --no-cache curl |
接著存取 web-app-pod:
1 | curl http://172.17.0.2:8080/health |
就能得到以下 message:
1 | {"status":"ok"} |
總結
最後由於 kubectl 的指令太多了,除了可以查詢官方文件,也可以利用 kubectl help
來查詢哪些指令該怎麼使用以及所代表的涵義,今天主要介紹在對於 pod 的操作中常用的 kubectl 指令以及其語法介紹。
參考資料網址:
- https://ithelp.ithome.com.tw/articles/10193232
- https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
最後最後!請聽我一言!
如果你還沒有註冊 Like Coin,你可以透過我的邀請註冊連結來免費註冊,註冊完後就可以在文章最下方幫我按下 Like 按鈕,而 Like 最多可以點五次,如何一來你不用付出任何一塊錢,就能給我寫這篇文章最大的回饋!