kubectl相關指令


  在列出、描述、修改或刪除其他命名空間中的對象時,需要給kubect1命令傳遞--namespace(或-n)選項。如果不指定命名空間,kubect1將在當前上下文中配置的默認命名空間中執行操作。而當前上下文的命名空間和當前上下文本身都可以通過kubect1 config命令進行更改。
  要想快速切換到不同的命名空間,可以設置以下別名:alias kcd='kubectl config set-context $(kubectl config current-context)--namespace'。然后,可以使用kcd some-namespace在命名空間之間進行切換。

  ***

  kubectl中的雙橫杠

    kubectl中的雙橫杠(--)代表着kubectl命令項的結束,在兩個橫杠之后的內容是指在pod內部里需要執行的命令,如果不使用雙橫杠則可能會導致結果異常和歧義錯誤。如果需要執行的命令並沒有以橫杠開始的參數,則橫杠不是必需的。

 
⒈ 展示k8s集群信息
kubectl cluster-info
⒉列出所有集群節點
kubectl get nodes
⒊查看節點詳細信息
kubectl describe node {nodeName}
⒋使用alias k = kubectl創建命令行別名,並添加到~/.bashrc中永久保存
⒌為kubectl配置tab自動補全,需要安裝一個叫做bashcompletion的包來啟動bash的自動補全,然后運行一系列命令配置,書中40(59/590)中詳細描述
⒍集群中部署應用
kubectl run {applicationName} --image=fanqisoft/coreqi --port=8080 --generator=run/v1 replicationcontroller "{applicationName}" created
  --image:指定要運行的容器鏡像
  --port:告訴kubernetes應用監聽的端口
  --generator:通常不會使用到它,它讓kubernetes創建一個ReplicationController而不是Deployment
⒎列出所有pod
kubectl get pods
列出所有pod並攜帶pod的IP及所在節點
kubectl get pods -o wide
列出所有pod並展示pod所攜帶的標簽
kubectl get po --show-labels
如果只是對某些標簽感興趣,可以使用-L選項指定它們並將它們分別顯示在自己的列中,而不是列出所有標簽。
kubectl get po -L creation_method,env
列出指定命名空間下的pod(如未指定則默認為default命名空間)
kubectl get po --namespace {namespaceName}
#-n為--namespace的簡寫形式
kubectl get po -n {namespaceName}
  READY: 顯示pod的就緒情況
⒏ 查看pod的詳細信息
kubectl describe pod {podName}
⒐ 每個pod都有自己的IP地址,然而這個IP地址在集群內部進行訪問的,要讓pod能夠從外部訪問,需要通過服務對象公開它,要創建一個特殊的LoadBalancer類型的服務。因為如果你創建一個常規服務(一個ClusterIP服務),比如pod,它也只能從集群內部訪問,通過創建LoadBalancer類型的服務,將創建一個外部的負載均衡,可以通過負載均衡的公共IP訪問pod
創建一個服務對象
kubectl expose rc {applicationName} --type=LoadBalancer --name {serviceName} service "{serviceName}" exposed
  rc:ReplicationController的縮寫。大多數資源類型都有這樣的縮寫,省去輸入全名的繁瑣,pods縮寫po,service縮寫svc等等
⒑列出集群中所有服務
kubectl get services
使用minikube的時候,可以通過minikube service {serviceName} 獲取可以訪問服務的IP和端口
⒒ReplicationController,ReplicationController用於復制pod(即創建pod的多個副本)並讓它們保持運行,如果沒有指定要運行多少個副本,則默認一個副本在運行,如果你的pod因為任何原因消失了,那么ReplicationController將會創建一個新的副本來替代它。
⒓列出所有的ReplicationController
kubectl get replicationcontrollers
kubectl get rc
  DESIRED:顯示希望ReplicationController保持的pod副本數
  CURRENT:顯示當前運行的pod副本數
增加副本數,也可以通過 kubectl edit rc {rcName}命令編輯replicationcontroller描述文件的spec.replicas字段來變更副本數
kubectl scale rc[replicationcontroller] {podName} --replicas=3
查看ReplicationController的附加信息
kubectl describe rc {rcName}
⒔訪問minikube的dashboard
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

 

 

 

 

 

 


免責聲明!

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



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