Kubectl 是一個命令行接口,用於對 Kubernetes 集群運行命令。kubectl
在 $HOME/.kube 目錄中尋找一個名為 config 的文件。
kubectl安裝方法詳見:https://www.cnblogs.com/shadow-yin/p/14843099.html
1. 基本語法
使用以下語法 kubectl
從終端窗口運行命令:
kubectl [command] [TYPE] [NAME] [flags]
其中 command
、TYPE
、NAME
和 flags
分別是:
command
:指定要對一個或多個資源執行的操作,例如create
、get
、describe
、delete
。TYPE
:指定資源類型。資源類型不區分大小寫,可以指定單數、復數或縮寫形式。例如,以下命令輸出相同的結果:
```shell
kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1
```
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 pod -f ./pod.yaml
flags
: 指定可選的參數。例如,可以使用-s
或-server
參數指定 Kubernetes API 服務器的地址和端口。
注意:
從命令行指定的參數會覆蓋默認值和任何相應的環境變量。
如果您需要幫助,只需從終端窗口運行 kubectl help
即可。
注:以上內容摘自https://kubernetes.io/zh/docs/reference/kubectl/overview/
2. 查看型命令
指定命名空間(namespace)查看集群內的pod:
kubectl get pods -n test-namespace
(-n test-namespace表示指定test-namespace這個命名空間)
顯示pod的更多信息:
kubectl get pods -n test-namespace -o wide
(比上一條命令能顯示更多的pod信息)
以yaml格式顯示pod詳細信息:
kubectl get pods -n test-namespace -o yaml
(能顯示pod的詳細信息,以yaml格式輸出在屏幕上)
以json格式顯示pod詳細信息:
kubectl get pods -n test-namespace -o json
(能顯示pod的詳細信息,以json格式輸出在屏幕上)
指定pod名稱顯示其信息
kubectl get pods -n test-namespace xxx
(xxx為pod名稱,后跟-o wide 或者 -o yaml則顯示該pod的詳細信息。一般用法是先用kubectl get pods -n test-namespace查看所有pod名稱,然后使用指定名稱的方式來查看特定pod的詳細信息)
查看pod詳細信息:
kubectl describe pods -n test-namespace xxx
(xxx是pod名稱。該命令與之前幾條命令不同之處在於它會顯示pod的所有配置信息,顯示運行狀態,甚至還包括pod運行產生的事件,可用於產生故障時定位問題。不跟pod名稱會顯示命名空間下所有的pod信息,一般都需要后跟pod名稱,以單獨顯示指定pod的信息)
注:以上命令是查看pod類型資源的命令,將pods替換成其他資源類型則可以查看相應資源的信息。Kubernetes的所有資源信息可以通過命如下查看:
kubectl api-resources
查看pod的log日志:
kubectl logs xxx -n test-namespace
(xxx為pod名稱)
查看所有具有某一標簽的pod:
kubectl get pods -n test-namespace -l alibabacloud.com/rd-app=cdn-bind
(-l選項用於指定標簽,alibabacloud.com/rd-app=cdn-bind表示alibabacloud.com/rd-app這個標簽的值為“cdn-bind”)
查看所有命名空間下的pod:
kubectl get pods --all-namespaces
(--all-namespaces集群內所有的已創建的命名空間)
3. 創建型命令
要使用創建型的命令,一般都是先使用yaml格式的文件定義一個資源,然后在命令中指定yaml文件名稱來創建相應的資源。yaml文件可以保存在本地(運行kubectl工具的機器)的任意位置,如果不是在當前目錄,命令中需要指定yaml文件所在位置。
yaml文件示例:
apiVersion: v1
kind: Service
metadata:
labels:
XXXX.com/rd-tenant: CDN
name: test-cdn-svc-cm-agent-1XXX
namespace: test-namespace
spec:
ports:
- name: test-cdn-cm-agent-1
port: 3400
protocol: TCP
targetPort: 3400
selector:
alibabacloud.com/rd-app: cdn-cdncm-agent
alibabacloud.com/rd-app-cluster: test-node
alibabacloud.com/rd-tenant: CDN
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
以上yaml文件定義了一個類型(kind)為Service的資源。在metadata中為其打上了一系列的標簽,指定了其名稱(該名稱在命名空間內唯一),指定其所屬的命名空間。然后在spec中指定了該服務的名稱,端口。selector的作用是為了提供該服務需要選擇具有什么標簽的pod(pod是提供服務的實體)。將該yaml格式文件保存為文件名svc.yaml。則創建該資源可以用如下的命令:
kubectl apply -f svc.yaml
或者:
kubectl create -f svc.yaml
兩條命令的區別如下表:
序號 |
kubectl apply |
kubectl create |
1 |
根據yaml文件中包含的字段(yaml文件可以只寫需要改動的字段),直接升級集群中的現有資源對象 |
首先刪除集群中現有的所有資源,然后重新根據yaml文件(必須是完整的配置信息)生成新的資源對象 |
2 |
yaml文件可以不完整,只寫需要的字段 |
yaml文件必須是完整的配置字段內容 |
3 |
kubectl apply只工作在yaml文件中的某些改動過的字段 |
kubectl create工作在yaml文件中的所有字段 |
4 |
在只改動了yaml文件中的某些聲明時,而不是全部改動,你可以使用kubectl apply |
在沒有改動yaml文件時,使用同一個yaml文件執行命令kubectl replace,將不會成功(fail掉),因為缺少相關改動信息 |
建議使用apply,這種方法如果資源部存在就會創建,如果存在,則比較已經存在的資源與新定義的資源的不同點,將不同點替換。該命令可用於修改已有資源除資源名稱外(因為資源名稱是命名空間中同類型資源的唯一標識)的一些屬性。
4. 更新型命令
上一節提到apply命令同樣可用於更新資源的屬性。但是也還有其他命令用於更新資源的屬性。
在線編輯資源屬性:
kubectl edit pods xxx -n test-namespace
(xxx表示pod名稱。執行該命令后會彈出當前pod的屬性編輯界面,在上面直接修改資源屬性,然后保存退出,即完成資源更新操作)
給pod添加標簽:
kubectl label pods -n test-namespace xxx alibabacloud.com/rd-app=cdn-bind
(xxx表示pod名稱。該命令表示給pod添加alibabacloud.com/rd-app標簽,標簽的值為“cdn-bind”。該命令執行時,pod的原有標簽必須不存在alibabacloud.com/rd-app這個標簽,否則添加失敗)
修改pod標簽:
kubectl label pods -n test-namespace xxx alibabacloud.com/rd-app=cdn-bind --overwrite=true
(如果pod已經存在alibabacloud.com/rd-app這個標簽,需要修改為其他值,則需要在后面添加--overwrite=true )
5. 刪除型命令
使用定義資源是的yaml文件刪除資源:
kubectl delete -f svc.yaml
(svc.yaml文件是前述用於定義service的文件,將apply或者create換成delete即是刪除該資源(service),使用該命令是,不需要指定命名空間,因為在yaml文件中已經指定了命名空間)
使用資源名稱刪除資源:
kubectl delete services test-cdn-svc-cm-agent-1 -n test-namespace
(test-cdn-svc-cm-agent-1是已經創建的service名稱。該命令必須指定命名空間。該命令的用法一般是先用get命令獲取到資源的名稱,然后在指定名稱刪除資源)