1. 程式人生 > >k8s 命令使用

k8s 命令使用

ctr span kubectl ont ima -- pan 聯系 tro

get

kubectl get po -o wide         #獲取pod運行在哪個節點上的信息。

技術分享圖片

[root@k8s_master ~]# kubectl get po --all-namespaces      #獲取所有pod

技術分享圖片

[root@k8s_master ~]# kubectl get namespace        ###獲取namespace 信息

技術分享圖片

可以使用"kubectl get rc”, “kubectl get svc”, “kubectl get nodes”等獲取其他resource信息。

技術分享圖片

#以jison格式輸出pod的詳細信息

kubectl get po <podname> -o json 

技術分享圖片

describe
describe類似於get,同樣用於獲取resource的相關信息。不同的是,get獲得的是更詳細的resource個性的詳細信息,describe獲得的是resource集群相關的信息。

[root@k8s_master ~]# kubectl describe po nginx-controller-shs0z

技術分享圖片

create

kubectl create -f nginx-rc.yaml

[root@k8s_master ~]#
more nginx-rc.yaml apiVersion: v1 kind: ReplicationController metadata: name: nginx-controller spec: replicas: 2 selector: name: nginx template: metadata: labels: name: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80

創建ReplicationController(rc),rc會創建兩個副本,創建後,使用“kubectl get rc”可以看到一個名為nginx-controller的ReplicationController將被創建,同時“kubectl get po”的結果中會多出兩個前綴為“nginx-controller-”的pod

技術分享圖片

replace

replace命令用於對已有資源進行更新、替換。如前面create中創建的nginx,當我們需要更新resource的一些屬性的時候,如果修改副本數量,增加、修改label,更改image版本,修改端口等。都可以直接修改原yaml文件,然後執行replace命令

kubectl replace -f rc-nginx.yaml

名字不能被更更新。另外,如果是更新label,原有標簽的pod將會與更新label後的rc斷開聯系,有新label的rc將會創建指定副本數的新的pod,但是默認並不會刪除原來的pod。所以此時如果使用get po將會發現pod數翻倍,進一步check會發現原來的pod已經不會被新rc控制

patch

如果一個容器已經在運行,這時需要對一些容器屬性進行修改,又不想刪除容器,或不方便通過replace的方式進行更新。kubernetes還提供了一種在容器運行時,直接對容器進行修改的方式,就是patch命令。
如前面創建pod的label是app=nginx-2,如果在運行過程中,需要把其label改為app=nginx-3,這patch命令如下:

kubectl patch pod rc-nginx-2-kpiqt -p {"metadata":{"labels":{"app":"nginx-3"}}}

Delete

根據resource名或label刪除resource。

kubectl delete -f rc-nginx.yaml 
kubectl delete po rc-nginx-btv4j 
kubectl delete po -lapp=nginx-2

logs

logs命令用於顯示pod運行中,容器內程序輸出到標準輸出的內容。跟docker的logs命令類似。如果要獲得tail -f 的方式,也可以使用-f選項。

kubectl logs rc-nginx-2-kpiqt (pod name)

rolling-update

rolling-update是一個非常重要的命令,對於已經部署並且正在運行的業務,rolling-update提供了不中斷業務的更新方式。rolling-update每次起一個新的pod,等新pod完全起來後刪除一個舊的pod,然後再起一個新的pod替換舊的pod,直到替換掉所有的pod。
rolling-update需要確保新的版本有不同的name,Version和label,否則會報錯 。

kubectl rolling-update rc-nginx-2 -f rc-nginx.yaml

如果在升級過程中,發現有問題還可以中途停止update,並回滾到前面版本

kubectl rolling-update rc-nginx-2 —rollback

scale

scale用於程序在負載加重或縮小時副本進行擴容或縮小,如前面創建的nginx有兩個副本,可以輕松的使用scale命令對副本數進行擴展或縮小。

擴展副本數到4:
kubectl scale rc rc-nginx-3 —replicas=4 rc-nginx-3(rc name)

重新縮減副本數到2:
kubectl scale rc rc-nginx-3 —replicas=2

autoscale

autoscale命令提供了自動根據pod負載對其副本進行擴縮的功能。
autoscale命令會給一個rc指定一個副本數的範圍,在實際運行中根據pod中運行的程序的負載自動在指定的範圍內對pod進行擴容或縮容。如前面創建的nginx,可以用如下命令指定副本範圍在1~4

kubectl autoscale rc rc-nginx-3 —min=1 —max=4

attach

attach命令類似於docker的attach命令,可以直接查看容器中以daemon形式運行的進程的輸出,效果類似於logs -f,退出查看使用ctrl-c。
如果一個pod中有多個容器,要查看具體的某個容器的的輸出,需要在pod名後使用-c containers name指定運行的容器。如下示例的命令為查看kube-system namespace中的nginx-controller-shs0z pod中的nginx容器的輸出。

例:

[root@k8s_master ~]# kubectl attach nginx-controller-shs0z -c nginx -namespace=kube-system

nginx為容器名稱
nginx-controller-shs0z 為pod名稱
- namespace=kube-system    namespace名稱

exec
exec命令同樣類似於docker的exec命令,為在一個已經運行的容器中執行一條shell命令,如果一個pod容器中,有多個容器,需要使用-c選項指定容器。 方法與attach一樣


run
類似於docker的run命令,直接運行一個image。

k8s 命令使用