kubectl 基本命令


目錄

一、kubectl 基本命令

1、基本信息查看

2、項目的生命周期

  2.1 創建kubectl run 命令

  2.2 發布kubectl expose 命令

  2.3 更新kubectl set

  2.4 回滾kubectl rollout

  2.5 刪除kubectl delete

3、金絲雀發布(Canary Release)

二、聲明式管理方法

1、查看資源配置清單

2、解釋資源配置清單

3、修改資源配置清單並應用

4、刪除資源配置清單

 

 

 

 

 

 

一、kubectl 基本命令

  陳述式資源管理方法:

  • kubernetes集群管理集群資源的唯一入口是通過相應的方法調用apiserver的接口
  • kubectl是官方的CLI命令行工具,用於與apiserver進行通信,將用戶在命令行輸入的命令,組織並轉化為apiserver能識別的信息,進而實現管理k8s各種資源的一種有效途徑
  • kubectl的命令大全:kubectl --help
  • k8s中文文檔:http://docs.kubernetes.org.cn/683.html
  • 對資源的增、刪、查操作比較方便,但對改的操作就不容易了

1、基本信息查看

#1.查看版本信息
kubectl version

#2.查看資源對象簡寫
kubectl api-resources 

#3.查看集群信息
kubectl cluster-info

#4.配置kubectl自動補全
source <(kubectl completion bash)

#5.node節點查看日志
journalctl -u kubelet -f

 

 

   1.1 

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的資源

 

   1.2 查看master節點狀態

kubectl get componentstatuses
kubectl get cs

 

   1.3 查看命名空間

kubectl get name space
kubectl get ns

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

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

kubectl get all [-n default]

   1.5 創建命名空間app

kubectl create ns gxd
kubectl get ns

  1.6 刪除命名空間app

kubectl delete namespace gxd
kubectl get ns

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

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

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

kubectl describe deployment nginx-test -n kube-public
kubectl describe pod nginx-test-65c98cd596-jct2g -n kube-public

 

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

kubectl get pods -n kube-public

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

kubectl exec -it nginx-test-65c98cd596-jct2g bash -n kube-public

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

kubectl delete pod nginx-test-65c98cd596-jct2g -n kube-public

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

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

    1.13 擴容

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

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

   1.14 刪除副本控制器

kubectl delete deployment nginx-test -n kube-public
#或者
kubectl delete deployment/nginx-test -n kube-public

2、項目的生命周期

  2.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.2 發布kubectl expose 命令

#1.將資源暴露為新的Service
kubectl expose --help

#2.為deployment的nginx創建service,並通過Service的80端口轉發至容器的80端口上,Service的名稱為nginx-service,類型為NodePort
kubectl expose deployment nginx --port=8000 --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還需要額外的費用。
==========================================================
#3.查看pod網絡狀態詳細信息和Service暴露的端口
kubectl get pods,svc -o wide

#4.查看關聯后端的節點
kubectl get endpoints

#5.查看service的描述信息
kubect1 describe svc nginx

#6.分半在node01和node02節點上操作,查看負載均衡端口
yum install ipvsadm -y
ipvsadm -Ln

#7.在master01主節點分別在3個pod內寫入網頁文件
kubectl exec -it nginx-65fc77987d-bfckn bash
echo '111111' > /usr/share/nginx/html/index.html
kubectl exec -it nginx-65fc77987d-n6rzk bash
echo '222222' > /usr/share/nginx/html/index.html
kubectl exec -it nginx-65fc77987d-pgpfh bash
echo '333333' > /usr/share/nginx/html/index.html

#8.瀏覽器訪問clusterip和nodeport
curl 10.100.72.167:8000
curl 192.168.80.11:31430
curl 192.168.80.12:31430
curl 192.168.80.13:31430

#9.在master01操作 查看訪問日志
kubectl logs nginx-65fc77987d-bfckn
kubectl logs nginx-65fc77987d-n6rzk
kubectl logs nginx-65fc77987d-pgpfh

 

 

 

 

  

  2.3 更新kubectl set

  2.3.1 更改現有應用資源一些信息

kubectl set --help

#//獲取修改模板
kubectl set image --help
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

 

   2.3.2 查看當前nginx 的版本號

curl -I http://192.168.200.10:32742
curl -I http://192.168.200.11:32742
curl -I http://192.168.200.12:32742

   2.3.3 將nginx版本更新為1.15版本

kubectl set image deployment/nginx nginx=nginx:1.15

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

kubectl get pods -w

  2.3.5 再看更新好后的pod的ip會改變

kubectl get pods -o wide

   2.3.6 再看nginx 的版本號

curl -I http://192.168.200.10:32742
curl -I http://192.168.200.11:32742
curl -I http://192.168.200.12:32742

  2.4 回滾kubectl rollout

  2.4.1 對資源進行回滾管理

kubect1 rollout --help

   2.4.2 查看歷史版本

kubectl rollout history deployment/nginx

   2.4.3 執行回滾到上一個版本

kubectl rollout undo deployment/nginx

   2.4.4 執行回滾到指定版本

kubectl rollout undo deployment/nginx --to-revision=3

  2.4.5 檢查回滾狀態

kubectl rollout status deployment/nginx

  2.5 刪除kubectl delete

  2.5.1 刪除副本控制器

kubectl delete deployment.apps/nginx

  2.5.2 刪除service

kubectl delete service/nginx-service

kubectl get all

 3、金絲雀發布(Canary Release)

  Deployment控制器支持自定義控制更新過程中的滾動節奏,如“暫停(pause)”或“繼續(resume)”更新操作。比如等待第一批新的Pod資源創
  建完成后立即暫停更新過程,此時,僅存在一部分新版本的應用,主體部分還是舊的版本。然后,再篩選一小部分的用戶請求路由到新版本的Pod應用,繼續觀察能否穩定地按期望的方式運行。確定沒問題之后再繼續完成余下的Pod資源滾動更新,否則立即回滾更新操作。這就是所謂的金絲雀發布。

  3.1 更新deployment 的版本,並配置暫停deployment

kubectl run nginx --image=nginx:1.14 --port=80 --replicas=3
   
kubectl expose deployment nginx --port=8000 --target-port=80 --name=nginx-service --type=NodePort  #先創建資源並創建3個副本

kubectl set image deployment nginx nginx=nginx:1.16 && kubectl rollout pause deployment nginx      #更新並暫停

kubectl rollout status deployment nginx    #觀察更新狀態

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

kubectl get pods,svc -o wide
kubectl get pods -w

curl [-I] 10.100.129.74:8000
curl [-I] 192.168.200.11:31269

 

 

  3.3 確保更新的pod沒問題了,繼續更新

kubectl rollout resume deployment nginx

   3.4 查看最后的更新情況

kubectl get pods -w

curl [-I] 10.100.129.74:8000
curl [-I] 192.168.200.11:31269

二、聲明式管理方法

  • 適合於對資源的修改操作
  • 聲明式資源管理方法依賴於資源配置清單文件對資源進行管理 資源配置清單文件有兩種格式: yaml (人性化,易讀),json (易於api接口解析)
  • 對資源的管理,是通過事先定義在統–資源配置清單內,再通過陳述式命令應用到k8s集群里
  • 語法格式: kubectl create/app1y/delete -f xxxx.yaml

1、查看資源配置清單

kubectl get deployment nginx -o yaml

 

2、解釋資源配置清單

kubectl explain deployment.status   #資源清單里的字段

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

 

 

 

3、修改資源配置清單並應用

  方法一:離線修改

  修改yaml文件,並用kubectl apply -f xxxx.yaml文件使之生效

  注意:當apply不生效時,先使用delete清除資源,再apply創建資源

kubectl get service nginx-service -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-service

  在線編輯資源配置清單並保存退出即時生效(如port:8888)

  PS:此修改方式不會對yaml文件內容修改

 

 

 

4、刪除資源配置清單

  陳述式刪除

kubectl delete service nginx-service

  聲明式刪除

kubectl delete -f nginx-svc.yaml

 

 


免責聲明!

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



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