## 1 kubectl命令介紹
### 1.1 基本命令
Kubectl是kubernetes的命令行工具。職責(zé)是對(duì)集群中資源對(duì)象進(jìn)行操作击你,這些操作包括對(duì)資源對(duì)象的增玉组、刪谎柄、改、查以及高級(jí)操作(滾動(dòng)升級(jí))等惯雳。下表中顯示了kubectl支持的所有操作命令谷誓,以及這些命令的語(yǔ)法和描述信息。
Kubernetes中所有組件都是資源吨凑,以下命令適用于所有組件。
|?**操作**?|?**語(yǔ)法**?|?**描述**?|
:----|:----|:----|
| **annotate** |? kubectl annotate (-f FILENAME \\\| TYPE NAME \\\| TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [–overwrite] [–all] [–resource-version=version] [flags] | 添加或更新一個(gè)或多個(gè)資源的注釋
| **api-versions**| kubectl api-versions [flags]?| 列出可用的API版本
|**apply**| kubectl apply -f FILENAME [flags]???| 將來(lái)自于文件或stdin的配置變更應(yīng)用到主要對(duì)象中户辱。
| **attach**?| kubectl attach POD -c CONTAINER [-i] [-t][flags]??| 連接到正在運(yùn)行的容器上鸵钝,以查看輸出流或與容器交互(stdin)。
| **autoscale**?| kubectl autoscale (-f FILENAME \\\| TYPE NAME \\\| TYPE/NAME) [–min=MINPODS] –max=MAXPODS [–cpu-percent=CPU] [flags]?|自動(dòng)擴(kuò)宿容由副本控制器管理的Pod庐镐。
|**cluster-info**| kubectl cluster-info [flags]??| 顯示群集中的主節(jié)點(diǎn)和服務(wù)的的端點(diǎn)信息恩商。
|**config**| kubectl config SUBCOMMAND [flags]?| 修改kubeconfig文件。
|**create**| kubectl create -f FILENAME [flags]?| 從文件或stdin中創(chuàng)建一個(gè)或多個(gè)資源對(duì)象必逆。
|**delete**| kubectl delete (-f FILENAME \\\| TYPE [NAME \\\| /NAME \\\| -l label \\\| –all]) [flags]?|刪除資源對(duì)象怠堪。
|**describe**| kubectl describe (-f FILENAME \\\| TYPE [NAME_PREFIX \\\| /NAME \\\| -l label]) [flags]??| 顯示一個(gè)或者多個(gè)資源對(duì)象的詳細(xì)信息。
|**edit**| kubectl edit (-f FILENAME \\\| TYPE NAME \\\| TYPE/NAME) [flags]??| 通過(guò)默認(rèn)編輯器編輯和更新服務(wù)器上的一個(gè)或多個(gè)資源對(duì)象名眉。
|**exec**| kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [– COMMAND [args…]]?| 在Pod的容器中執(zhí)行一個(gè)命令粟矿。
|**explain**| kubectl explain [–include-extended-apis=true] [–recursive=false] [flags]?| 獲取Pod、Node和服務(wù)等資源對(duì)象的文檔损拢。
|**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] | 為副本控制器陌粹、服務(wù)或Pod等暴露一個(gè)新的服務(wù)。
|**get**| kubectl get (-f FILENAME \\\| TYPE [NAME \\\| /NAME \\\| -l label]) [–watch] [–sort-by=FIELD] [[-o \\\| –output]=OUTPUT_FORMAT] [flags]| 列出一個(gè)或多個(gè)資源福压。
|**label**| kubectl label (-f FILENAME \\\| TYPE NAME \\\| TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [–overwrite] [–all] [–resource-version=version] [flags]??| 添加或更新一個(gè)或者多個(gè)資源對(duì)象的標(biāo)簽掏秩。
|**logs**| kubectl logs POD [-c CONTAINER] [–follow] [flags]??| 顯示Pod中一個(gè)容器的日志。
|**patch**| kubectl patch (-f FILENAME \\\| TYPE NAME \\\| TYPE/NAME) –patch PATCH [flags]?| 使用策略合并補(bǔ)丁過(guò)程更新資源對(duì)象中的一個(gè)或多個(gè)字段荆姆。
|**port-forward**| kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT […[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]??| 將一個(gè)或多個(gè)本地端口轉(zhuǎn)發(fā)到Pod蒙幻。
|**proxy**|kubectl proxy [–port=PORT] [–www=static-dir] [–www-prefix=prefix] [–api-prefix=prefix] [flags]| 為kubernetes API服務(wù)器運(yùn)行一個(gè)代理。
|**replace**| kubectl replace -f FILENAME?| 從文件或stdin中替換資源對(duì)象胆筒。
|**rolling-update**| kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] –image=NEW_CONTAINER_IMAGE \\\| -f NEW_CONTROLLER_SPEC) [flags]?| 通過(guò)逐步替換指定的副本控制器和Pod來(lái)執(zhí)行滾動(dòng)更新
| **run**| kubectl run NAME –image=image [–env=”key=value”] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [flags]??| 在集群上運(yùn)行一個(gè)指定的鏡像邮破。
| **scale**| kubectl scale (-f FILENAME \\\| TYPE NAME \\\| TYPE/NAME) –replicas=COUNT [–resource-version=version] [–current-replicas=count] [flags]| 擴(kuò)宿容副本集的數(shù)量。
| **version**|kubectl version [–client] [flags]|顯示運(yùn)行在客戶端和服務(wù)器端的Kubernetes版本
## 1.2 資源對(duì)象
kubernetes提供了很多資源對(duì)象腐泻,開(kāi)發(fā)和運(yùn)維人員可以通過(guò)這些對(duì)象對(duì)容器進(jìn)行編排操作决乎。在下表中,是kubectl所支持的資源對(duì)象類型派桩,以及它們的縮略別名构诚。
|?**資源對(duì)象類型**?|?**縮略別名**?|
|:----:|:----:|
|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 輸出選項(xiàng)
kubectl默認(rèn)執(zhí)行完命令后的輸出格式為純文本格式,可以通過(guò)-o或者–output字段指定命令的輸出格式铆惑。
kubectl [COMMAND] [TYPE] [NAME] -o=\<output_format\>
|?**輸出格式**?|?**描述**|
|:----|:----|
|\-o=custom-columns=\<spec\>|使用以逗號(hào)分隔的自定義列打印表格范嘱。|
|\-o=custom-columns-file=\<filename\>|使用文件中自定義列打印表格送膳。|
|\-o=json|輸出JSON格式的API對(duì)象|
|\-o=jsonpath=\<template\>|打印在jsonpath表達(dá)式中定義的字段|
|\-o=jsonpath-file=\<filename\>|打印文件中以jsonpath表達(dá)式定義的字段|
|\-o=name|僅僅輸出資源對(duì)象的名稱。|
|\-o=wide|輸出帶有附加信息的純文本格式丑蛤。對(duì)于Pod對(duì)象叠聋,將會(huì)包含Node名稱。|
|\-o=yaml|輸出YAML格式的API對(duì)象|
## 2.1 kubectl常用命令
### 2.1 集群相關(guān)
* 查看集群組件狀態(tài)
? `kubectl get componentstatuses`
* 查看kubelet日志
? `journalctl -xeu kubelet`
? `journalctl -f -u kubelet`
* 獲取集群信息
kubectl cluster-info
kubectl get cs-???**新建/刪除namespace**
kubectl create namespace {namespace-name}
kubectl delete namespace {namespace-name}1.??Pod相關(guān)????1.??pod-???**查看pod列表**
\#指定命名空間的pod列表
kubectl get pods -n {namespace-name} -o wide
\#所有命名空間的pod列表
kubectl get pods --all-namespaces -o wide-???**查看pod日志**
kubectl logs {pod-name} -n {namespace-name}-???**查看pod詳情**
kubectl describe pod {pod-name} -n {namespace-name}-???**將容器鏡像運(yùn)行在pod中**
kubectl run {pod-name} --image={repository:tag} --replicas=1 --port=900-???**在pod中運(yùn)行命令**
kubectl exec {pod-name} {cmd-name}-???**進(jìn)入pod**
kubectl exec {pod-name} -it bash-???**查看deploy列表**
kubectl get deployments -n {namespace-name} -o wide-???**刪除單個(gè)pod**
kubectl delete pods {pod-name}### deployment-???**使用命令直接創(chuàng)建創(chuàng)建deployment**
kubectl run {deployment-name} --image={repository:tag} --replicas={replicas-num}-???**使用yaml創(chuàng)建deployment**
kubectl create -f {yaml-name}.yaml-???**刪除deployment**
kubectl delete deployment {deployment-name}-???**查看所有deployment**
kubectl get deployment-???**查看deployment詳細(xì)信息**
kubectl describe deployment {deployment-name}-???**查看replicaset**
kubectl get rs-???**查看replicaset詳細(xì)信息**
kubectl describe rs {replicaset-name}-???**deployment擴(kuò)容/縮容**
kubectl scale deployment nginx --replicas={replicas-num}-???**deployment升級(jí)/回滾**
kubectl set image deploy {deployment-name} {deployment-name}={repository:tag}-???**查看升級(jí)狀態(tài)**
kubectl rollout status deployment {deployment-name}-???**查看升級(jí)歷史**
kubectl rollout history deployment {deployment-name}-???**查看歷史版本詳情**
kubectl rollout history deployment {deployment-name} --revision=2### 2.2.3 service-???**使用yaml創(chuàng)建service**
kubectl create -f {yaml-name}.yaml-???**使用yarm刪除service**
kubectl delete -f {yaml-name}.yaml-???**直接刪除某個(gè)service**
kubectl delete svc nginx### 2.2.4 其它-???**編輯**
kubectl edit {resource-type}/{resource-name}
或者
kubectl edit –f {yaml-name}-???**查看endpoint**
kubectl get endpoints-???**在線查看Yaml語(yǔ)法**
kubectl explain pod
kubectl explain pod.spec \| grep -i "containers" -5-???**檢驗(yàn)Yarm語(yǔ)法**
kubectl create -f flask.yaml --validate-???**使用Yaml文件刪除pod**
kubectl delete -f flask.yaml
Docker相關(guān)
----------### 容器命令-???**查看容器進(jìn)程**
docker ps\|grep {container-name}-???**查看容器日志**
docker logs --tail=500 {container-id}-???**進(jìn)入容器內(nèi)部**
docker exec -it {container} /bin/bash### 鏡像命令-???**鏡像列表**
docker images-???**導(dǎo)出鏡像**
docker save -o {output-path} {repository:tag}
【說(shuō)明】
output-path:導(dǎo)出到的本地目錄-???**導(dǎo)入鏡像**
docker load --input {image-tar}-???**修改cgroupdriver**
vi /etc/docker/daemon.json
\#添加如下內(nèi)容
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
其它參考