從異世界歸來的第十一天 - Kubernetes Kubectl 指令與他的快樂夥伴¶
概述¶
在我們先前的介紹中,可以發現 Kubernetes 除了撰寫設定檔之外,其他時候就是使用 kubectl 這個指令工具進行各項操作,而 kubectl 的指令就是我們先前提到的 kube-apiserver 的這個元件以 Restful API 在底層各種調用的封裝,熟悉指令可以使我們更了解 Kubernetes 各種功能的觀念甚至幫助我們舉一反三調試出更靈活的設定。
kubectl 語法介紹¶
如果想要熟悉 kubectl 語法更應該知道每個指令的用途以及語法格式,到後面就越來越可以利用累積的相關知識盲猜推測出更多指令操作,達到真正的內化。
kubectl 的語法如下:
kubectl [command] [type] [name] [flags]
語法¶
使用以下語法從終端窗口運行 kubectl 命令:
kubectl [command] [TYPE] [NAME] [flags]
其中command、TYPE、NAME和 flags 分別是:
command:指定要對一個或多個資源執行的操作,例如create、get、describe、delete。-
TYPE:指定資源類型。資源類型不區分大小寫, 可以指定單數、複數或縮寫形式。例如,以下命令輸出相同的結果:-
取得 pod:
``` kubectl get pod pod1 kubectl get pods pod1 kubectl get po pod1
```
-
取得 service:
``` kubectl get service service1 kubectl get services service1 kubectl get svc service1
```
-
取得 Deployment:
kubectl get deployment deployment1 kubectl get deployments deployment1 kubectl get deploy deploymen1
-
-
NAME:指定資源的名稱。名稱區分大小寫。如果省略名稱,則顯示所有資源的詳細信息。例如:kubectl get pods。
在對多個資源執行操作時,你可以按類型和名稱指定每個資源,或指定一個或多個文件:
- 要按類型和名稱指定資源:
- 要對所有類型相同的資源進行分組,請執行以下操作:
TYPE1 name1 name2 name<#>。
例子:kubectl get pod example-pod1 example-pod2
- 分別指定多個資源類型:
TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>。
例子:kubectl get pod/example-pod1 replicationcontroller/example-rc1
- 用一個或多個文件指定資源:
f file1 -f file2 -f file<#> - 使用YAML 而不是JSON, 因為YAML 對用戶更友好, 特別是對於配置文件。
例子:kubectl get -f ./pod.yaml
flags: 指定可選的參數。例如,可以使用-s或--server參數指定Kubernetes API 服務器的地址和端口。
如果你需要幫助,在終端窗口中運行kubectl help。
基礎語法¶
**apply** :以文件或標準輸入為準應用或更新資源。
# 使用 example-service.yaml 創建服務
kubectl apply -f example-service.yaml
# 使用 <directory> 路徑下的任意 .yaml、.yml 或 .json 文件 創建對象
kubectl apply -f <directory>
**describe** :顯示一個或多個資源的詳細狀態,默認情況下包括未初始化的資源。
# 顯示名為 <node-name> 的 Node 的詳細信息。
kubectl describe nodes <node-name>
# 顯示名為 <pod-name> 的 Pod 的詳細信息。
kubectl describe pods/<pod-name>
# 顯示由名為 <rc-name> 的副本控制器管理的所有 Pod 的詳细信息。
# 記住:副本控制器創建的任何 Pod 都以副本控制器的名稱为前缀。
kubectl describe pods <rc-name>
# 描述所有的 Pod
kubectl describe pods
get :用於獲取集群的一個或一些resource信息。
該命令可以列出集群所有資源的詳細信息,resource包括集群節點、運行的Pod、Deployment、Service等。
例如:
獲取所有pod的詳細信息:
kubectl get po -o wide
獲取所有namespace下的運行的所有pod:
kubectl get po --all-namespaces
獲取所有namespace下的運行的所有pod的標籤:
kubectl get po --show-labels
獲取該節點的所有命名空間:
kubectl get namespace
create :根據文件或者輸入來創建資源。
kubectl create -f demo-deployment.yaml
kubectl create -f demo-service.yaml
delete :刪除資源。
kubectl delete -f demo-deployment.yaml
kubectl delete -f demo-service.yaml
kubectl delete {具體資源的名稱}
**run** :在集群中創建並運行一個或多個容器鏡像。
// 語法
kubectl run NAME --image=image [--env="key=value"] \
[--port=port] [--replicas=replicas] [--dry-run=bool] \
[--overrides=inline-json] [--command] -- [COMMAND] [args...]
// 運行一個名稱為nginx,副本数為3,標籤為app=example,鏡像為nginx:1.10,端口為80的容器實例
kubectl run nginx --replicas=3 --labels="app=example" --image=nginx:1.10 --port=80
expose :創建一個service服務,並且暴露端口讓外部可以訪問。
# 創建一個 nginx 服務並暴露 88 端口讓外部訪問
kubectl expose deployment nginx --port=88 --type=NodePort --target-port=80 --name=nginx-service
set :配置應用的一些特定資源,也可以修改應用已有的資源。
//使用 kubectl set --help查看,它的子命令,env,image,resources,selector,serviceaccount,subject。
// 語法
kubectl resources (-f FILENAME | TYPE NAME) ([--limits=LIMITS & --requests=REQUESTS]
**exec** :對Pod 中的容器執行命令。
# 從 Pod <pod-name> 中獲取運行 'date' 的輸出。默認情况下,輸出来自第一個容器。
kubectl exec <pod-name> -- date
# 運行輸出 'date' 獲取在 Pod <pod-name> 中容器 <container-name> 的輸出。
kubectl exec <pod-name> -c <container-name> -- date
# 獲取一个交互 TTY 並在 Pod <pod-name> 中運行 /bin/bash。默認情况下,輸出来自第一個容器。
kubectl exec -ti <pod-name> -- /bin/bash
**logs** :打印Pod 中容器的日誌。
# 返回 Pod <pod-name> 的日誌快照。
kubectl logs <pod-name>
# 從 Pod <pod-name> 開始流式傳輸日誌。這種類似於 'tail -f' Linux 命令。
kubectl logs -f <pod-name>
概述¶
到目前為止我們已經了解了基本的指令以及設定,之後的方向我們將逐漸揭開 Kubernetes 的神秘面紗,使用更實際以及更深入的例子來學習各種設定,以及了解該設定的存在的原因。
Reference