1、kubectl 概述
kubectl 是 Kubernetes 集群的命令行工具,通過 kubectl 能夠對集群本身進行管理,並能夠在集群上進行容器化應用的安裝部署。
2、kubectl 命令的語法
kubectl [COMMAND] [TYPE] [NAME] [flags]
(1)COMMAND:指定要對資源執行的操作,例如 create、get、describe 和 delete等
(2)TYPE:指定資源類型,資源類型是大小寫敏感的,開發者能夠以單數、復數和縮略的 形式。例如:
kubectl get pod
kubectl get pods
(3)NAME:指定資源的名稱,名稱也大小寫敏感的。如果省略名稱,則會顯示所有的資源, 例如:
kubectl get pods xoa.nginx-74fcfdc9bb-p9g5m
(4)flags:指定可選的參數。例如,可用-s 或者–server 參數指定 Kubernetes API server 的地址和端口。
3、kubectl常用命令
--dry-run 表示測試,不真正執行命令(測試命令是否正確),去掉該參數即真正執行命令
- create:通過文件名或控制台輸入域創建資源
接受JSON和YAML格式的描述文件 kubectl create -f FILENAME
示例: # 使用pod.json文件創建一個pod $ kubectl create -f ./pod.json # 通過控制台輸入的JSON創建一個pod $ cat pod.json | kubectl create -f -
#創建一個名為xoa.nginx的deployment:
kubectl create deployment xoa.nginx --image=nginx
- expose:輸將資源暴露為新的Kubernetes Service
指定deployment、service、replica set、replication controller或pod ,並使用該資源的選擇器作為指定端口上新服務的選擇器。deployment 或 replica set只有當其選擇器可轉換為service支持的選擇器時,即當選擇器僅包含matchLabels組件時才會作為暴露新的Service。
資源包括(不區分大小寫):
pod(po),service(svc),replication controller(rc),deployment(deploy),replica set(rs)
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]
說明:
--port:POD端口,kubernetes中的服務之間訪問的端口,集群內其他容器可以通過該端口訪問,外部機器不能訪問。
--target-port:容器端口,與制作容器時暴露的端口一致(DockerFile中EXPOSE)
示例:
kubectl expose deployment xoa.nginx --type=NodePort --port=80 --name=xoa-nginx
- run:創建並運行一個或多個容器鏡像。
語法:
run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]
示例:
啟動Tomcat實例:
kubectl run xoa-tomcat --image=tomcat
啟動httpd實例,暴露容器端口80:
kubectl run httpd01 --image=httpd --port=80 --replicas=2
注意:在K8S v1.18.0以后,–-replicas已棄用 ,推薦用 deployment 創建 pods
- get:獲取列出一個或多個資源的信息。
kubectl get namespace(ns) //列出所有命名空間
kubectl get all //列出默認命名空間所有資源信息,后面可以加-n指定命名空間。
kubectl get pods -o wide //列出所有pod信息
kubectl get deployment(deploy) -o wide //列出deployment類型的資源
kubectl get service -o wide //列出所有類型的service
kubectl get componentstatuses(cs) //查看集群狀態信息
kubectl get nodes -o wide //查看集群節點信息
kubectl get replicasets(rs) //查看replicasets類型的資源
kubectl cluster-info //查看集群信息
- edit:使用默認編輯器 編輯服務器上定義的資源。
使用命令行工具獲取的任何資源都可以使用edit命令編輯。edit命令會打開使用KUBE_EDITOR,GIT_EDITOR 或者EDITOR環境變量定義的編輯器,可以同時編輯多個資源,但所編輯過的資源只會一次性提交。edit除命令參數外還接受文件名形式。
文件默認輸出格式為YAML。要以JSON格式編輯,請指定“-o json”選項。
如果在更新資源時報錯,將會在磁盤上創建一個臨時文件來記錄。在更新資源時最常見的錯誤是幾個用戶同時使用編輯器更改服務器上資源,發生這種情況,你需要將你的更改應用到最新版本的資源上,或者更新保存的臨時副本。
語法: edit (RESOURCE/NAME | -f FILENAME)
示例:
kubectl edit deployment xoa.nginx
kubectl edit service xoa-nginx
- delete:通過文件名、控制台輸入、資源名或者label selector刪除資源
通過配置文件名、stdin、資源名稱或label選擇器來刪除資源。
支持JSON和YAML格式文件。可以只指定一種類型的參數:文件名、資源名稱或label選擇器。
有些資源,如pod,支持優雅的(graceful)刪除,因為這些資源一般是集群中的實體,所以刪除不可能會立即生效,這些資源在強制終止之前默認定義了一個周期(寬限期),但是你可以使用--grace-period flag來覆蓋該值,或者通過pass --now設置該周期為1。
如果托管Pod的Node節點已經停止或者無法連接API Server,使用delete命令刪除Pod需等待時間更長。要強制刪除資源,需指定- force flag,且設置周期(寬限期)為0。
如果執行強制刪除Pod,則調度程序會在節點釋放這些Pod之前將新的Pod放在這些節點上,並使之前Pod立即被逐出。
注意:執行delete命令時不會檢查資源版本,如果在執行delete操作時有人進行了更新操作,那么更新操作將連同資源一起被刪除。
語法: delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)])
示例:
kubectl delete pod xoa-tomcat
-
label:更新(增加、修改或刪除)資源上的 label(標簽)。
label 必須以字母或數字開頭,可以使用字母、數字、連字符、點和下划線,最長63個字符。
如果--overwrite 為 true,則可以覆蓋已有的 label,否則嘗試覆蓋 label 將會報錯。
如果指定了--resource-version,則更新將使用此資源版本,否則將使用現有的資源版本。
語法:
label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
示例:
給名為foo的Pod添加label unhealthy=true:
kubectl label pods foo unhealthy=true
給 namespace 中的所有 pod 添加 label:
kubectl label pods --all status=unhealthy
刪除名為“bar”的label 。(使用“ - ”減號相連):
kubectl label pods foo bar-
- rollout:對資源進行管理,可用資源包括:deployments、daemonsets
子命令
history(查看歷史版本)
pause(暫停資源)
resume(恢復暫停資源)
status(查看資源狀態)
undo(回滾版本)
語法:
rollout SUBCOMMAND
示例:
回滾到之前的deployment:
kubectl rollout undo deployment/abc
- scale:擴容或縮容 Deployment、ReplicaSet、Replication Controller或 Job 中Pod數量。
語法: scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)
示例:
將名為foo中的pod副本數設置為3:
kubectl scale --replicas=3 rs/foo
將由“foo.yaml”配置文件中指定的資源對象和名稱標識的Pod資源副本設為3:
kubectl scale --replicas=3 -f foo.yaml
如果當前副本數為2,則將其擴展至3:
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql
設置多個RC中Pod副本數量:
kubectl scale --replicas=5 rc/foo rc/bar rc/baz
- explain:查看資源類型對應的Apiversion
示例:
kubectl explain deployment
kubectl explain pod
http://docs.kubernetes.org.cn/