文章目錄
- 1.kubectl文法
-
- 1.1常用指令簡要彙總(command)
- 1.2 資源類型彙總(type)
- 1.3kubectl輸出格式
- 2.聲明式資源對象管理
-
- apply
- 3.指令式資源對象管理
-
- 3.1建立資源
-
- create
- expose
- run
- 3.2更新資源
-
- scale
- autoscale
- annotate
- label
- 3.3删除資源
-
- delete
- 4.檢視資源狀态
-
- get
- describe
- 5.容器管理
-
- 5.1日志檢視
-
- logs
- 5.2執行指令
-
- exec
- 5.3檔案傳輸
-
- cp
- 6.叢集管理
-
- 6.1叢集資訊檢視
-
- cluster-info、version
- 6.2節點管理
-
- cordon、uncordon、drain
1.kubectl文法
command:子指令,指定要對資源執行的操作
TYPE:指定資源類型
NAME:指定資源名稱
flags:指定指令可選的參數
指令幫助文檔
kubectl --help
kubectl command --help
1.1常用指令簡要彙總(command)
kubectl作為kubernetes的指令行工具,主要的職責就是對叢集中的資源的對象進行操作,這些操作包括對資源對象的建立、删除和檢視等
操作 | 文法 | 描述 |
---|---|---|
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 資源類型彙總(type)
在kubernetes中,提供了很多的資源對象,開發和運維人員可以通過這些對象對容器進行編排。
資源對象類型 | 縮略别名 |
---|---|
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.3kubectl輸出格式
輸出格式 | 說明 |
---|---|
-o=custom-columns=<spec> | 根據自定義列名進行輸出,以逗号分隔 |
-o=custom-colimns-file=<filename> | 從檔案中擷取自定義列名進行輸出 |
-o=json | 以JSON格式顯示結果 |
-o=jsonpath=<template> | 輸出jsonpath表達式定義的字段資訊 |
-o=jsonpath-file=<filename> | 輸出jsonpath表達式定義的字段資訊,來源于檔案 |
-o=name | 僅輸出資源對象的名稱 |
-o=wide | 輸出額外資訊。對于Pod,将輸出Pod所在的Node名 |
-o=yaml | 以yaml格式顯示結果 |
2.聲明式資源對象管理
以聲明的形式,建立資源或更新資源,無需指定具體操作
apply
将來自于檔案或stdin的配置變更應用到主要對象中
kubernetes建議盡量使用apply指令,kubectl中大多數的建立、更新、删除資源的指令都可以使用apply來代替
kubectl apply (-f FILENAME | -k DIRECTORY) [options]
##-f 參數後跟yaml或json格式的資源配置檔案,-k 參數後跟kustomization.yaml配置檔案的位置。
聲明式管理:所有對叢集的增改操作,都能apply指令完成,取決于後面的配置檔案
- 如果配置檔案中的資源在叢集中不存在,則建立這個資源。
- 如果配置檔案中的資源在叢集中已存在,則根據配置對資源字段進行更新
例子:
#kubeadm部署叢集中根據資源配置檔案配置flannel網絡
kubectl apply -f kube-flannel.yml
apply指令的作用:使叢集的實際狀态朝使用者聲明的期望狀态變化,而使用者不用關心具體要進行怎樣的增删改操作才能達到這個期望狀态,也即Kubernetes的聲明式資源管理。
3.指令式資源對象管理
指令式管理就是直接通過指令執行增删改操作
3.1建立資源
create
用于根據檔案或輸入流建立叢集resource。如果有對應resource的yaml或json檔案,直接指定檔案建立。也可使用子指令等直接建立響應的resource。從追蹤和維護的角度,建議使用yaml或json格式
##通過檔案陳述式配置
kubectl create -f FILENAME [flags]
##通過指令
kubectl create [type] [NAME] [flags]
示例:
kubectl create -f nginx.yaml
kubectl create deployment nginx --image=nginx
kubectl create serviceaccount dashboard-admin -n kube-system #建立服務賬戶
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
expose
為副本控制器、服務或Pod等暴露一個新的服務,即将服務暴露出去(建立service)
kubectl expose deployments/deployment_name --type="NodePort" --port=(要暴露的容器端口) --name=(Service對象名字)
kubectl expose rc nginx --port=80 --target-port=8000 # 建立一個svc,暴露nginx這個rc
run
類似于docker的run指令,用于在叢集上運作一個image執行個體
kubectl run name --image=(鏡像名) --replicas=(備份數) --port=(容器要暴露的端口) --labels=(設定自定義标簽)
kubectl run nginx --image=nginx
部分參數:
–dry-run:測試指令正确性,不執行建立
-o:輸出,指定yaml或json将執行指令生成對應格式檔案
kubectl run nginx --image=nginx --dry-run -o yaml > /bak
3.2更新資源
scale
擴容或縮容 Deployment、ReplicaSet、Replication Controller或 Job 中Pod數量。
scale用于程式在負載加重或縮小時副本進行擴容或縮小,如建立的nginx有兩個副本,可以輕松的使用scale指令對副本數進行擴充或縮小。
kubectl scale --replicas=3 -f nginx.yaml #将nginx.yaml中描述的對象擴充為3個
kubectl scale rc nginx —replicas=4 #将nginx的pod副本設為4個,若比目前小,則為縮小
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql #如果目前副本為2,則擴充到3
kubectl scale --replicas=5 rc/foo rc/bar rc/baz #設定多個rc中pod副本數量
autoscale
給定一個rc指定一個副本數 的範圍,實際運作中根據pod運作的程式負載自動在指定的範圍内對pod進行擴容或縮容
annotate
添加或更新一個或多個資源的注釋/備注
kubectl annotate pods pod_name key=value
kubectl annotate pods foo description='my frontend' # 增加description='my frontend'備注,已有保留不覆寫
label
添加或更新一個或多個資源對象的标簽
kubectl label pods/pod_name key=value #添加标簽,如果是修改的話需要後面添加--overwrite
kubectl label nodes node_name key=value
kubectl label --overwrite pods foo status=unhealthy # 增加status=unhealthy 标簽,已有則覆寫
3.3删除資源
delete
删除資源對象
kubectl delete -f nginx.yaml #删除nginx.yaml中對應的資源對象
kubectl delete pod,service nginx foo #删除名為nginx、foo的pod和service
kubectl delete pods,services -l name=mylabel #删除包含指定标簽為mylabel的資源對象
kubectl delete pod foo --grace-period=0 --force # 強制删除一個pod,在各種原因pod一直terminate不掉的時候很有用
4.檢視資源狀态
get
最常用的檢視指令,檢視一個或多個資源的詳細資訊
常見示例:
kubectl get services # 列出目前NS中所有service資源
kubectl get pod -n kube-systme # 列出叢集中指定命名空間的pod
kubectl get pods --all-namespaces # 列出叢集所有NS中所有的Pod
kubectl get pods -o wide # -o wide也比較常用,可以顯示更多資源資訊,比如pod的IP等
kubectl get deployment my-dep # 可以直接指定資源名檢視
kubectl get deployment my-dep --watch # --watch 參數可以監控資源的狀态,在狀态變換時輸出。在跟蹤服務部署情況時很有用
kubectl get pod my-pod -o yaml # 檢視yaml格式的資源配置,這裡包括資實際的status,可以用--export排除
kubectl get pod my-pod -l app=nginx # 檢視所有帶有标簽app: nginx的pod
describe
類似get,但get隻輸出資源本身的資訊,describe聚合了相關資源的資訊并輸出。比如,在describe node資訊時,同時會輸出該node下的pod的資源利用情況。是以describe指令在排錯和調試時非常有用。
示例:
kubectl describe nodes my-node #檢視名為my-node的node節點詳細資訊
kubectl describe pods my-pod # 檢視pod my-pod的詳細資訊
5.容器管理
5.1日志檢視
logs
示例:
kubectl logs my-pod #檢視單容器pod的日志
kubectl logs my-pod -c nginx #檢視多容器pod中的某個nginx容器的日志
kubectl logs -l app=nginx #檢視包含app=nginx标簽的pod日志
kubectl logs -f my-pod #加上-f,類似tail -f,實時更新追蹤日志
kubectl logs my-pod -p #輸出該pod的上一個退出的容器執行個體日志。在pod容器異常退出時很有用
kubectl logs my-pod --since-time=2018-11-01T15:00:00Z # 指定時間戳輸出日志
kubectl logs my-pod --since=1h # 指定時間段輸出日志,機關s/m/h
5.2執行指令
exec
指令和docker exec一緻
kubectl exec -it nginx bash
5.3檔案傳輸
cp
容器和主控端之間互互相動檔案
kubectl cp /tmp/foo_dir <some-pod>:/tmp/bar_dir # 拷貝主控端本地檔案夾到pod
kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar # 指定namespace的拷貝pod檔案到主控端本地目錄
kubectl cp /tmp/foo <some-pod>:/tmp/bar -c <specific-container> # 對于多容器pod,用-c指定容器名
6.叢集管理
6.1叢集資訊檢視
cluster-info、version
kubectl cluster-info # 檢視master和叢集服務的位址
kubectl cluster-info dump # 檢視叢集詳細日志
kubectl version # 檢視Kubernetes叢集和用戶端版本
6.2節點管理
cordon、uncordon、drain
kubectl cordon my-node
# 标記 my-node 為 unschedulable,禁止pod被排程過來。注意這時現有的pod還會繼續運作,不會被驅逐。
kubectl uncordon my-node
# 與cordon相反,标記 my-node 為 允許排程。
kubectl drain my-node
# drain字面意思為排水,實際就是把my-node的pod平滑切換到其他node,同時标記pod為unschedulable,也就是包含了cordon指令。
# 但是直接使用指令一般不會成功,建議在要維護節點時,加上以下參數:
kubectl drain my-node --ignore-daemonsets --force --delete-local-data
# --ignore-daemonsets 忽略daemonset部署的pod
# --force 直接删除不由workload對象(Deployment、Job等)管理的pod
# --delete-local-data 直接删除挂載有本地目錄(empty-dir方式)的pod