kubectl
kubectl 是 Kubernetes 的命令行工具(CLI),是 Kubernetes 用戶和管理員必備的管理工具。
kubectl 提供了大量的子命令,方便管理 Kubernetes 集群中的各種功能。這裏不再羅列各種子命令的格式,而是介紹下如何查詢命令的幫助
kubectl -h查看子命令列表kubectl options查看全局選項kubectl <command> --help查看子命令的幫助kubectl [command] [PARAMS] -o=<format>設置輸出格式(如 json、yaml、jsonpath 等)kubectl explain [RESOURCE]查看資源的定義
配置
使用 kubectl 的第一步是配置 Kubernetes 集群以及認證方式,包括
cluster 信息:Kubernetes server 地址
用戶信息:用戶名、密碼或密鑰
Context:cluster、用戶信息以及 Namespace 的組合
示例
kubectl config set-credentials myself --username=admin --password=secret
kubectl config set-cluster local-server --server=http://localhost:8080
kubectl config set-context default-context --cluster=local-server --user=myself --namespace=default
kubectl config use-context default-context
kubectl config view常用命令格式
創建:
kubectl run <name> --image=<image>或者kubectl create -f manifest.yaml查詢:
kubectl get <resource>更新
kubectl set或者kubectl patch刪除:
kubectl delete <resource> <name>或者kubectl delete -f manifest.yaml查詢 Pod IP:
kubectl get pod <pod-name> -o jsonpath='{.status.podIP}'容器內執行命令:
kubectl exec -ti <pod-name> sh容器日誌:
kubectl logs [-f] <pod-name>導出服務:
kubectl expose deploy <name> --port=80Base64 解碼:
注意,kubectl run 僅支持 Pod、Replication Controller、Deployment、Job 和 CronJob 等幾種資源。具體的資源類型是由參數決定的,默認爲 Deployment:
Pod
--restart=Never
Replication Controller
--generator=run/v1
Deployment
--restart=Always
Job
--restart=OnFailure
CronJob
--schedule=<cron>
命令行自動補全
Linux 系統 Bash:
MacOS zsh
自定義輸出列
比如,查詢所有 Pod 的資源請求和限制:
日誌查看
kubectl logs 用於顯示 pod 運行中,容器內程序輸出到標準輸出的內容。跟 docker 的 logs 命令類似。
注:kubectl 只可以查看單個容器的日誌,如果想要同時查看多個 Pod 的日誌,可以使用 stern。比如:
stern --all-namespaces -l run=nginx。
連接到一個正在運行的容器
kubectl attach 用於連接到一個正在運行的容器。跟 docker 的 attach 命令類似。
在容器內部執行命令
kubectl exec 用於在一個正在運行的容器執行命令。跟 docker 的 exec 命令類似。
多容器 Pod 可通過
kubectl.kubernetes.io/default-containerannotation 配置 kubectl 命令的默認容器。
端口轉發
kubectl port-forward 用於將本地端口轉發到指定的 Pod。
也可以將本地端口轉發到服務、複製控制器或者部署的端口。
API Server 代理
kubectl proxy 命令提供了一個 Kubernetes API 服務的 HTTP 代理。
可以通過代理地址 http://localhost:8080/api/ 來直接訪問 Kubernetes API,比如查詢 Pod 列表
注意,如果通過 --address 指定了非 localhost 的地址,則訪問 8080 端口時會報未授權的錯誤,可以設置 --accept-hosts 來避免這個問題( 不推薦生產環境這麼設置 ):
文件拷貝
kubectl cp 支持從容器中拷貝,或者拷貝文件到容器中
注意:文件拷貝依賴於 tar 命令,所以容器中需要能夠執行 tar 命令
kubectl drain
它會刪除該 NODE 上由 ReplicationController, ReplicaSet, DaemonSet, StatefulSet or Job 創建的 Pod
不刪除 mirror pods(因爲不可通過 API 刪除 mirror pods)
如果還有其它類型的 Pod(比如不通過 RC 而直接通過 kubectl create 的 Pod)並且沒有 --force 選項,該命令會直接失敗
如果命令中增加了 --force 選項,則會強制刪除這些不是通過 ReplicationController, Job 或者 DaemonSet 創建的 Pod
有的時候不需要 evict pod,只需要標記 Node 不可調用,可以用 kubectl cordon 命令。
恢復的話只需要運行 kubectl uncordon NODE 將 NODE 重新改成可調度狀態。
權限檢查
kubectl auth 提供了兩個子命令用於檢查用戶的鑑權情況:
kubectl auth can-i檢查用戶是否有權限進行某個操作,比如
kubectl auth reconcile自動修復有問題的 RBAC 策略,如
模擬其他用戶
kubectl 支持模擬其他用戶或者組來進行集群管理操作,比如
這實際上就是在請求 Kubernetes API 時添加了如下的 HTTP HEADER:
查看事件(events)
kubectl 插件
kubectl 插件提供了一種擴展 kubectl 的機制,比如添加新的子命令。插件可以以任何語言編寫,只需要滿足以下條件即可
插件放在
~/.kube/plugins或環境變量KUBECTL_PLUGINS_PATH指定的目錄中插件的格式爲
子目錄 / 可執行文件或腳本且子目錄中要包括plugin.yaml配置文件
比如
你也可以使用 krew 來管理 kubectl 插件。
原始 URI
kubectl 也可以用來直接訪問原始 URI,比如要訪問 Metrics API 可以
kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodeskubectl get --raw /apis/metrics.k8s.io/v1beta1/podskubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes/<node-name>kubectl get --raw /apis/metrics.k8s.io/v1beta1/namespaces/<namespace-name>/pods/<pod-name>
附錄
kubectl 的安裝方法
Last updated