***
kubectl中的雙橫杠
kubectl中的雙橫杠(--)代表着kubectl命令項的結束,在兩個橫杠之后的內容是指在pod內部里需要執行的命令,如果不使用雙橫杠則可能會導致結果異常和歧義錯誤。如果需要執行的命令並沒有以橫杠開始的參數,則橫杠不是必需的。
kubectl cluster-info
kubectl get nodes
kubectl describe node {nodeName}
kubectl run {applicationName} --image=fanqisoft/coreqi --port=8080 --generator=run/v1 replicationcontroller "{applicationName}" created
kubectl get pods
kubectl get pods -o wide
kubectl get po --show-labels
kubectl get po -L creation_method,env
kubectl get po --namespace {namespaceName} #-n為--namespace的簡寫形式 kubectl get po -n {namespaceName}
kubectl describe pod {podName}
kubectl expose rc {applicationName} --type=LoadBalancer --name {serviceName} service "{serviceName}" exposed
kubectl get services
kubectl get replicationcontrollers
kubectl get rc
kubectl scale rc[replicationcontroller] {podName} --replicas=3
kubectl describe rc {rcName}
minikube dashboard
⒕從已有的pod獲取YAML或JSON描述文件
kubectl get po {podName} -o yaml
kubectl get po {podName} -o json
⒖使用kubectl獲取描述文件幫助
kubectl explain pods
kubectl explain pod.spec
⒗使用YAML描述文件創建pod
kubectl create -f kubia-manual.yaml #kubectl create -f 命令用於從YAML或JSON文件創建任何資源(不只是pod)
#使用YAML描述文件創建pod並指定命名空間
kubectl create -f kubia-manual.yaml -n custom-namespace
⒘查看pod日志(更准確的說是查看容器的日志)
kubectl logs {podName} #每天或者每次日志文件達到10M大小時,容器日志都會自動輪替。 #kubectl logs命令僅顯示最后一次輪替后的日志條目 #如果我們的pod包含多個容器,在運行kubectl logs命令時則必須通過包含-c {containerName}選項來顯式指定容器名稱。 kubectl logs {podName} -c {containerName} #我們只能獲取存在pod的日志,當pod被刪除后,它的日志也會被刪除。 #如果我們希望在pod刪除之后仍然可以獲取其日志,則需要設置中心化的、集群范圍的日志系統,將所有日志存儲到中心存儲中。 #kubectl logs顯示的是當前容器的日志,那么當前容器上一次奔潰的日志是無法通過該命令顯示出來的,通過添加--previous選項來完成 #必要時通過kubectl describe po {podName}查看上次奔潰原因 kubectl logs {podName} --previous
⒙端口轉發(用於主機和pod之間通信),也可以使用暴露服務進行通信
kubectl port-forward kubia-manual 8888:8080
⒚pod標簽
為已創建的pod添加標簽
kubectl label po {podName} labelKey=labelValue
為已創建的pod修改標簽【--overwrite參數是必要的,否則kubectl將只打印出警告並不會更改標簽,這樣是為了防止我們在想要添加新標簽時無意中更改了現有標簽的值】
kubectl label po {podName} labelKey=labelValue --overwrite
⒛使用標簽選擇器列出指定標簽的pod
#列出指定標簽值的pod kubectl get po -l labelKey=labelValue #列出在指定標簽值范圍內的pod kubectl get po -l labelKey in (labelValue1,labelValue2) #列出不在指定標簽值范圍內的pod kubectl get po -l labelKey notin (labelValue1,labelValue2) #列出不等於指定標簽值的pod kubectl get po -l labelKey!=labelValue #列出包含指定標簽的pod,無論其值如何 kubectl get po -l labelKey #列出不包含指定標簽的pod(確保使用單引號來包含!labelKey,這樣bash shell才不會解釋感嘆號,感嘆號在bash中有特殊含義,表示事件指示器) kubectl get po -l '!labelKey' #使用多條件 kubectl get po -l labelKey1=labelValue1,labelKey2=labelValue2
21.node(節點)標簽
#向節點添加標簽 kubectl label node {nodeName} labelKey=labelValue #獲取指定標簽值的節點 kubectl get nodes -l labelKey=labelValue
22.pod注解
#向pod中添加注解 kubectl annotate pod {podName} annotateKey="annotateValue" #查看注解使用describe命令即可 kubectl describe pod {podName}
23.命名空間
#列出所有的命名空間
kubectl get ns
#創建命名空間 #創建一個custom-namespace.yaml apiVersion: v1 #指定當前描述文件遵循v1版本的KubernetesAPI kind: Namespace #表示我們正在定義一個命名空間 metadata: name: custom-namespace #定義命名空間的名稱 #使用kubectl執行命令 kubectl create -f custom-namespace.yaml #還可以直接使用kubectl命令創建命名空間(命名空間名稱不允許包含點號) kubectl create namespace custom-namespace
24.刪除命名空間
#刪除命名空間(pod將會伴隨命名空間的刪除而自動刪除) kubectl delete ns {namespaceName} #刪除命名空間中的(幾乎)所有資源【ReplicationController、pod、service等將會被刪除,而一些資源例如Secret等不會被刪除,它們需要被明確的指定刪除】 kubectl delete all --all #命令中的第一個all指定正在刪除所有資源類型,而--all選項指定將刪除所有資源示例而非按照名稱指定它們 #kubectl delete all --all命令也會刪除名為kubernetes的service,但它將在幾分鍾后自動重新創建
24.刪除pod
#刪除pod #根據pod名稱刪除pod kubectl delete po {podName1} {podName2} #根據pod標簽輸出pod kubectl delete po -l labelKey=labelValue #刪除當前命名空間下的所有pod(不會刪除命名空間) kubectl delete po --all
25.編輯ReplicationController
kubectl edit rc {rcName}
這將在你的默認文本編輯器中打開ReplicationController的YAML配置。保存更改並退出編輯器后,kubectl將更新ReplicationController並打印以下消息:replicationcontroller "kubia" edited
配置kubectl edit 使用不同的文本編輯器可以通過設置KUBE_EDITOR環境變量來告訴kubect1使用你期望的文本編輯器。例如,如果你想使用nano編輯Kubernetes資源,請執行以下命令(或將其放入~/.bashrc或等效文件中):export KUBE_EDITOR="/usr/bin/nano"
如果未設置KUBEEDITOR環境變量,則kubect1edit會回退到使用默認編輯器(通常通過EDITOR環境變量進行配置)。
26.刪除ReplicationController
當你通過kubect1 delete 刪除ReplicationController時,pod也會被刪除。
但是由於由ReplicationController創建的pod不是ReplicationController的組成部分, 只是由其進行管理,因此可以只刪除ReplicationController並保持pod運行。
#使用kubectl delete 刪除ReplicationController時,可以通過給命令增加--cascade=false選項保持pod的運行,此時這些pod將獨立,它們不再被管理,但我們始終可以使用適當的標簽選擇器創建新的ReplicationController並再次將它們管理起來 kubectl delete rc {rcName} --cascade=false