kubectl 是 Kubernetes 自帶的客戶端,能夠用它來直接操做 Kubernetes 集羣。html
平常在使用 Kubernetes 的過程當中,kubectl 工具多是最經常使用的工具了,因此當咱們花費大量的時間去研究和學習 Kuernetes 的時候,那麼咱們就很是有必要去了解下如何高效的使用它了。node
從用戶角度來講,kubectl 就是控制 Kubernetes 的駕駛艙,它容許你執行全部可能的 Kubernetes 操做;從技術角度來看,kubectl 就是 Kubernetes API 的一個客戶端而已。mysql
Kubernetes API 是一個 HTTP REST API 服務,該 API 服務纔是 Kubernetes 的真正用到的用戶接口,因此 Kubernetes 經過該 API 進行實際的控制。這也就意味着每一個 Kubernetes 的操做都會經過 API 端點暴露出去,固然也就能夠經過對這些 API 端口進行 HTTP 請求來執行相應的操做。因此,kubectl 最主要的工做就是執行 Kubernetes API 的 HTTP 請求。nginx
工具使用參數git
get #顯示一個或多個資源 describe #顯示資源詳情 create #從文件或標準輸入建立資源 update #從文件或標準輸入更新資源 delete #經過文件名、標準輸入、資源名或者 label 刪除資源 log #輸出 pod 中一個容器的日誌 rolling-update #對指定的 RC 執行滾動升級 exec #在容器內部執行命令 port-forward #將本地端口轉發到 Pod proxy #爲 Kubernetes API server 啓動代理服務器 run #在集羣中使用指定鏡像啓動容器 expose #將 SVC 或 pod 暴露爲新的 kubernetes service label #更新資源的 label config #修改 kubernetes 配置文件 cluster-info #顯示集羣信息 api-versions #以」組/版本」的格式輸出服務端支持的 API 版本 version #輸出服務端和客戶端的版本信息 help #顯示各個命令的幫助信息 ingress-nginx #管理 ingress 服務的插件(官方安裝和使用方式)
使用相關配置web
# Kubectl自動補全 $ source <(kubectl completion zsh) $ source <(kubectl completion bash) # 顯示合併後的 kubeconfig 配置 $ kubectl config view # 獲取pod和svc的文檔 $ kubectl explain pods,svc
分步驟建立sql
# yaml kubectl create -f xxx-rc.yaml kubectl create -f xxx-service.yaml # json kubectl create -f ./pod.json cat pod.json | kubectl create -f - # yaml2json kubectl create -f docker-registry.yaml --edit -o json
一次性建立docker
kubectl create -f xxx-service.yaml -f xxx-rc.yaml
根據目錄下全部的 yaml 文件定義內容進行建立json
kubectl create -f <目錄>
使用 url 來建立資源api
kubectl create -f https://git.io/vPieo
查看全部 Node 或 Namespace 對象
kubectl get nodes kubectl get namespace
查看全部 Pod 對象
# 查看子命令幫助信息 kubectl get --help # 列出默認namespace中的全部pod kubectl get pods # 列出指定namespace中的全部pod kubectl get pods --namespace=test # 列出全部namespace中的全部pod kubectl get pods --all-namespaces # 列出全部pod並顯示詳細信息 kubectl get pods -o wide kubectl get replicationcontroller web kubectl get -k dir/ kubectl get -f pod.yaml -o json kubectl get rc/web service/frontend pods/web-pod-13je7 kubectl get pods/app-prod-78998bf7c6-ttp9g --namespace=test -o wide kubectl get -o template pod/web-pod-13je7 --template={{.status.phase}} # 列出該namespace中的全部pod包括未初始化的 kubectl get pods,rc,services --include-uninitialized
查看全部 RC 對象
kubectl get rc
查看全部 Deployment 對象
# 查看所有deployment kubectl get deployment # 列出指定deployment kubectl get deployment my-app
查看全部 Service 對象
kubectl get svc kubectl get service
查看不一樣 Namespace 下的 Pod 對象
kubectl get pods -n default kubectl get pods --all-namespace
顯示 Pod 詳細信息
kubectl describe pods/nginx kubectl describe pods my-pod kubectl describe -f pod.json
查看 Node 詳細信息
kubectl describe nodes c1
查看 RC 關聯的 Pod 信息
kubectl describe pods <rc-name>
滾動更新
# 滾動更新 pod frontend-v1 kubectl rolling-update frontend-v1 -f frontend-v2.json # 更新資源名稱並更新鏡像 kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2 # 更新 frontend pod 中的鏡像 kubectl rolling-update frontend --image=image:v2 # 退出已存在的進行中的滾動更新 kubectl rolling-update frontend-v1 frontend-v2 --rollback # 強制替換; 刪除後從新建立資源; 服務會中斷 kubectl replace --force -f ./pod.json # 添加標籤 kubectl label pods my-pod new-label=awesome # 添加註解 kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq
修補資源
# 部分更新節點 kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}' # 更新容器鏡像;spec.containers[*].name 是必須的,由於這是合併的關鍵字 kubectl patch pod valid-pod -p \ '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}' Scale 資源 # Scale a replicaset named 'foo' to 3 kubectl scale --replicas=3 rs/foo # Scale a resource specified in "foo.yaml" to 3 kubectl scale --replicas=3 -f foo.yaml # If the deployment named mysql's current size is 2, scale mysql to 3 kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # Scale multiple replication controllers kubectl scale --replicas=5 rc/foo rc/bar rc/baz
刪除資源對象
基於 xxx.yaml 文件刪除 Pod 對象
# yaml文件名字按照你建立時的文件一致 kubectl delete -f xxx.yaml
刪除包括某個 label 的 pod 對象
kubectl delete pods -l name=<label-name>
刪除包括某個 label 的 service 對象
kubectl delete services -l name=<label-name>
刪除包括某個 label 的 pod 和 service 對象
kubectl delete pods,services -l name=<label-name>
刪除全部 pod/services 對象
kubectl delete pods --all kubectl delete service --all kubectl delete deployment --all
編輯資源文件
在編輯器中編輯任何 API 資源
# 編輯名爲docker-registry的service kubectl edit svc/docker-registry
在寄主機上,不進入容器直接執行命令
執行 pod 的 date 命令,默認使用 pod 的第一個容器執行
kubectl exec mypod -- date kubectl exec mypod --namespace=test -- date
指定 pod 中某個容器執行 date 命令
kubectl exec mypod -c ruby-container -- date
進入某個容器
kubectl exec mypod -c ruby-container -it -- bash
直接查看日誌
# 不實時刷新 kubectl logs mypod kubectl logs mypod --namespace=test
查看日誌實時刷新
kubectl logs -f mypod -c ruby-container
!
做者: Escape 連接: https//www.escapelife.site/posts/2b31e1a2.html