kubectl常用命令
1、kubectl get 顯示資源
## 查看pod列表,若pod后不指定名稱空間(namespace),則默認為default名稱空間 kubectl get pod ## 查看當前rc和service信息 kubectl get rc,svc ## 查看當前deployment kubectl get deployment ## -n 為指定名稱空間(namespace) kubectl get pod -n kube-system ## -o wide 表示查看pod詳細信息,包括ip地址,node節點等 kubectl get pod -o wide ## -w 表示實時輸出pod列表,類似於於tail -f命令名形式 kubectl get pod -o wide -w ## 將此命令的輸出結果格式化顯示,-o 指定輸出格式 kubectl get pod <pod-name> -o yaml
2、kubectl describe 顯示描述
## 查看某個node節點的詳細描述 kubectl describe node <node-name> ## 查看某個pod的詳細描述,特別是查看 pod 無法創建的時候的日志 kubectl describe pod <pod-name>
3、kubectl logs 輸出容器在pod中的日志
## 查看某pod內的容器日志,-f 為持續輸出 kubectl logs -f <pod-name> ## 查看pod內指定的某個容器的日志,-c 指定容器名稱 kubectl log <pod-name> -c <container_name>
4、kubectl create 通過配置文件名或stdin創建一個集群資源對象
## 配置文件支持JSON 與 YAML格式 ## 通過文件創建pod,-f 指定文件 kubectl create -f <FILENAME> ## 創建deployment/namespace/service等 kubectl create deployment/namespace/service ## 通過stdin創建一個pod cat pod.json | kubectl create -f - ## API版本為v1的JSON格式的docker-registry.yaml文件創建資源 kubectl create -f docker-registry.yaml --edit --output-version=v1 -o json
5、kubectl run 創建並運行指定的鏡像
## 語法描述 kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] ## 啟動一個nginx實例 ## 並暴露端口80(此處僅僅是暴露端口,不同於docker中的-p)若不暴露,也能訪問 ## 指定副本數為5個,--replicas kubectl run nginx --image=nginx --port=80 --replicas=5 ## 啟動hazelcast實例,並設置環境變量 kubectl run hazelcast --image=hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"
6、kubectl expose 指定deployment、service、rs、replication controller或pod,並將它們暴露為一個新的Kubernetes Service
## 語法 kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] ## 為rc的nginx創建service,並通過service的80端口轉發至容器的8000端口上 kubectl expose rc nginx --port=80 --target-port=8000 ## 為nginx-controller.yaml中所指定的type和name標識的RC創建service kubectl expose -f nginx-controller.yaml --port=80 --target-port=8000 ## 為deployment的nginx-deployment創建service kubectl expose deployment nginx-deployment --port=20000 --target-port=80
7、kubectl edit 編輯服務器中的資源
使用命令行工具獲取的任何資源都可以使用edit命令編輯。edit命令會打開使用KUBE_EDITOR,GIT_EDITOR 或者EDITOR環境變量定義的編輯器,可以同時編輯多個資源,但所編輯過的資源只會一次性提交。edit除命令參數外還接受文件名形式。
文件默認輸出格式為YAML。要以JSON格式編輯,請指定“-o json”選項。
如果在更新資源時報錯,將會在磁盤上創建一個臨時文件來記錄。在更新資源時最常見的錯誤是幾個用戶同時使用編輯器更改服務器上資源,發生這種情況,你需要將你的更改應用到最新版本的資源上,或者更新保存的臨時副本。
## 語法 kubectl edit (RESOURCE/NAME | -f FILENAME) ## 編輯名為docker-registry的service ## 或名為nginx的pod ## 或名為nginx-deployment的svc kubectl edit svc/docker-registry || pod/nginx || svc/nginx-deployment ##編輯名為“myjob”的service,輸出JSON格式 V1 API版本 kubectl edit job.v1.batch/myjob -o json
8、kubectl delete 通過配置文件名、stdin、資源名稱或lable選擇器刪除資源
## 語法 kubectl delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)]) ## 刪除所有pod kubectl delete pods --all ## 刪除名為“baz”和“foo”的Pod和Service。 kubectl delete pod,svc baz foo ##刪除 Label name = myLabel的pod和Service,-l 指定label kubectl delete pod,svc -l name=myLabel ## 使用 pod.json中指定的資源類型和名稱刪除pod kubectl delete -f ./pod.json ## 根據傳入stdin的JSON所指定的類型和名稱刪除pod cat pod.json | kubectl delete -f -
9、kubectl autoscale 自動設置在k8s集群中運行的pod數量(水平自動伸縮)
指定Deployment、ReplicaSet或ReplicationController,並創建已經定義好資源的自動伸縮器。使用自動伸縮器可以根據需要自動增加或減少系統中部署的pod數量。
## 語法 autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] ## 設置名為foo的deployment,使用默認的自動伸縮策略,指定目標cpu使用率,使其pod數量在2-10之間 kubectl autoscale deployment foo --min=2 --max=10 ## 設置名為foo的RC,使其pod數量維持在1-5之間,CPU使用率維持在80% kubectl autoscale rc foo --max=5 --cpu-percent=80
scale 手動指定k8s集群中副本的數量
## 語法 kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME) ## 設置名為foo的deployment的副本數量為5個 kubectl scale --replicas=5 deployment foo ## 將foo.yaml文件中的副本數修改為3 kubectl scale --replicas=3 -f foo.yaml ## 若deployment/mysql的副本數為2,則將它修改為3個 kubectl scale --current-replicas=2 --replicas=3 deployment/mysql
10、kubectl label 更新(增加、修改或刪除)資源上的label標簽
label 必須以字母或數字開頭,可以使用字母、數字、連字符、點和下划線,最長63個字符。
如果--overwrite 為 true,則可以覆蓋已有的 label,否則嘗試覆蓋 label 將會報錯。
如果指定了--resource-version,則更新將使用此資源版本,否則將使用現有的資源版本。
## 語法 ## 給名為foo的Pod添加label unhealthy=true。 kubectl label pods foo unhealthy=true ## 給 namespace 中的所有 pod 添加 label kubectl label pods --all status=unhealthy -n default ## 刪除名為“bar”的label (使用“ - ”減號相連) kubectl label pods foo bar-
11、kubectl exec 在一個container中執行一個命令
## 語法 kubectl exec -it <pod-name> -c <container-name> -n <namespace> -- shell command ## 創建目錄 kubectl exec -it nginx -c nginx-master -n default -- mkdir -p /usr/local/nginx
12、kubectl cp 拷貝文件或目錄
## 語法 kubectl cp /path/filename |namespace|/|pod-name|/:/container_path/ 或 kubectl cp |namespace|/|pod-name|:/container_path/ /path/
參考資料鏈接:http://docs.kubernetes.org.cn/475.html