k8s的陳述式資源管理:
命令行:kubectl命令行工具
優(yōu)點(diǎn):90%以上的場(chǎng)景都可以滿(mǎn)足
對(duì)資源的增,刪,查比較方便,對(duì)改不是很友好
缺點(diǎn):
命令比較冗長(zhǎng),復(fù)雜,難記
聲明式:
k8s當(dāng)中的yaml文件來(lái)實(shí)現(xiàn)資源管理------聲明式
GUI:圖形化工具的管理。
1、kubectl命令的詳解? ? 查看? ?? ?部署? ? ? 查看pod的情況(詳細(xì)的信息,日志? 發(fā)布和回滾)
Kubernetes kubectl 命令表 _ Kubernetes(K8S)中文文檔_Kubernetes中文社區(qū)
kubectl version
查看k8s的版本
kubectl api-resources
查看所有api的資源對(duì)象的名稱(chēng)(簡(jiǎn)寫(xiě))
kubectl cluster-info??
查看k8s的集群信息
kubectl get ComponentStatus(cs)
查看master節(jié)點(diǎn)的狀態(tài)
基本信息查看
kubectl get pod
查看默認(rèn)命名空間內(nèi)的pod的信息
kubectl get ns?
查看當(dāng)前集群所有的命名空間
kubectl get pod -n kube-system
查看指定命名空間內(nèi)的pod需要加-n 命名空間的名稱(chēng)
kubectl get pod -o wide
查看默認(rèn)命名空間內(nèi)的pod的詳細(xì)信息
kubectl get pod -o wide -n kube-system
查看指定命名空間內(nèi)pod的詳細(xì)信息
kubectl get node
查詢(xún)節(jié)點(diǎn)的信息和狀態(tài)
kubectl get node -o wide
查看node節(jié)點(diǎn)的詳細(xì)信息
查看已經(jīng)部署好的pod節(jié)點(diǎn)的詳細(xì)信息
kubectl get pod可以查到的describe都可以看到
kubectl describe pod nginx-6799fc88d8-f9c8g(容器id)
查看指定pod的詳細(xì)信息
例:查看etcd-master01的詳細(xì)kube-system
kubectl describe pod -n?kube-system(9:31)
如何查看pod內(nèi)部的日志
kubectl logs nginx-6799fc88d8-f9c89
-f 動(dòng)態(tài)查看日志
kubectl logs -n kube-system
查看指定命名空間內(nèi)的pod資源
創(chuàng)建一個(gè)命名空間
kubectl create namespace(ns)guoqi
刪除命名空間
kubectl delete ns guoqi
刪除指定pod的命名空間
kubectl delete pod nginx-6799fc88d8-f9c89
要先聲明動(dòng)作+指定對(duì)象+指定操作對(duì)象的名稱(chēng)
create delete get? ? ns? pod? service? ? guoqi
不是默認(rèn)命名空間還要加? -n 指定命名空間
deployment部署pod:
陳述式部署:命令行
聲明式:yaml文件部署
滾動(dòng)更新:不是一次性的把所有pod全部部署,而是一個(gè)個(gè)來(lái)。pod的更新時(shí)使用,逐步的引入新的pod,逐步的減少舊的pod
自我修復(fù):如果有pod節(jié)點(diǎn)發(fā)生故障,deployment會(huì)自動(dòng)啟動(dòng)新的pod來(lái)進(jìn)行代替
回滾:如果更新有問(wèn)題,deployment會(huì)提供還原點(diǎn),可以手動(dòng)還原到未更新前的狀態(tài)。
擴(kuò)容和縮容:deployment可以隨時(shí)調(diào)整pod的數(shù)量,以適應(yīng)流量的變化。
上述的功能必須是基于deployment創(chuàng)建的服務(wù)才可以。絕大數(shù)的pod都是使用deployment來(lái)創(chuàng)建的
kubectl get deployments.apps
kubectl get deployments.apps -n kube-system
kubectl get daemonsets.apps? -n name(9:50)
daemonset:不能通過(guò)命令行創(chuàng)建,只能在yaml文件當(dāng)中定義這種創(chuàng)建方式
daemonsets:后臺(tái)運(yùn)行創(chuàng)建,在每個(gè)節(jié)點(diǎn)上都會(huì)創(chuàng)建一個(gè)相同方式的,相同版本的容器運(yùn)行的pod。
一般都是依賴(lài)環(huán)境和重要組件,一般也不會(huì)對(duì)這些資源進(jìn)行操作。
kubectl create deployment nginx-dn 在當(dāng)前的命名空間里不能重復(fù)
kubectl create deployment nginx --image=nginx
kubectl create deployment nginx-dn?--image=nginx
kubectl create ns guoqi
kubectl create deployment nginx-dn?--image=nginx? --replicas=3 -n guoqi
kubectl get pod -n guoqi
注:如果是基于deployment方式創(chuàng)建的pod,或者是dameonset方式創(chuàng)建的pod,也就是由控制器創(chuàng)建的pod,使用delete刪除pod是刪不掉的,相當(dāng)于重啟pod
要先刪除控制器,控制器(deployment)一旦刪除了,基于這個(gè)控制器創(chuàng)建的pod都會(huì)被一并銷(xiāo)毀
如無(wú)特殊需要一般不刪除
不是基于控制器創(chuàng)建的,會(huì)被直接刪除掉
刪除之前,要先查看哪些是基于deployment控制器創(chuàng)建的,否則刪除就真的沒(méi)了
遠(yuǎn)程進(jìn)入節(jié)點(diǎn)容器
kubectl get pod -o wide
kubectl exec -it nginx-dn-6d6cd9c7c5-j7ffr? bash
echo 123 > /usr/share/nginx/html/index.html
curl 10.244.1.7
注:docker的exec只能在本機(jī)內(nèi)部使用,不能跨主機(jī),kubectl exec可以跨主機(jī)進(jìn)入容器
kubectl create deployment nginx --image=nginx -n guoqi
那么如今進(jìn)去命名空間進(jìn)行創(chuàng)建操作呢?
范圍命名空間的資源都要加-n
10:41
kubec delete pod ngi-dn-? --force --grace-peroid=0
grace-period:表示過(guò)度存活期,默認(rèn)是30秒。可以讓pod優(yōu)雅的結(jié)束容器內(nèi)的進(jìn)程,
-o:表示
kubectl delete pod nginx-dn -
kubectl? delete pod nginx-dn --grace-period=0
如果pod一直卡在Terminating狀態(tài)
加--force主要是用于(強(qiáng)制)結(jié)束卡在銷(xiāo)毀狀態(tài)的pod。(10:49)
如何對(duì)基于控制器(deployment)創(chuàng)建的pod進(jìn)行擴(kuò)縮容
擴(kuò)容:
kubectl scale deployment nginx-dn --replicas=3
縮容:
kubectl scale deployment nginx-dn --replicas=1
創(chuàng)建pod時(shí),并沒(méi)有指定副本數(shù),后續(xù)也可以對(duì)他的副本數(shù)進(jìn)行修改。
如何把服務(wù)的service進(jìn)行發(fā)布:
kubectl get pods
kubectl create deployment nginx --image=nginx:1.10 --replicas=3
現(xiàn)在我們基于nginx1.10創(chuàng)建了
service是由類(lèi)型的
如何查看service類(lèi)型
kubectl get svc
查看不同命名空間的svc情況,加-n指定
kubectl get svc kube-system(11:00)
service 的類(lèi)型:
ClusterIP:創(chuàng)建service的默認(rèn)類(lèi)型,提供一個(gè)集群內(nèi)的的虛擬ip地址,這是service的默認(rèn)類(lèi)型。通過(guò)這個(gè)虛擬ip可以直接訪(fǎng)問(wèn)pod的資源,無(wú)法對(duì)外提供訪(fǎng)問(wèn)。
NodePort:會(huì)在每個(gè)node節(jié)點(diǎn)上都開(kāi)放一個(gè)相同的端口。外部可以通過(guò)node的本機(jī)ip+端口,訪(fǎng)問(wèn)service資源。這是集群外部訪(fǎng)問(wèn)service資源的一種方式。四層代理的方式(ip+端口)(七層代理:ingress)。
nodeip:nodeport
隨機(jī)指派,也可以指定 端口范圍只能在30000-32767
基于deployment創(chuàng)建的pod可以使用的方式:
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
--port=80? service集群的端口
--target-port=80 port內(nèi)部容器的端口
kubectl get svc 查看一下創(chuàng)建的service
類(lèi)型 Nodeport
10.96.232.240 集群內(nèi)部的ip地址,外部是不可以訪(fǎng)問(wèn)這個(gè)ip地址的。
80:對(duì)應(yīng)的是內(nèi)部的service的端口
32426:和內(nèi)部的service的80端口做映射。
nginx:80------->service:80-------->service和本機(jī)的32436端口做映射
kubectl create deployment nginx1 --image=nginx? --replicas=3
kubectl expose deployment nginx1 --port=8080 --target-port=1314 --name=nginx-service-type=NodePort
kubectl expose deployment nginx1 --port=8080 --target-port=80?--name=nginx-service-type=NodePort
pod內(nèi)部的容器的端口是固定的,--port是service和容器映射的端口,可以是任意(11:20)
容器內(nèi)部的服務(wù)的端口--target-port=80是固定的,不能隨便指定,但是--port可以隨便指定
kubectl edit svc nginx-service
kubectl ecit svc nginx1-service
LoadBalancer:如果service的類(lèi)型設(shè)定為L(zhǎng)oadBalancer,映射地址(云平臺(tái)提供LoadBalancer
的地址)這種用法僅用于公有云服務(wù)供應(yīng)商在云平臺(tái)上設(shè)置的service的場(chǎng)景,實(shí)現(xiàn)負(fù)載均衡。
LoadBalancer這個(gè)地址是要付費(fèi)的。
創(chuàng)建好了service,指定類(lèi)型為L(zhǎng)oadBalancer,會(huì)給你提供一個(gè)地址來(lái)代理pod內(nèi)部的ip地址。
11:45
ExternalName:DNS映射,給service分配一個(gè)域名,通過(guò)域名來(lái)訪(fǎng)問(wèn)后端pod資源。ExternalName的service類(lèi)型,不能提供負(fù)載均衡。必須要設(shè)置一個(gè)LoadBalancer的地址才可以實(shí)現(xiàn)。
kubec expose deployment nginx1 --port=8081 --target-port=80?
12:00
service的四種類(lèi)型
ExterName做映射,NodePort對(duì)外提供訪(fǎng)問(wèn)
cluster默認(rèn)類(lèi)型,只用于內(nèi)部訪(fǎng)問(wèn)
LoadBalancer要花錢(qián)的
更新和回滾以及發(fā)布的方式:
項(xiàng)目的生命周期:
創(chuàng)建---------發(fā)布---------更新---------回滾---------刪除
以nginx為例
curl - 192.168.233.91:30000
更新:
kubectl? set image deployment nginx1 nginx=nginx:1.10
回滾:
查看回滾點(diǎn)
kubectl rollout history deployment nginx1
數(shù)字的大小決定了距離上一次操作的遠(yuǎn)近,數(shù)字越大,就是你最近的一次操作。
kubectl set image deployment nginx1 nginx=nginx:1.15
回滾的命令:
指定還原點(diǎn)
kubectl rollout undo deployment nginx1 --to-revision=1
kubectl
kubectl get all
查看集群內(nèi)部是所有信息(pod使用的鏡像,service,deployment)
-o wide -n kube-system
查看指定命名空間內(nèi)的信息文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-764580.html
注:set是更新的時(shí)候加文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-764580.html
到了這里,關(guān)于k8s的陳述式資源管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!