詳解kubectl資源管理命令(陳述式)
一、陳述式對(duì)象管理
1、基本概念
- kubernetes集群管理資源的唯一入口是通過(guò)相應(yīng)的方法調(diào)用apiserver的接口。
- kubectl是官方的CTL命令行工具,用于與apiserver進(jìn)行通信,將用戶(hù)在命令行輸入的命令,組織并轉(zhuǎn)化為apiserver能識(shí)別的信息,進(jìn)而實(shí)現(xiàn)管理k8s各種資源的一種有效途徑。
kubectl 命令
- kubectl 是kubernetes集群的命令行工具,通過(guò)它能夠?qū)罕旧碛浶怨芾?,并能夠在集群上進(jìn)行容器化應(yīng)用安裝部署。
kubectl命令語(yǔ)法格式如下
- kubernetes中所有的內(nèi)容都抽象為資源,可以通過(guò)kubectl api-resources進(jìn)行查看
kubectl [command] [type] [name] [flags] command: //指定要對(duì)資源執(zhí)行的操作,例如:create、get、delete type: //指定資源類(lèi)型,比如deployment、pod、service name: //指定資源的名稱(chēng),名稱(chēng)大小寫(xiě)敏感 flags: //指定額外的可選參數(shù)
2、基礎(chǔ)命令使用
kubectl logs nginx-cdb6b5b95-fjm2x #查看訪問(wèn)日志 kubectl describe deployment nginx-wl -n kube-public #查看nginx-wl的pod控制器的詳細(xì)信息, kubectl describe pods 【pod名稱(chēng)】 -n kube-public #查看某個(gè)pod的詳細(xì)信息 kubectl version #查看版本信息(服務(wù)端和客戶(hù)端版本都可查看到) kubectl api-resources #查看資源對(duì)象簡(jiǎn)寫(xiě)以及版本 kubectl cluster-info #查看集群信息 source <(kubectl completion bash) //可以將此條命令放入到環(huán)境變量中,每次開(kāi)機(jī)都會(huì)執(zhí)行自動(dòng)補(bǔ)全命令 #配置kubectl 自動(dòng)補(bǔ)全 ###命令放在/etc/profile 或者/root/.bashrc journalctl -u kubelet -f #node節(jié)點(diǎn)查看日志 kubectl get pods -w #持續(xù)監(jiān)聽(tīng)pod的狀態(tài)信息
3、基本信息查看(kubectl get)
kubectl get <resource> [-o wide|json|yaml] [-n namespace] #獲取資源的相關(guān)信息,-o指定輸出格式,-n 指定命令空間 //<resource> :可以是具體資源名稱(chēng),如pods //nginx-xxx: 也可以是資源類(lèi)型,如pod,或all(僅展示幾種核心資源,并不完整)
案例演示
kubectl get pods #查看當(dāng)前默認(rèn)命令空間(defaults)的pods信息 kubectl get pods -n kube-system #查看指定的kube-system命名空間的資源 kubectl get pods -owide #查看默認(rèn)命名空間的pod詳細(xì)信息 kubectl get pods -A 或者 kubectl get pods --all-namespace #查看所有命名空間的pod資源信息 kubecrl get pods -A -owide #查看所有命名空間下的pod資源信息,并顯示詳細(xì)信息 kubectl get pods --show-labels #查看當(dāng)前默認(rèn)的命令空間的下的pods的標(biāo)簽類(lèi)型信息 kubectl get pods --show-labels -A #查看所有命令空間下的標(biāo)簽信息 kubectl get pods -A -l app #查看所有命名空間下,僅顯示標(biāo)簽為app的資源 kubectl get pods -l app=nginx-ydq #查看默認(rèn)命名空間下的標(biāo)簽為nginx-ydq的資源 kubectl get cs #查看服務(wù)組件狀態(tài)信息 kubectl get nodes #查看node節(jié)點(diǎn)集群的信息 kubectl get ns #查看命令空間資源(用于允許不同 命名空間 的 相同類(lèi)型 的資源 重名的) kubectl get deployment #查看deployment的pod控制器 kubectl get all #查看默認(rèn)命名空間下的所有資源 kebectl get svc #查看service信息
常用命令參數(shù)總結(jié)
--all-namespace 或 -A //表示顯示所有的命令空間 --show-labels //顯示所有標(biāo)簽 -l app //僅顯示標(biāo)簽為app的資源 -n //指定命令空間 -owide //顯示詳細(xì)信息
4、增刪等操作
創(chuàng)建pod資源
- 創(chuàng)建pod資源分為兩種,一種為 自主式pod ,一種為 控制器pod
- 自主式pod 創(chuàng)建無(wú)法指定副本數(shù)量,當(dāng)pod掛掉后,不會(huì)進(jìn)行重建,可直接刪除。
- 控制器pod 創(chuàng)建可以設(shè)置副本數(shù)量,且當(dāng)pod掛掉后,pod控制器會(huì)重新創(chuàng)建,要想刪除只能刪除pod控制器。
kubectl create ns app #創(chuàng)建命名空間app kubectl delete ns app #刪除命名空間app kubectl create deployment nginx-wl --image=nginx --port=80 --replicas=2 -n kube-public #在命名空間kube-public創(chuàng)建副本控制器(deployment)來(lái)啟動(dòng)pod,并創(chuàng)建2個(gè)副本(pod名稱(chēng)它會(huì)隨機(jī)) //刪除它只能刪除的pod控制器,刪除控制器后,pod控制器下面的所有pod都會(huì)刪除 ###注意?。。?!pod控制器,不能單獨(dú)創(chuàng)建,基本是和創(chuàng)建pod一起制定創(chuàng)建pod控制器。 kubectl run nginx-wl2 --image=nginx -n kube-public #直接創(chuàng)建自主式pod(掛掉后不會(huì)重建,沒(méi)有pod控制器) //可以直接刪除這個(gè)pod,它沒(méi)有pod控制器 kubectl describe deployment nginx-wl -n kube-public #查看nginx-ydq的pod控制器的詳細(xì)信息, kubectl describe pods 【pod名稱(chēng)】 -n kube-public #查看某個(gè)pod的詳細(xì)信息 kubectl delete deployment nginx-wl -n kube-public #刪除pod控制器,(里面所有的pod都會(huì)被刪除) kubectl delete pod nginx-wl2 -n kube-public #刪除自主式pod。 kubectl delete pod 【pod名稱(chēng)】 -n 【命名空間】 --force --grace-period=0 #如pod無(wú)法刪除,總是處于terminate狀態(tài),則要強(qiáng)行刪除 //grace-period 表示過(guò)度存活期,默認(rèn)30s,在刪除pod之前允許POD慢慢終止其上的容器進(jìn)程,從而優(yōu)雅退出,0表示立即終止
5、登錄pod中的容器
kubectl exec -it 【pod名稱(chēng)】 bash #可以跨主機(jī)登錄到指定的pod中的容器中,docker exec只能在容器所在主機(jī)上登錄
6、擴(kuò)容縮容pod控制器的pod
可以根據(jù)指定的數(shù)量,創(chuàng)建或縮小任意的pod的數(shù)量。
kubectl scale deployment nginx-wl --replicas=4 -n kube-public #擴(kuò)容 kubectl scale deployment nginx-wl --replicas=2 -n kube-public #縮容
7、刪除副本控制器
kubectl delete deployment nginx-wl -n kube-public kubectl delete deployment/nginx-wl -n kube-public
二、創(chuàng)建項(xiàng)目實(shí)例
項(xiàng)目的生命周期:創(chuàng)建-->發(fā)布-->更新-->回滾-->刪除
1、創(chuàng)建 kubectl create命令
- 創(chuàng)建并運(yùn)行一個(gè)或多個(gè)容器鏡像。
- 創(chuàng)建一個(gè)deployment 或job 來(lái)管理容器。
//幫助 kubectl create --help //啟動(dòng) nginx 實(shí)例,暴露容器端口 80,設(shè)置副本數(shù) 3 kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3 kubectl get pods ##查看創(chuàng)建的pods kubectl get all
2、發(fā)布 kubectl expose命令
Kubernetes為什么要用Service:
- 一方面是因?yàn)?Pod 的 IP 不是固定的(Pod可能會(huì)重建)
- 另一方面則是因?yàn)橐唤M Pod 實(shí)例之間總會(huì)有負(fù)載均衡的需求
對(duì)于容器應(yīng)用而言,Kubernetes 提供了基于 VIP(虛擬IP) 的網(wǎng)橋的方式訪問(wèn) Service,再由 Service 重定向到相應(yīng)的 Pod。
service 的 type 類(lèi)型:
- ClusterIP:提供一個(gè)集群內(nèi)部的虛擬IP以供Pod訪問(wèn)(service默認(rèn)類(lèi)型)
- NodePort:在每個(gè)Node上打開(kāi)一個(gè)端口以供外部訪問(wèn),Kubernetes將會(huì)在每個(gè)Node上打開(kāi)一個(gè)端口并且每個(gè)Node的端口都是一樣的,通過(guò) NodeIp:NodePort 的方式Kubernetes集群外部的程序可以訪問(wèn)Service。每個(gè)端口只能是一種服務(wù),端口范圍只能是 30000-32767。
- LoadBalancer:通過(guò)設(shè)置LoadBalancer映射到云服務(wù)商提供的LoadBalancer地址。這種用法僅用于在公有云服務(wù)提供商的云平臺(tái)上設(shè)置Service的場(chǎng)景。通過(guò)外部的負(fù)載均衡器來(lái)訪問(wèn),通常在云平臺(tái)部署LoadBalancer還需要額外的費(fèi)用。在service提交后,Kubernetes就會(huì)調(diào)用CloudProvider在公有云上為你創(chuàng)建一個(gè)負(fù)載均衡服務(wù),并且把被代理的Pod的IP地址配置給負(fù)載均衡服務(wù)做后端。
- externalName:將service名稱(chēng)映射到一個(gè)DNS域名上,相當(dāng)于DNS服務(wù)的CNAME記錄,用于讓Pod去訪問(wèn)集群外部的資源,它本身沒(méi)有綁定任何的資源。
將資源暴露為新的 Service。
kubectl expose --help //為deployment的nginx創(chuàng)建service,并通過(guò)Service的80端口轉(zhuǎn)發(fā)至容器的80端口上,Service的名稱(chēng)為nginx-service,類(lèi)型為NodePort kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort //查看pod網(wǎng)絡(luò)狀態(tài)詳細(xì)信息和 Service暴露的端口 kubectl get pods,svc -o wide
3、更新 kubectl set
#更改現(xiàn)有應(yīng)用資源一些信息。 kubectl set --help #查看當(dāng)前 nginx 的版本號(hào) curl -I 192.168.247.10:30801 #將nginx 版本更新為 1.15 版本 kubectl set image deployment/nginx nginx=nginx:1.15 #處于動(dòng)態(tài)監(jiān)聽(tīng) pod 狀態(tài),由于使用的是滾動(dòng)更新方式,所以會(huì)先生成一個(gè)新的pod,然后刪除一個(gè)舊的pod,往后依次類(lèi)推 kubectl get pods -w #再看更新好后的 Pod 的 ip 會(huì)改變 kubectl get pods -o wide #再看 nginx 的版本號(hào) curl -I 192.168.247.10:30801
4、回滾 kubectl rollout
#對(duì)資源進(jìn)行回滾管理 kubectl rollout --help *查看歷史版本 kubectl rollout history deployment/nginx *執(zhí)行回滾到上一個(gè)版本 kubectl rollout undo deployment/nginx *執(zhí)行回滾到指定版本 kubectl rollout undo deployment/nginx --to-revision=1 *檢查回滾狀態(tài) kubectl rollout status deployment/nginx
5、刪除 kubectl delete
#刪除副本控制器 kubectl delete deployment/nginx #刪除service kubectl delete svc/nginx-service kubectl get all
三、金絲雀發(fā)布
Deployment控制器支持自定義控制更新過(guò)程中的滾動(dòng)節(jié)奏,如“暫停(pause)”或“繼續(xù)(resume)”更新操作。比如等待第一批新的Pod資源創(chuàng)建完成后立即暫停更新過(guò)程,此時(shí),僅存在一部分新版本的應(yīng)用,主體部分還是舊的版本。然后,再篩選一小部分的用戶(hù)請(qǐng)求路由到新版本的Pod應(yīng)用,繼續(xù)觀察能否穩(wěn)定地按期望的方式運(yùn)行。確定沒(méi)問(wèn)題之后再繼續(xù)完成余下的Pod資源滾動(dòng)更新,否則立即回滾更新操作。這就是所謂的金絲雀發(fā)布。
1、更新deployment的版本,并配置暫停deployment
kubectl set image deployment/nginx nginx=nginx:1.14 && kubectl rollout pause deployment/nginx kubectl rollout status deployment/nginx #觀察更新?tīng)顟B(tài)
2、將已更新的Pod進(jìn)行端口單獨(dú)暴露
##創(chuàng)建一個(gè)新的service kubectl expose deployment nginx-zz --name=hew-nginx.servicet=80 --target-port=80 --type=NodePort ##查看相關(guān)信息 kubectl get endpoints ##獲取到新Pod的子標(biāo)簽 kubectl get pod --show-labels -owide、 ##獲取新service的yaml文件 kubectl edit svc new-nginx
驗(yàn)證:
3、確保更新的pod沒(méi)問(wèn)題了,繼續(xù)更新
kubectl rollout resume deployment/nginx
4、查看最后的更新情況
kubectl get pods -w
到此這篇關(guān)于kubectl資源管理命令(陳述式)的文章就介紹到這了,更多相關(guān)kubectl資源管理命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
常見(jiàn)Kubernetes kubectl命令使用詳解
這篇文章主要為大家介紹了常見(jiàn)Kubernetes kubectl命令使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08k8s安裝calico時(shí)如何選擇網(wǎng)卡問(wèn)題
這篇文章主要介紹了k8s安裝calico時(shí)如何選擇網(wǎng)卡問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07k8s部署并測(cè)試ingress-nginx的詳細(xì)過(guò)程
這篇文章主要介紹了k8s部署并測(cè)試ingress-nginx的詳細(xì)過(guò)程,本文通過(guò)一個(gè)demo示例給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-04-04Rainbond使用Dockerfile構(gòu)建便捷應(yīng)用運(yùn)行流程
這篇文章主要為大家介紹了Rainbond使用Dockerfile構(gòu)建便捷應(yīng)用運(yùn)行流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04kubernetes k8s 存儲(chǔ)動(dòng)態(tài)掛載配置詳解
這篇文章主要為大家介紹了kubernetes k8s 存儲(chǔ)動(dòng)態(tài)掛載配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11k8s實(shí)現(xiàn)身份認(rèn)證策略及過(guò)程解析
這篇文章主要為大家介紹了k8s實(shí)現(xiàn)身份認(rèn)證策略及過(guò)程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02