kubectl命令列工具_Kubernetes中文社群
1、kubectl概述
kubectl是Kubernetes叢集的命令列工具,通過kubectl能夠對叢集本身進行管理,並能夠在叢集上進行容器化應用的安裝部署。執行kubectl命令的語法如下所示:
$ kubectl [command][TYPE][NAME][flags]
這裡的command,TYPE、NAME和flags為:
- comand:指定要對資源執行的操作,例如create、get、describe和delete
- TYPE:指定資源型別,資源型別是大小學敏感的,開發者能夠以單數、複數和縮略的形式。例如:
$ kubectl get pod pod1 $ kubectlget pods pod1 $ kubectl get po pod1
- NAME:指定資源的名稱,名稱也大小寫敏感的。如果省略名稱,則會顯示所有的資源,例如:
$ kubectl get pods
- flags:指定可選的引數。例如,可以使用-s或者–server引數指定Kubernetes API server的地址和埠。
另外,可以通過執行kubectl help命令獲取更多的資訊。
1.1 kubectl的操作
kubectl作為kubernetes的命令列工具,主要的職責就是對叢集中的資源的物件進行操作,這些操作包括對資源物件的建立、刪除和檢視等。下表中顯示了kubectl支援的所有操作,以及這些操作的語法和描述資訊:
操作 | 語法 | 描述 |
---|---|---|
annotate | kubectl annotate (-f FILENAME \| TYPE NAME \| TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [–overwrite] [–all] [–resource-version=version] [flags] | 新增或更新一個或多個資源的註釋 |
api-versions | kubectl api-versions [flags] | 列出可用的API版本 |
apply | kubectl apply -f FILENAME [flags] | 將來自於檔案或stdin的配置變更應用到主要物件中。 |
attach | kubectl attach POD -c CONTAINER [-i] [-t] [flags] | 連線到正在執行的容器上,以檢視輸出流或與容器互動(stdin)。 |
autoscale | kubectl autoscale (-f FILENAME \| TYPE NAME \| TYPE/NAME) [–min=MINPODS] –max=MAXPODS [–cpu-percent=CPU] [flags] | 自動擴宿容由副本控制器管理的Pod。 |
cluster-info | kubectl cluster-info [flags] | 顯示群集中的主節點和服務的的端點資訊。 |
config | kubectl config SUBCOMMAND [flags] | 修改kubeconfig檔案。 |
create | kubectl create -f FILENAME [flags] | 從檔案或stdin中建立一個或多個資源物件。 |
delete | kubectl delete (-f FILENAME \| TYPE [NAME \| /NAME \| -l label \| –all]) [flags] | 刪除資源物件。 |
describe | kubectl describe (-f FILENAME \| TYPE [NAME_PREFIX \| /NAME \| -l label]) [flags] | 顯示一個或者多個資源物件的詳細資訊。 |
edit | kubectl edit (-f FILENAME \| TYPE NAME \| TYPE/NAME) [flags] | 通過預設編輯器編輯和更新伺服器上的一個或多個資源物件。 |
exec | kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [– COMMAND [args…]] | 在Pod的容器中執行一個命令。 |
explain | kubectl explain [–include-extended-apis=true] [–recursive=false] [flags] | 獲取Pod、Node和服務等資源物件的文件。 |
expose | kubectl expose (-f FILENAME \| TYPE NAME \| TYPE/NAME) [–port=port] [–protocol=TCP\|UDP] [–target-port=number-or-name] [–name=name] [—-external-ip=external-ip-of-service] [–type=type] [flags] | 為副本控制器、服務或Pod等暴露一個新的服務。 |
get | kubectl get (-f FILENAME \| TYPE [NAME \| /NAME \| -l label]) [–watch] [–sort-by=FIELD] [[-o \| –output]=OUTPUT_FORMAT] [flags] | 列出一個或多個資源。 |
label | kubectl label (-f FILENAME \| TYPE NAME \| TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [–overwrite] [–all] [–resource-version=version] [flags] | 新增或更新一個或者多個資源物件的標籤。 |
logs | kubectl logs POD [-c CONTAINER] [–follow] [flags] | 顯示Pod中一個容器的日誌。 |
patch | kubectl patch (-f FILENAME \| TYPE NAME \| TYPE/NAME) –patch PATCH [flags] | 使用策略合併補丁過程更新資源物件中的一個或多個欄位。 |
port-forward | kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT […[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] | 將一個或多個本地埠轉發到Pod。 |
proxy | kubectl proxy [–port=PORT] [–www=static-dir] [–www-prefix=prefix] [–api-prefix=prefix] [flags] | 為kubernetes API伺服器執行一個代理。 |
replace | kubectl replace -f FILENAME | 從檔案或stdin中替換資源物件。 |
rolling-update | kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] –image=NEW_CONTAINER_IMAGE \| -f NEW_CONTROLLER_SPEC) [flags] | 通過逐步替換指定的副本控制器和Pod來執行滾動更新。 |
run | kubectl run NAME –image=image [–env=”key=value”] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [flags] | 在叢集上執行一個指定的映象。 |
scale | kubectl scale (-f FILENAME \| TYPE NAME \| TYPE/NAME) –replicas=COUNT [–resource-version=version] [–current-replicas=count] [flags] | 擴宿容副本集的數量。 |
version | kubectl version [–client] [flags] | 顯示執行在客戶端和伺服器端的Kubernetes版本。 |
1.2 資源物件型別
在kubernetes中,提供了很多的資源物件,開發和運維人員可以通過這些物件對容器進行編排。在下表中,是kubectl所支援的資源物件型別,以及它們的縮略別名:
資源物件型別 | 縮略別名 |
---|---|
apiservices | |
certificatesigningrequests | csr |
clusters | |
clusterrolebindings | |
clusterroles | |
componentstatuses | cs |
configmaps | cm |
controllerrevisions | |
cronjobs | |
customresourcedefinition | crd |
daemonsets | ds |
deployments | deploy |
endpoints | ep |
events | ev |
horizontalpodautoscalers | hpa |
ingresses | ing |
jobs | |
limitranges | limits |
namespaces | ns |
networkpolicies | netpol |
nodes | no |
persistentvolumeclaims | pvc |
persistentvolumes | pv |
poddisruptionbudget | pdb |
podpreset | |
pods | po |
podsecuritypolicies | psp |
podtemplates | |
replicasets | rs |
replicationcontrollers | rc |
resourcequotas | quota |
rolebindings | |
roles | |
secrets | |
serviceaccounts | sa |
services | svc |
statefulsets | |
storageclasses |
1.3 輸出選項
kubectl預設的輸出格式為純文字格式,可以通過-o或者–output欄位指定命令的輸出格式。
$ kubectl [command] [TYPE] [NAME] -o=<output_format>
輸出格式 | 描述 |
---|---|
-o=custom-columns=<spec> | 使用以逗號分隔的自定義列打印表格。 |
-o=custom-columns-file=<filename> | 使用檔案中自定義列打印表格。 |
-o=json | 輸出JSON格式的API物件 |
-o=jsonpath=<template> | 列印在jsonpath表示式中定義的欄位 |
-o=jsonpath-file=<filename> | 列印檔案中以jsonpath表示式定義的欄位 |
-o=name | 僅僅輸出資源物件的名稱。 |
-o=wide | 輸出帶有附加資訊的純文字格式。對於Pod物件,將會包含Node名稱。 |
-o=yaml | 輸出YAML格式的API物件 |
2、kubectl安裝部署
2.1 安裝kubectl
1)下載kubectl
並將kubectl.exe所在的地址新增至Windows的環境變數的Path中。
2)配置kubeconfig檔案
RKE會在配置檔案所在的目錄下部署一個本地檔案,該檔案中包含kube配置資訊以連線到新生成的群集。
預設情況下,kube配置檔案被稱為.kube_config_cluster.yml。將這個檔案複製到你的本地~/.kube/config,就可以在本地使用kubectl了。
需要注意的是,部署的本地kube配置名稱是和叢集配置檔案相關的。例如,如果您使用名為mycluster.yml的配置檔案,則本地kube配置將被命名為.kube_config_mycluster.yml。
2.2 驗證
執行kubectl命令,獲取nodes的資訊:
$ kubectl get nodes
3、kubectl的常用命令示例
在此部分將提供常用命令的示例,已幫助您快速瞭解和試用kubectl。
1)kubectl create命令
此命令通過檔案或者stdin建立一個資源物件,假設這裡存在一個nginx部署的YAML配置檔案,可以通過執行下面的命令建立部署物件。
$ kubectl create -f nginx-deployment.yamlnginx部署的YAML配置檔案的示例程式碼如下:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: nginx spec: replicas: 10 selector: matchLabels: app: nginx revisionHistoryLimit: 2 template: metadata: labels: app: nginx spec: imagePullSecrets: - name: dc-hspfd containers: # 應用的映象 - image: nginx name: nginx imagePullPolicy: IfNotPresent # 應用的內部埠 ports: - containerPort: 80 name: nginx80 # 持久化掛接位置,在docker中 volumeMounts: - mountPath: /usr/share/nginx/html name: nginx-data - mountPath: /etc/nginx name: nginx-conf volumes: # 宿主機上的目錄 - name: nginx-data nfs: path: /k8s-nfs/nginx server: 192.168.8.150 - name: nginx-conf nfs: path: /k8s-nfs/nginx/conf server: 192.168.8.150
2)kubectl get 命令
通過此命令列出一個或多個資源物件,在這裡通過kubectl get命令獲取default名稱空間下的所有部署。
3)kubectl describe命令
此命令用於顯示一個或多個資源物件的詳細資訊,在這裡通過獲取上述nginx部署的資訊。
$ kubectl describe deployments/nginx
4)kubectl exec命令
此命令用於在Pod中的容器上執行一個命令,此處在nginx的一個容器上執行/bin/bash命令。
$ kubectl exec -it nginx-5847748bf9-49k5k /bin/bash
5)kubectl logs命令
此命令用於獲取Pod中一個容器的日誌資訊,此處獲取nginx一個容器的日誌資訊。
$ kubectl logs nginx-5847748bf9-49k5k
6)kubectl delete命令
此命令用於刪除叢集中已存在的資源物件,可以通過指定名稱、標籤選擇器、資源選擇器等。此處刪除前面建立的nginx部署。
$ kubectl delete deployments/nginx
參考資料
1.《kubectl Usage Conventions》地址:https://kubernetes.io/docs/reference/kubectl/conventions/
2.《kubectl Commands》地址:https://kubernetes.io/docs/reference/kubectl/kubectl-cmds/
3.《Overview of kubectl》地址:https://kubernetes.io/docs/reference/kubectl/overview/
作者簡介:
季向遠,北京神舟航天軟體技術有限公司產品經理。本文版權歸原作者所有。