k8s 命令使用
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 命令使用