K8S 中 kubectl 命令


一、kubectl 基本命令

1、陳述式資源管理方法:

1、kubernetes集群管理集群資源的唯一入口是通過相應的方法調用apiserver的接口

2、kubectl 是官方的CLI命令行工具,用於與apiserver 進行通信,將用戶在命令行輸入的命令,組織並轉化為apiserver能識別的信息,進而實現管理k8s 各種資源的一種有效途徑

3.、kubectl 的命令大全

kubectl --help

k8s中文文檔: http://docs.kubernetes.org.cn/683.html

4、對資源的增、刪、查操作比較方便,但對改的操作就不容易了

//查看k8s版本信息

kubectl version

  

//查看資源對象簡寫

kubectl api-resources

   

//查看集群信息

[root@master ~]# kubectl cluster-info

  

//配置kubectl自動補全

source <(kubectl completion bash)

  

//node節點查看日志

journalctl -u kubectl -f

 

2、聲明式資源管理辦法

通過yaml資源配置清單文件在實現資源的管理

kubectl create/apply -f *.yaml  

二、基本信息查看

kubectl get <resource> [-o wide | json | yaml] [-n namespace]  

獲取資源的相關信息,-n指定命令空間,-o指定輸出格式

resource可以是具體資源名稱,如pod nginx -xxx;也可以是資源類型,如pod; 或者all (僅展示幾種核心資源,並不完整)

--all-namespaces 或-A :表示顯示所有命令空間,

--show-labels :顯示所有標簽

-l app:僅顯示標簽為app的資源

-l app=nginx :僅顯示包含app標簽, 且值為nginx的資源

//查看master 節點狀態

kubectl get componentstatuses
kubectl get cs

  

//查看命令空間

kubectl get namespace
kubectl get ns

  

//命令空間的作用:用於允許不同 命令空間的相同類型的資源重名

//查看default命名空間的所有資源

kubectl get all [-n default]

  

//創建命名空間app

kubectl create ns app
kubectl get ns

  

//刪除命名空間app

kubectl delete namespace app
kubectl get ns

  

//在命名空間kube-public 創建副本控制器( deployment) 來啟動Pod (nginx-test)

kubectl create deployment nginx-test --image=nginx -n kube-public

  

//描述某個資源的詳細信息

kubectl describe deployment nginx-test -n kube-public
kubectl describe pod nginx-test -d47f99cb6-hv6gz -n kube-public

  

//查看命名空間kube-public中的pod信息

kubectl get pods -n kube-public

  

//kubectl exec可以跨主機登錄容器,docker exec 只能在容器所在主機上登錄

kubectl exec -it nginx-wl-d47f99cb6-hv6gz bash -n kube-public

  

//刪除(重啟) pod資源, 由於存在deployment/rc之類的副本控制器,刪除pod也會重新拉起來

kubectl delete pod nginx-wl-d47f99cb6-hv6gz -n kube-public

  

//若pod無法刪除,總是處於terminate狀態, 則要強行刪除pod

kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0  

#grace-period表示過渡存活期,默認30s,在刪除pod之前允許POD慢慢終止其上的容器進程,從而優雅退出,0表示立即終u止pod

 

//擴縮容

kubectl scale deployment nginx-test --replicas=2 -n kube-public

   

#縮容

kubectl scale deployment nginx-test --replicas=1 -n kube-public

  

//刪除副本控制器(兩種表示方法)

kubectl delete deployment nginx-test -n kube-public
kubectl delete deployment/nginx-test -n kube-public

  

三、項目的生命周期

生命周期:創建 —>> 發布 —>> 更新 —>> 回滾 —>> 刪除

1、創建kubectl run命令

●創建並運行一個或多個容器鏡像

●創建一個deployment或job來管理容器

kubectl run --help

//啟動nginx 實例,暴露容器端口80,設置副本數3

kubectl run nginx --image=nginx:1.14 --port=80 --replicas=3

kubectl get pods
kubectl get all

  

2、發布kubectl expose命令

●將資源暴露為新的Service

kubectl expose --help

//為deployment的nginx創建service, 並通過Service的80端口轉發至容器的80端口上,Service的名稱為nginx-service, 類型為NodePort
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort  

-----------------------------------------------
Kubernetes之所以需要Service, 一方面是因為Pod的IP 不是固定的(Pod可能會重建),另一-方面則是因為- -組Pod實例之間總會有負載均衡的需求。

Service通過label Selector實現的對一組的Pod的訪問。

對於容器應用而言,Kubernetes 提供了基於VIP (虛擬IP)的網橋的方式訪問 Service, 再由Service 重定向到相應的Pod。

service的類型:

●ClusterIP:提供一個集群內部的虛擬IP以供Pod訪問( service默認類型)

NodePort:在每個Node.上打開一個端口以供外部訪問,Kubernetes將會在每個Node.上打開一個端口並且每個Node的端口都是一樣的,通過NodeIP:NodePort的方式Kubernetes集群外部的程序可以訪問Service

注:每個端口只能是一種服務,端口范圍只能是30000-32767

●LoadBalancer:通過外部的負載均衡器來訪問,通常在雲平台部署LoadBalancer還需要額外的費用
-----------------------------------------------

//查看pod網絡狀態詳細信息和Service暴露的端口

kubectl get pods,svc -o wide

  

//查看關聯后端的節點

kubectl get endpoints

  

//查看service 的描述信息

kubectl describe svc nginx

  

//在node01 節點上操作,查看負載均衡端口

yum install ipvsadm -y
ipvsadm -Ln

/外部訪問的IP和端口

TCP 192.168.80.11:44847 rr

  

//pod集群組內部訪問的IP和端口

TCP 10.0.0.189:80 rr  

//在node02 節點上操作,同樣方式查看負載均衡端口

yum install ipvsadm -y
ipvsadm -Ln
TCP 192.168.29.70:31741 rr

TCP 10.0.0.189:80 rr

curl 10.0.0.189
curl 192.168.229.70:31741

 

   

//在master01操作 查看訪問日志

kubect1 logs nginx-cdb6b5b95-fjm2x
kubectl logs nginx-cdb6b5b95-g28wz
kubectl logs nginx-cdb6b5b95-x4m24

  

3、更新kubect1 set
●更改現有應用資源一些信息

kubectl set --help  

//獲取修改模板

kubect1 set image --he1p
Examp1es:
# Set a deployment's nginx container image to 'nginx:1.9.1', and its busybox
container image to 'busybox'.
kubectl set image deploynent/nginx busybox=busybox nginx=nginx:1.9.1  

//查看當前nginx 的版本號

curl -I http://192.168.80.11:44847
curl -I http://192.168.80.12:44847  

//將nginx 版本更新為1.15版本

kubect1 set image deployment/nginx nginx=nginx:1.15

  

//處於動態監聽pod狀態,由於使用的是滾動更新方式,所以會先生成--個新的pod,然后刪除--個舊的pod,往后依次類推

kubectl get pods -w

  

//再看更新好后的Pod的ip會改變

kubectl get pods -o wide

  

//再看nginx 的版本號

curl -I http://192.168.80.11:44847
curl -I http://192.168.80.12:44847

見上面的圖,已查看  

4、回滾kubect1 rollout
●對資源進行回滾管理

kubect1 rollout --he1p  

//查看歷史版本

kubectl rollout history deployment/nginx

  

//執行回滾到上一個版本

kubectl rollout undo deployment/nginx

  

//執行回滾到指定版本

kubectl rol1out undo deployment/nginx --to-revision=1

  

//檢查回滾狀態

kubectl rollout status deployment/nginx

  

5、刪除kubectl delete
//刪除副本控制器

kubectl delete deployment/nginx

  

//刪除service

kubectl delete svc/nginx-service

kubectl get all

四、金絲雀發布(Canary Release)——陳述式管理方法

Deployment控制器支持自定義控制更新過程中的滾動節奏,如“暫停(pause)”或“繼續(resume)”更新操作。

比如等待第一批新的Pod資源創建完成后立即暫停更新過程,此時,僅存在一部分新版本的應用,主體部分還是舊的版本。然后,再篩選一小部分的用戶請求路由到新版本的Pod應用,繼續觀察能否穩定地按期望的方式運行。

確定沒問題之后再繼續完成余下的Pod資源滾動更新,否則立即回滾更新操作。這就是所謂的金絲雀發布。

(1)更新deployment的版本,並配置暫停deployment

kubectl set image deployment/nginx nginx=nginx:1.16 && kubectl rollout pause deployment/nginx

kubectl rollout status deployment/nginx

  

#觀察更新狀態

(2)監控更新的過程,可以看到已經新增了一個資源,但是並未按照預期的狀態去刪除一個舊的資源, 就是因為使用了pause暫停命令

kubectl get pods -w

curl [-I] 10.0.0.189
curl [-I] 192.168.80.11:44847

   

(3)確保更新的pod沒問題了,繼續更新

kubectl rollout resume deployment/nginx

  

(4)查看最后的更新情況

kubectl get pods -W

curl [-I] 10.0.0.189
curl [-I] 192.168.80.11:44847

     

五、聲明式管理方法

1.適合於對資源的修改操作

2.聲明式資源管理方法依賴於資源配置清單文件對資源進行管理

資源配置清單文件有兩種格式: yaml (人性化,易讀),json (易於api接口解析)

3.對資源的管理,是通過事先定義在統–資源配置清單內,再通過陳述式命令應用到k8s集群里

4.語法格式: kubectl create/app1y/delete -f xxxx.yaml

kubectl create 和 kubectl apply區別

kubectl create -f xxx.yaml (不建議使用,無法更新,必須先delete)

kubectl apply -f xxx.yaml (創建+更新,可以重復使用)  

如果yaml文件中的kind值為deployment,那么上面這兩個命令都可以創建一個deployment,生成相應數量的pod

區別:

kubectl create:

(1)kubectl create命令,是先刪除所有現有的東西,重新根據yaml文件生成新的。所以要求yaml文件中的配置必須是完整的

(2)kubectl create命令,用同一個yaml 文件執行替換replace命令,將會不成功,fail掉。

kubectl apply:

kubectl apply命令,根據配置文件里面列出來的內容,升級現有的。所以yaml文件的內容可以只寫需要升級的屬性

//查看資源配置清單

kubectl get deployment nginx -o yaml

  

//解釋資源配置清單

kubectl explain deployment.metadata

kubectl get service nginx -o yaml
kubectl explain service.metadata

 service是相同的方法查看,省略圖  

//修改資源配置清單並應用

離線修改:

修改yaml文件,並用kubectl apply -f xxxx.yaml文件使之生效
注意:當apply不生效時, 先使用delete清除資源,再apply創建資源

kubectl get service nginx -o yaml > nginx-svc.yaml
vim nginx-svc.yaml
#修改port: 8080
kubectl delete -f nginx-svc.yaml
kubectl apply -f nginx-svc.yaml
kubectl get svc

  

在線修改:
直接使用kubectl edit service nginx
在線編輯資源配置清單並保存退出即時生效(如port:888)
PS:此修改方式不會對yaml文件內容修改

 

 

//刪除資源配置清單
陳述式刪除:

kubectl delete service nginx  

聲明式刪除:

kubectl delete -f nginx-svc.yaml

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM