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:
kubectl的子命令:
command:
kubectl 可選參數:
flags:
kubectl的輸出格式:
kubect支持結果以多種格式輸出顯示,使用-o 參數指定
自定義字段輸出
kubectl [command] [type] -o=<output_format>
kubectl get pod -o=custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
# cat template.txt #第一行自定義的字段名稱,第二行對應的集群內的字段 字段之間使用空格隔開 NAME RSRC metadata.name metadata.resourceVersion # kubectl get pod -o=custom-columns-file=template.txt
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}
按照某個字段排序 --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權威指南第二版