kubectl 命令管理(1)
文章目錄
- 一: 陳述式資源管理方法
- 1.1 查看版本信息和tab補(bǔ)全
- 1.2 基本信息查看
- 二: 項(xiàng)目的生命周期
- 2.1 使用kubectl run 命令創(chuàng)建并允許容器鏡像
- 2.2 使用kubectl expose命令發(fā)布資源
- 2.2.1 發(fā)布
- 2.2.2 查看pod網(wǎng)絡(luò)信息和service暴露端口
- 2.2.3 查看service關(guān)聯(lián)的資源
- 2.2.4 在所有的node節(jié)點(diǎn)上查看負(fù)載均衡端口
- 2.3 使用kubectl set 命令更新資源信息
- 2.3.1 獲取當(dāng)前nginx的版本號(hào)
- 2.3.2 將版本跟新為1.15
- 2.4 使用kubectl rollout 對(duì)資源進(jìn)行回滾
- 2.5 使用kubectl delete刪除資源
- 三: 金絲雀發(fā)布(Canary Release)
- 3.1 什么是金絲雀發(fā)布
- 3.2 配置deployment使用金絲雀發(fā)布
- 3.2.1 發(fā)布nginx服務(wù)
- 3.2.1 更新deployment版本,并配置暫停deploymen
- 3.2.2 訪問(wèn)測(cè)試,查看版本號(hào)
- 3.2.3 在確保更新的pod沒(méi)有問(wèn)題后,繼續(xù)更新
- 3.2.4 查看最后的更新情況
一: 陳述式資源管理方法
陳述式源管理方法:
4·對(duì)資源的增、刪、查操作比較方便,但對(duì)改的操作就不容易了
1.1 查看版本信息和tab補(bǔ)全
#查看版本信息kubectl version #配置kubectl 自動(dòng)補(bǔ)全 source <(kubectl completion bash)#將命令寫(xiě)入到/root/.bashrc(root用戶。如果是全局寫(xiě)入到/etc/bashrc),開(kāi)機(jī)自動(dòng)運(yùn)行 echo 'source <(kubectl completion bash)' >> ~/.bashrc source ~/.bashrc #查看資源對(duì)象簡(jiǎn)寫(xiě) kubectl api-resources #查看集群信息 kubectl cluster-info #動(dòng)態(tài)查看服務(wù)日志信息,此命令是centos7 開(kāi)始有的。-f 表示動(dòng)態(tài)查看 journalctl -u kubelet -f1.2 基本信息查看
kubectl ?get ?[-n ?namespace]? ?[-o ?wide ?| ?json ?|? yaml]
獲取資源的相關(guān)信息
-
-n指定命名空間,
-
-o指定輸出格式
-
resource可以是具體資源名稱,如pod nginx-xxx;也可以是資源類型,如pod;或者all (僅展示幾種核心資源,并不完整)
-
–all-namespaces或-A :表示顯示所有命令空間,
-
–show-labels :顯示所有標(biāo)簽
-
-l ?app :僅顯示標(biāo)簽為app的資源
-
-l ?app-nginx :僅顯示包含app標(biāo)簽,且值為nginx的資源
命名空間作用:用于允許不同 命名空間的相同類型的資源重名
#創(chuàng)建命名空間 test kubectl create ns test#查看命名空間 kubectl get ns#刪除命名空間test kubectl delete ns test #在命名空間kube-public 中創(chuàng)建副本控制器(deployment)來(lái)啟動(dòng)pod(nginx-wx),使用鏡像nginx kubectl create deployment nginx-wx --image=nginx -n kube-public#查看命名空間kube-public 里的所有資源 kubectl get all -n kube-public #描述命名空間kube-public里的deployment 副本控制的詳細(xì)信息 kubectl describe -n kube-public deployment nginx-wx #查看命名空間kube-public 里的pod(nginx-wx....)的詳細(xì)信息 kubectl get pod -n kube-public nginx-wx-7d5458c6f5-hhjmh #查看命名空間kube-public里pod信息(使用pod,pods都可以)kubectl get pods -n kube-public #master節(jié)點(diǎn)上#查看kube-public命名空間里的pod信息。-o 指定輸出方式 [root@master ~]# kubectl get pods -o wide -n kube-public#kubectl exec 跨主機(jī)登錄docker [root@master ~]# kubectl exec -it -n kube-public nginx-wx-7d5458c6f5-hhjmh bash#在容器里創(chuàng)建abc.txt root@nginx-wx-7d5458c6f5-hhjmh:/# touch abc.txt root@nginx-wx-7d5458c6f5-hhjmh:/# ls root@nginx-wx-7d5458c6f5-hhjmh:/# exit#pod所在的node節(jié)點(diǎn)上 #找出對(duì)應(yīng)容器的id [root@node01 ~]# docker ps | grep 'nginx-wx'#進(jìn)入容器查看 [root@node01 ~]# docker exec -it d07e bash root@nginx-wx-7d5458c6f5-hhjmh:/# ls #刪除(重啟)pod資源,由于存在deployment/rc之類的副本控制器,刪除pod 也會(huì)重新拉起來(lái)kubectl delete pod -n kube-public nginx-wx-7d5458c6f5-hhjmh#若pod始終無(wú)法刪除(如一值處于terminatin)可以使用此命令強(qiáng)制刪除kubectl delete pod -n kube-public nginx-wx-7d5458c6f5-rnhzc --force --grace-period=0#grace-period:表示過(guò)度存活期。默認(rèn)時(shí)30s。在刪除pod之前允許pod慢慢的終止其上的容器進(jìn)程。0表示立即終止pod#--force 表示強(qiáng)制 #使用kubectl scale 進(jìn)行擴(kuò)容,縮容; --replicas=4 表示設(shè)置副本數(shù)為4 kubectl scale deployment -n kube-public nginx-wx --replicas=4#設(shè)置副本數(shù)為2 kubectl scale deployment -n kube-public nginx-wx --replicas=2 #刪除kube-public命名空間的副本控制器 nginx-wx kubectl delete deployment -n kube-public nginx-wx #獲取default命名空間里的資源(如果沒(méi)有,就使用create命令創(chuàng)建一個(gè)) kubectl get all#使用logs 查看資源日志 kubectl logs nginx-deployment-86b9454474-254n2二: 項(xiàng)目的生命周期
項(xiàng)目生命周期: 創(chuàng)建—> 發(fā)布------> 更新------>回滾------->刪除
2.1 使用kubectl run 命令創(chuàng)建并允許容器鏡像
- kubectl ? run 命令:
- 創(chuàng)建并運(yùn)行一個(gè)或多個(gè)容器鏡像
- 創(chuàng)建一個(gè)deployment 或 job 來(lái)管理容器
- run 命令會(huì)在后續(xù)版本廢棄。可以使用create命令代替
- kubectl ? run ? --help 查看命令幫助
2.2 使用kubectl expose命令發(fā)布資源
使用kubectl ? expose命令,將資源暴露為新的service:
使用 kubectl ? expose ? --help 獲取幫助
kubenetes之所以需要service
- 一方面因?yàn)閜od的ip不是固定的(pod可能會(huì)重建)
- 另一方面則是因?yàn)橐唤Mpod實(shí)例之間總會(huì)有負(fù)載均衡的需求
- 對(duì)于容器而言,kubeletes提供了基于VIP的網(wǎng)橋方式訪問(wèn)service ,再由service 重定向到相應(yīng)的pod
service的類型:
- ClusterIP:
- 提供一個(gè)集群內(nèi)部的虛擬ip,以供pod訪問(wèn)(service的默認(rèn)類型)
- NodePort:
- 在每個(gè)Node上打開(kāi)一個(gè)端口以供外部訪問(wèn),kubernetes將會(huì)在每個(gè)node上打開(kāi)一個(gè)端口,并在每個(gè)node的端口都是一樣的,
- 通過(guò)NodeIP:NodePort的方式,kubenetes集群外部的程序可以訪問(wèn)service
- LoadBalancer:
- 通過(guò)外部的負(fù)載均衡器來(lái)訪問(wèn),通常在云平臺(tái)部署LoadBalancer還需要額外的費(fèi)用
- 通過(guò)外部的負(fù)載均衡器來(lái)訪問(wèn),通常在云平臺(tái)部署LoadBalancer還需要額外的費(fèi)用
2.2.1 發(fā)布
#為deployment的nginx創(chuàng)建service,并通過(guò)service的80端口轉(zhuǎn)發(fā)至容器的80端口上,service的名稱為nginx-service,類型為NodePort kubectl expose deployment -n kube-public nginx --port=80 --target-port=80 --name=ngin-service --type=NodePort#--port 指定node在service上的端口 #--target 指定 容器在pod 上的端口 #--type 指定類型。默認(rèn)是cluster ip2.2.2 查看pod網(wǎng)絡(luò)信息和service暴露端口
#查看pod網(wǎng)絡(luò)信息和service暴露端口 kubectl get pods,svc -o wide -n kube-public2.2.3 查看service關(guān)聯(lián)的資源
#通過(guò)查看service資源的詳細(xì)信息里的endpoints信息查看關(guān)聯(lián)的后端節(jié)點(diǎn) kubectl describe service -n kube-public ngin-service #直接查看endpoints關(guān)聯(lián)的后端節(jié)點(diǎn) kubectl get endpoints -n kube-public2.2.4 在所有的node節(jié)點(diǎn)上查看負(fù)載均衡端口
yum -y install ipvsadm ipvsadm -Ln #在所有node節(jié)點(diǎn)都可以看到ClusterIP:80的轉(zhuǎn)發(fā)(內(nèi)部訪問(wèn)) #以及可以看到對(duì)應(yīng)node節(jié)點(diǎn)ip:30754(nodeip使用的端口)的轉(zhuǎn)發(fā)(外部訪問(wèn))2.3 使用kubectl set 命令更新資源信息
kubectl ?set :
- 跟新現(xiàn)有資源的一些信息
- kubectl ? set ? --help 獲取幫助信息
2.3.1 獲取當(dāng)前nginx的版本號(hào)
curl -I http://192.168.23.12:30754 curl -I http://192.168.23.13:307542.3.2 將版本跟新為1.15
#查看所有資源信息,找到deployment的資源名 kubectl get all -n kube-public#查看相應(yīng)deployment資源里的容器名 kubectl describe deployment.apps/nginx -n kube-public#使用kubectl set image ,將nginx版本升級(jí)為1.15. #nginx=nginx:1.15 表示容器nginx使用鏡像nginx:1.15 kubectl set -n kube-public image deployment.apps/nginx nginx=nginx:1.15#動(dòng)態(tài)跟蹤 kubectl get pod -n kube-public -w#如果升級(jí)失敗,可能時(shí)因?yàn)榫W(wǎng)絡(luò)問(wèn)題。可以先在node 節(jié)點(diǎn)上,將對(duì)應(yīng)的鏡像拉去下來(lái) curl -I http://192.168.23.12:30754 curl -I http://192.168.23.13:307542.4 使用kubectl rollout 對(duì)資源進(jìn)行回滾
kubectl ?rollout
- 對(duì)資源進(jìn)行回滾
- kubectl ?rollout ?--help 查看幫助文檔
2.5 使用kubectl delete刪除資源
#刪除副本控制器 kubectl delete -n kube-public deployments.apps nginx#刪除service kubectl delete -n kube-public service/ngin-service三: 金絲雀發(fā)布(Canary Release)
3.1 什么是金絲雀發(fā)布
金絲雀發(fā)布,又稱灰度發(fā)布
Deployment控制器支持自定義控制更新過(guò)程中的滾動(dòng)節(jié)奏,如"暫停(pause) "或“繼續(xù)(resume)"更新操作。比如等待第一批新的Pod資源創(chuàng)建完成后立即暫停更新過(guò)程,此時(shí),僅存在一部分新版本的應(yīng)用,主體部分還是舊的版本。
然后,再篩選一小部分的用戶請(qǐng)求路由到新版本的Pod應(yīng)用,繼續(xù)觀察能否穩(wěn)定地按期望的方式運(yùn)行。確定沒(méi)問(wèn)題之后再繼續(xù)完成余下的Pod資源滾動(dòng)更新,否則立即回滾更新操作。這就是所謂的金絲雀發(fā)布。
3.2 配置deployment使用金絲雀發(fā)布
3.2.1 發(fā)布nginx服務(wù)
#使用nginx1.14版本鏡像創(chuàng)建3個(gè)pod kubectl run -n kube-public nginx --image=nginx:1.14 --port=80 --replicas=3#發(fā)布服務(wù) kubectl expose deployment -n kube-public nginx --port=80 --target-port=80 --name=ngin-service --type=NodePort#獲取服務(wù)的pod和service 信息 kubectl get pod,svc -n kube-public#f范圍cluster ip 或者nodeip:nodeport 3次,查看nginx的版本都是1.14.2 curl -I 10.1.216.2113.2.1 更新deployment版本,并配置暫停deploymen
#另開(kāi)一個(gè)master 終端,觀察 kubectl get pods -n kube-public -w#在第一個(gè)master終端將nginx升級(jí)到1.15.1 ,并配置藏聽(tīng) kubectl set image -n kube-public deployment.apps/nginx nginx=nginx:1.15 && \ kubectl rollout -n kube-public pause deployment/nginx#切換到第二個(gè)master終端查看#查看運(yùn)行的pod(此時(shí)有四個(gè)pod在運(yùn)行) kubectl get pods -n kube-public3.2.2 訪問(wèn)測(cè)試,查看版本號(hào)
#訪問(wèn)cluster ip 4 次。查看nginx的版本號(hào) curl -I 10.1.216.2113.2.3 在確保更新的pod沒(méi)有問(wèn)題后,繼續(xù)更新
#讓deployment 繼續(xù)更新 kubectl rollout -n kube-public resume deployment nginx#使用clusterip 訪問(wèn),查看nginx的版本號(hào) curl -I 10.1.216.2113.2.4 查看最后的更新情況
#查看pod 數(shù)量。發(fā)現(xiàn)回到了3個(gè) kubectl get pods -n kube-public #訪問(wèn)3 次以上,查看版本號(hào) curl -I 10.1.216.211總結(jié)
以上是生活随笔為你收集整理的kubectl 命令管理(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: kubeadmin 安装 k8s集群
- 下一篇: kubernetes(k8s)使用声明式