kubectl基本命令


一、kubectl基本命令

1.1 基本信息查看

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

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

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

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

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





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


2.查看master節點狀態
kubectl get componentstatuses
kubectl get cs

3.查看命令空間
kubectl get name space
kubectl get ns

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

4.查看default命名空間的所有資源
kubectl get all [-n default]

5.創建命名空間app
kubectl create ns gxd
kubectl get ns
6.刪除命名空間app
kubectl delete namespace gxd
kubectl get ns

7.在命名空間kube-public創建副本控制器(deployment) 來啟動Pod (nginx-test)
kubectl create deployment nginx-test --image=nginx -n kube-public

8.描述某個資源的詳細信息
kubectl describe deployment nginx-test -n kube-public
kubectl describe pod nginx-test-65c98cd596-jct2g -n kube-public


9.查看命名空間kube-public中的pod信息
kubectl get pods -n kube-public
10.kubectl exec可以跨主機登錄容器,docker exec只能在容器所在主機上登錄
kubectl exec -it nginx-test-65c98cd596-jct2g bash -n kube-public
11.刪除(重啟) pod資源,由於存在deployment/rc之類的副本控制器,刪除pod也會重新拉起來
kubectl delete pod nginx-test-65c98cd596-jct2g -n kube-public
12.若pod無法刪除,總是處於terminate狀態, 則要強行刪除pod
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
#grace-period表示過渡存活期,默認30s,在刪除pod之前允許POD慢慢終止其上的容器進程,從而優雅退出,0表示立即終u止pod

13.擴容
kubectl scale deployment nginx-test --replicas=3 -n kube-public
14.擴容
kubectl scale deployment nginx-test --replicas=1 -n kube-public


15.刪除副本控制器
kubectl delete deployment nginx-test -n kube-public
或者kubectl delete deployment/nginx-test -n kube-public

1.2 項目的生命周期:創建–>發布–>更新–>回滾–>刪除

1.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

1.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

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










1.2.3 更新kubectl set

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.查看當前nginx 的版本號
curl -I http://192.168.80.11:31430
curl -I http://192.168.80.12:31430
curl -I http://192.168.80.13:31430

3.將nginx版本更新為1.15版本
kubectl set image deployment/nginx nginx=nginx:1.15

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

5.再看更新好后的Pod的ip會改變
kubectl get pods -o wide


6.再看nginx 的版本號
curl -I http://192.168.80.11:31430
curl -I http://192.168.80.12:31430
curl -I http://192.168.80.13:31430

1.2.4 回滾kubect1 rollout

1.對資源進行回滾管理
kubect1 rollout --help

2.查看歷史版本
kubectl rollout history deployment/nginx

3.執行回滾到上一個版本
kubectl rollout undo deployment/nginx

4.執行回滾到指定版本
kubectl rollout undo deployment/nginx --to-revision=3

5.檢查回滾狀態
kubectl rollout status deployment/nginx

1.2.5 刪除kubectl delete

1.刪除副本控制器
kubectl delete deployment.apps/nginx

2.刪除service
kubectl delete service/nginx-service

kubectl get all

1.3 金絲雀發布(Canary Release)

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

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    #觀察更新狀態


2.監控更新的過程,可以看到已經新增了一個資源,但是並未按照預期的狀去刪除一個舊的資源,就是因為使用了pause暫停命令
kubectl get pods,svc -o wide
kubectl get pods -w

curl [-I] 10.104.98.19:8000
curl [-I] 192.168.80.11:31034



3.確保更新的pod沒問題了,繼續更新
kubectl rollout resume deployment nginx

4.查看最后的更新情況
kubectl get pods -w

curl [-I] 10.104.98.19:8000
curl [-I] 192.168.80.11:31034


二、聲明式管理方法

1.適合於對資源的修改操作
2.聲明式資源管理方法依賴於資源配置清單文件對資源進行管理 資源配置清單文件有兩種格式: yaml (人性化,易讀),json (易於api接口解析) 3.對資源的管理,是通過事先定義在統–資源配置清單內,再通過陳述式命令應用到k8s集群里
4.語法格式: 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.修改資源配置清單並應用
1)離線修改:
修改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
==========================================================
2)在線修改:
直接使用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