kubectl命令行工具


kubectl說明:

當沒有使用ui,api ,操作kubernetes集群時,使用kubectl來操作集群的 增刪改查 

kubectl 相當於一個客戶端cli  來與kube-apiserver進行交互,達到操控集群的作用。

 

kubectl 語法:

kubectl命令行語法:

 

kubectl [command] [type] [name] [flags]
  • command

用於操作kubernetes集群資源對象的命令,如create delete apply logs describe get rollout exec  edit等

  • type

資源對象的類型,如 pod  deployment  service 等。。。。

  • name

資源對象的名稱,區分大小寫,如果不指定具體的資源對象名稱,系統將返回 該type的所有資源對象,例如kubectl get pods  系統將返回所有default 名稱空間下的所有pod 

  • flags

kubectl的子命令的可選參數,例如 -s 指定 apiserver的 url地址,而不使用默認的。

 

kubectl可操作的資源對象類型

type:

image.png

 

kubectl的子命令:

command:

image.png

image.png

image.png

image.png

 

kubectl 可選參數:

flags:

image.png

kubectl的輸出格式:

kubect支持結果以多種格式輸出顯示,使用-o 參數指定

自定義字段輸出

kubectl [command] [type] -o=<output_format>

image.png

kubectl get pod -o=custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion

 

image.png

 

# cat template.txt #第一行自定義的字段名稱,第二行對應的集群內的字段 字段之間使用空格隔開 NAME RSRC metadata.name metadata.resourceVersion # kubectl get pod -o=custom-columns-file=template.txt

 

image.png

 

jsonpath和jsonpath-file

 

kubectl get pods -o=jsonpath='{.items[0]}{"\n"}' kubectl get pods -o=jsonpath='{.items[0].apiVesion}{"\n"}' #其中.items[0] 可以省略 kubectl get pods -o=jsonpath='{.items[0].metadata.labels.app}{"\n"}' # kubectl get pods -o=jsonpath-file=json.txt v1 nginx # cat json.txt {.items[0].apiVersion} {.items[0].metadata.labels.app} 

image.png

image.png

按照某個字段排序 --sort-by=<jsonpath-exp>

kubectl get pods --sort-by=.metadata.name

kubectl 常用命令

一、get

獲取所有namespace:

 

kubectl get ns

在指定的namespace下獲取資源:

kubectl -n {$nameSpace} get pods

 

以yaml格式輸出資源:

kubectl -n {$nameSpace} -o yaml

通用格式:

 

kubectl get {$sourceType} --all-namespaces

常用的資源類型({$resourceType})有:

 

po(pod)

ns(命名空間namespace)

instance(實例)

svc(service服務):定義了一個 Pod 的邏輯分組,一種可以訪問它們的策略(微服務)。

cm(configMap):存儲全局配置變量的,將分布式系統中不同模塊的環境變量統一到一個對象中管理。

ds(deamonSet):在每台計算節點上運行一個守護進程(如日志采集等),有時pod處於pending可能是因為某個deamonSet沒起來。

deploy(deployment):用於啟動(上線/部署)一個Pod或者ReplicaSet。這個如果有問題,那么其他依賴它來部署的資源就肯定不會正常了。

 

 

二、describe 

描述一個資源:

kubectl -n {$nameSpace} describe {$resourceType} {$resourceName}

 

三、logs

查看日志,--tail指定只看最后1000行:

kubectl -n {$nameSpace} logs --tail=1000 {$podName} | less

 

四、scale

擴容或縮容 Deployment、ReplicaSet、Replication Controller或 Job 中Pod數量。

scale也可以指定多個前提條件,如:當前副本數量或 --resource-version ,進行伸縮比例設置前,系統會先驗證前提條件是否成立。

語法

$ scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)

 

示例

將名為foo中的pod副本數設置為3。

 

kubectl scale --replicas=3 rs/foo

 

將由“foo.yaml”配置文件中指定的資源對象和名稱標識的Pod資源副本設為3。

kubectl scale --replicas=3 -f foo.yaml

 

如果當前副本數為2,則將其擴展至3。

kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

 

設置多個RC中Pod副本數量。

kubectl scale --replicas=5 rc/foo rc/bar rc/baz

 

五、create

通過配置文件名創建一個集群資源對象。

 

kubeclt create -f {$yamlorJsonFilePath}

 

 

六、edit

編輯一個資源文件,這里以編輯configMap資源對象為例(yaml格式):

kubectl -n {$nameSpace} edit {$resourceType} {$resourceName} -o yaml

 

 

七、rolling-update

執行指定ReplicationController的滾動更新。該命令會創建一個新的RC,等新pod完全起來后刪除一個舊的pod,之后重復操作,直到替換掉所有的pod。

kubectl rolling-update {$resourceName} -f {$yamlFile}

 

 

八、delete

指定資源類型和名字刪除一個資源:

 

kubectl -n {$nameSpace} delete {$resourceType} {$resourceName}

 

批量刪除資源:

 

kubectl -n {$nameSpace} delete {$resourceType} -l {$label}={$labelValue}

 

 

九、exec

exec主要作用是在容器內部執行命令(一般為查看容器內部日志),這里以一個小例子說明kubectl exec命令的作用。

kubectl exec -it nginx-86c57db685-kqndx bash kubectl exec -it nginx-86c57db685-kqndx -c nginx bash #-c指定pod 中的具體容器

十、autoscale

使用 Deployment “foo”設定,使用默認的自動伸縮策略,指定目標CPU使用率,使其Pod數量在2到10之間。

 

kubectl autoscale deployment foo --min=2 --max=10

 

使用RC“foo”設定,使其Pod的數量介於1和5之間,CPU使用率維持在80%。

 

kubectl autoscale rc foo --max=5 --cpu-percent=80

 

參考:

http://docs.kubernetes.org.cn/683.html

kubernetes權威指南第二版

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM