一、查看
1、查看集群狀態
# 查看客戶端及服務端程序版本信息
kubectl version --short=true
# 查看集群信息
kubectl cluster-info
2、查看資源對象
# 查看命名空間
kubectl get namespace
# 查看所有 pod 列表, -n 后跟 namespace, 查看指定的命名空間,-o wide 查看詳細信息
kubectlget pod
kubectlget pod -n kube
kubectlget pod -o wide
# -l 標簽選擇器(多個的話是與邏輯)
kubectl get pods -l app=example
# -w 監視資源變動信息
kubectl get pod-w
# 以yaml格式查看Pod詳細信息
kubectlgetpod
# 以json格式查看Pod詳細信息
kubectlgetpod
# 查看deployment下pod列表
kubectl get pod -n xxx | grep ${deploymentName}
通用格式:kubectl get {$sourceType} --all-namespaces
常用的資源類型({$resourceType})有:
node (節點)
po(pod)
ns(命名空間namespace)
instance(實例)
svc(service服務):定義了一個 Pod 的邏輯分組,一種可以訪問它們的策略(微服務)
cm(configMap):存儲全局配置變量的,將分布式系統中不同模塊的環境變量統一到一個對象中管理
ds(deamonSet):在每臺計算節點上運行一個守護進程(如日志采集等),有時pod處于pending可能是因為某個deamonSet沒起來
deploy(deployment):用于啟動(上線/部署)一個Pod或者ReplicaSet。這個如果有問題,那么其他依賴它來部署的資源就肯定不會正常了
ingress : 通過http或https暴露集群內部service,給service提供外部URL、負載均衡、SSL/TLS能力以及基于host的方向代理
# 查看 endpoint 列表 kubectlget endpoints
pv:存儲卷
pvc:存儲卷消費者
3、查看詳情
describe類似于get,同樣用于獲取resource的相關信息。不同的是,get獲得的是更詳細的resource個性的詳細信息,describe獲得的是resource集群相關的信息。
describe命令同get類似,但是describe不支持-o選項,對于同一類型resource,describe輸出的信息格式,內容域相同。
注:如果發現是查詢某個resource的信息,使用get命令能夠獲取更加詳盡的信息。但是如果想要查詢某個resource的狀態,
如某個pod并不是在running狀態,這時需要獲取更詳盡的狀態信息時,就應該使用describe命令。
# 顯示 Pod 的詳細信息, 特別是查看 Pod 無法創建的時候的日志、Pod的運行事件,比如鏡像有沒有拉取,容器有沒有創建
kubectl describe pod
kubectl describe deployment
kubectl describe service
# 顯示 Node 的詳細信息
kubectldescribe node [node ip]
# 顯示由deployment管理的Pod的信息
kubectl describe pods
# 查看pod中所有容器的信息
kubectl describe pod/{pod_name} -n {namespace}
4、查看日志
# 實時查看日志
kubectl logs -f
# 若 pod 有多個容器,加 -c 指定容器
kubectl logs-f
# kubectl attach
類似于docker attach的功能,用于取得實時的類似于kubectl logs的信息
5、查看kubernetes配置
6、查看資源對象擁有的字段
kubectlexplain pod
kubectlexplain pod.apiVersion
7、查看節點標簽
kubectlget node --show-labels
為kubernetes集群的resource打標簽,如前面實例中提到的為rc打標簽對rc分組。還可以對nodes打標簽,這樣在編排容器時,
可以為容器指定nodeSelector將容器調度到指定lable的機器上,如如果集群中有IO密集型,計算密集型的機器分組,可以將不同的機器打上不同標簽,
然后將不同特征的容器調度到不同分組上。在1.2之前的版本中,使用kubectl get nodes則可以列出所有節點的信息,包括節點標簽,
1.2版本中不再列出節點的標簽信息,如果需要查看節點被打了哪些標簽,需要使用describe查看節點的信息。
8、文件交換
kubectl cp 用于pod和外部的文件交換,比如如下示例了如何在進行內外文件交換
在pod中創建一個文件message.log
[[email protected] tmp]# kubectl exec -it mysql-478535978-1dnm2 sh # pwd / # cd /tmp # echo "this is a message from `hostname`" >message.log # cat message.log this is a message from mysql-478535978-1dnm2 # exit 拷貝出來并確認 [[email protected]-1 tmp]# kubectl cp mysql-478535978-1dnm2:/tmp/message.log message.log tar: Removing leading `/' from member names [[email protected]-1 tmp]# cat message.log this is a message from mysql-478535978-1dnm2 更改message.log并拷貝回pod [[email protected]-1 tmp]# echo "information added in `hostname`" >>message.log [[email protected]-1 tmp]# cat message.log this is a message from mysql-478535978-1dnm2 information added in ku8-1 [[email protected]-1 tmp]# kubectl cp message.log mysql-478535978-1dnm2:/tmp/message.log 確認更改后的信息 [[email protected]-1 tmp]# kubectl exec mysql-478535978-1dnm2 cat /tmp/message.log this is a message from mysql-478535978-1dnm2 information added in ku8-1
二、創建/修改資源
1、kubectl create/apply
# 以標準輸入創建資源
kubectl create deployment nginx --image=nginx:1.14
# 以文件創建資源
kubectl create -f my-nginx.yaml # create 創建一次
kubectlapply -f my-nginx.yaml # apply 可創建多次
2、kubectl replace/patch
用于對已有資源進行更新、替換。如前面create中創建的nginx,當我們需要更新resource的一些屬性的時候,
如修改副本數量,增加、修改label,更改image版本,修改端口等。都可以直接修改原yaml文件,然后執行replace命令(刪除原有資源然后重新構建資源)
kubectl replace -f
注意:yaml文件里的metadata的name不能修改(是按照name作為資源的唯一標識)
# 如對正在運行的容器的屬性進行在線修改(不刪除容器),比如修改pod的label等
kubectl patch pod rc-nginx-2-kpiqt -p '{"metadata":{"labels":{"app":"nginx-3"}}}'
3、kubectl edit
# edit提供了另一種更新resource源的操作,通過edit能夠靈活的在一個common的resource基礎上,發展出更過的significant resource。
例如,使用edit直接更新前面創建的pod的命令為:
[root@master1 ~]# kubectl edit po rc-nginx-btv4j
上面命令的效果等效于:
kubectl get po rc-nginx-btv4j -o yaml >> /tmp/nginx-tmp.yaml vim /tmp/nginx-tmp.yaml /*do some changes here */ kubectl replace -f /tmp/nginx-tmp.yaml
4、kubectl set
# kubectl set resources 用于設置資源的一些范圍限制
資源對象中的Pod可以指定計算資源需求(CPU-單位m、內存-單位Mi),即使用的最小資源請求(Requests),
限制(Limits)的最大資源需求,Pod將保證使用在設置的資源數量范圍。
對于每個Pod資源,如果指定了Limits(限制)值,并省略了Requests(請求),則Requests默認為Limits的值。
可用資源對象包括(支持大小寫):replicationcontroller、deployment、daemonset、job、replicaset。
例如:
# 將deployment的nginx容器cpu限制為“200m”,將內存設置為“512Mi” $ kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi # 設置所有nginx容器中 Requests和Limits $ kubectl set resources deployment nginx --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi # 刪除nginx中容器的計算資源值 $ kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0 # kubectl set image 用于更新現有資源的容器鏡像 # 將deployment中的nginx容器鏡像設置為“nginx:1.9.1” $ kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1 # 所有deployment和rc的nginx容器鏡像更新為“nginx:1.9.1” $ kubectl set image deployments,rc nginx=nginx:1.9.1 --all # 將daemonset abc的所有容器鏡像更新為“nginx:1.9.1” $ kubectl set image daemonset abc *=nginx:1.9.1 # 從本地文件中更新nginx容器鏡像 $ kubectl set image -f path/to/file.yaml nginx=nginx:1.9.1 --local -o yaml
5、kubectl label、annotate
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 # 給名為foo的Pod修改label 為 'status' / value 'unhealthy',且覆蓋現有的value $ kubectl label --overwrite pods foo status=unhealthy # 給 namespace 中的所有 pod 添加 label $ kubectl label pods --all status=unhealthy # 僅當resource-version=1時才更新 名為foo的Pod上的label $ kubectl label pods foo status=unhealthy --resource-version=1 # 刪除名為“bar”的label 。(使用“ - ”減號相連) $ kubectl label pods foo bar-
annotate命令:更新一個或多個資源的Annotations信息。也就是注解信息,可以方便的查看做了哪些操作。
Annotations由key/value組成。
Annotations的目的是存儲輔助數據,特別是通過工具和系統擴展操作的數據,更多介紹在這里。
如果--overwrite為true,現有的annotations可以被覆蓋,否則試圖覆蓋annotations將會報錯。
如果設置了--resource-version,則更新將使用此resource version,否則將使用原有的resource version。
語法:annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
例:
# 更新Pod“foo”,設置annotation “description”的value “my frontend”,如果同一個annotation多次設置,則只使用最后設置的value值 $ kubectl annotate pods foo description='my frontend' # 根據“pod.json”中的type和name更新pod的annotation $ kubectl annotate -f pod.json description='my frontend' # 更新Pod"foo",設置annotation“description”的value“my frontend running nginx”,覆蓋現有的值 $ kubectl annotate --overwrite pods foo description='my frontend running nginx' # 更新 namespace中的所有pod $ kubectl annotate pods --all description='my frontend running nginx' # 只有當resource-version為1時,才更新pod 'foo' $ kubectl annotate pods foo description='my frontend running nginx' --resource-version=1 # 通過刪除名為“description”的annotations來更新pod 'foo'。 # 不需要 -overwrite flag。 $ kubectl annotate pods foo description-
三、啟動Pod
# 在集群中創建、啟動一個指定的鏡像
[root@ku8-1 tmp] # kubectl run nginx --image=nginx:1.16 --port=80 --replicas=1
deployment "nginx" created
[root@ku8-1 tmp] #
從提示看到創建了一個deployment
kubernetes將鏡像運行在pod中以方便實施卷和網絡共享等管理,使用get pods可以清楚的看到生成了一個pod
[root@ku8-1 tmp] # kubectl get pods
NAME READY STATUS RESTARTS AGE
sonarqube-1880671902-s3fdq 1/1 Running 0 6m
[root@ku8-1 tmp] #
鏈接:https://www.cnblogs.com/ailiailan/p/14565429.html
-
程序
+關注
關注
117文章
3787瀏覽量
81069 -
命令
+關注
關注
5文章
684瀏覽量
22031 -
客戶端
+關注
關注
1文章
290瀏覽量
16693
原文標題:kubectl常用命令
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論