真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Kubernetes高級進(jìn)階之Node自動(dòng)擴(kuò)容/縮容

                   Kubernetes高級進(jìn)階之Node自動(dòng)擴(kuò)容/縮容
目錄:
1、Cluster AutoScaler云廠商擴(kuò)容/縮容
2、Ansible一鍵自動(dòng)擴(kuò)容Node

1、Cluster AutoScaler
擴(kuò)容:Cluster AutoScaler 定期檢測是否有充足的資源來調(diào)度新創(chuàng)建的 Pod,當(dāng)資源不足時(shí)會(huì)調(diào)用 Cloud Provider 創(chuàng)建新的 Node。
工作流程:定期檢查集群中的資源是否充足的,如果發(fā)現(xiàn)集群資源不夠pod就會(huì)出現(xiàn)pending的狀態(tài),會(huì)等待資源的一個(gè)就緒,如果沒有新的資源沒有釋放出來,它會(huì)一直等待,部署的服務(wù)就不會(huì)提供服務(wù),此時(shí)autoscaler會(huì)檢測到一個(gè)資源的利用率的情況,是不是存在資源的一個(gè)緊缺,存在的話會(huì)調(diào)用云供應(yīng)商provider來創(chuàng)建新的node
Kubernetes高級進(jìn)階之Node自動(dòng)擴(kuò)容/縮容

公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出明溪免費(fèi)做網(wǎng)站回饋大家。

縮容:Cluster AutoScaler 也會(huì)定期監(jiān)測 Node 的資源使用情況,當(dāng)一個(gè) Node 長時(shí)間資源利用率都很低時(shí)(低于 50%)長時(shí)間利用率比較低的資源下線,來進(jìn)行判斷,自動(dòng)將其所在虛擬機(jī)從云服務(wù)商中刪除。此時(shí),將原來上面的pod驅(qū)逐掉,調(diào)度到其他節(jié)點(diǎn)上提供服務(wù)。

Kubernetes高級進(jìn)階之Node自動(dòng)擴(kuò)容/縮容
支持的云提供商:
要是使用它們云廠商的就可以使用它們的的組件解決去用,一般他們都對接完成了。
? 阿里云:https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/alicloud/README.md
? AWS: https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md
? Azure: https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/azure/README.md

小結(jié):
彈性伸縮主要解決的問題是容量規(guī)劃與實(shí)際負(fù)載的矛盾,就是我這批機(jī)器中,其中負(fù)載高了,能不能讓這批服務(wù)器快速的擴(kuò)容,主要是解決這么一個(gè)問題,考驗(yàn)的就是快速的擴(kuò)容和縮容。
就是傳統(tǒng)的這種彈性伸縮放到k8s中,仔細(xì)想想會(huì)遇到兩種問題

1、 機(jī)器規(guī)格不統(tǒng)一造成機(jī)器利用率百分比的碎片化
在k8s集群中不是所有機(jī)器都是一樣的,我們也沒必要都是一樣,其實(shí)k8s已經(jīng)幫我們做好資源的管理了,這些cpu,內(nèi)存都會(huì)作為一個(gè)整體放在資源池中去調(diào)度,對于縮容和擴(kuò)容的情況下,特別是縮容,機(jī)器規(guī)格的不統(tǒng)一,縮容時(shí)可能縮容一些小規(guī)格的機(jī)器,那么很有可能你縮容之后其實(shí)沒有太多的效果,可能你大機(jī)器還沒有去縮容,導(dǎo)致你效果還不是很明顯,如果大規(guī)格機(jī)器縮容的話,可能會(huì)讓你資源的一個(gè)爭搶,可能你資源的冗余不是很多了。

2、 機(jī)器利用率不單純依靠宿主機(jī)計(jì)算
當(dāng)你沒做容器之前,做一個(gè)服務(wù)器的資源的規(guī)劃,內(nèi)存和CPU去申請就完事了,那么在那種情況下做一些縮容擴(kuò)容也比較簡單,比如擴(kuò)容你看你的服務(wù)器的資源是不是到達(dá)80%,90%,然后申請新的機(jī)器就好了,縮容也是如此,看一下資源空閑的整體資源利用率比較低,減少幾臺(tái)還是很容易的,但是到k8s的場景中呢,其實(shí)我們在上面部署的一些應(yīng)用,沒必要太注意服務(wù)器底層的資源了,不關(guān)心我機(jī)器的配置利用率多少,它關(guān)心的是,我申請的資源,我部署的應(yīng)用你能不能給足我就行了,在k8s中容量規(guī)劃是根據(jù)request和limit這兩個(gè)值,request其實(shí)就是在k8s中的一個(gè)配額,你部署一個(gè)應(yīng)用,申請的資源都是通過request去定義的,所以在k8s中就多了一個(gè)維度,request與宿主機(jī)的資源利用率,所以在做縮容擴(kuò)容的時(shí)候要考慮到這一點(diǎn),也就是不能根據(jù)你當(dāng)前的節(jié)點(diǎn)去分配了,因?yàn)槟闵暾埐渴餽equest的這個(gè)配額它即使不用,你也不能說把它去掉,所以要考慮整體request的一個(gè)整體資源的利用率,并且在這個(gè)資源利用率之上保持一定的冗余。

2.2 Ansible擴(kuò)容Node
第三種就是我們?nèi)斯じ深A(yù)的去進(jìn)行擴(kuò)容縮容了,這是普遍自建采用的一種手段
Kubernetes高級進(jìn)階之Node自動(dòng)擴(kuò)容/縮容

1.  觸發(fā)新增Node,要知道要不要去增加一個(gè)節(jié)點(diǎn)。
2.  調(diào)用Ansible腳本部署組件,怎么去準(zhǔn)備好這個(gè)節(jié)點(diǎn),這臺(tái)新機(jī)器有沒有準(zhǔn)備好,有沒有部署這些組件。
3.  檢查服務(wù)是否可用,新加入的組件查看是否是正常的
4.  調(diào)用API將新Node加入集群或者啟用Node自動(dòng)加入
5.  觀察新Node狀態(tài),進(jìn)行監(jiān)控,對于新節(jié)點(diǎn)觀察,運(yùn)行的日志,資源狀態(tài)。
6.  完成Node擴(kuò)容,接收新Pod

模擬擴(kuò)容node節(jié)點(diǎn),由于我的資源過多,導(dǎo)致無法分配,出現(xiàn)pending的狀態(tài)

[root@k8s-master1 ~]# kubectl run web --image=nginx --replicas=6 --requests="cpu=1,memory=256Mi"
[root@k8s-master1 ~]# kubectl get pod
NAME                  READY   STATUS    RESTARTS   AGE
web-944cddf48-6qhcl   1/1     Running   0          15m
web-944cddf48-7ldsv   1/1     Running   0          15m
web-944cddf48-7nv9p   0/1     Pending   0          2s
web-944cddf48-b299n   1/1     Running   0          15m
web-944cddf48-nsxgg   0/1     Pending   0          15m
web-944cddf48-pl4zt   1/1     Running   0          15m
web-944cddf48-t8fqt   1/1     Running   0          15m

現(xiàn)在的狀態(tài)就是pod由于資源池不夠,無法分配資源到當(dāng)前的節(jié)點(diǎn)上了,所以現(xiàn)在我們需要對我們的node節(jié)點(diǎn)進(jìn)行擴(kuò)容

[newnode]
10.4.7.22 node_name=k8s-node3
[root@ansible ansible-install-k8s-master]# ansible-playbook -i hosts add-node.yml -uroot -k

查看已經(jīng)收到加入node的請求,并運(yùn)行通過

[root@k8s-master1 ~]# kubectl get csr
NAME                                                   AGE   REQUESTOR           CONDITION
node-csr-0i7BzFaf8NyG_cdx_hqDmWg8nd4FHQOqIxKa45x3BJU   45m   kubelet-bootstrap   Approved,Issued

查看node節(jié)點(diǎn)狀態(tài)

[root@k8s-master1 ~]# kubectl get node
NAME          STATUS   ROLES    AGE     VERSION
k8s-master1   Ready       7d      v1.16.0
k8s-node1     Ready       7d      v1.16.0
k8s-node2     Ready       7d      v1.16.0
k8s-node3     Ready       2m52s   v1.16.0

查看資源狀態(tài)的分配的總體利用率
[root@k8s-master1 ~]# kubectl describe node k8s-node1

縮容Node節(jié)點(diǎn)
縮容的話,就是驅(qū)逐這個(gè)節(jié)點(diǎn)上的pod,對業(yè)務(wù)和集群可能都會(huì)受一些影響

如果想從kubernetes集群中刪除節(jié)點(diǎn),正確流程
1、  獲取節(jié)點(diǎn)列表
Kubectl get node
2、  設(shè)置不可調(diào)度
Kubectl cordon $node_name
3、  驅(qū)逐節(jié)點(diǎn)上額pod
Kubectl drain $node_name –I gnore-daemonsets
4、  移除節(jié)點(diǎn)
該節(jié)點(diǎn)上已經(jīng)沒有任何資源了,可以直接移除節(jié)點(diǎn):
Kubectl delete node $node_node
這樣,我們平滑移除了一個(gè)k8s節(jié)點(diǎn)

首先要了解到整個(gè)集群哪個(gè)節(jié)點(diǎn)要?jiǎng)h除,這個(gè)人工干預(yù)的話,是要先確定好,哪個(gè)值得去縮容刪除的,那肯定是資源利用率低,上面跑的資源最少最有優(yōu)先縮容的節(jié)點(diǎn)。
然后設(shè)置不可調(diào)度,因?yàn)殡S時(shí)有可能新的pod去調(diào)度上面去,防止新的pod調(diào)度過來,這個(gè)有kubectl –help的相關(guān)命令

  cordon         標(biāo)記 node 為 unschedulable
[root@k8s-master1 ~]# kubectl cordon k8s-node3
node/k8s-node3 cordoned

這里會(huì)給不可調(diào)度的node打個(gè)標(biāo)記

[root@k8s-master1 ~]# kubectl get node
NAME          STATUS                     ROLES    AGE    VERSION

k8s-master1   Ready                         7d1h   v1.16.0
k8s-node1     Ready                         7d1h   v1.16.0
k8s-node2     Ready                         7d1h   v1.16.0
k8s-node3     Ready,SchedulingDisabled      45m    v1.16.0

現(xiàn)在這個(gè)階段不會(huì)對現(xiàn)有的階段的pod不會(huì)有任何影響
現(xiàn)在驅(qū)逐現(xiàn)在節(jié)點(diǎn)上已有的pod,所以現(xiàn)在要對這個(gè)node節(jié)點(diǎn)設(shè)置一定的維護(hù)期,這個(gè)也有相關(guān)命令
drain Drain node in preparation for maintenance

設(shè)置這個(gè)狀態(tài)的話,它會(huì)將這個(gè)節(jié)點(diǎn)上的pod進(jìn)行驅(qū)逐,會(huì)給你一個(gè)提示會(huì)告訴你現(xiàn)在的這個(gè)節(jié)點(diǎn)已經(jīng)是不可調(diào)度狀態(tài)了,現(xiàn)在在進(jìn)行驅(qū)逐,這里報(bào)了一個(gè)錯(cuò)誤daemonset的一個(gè)pod,因?yàn)槲覀儾渴鸬膄lanneld是使用daemonset去啟動(dòng)的,所以會(huì)出現(xiàn)這種情況,這個(gè)就可以直接忽略

[root@k8s-master1 ~]# kubectl drain k8s-node3
node/k8s-node3 already cordoned
error: unable to drain node "k8s-node3", aborting command...

There are pending nodes to be drained:
 k8s-node3
error: cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): ingress-nginx/nginx-ingress-controller-qxhj7, kube-system/kube-flannel-ds-amd64-j9w5l

這個(gè)加后面的命令

[root@k8s-master1 ~]# kubectl drain k8s-node3 --ignore-daemonsets
node/k8s-node3 already cordoned
WARNING: ignoring DaemonSet-managed Pods: ingress-nginx/nginx-ingress-controller-qxhj7, kube-system/kube-flannel-ds-amd64-j9w5l
evicting pod "web-944cddf48-nsxgg"
evicting pod "web-944cddf48-7nv9p"
pod/web-944cddf48-nsxgg evicted
pod/web-944cddf48-7nv9p evicted
node/k8s-node3 evicted
[root@k8s-master1 ~]# kubectl get node
NAME          STATUS                     ROLES    AGE    VERSION
k8s-master1   Ready                         7d1h   v1.16.0
k8s-node1     Ready                         7d1h   v1.16.0
k8s-node2     Ready                         7d1h   v1.16.0
k8s-node3     Ready,SchedulingDisabled      53m    v1.16.0
[root@k8s-master1 ~]# kubectl get pod
NAME                  READY   STATUS    RESTARTS   AGE
web-944cddf48-6qhcl   1/1     Running   0          127m
web-944cddf48-7ldsv   1/1     Running   0          127m
web-944cddf48-b299n   1/1     Running   0          127m
web-944cddf48-cc6n5   0/1     Pending   0          38s
web-944cddf48-pl4zt   1/1     Running   0          127m
web-944cddf48-t8fqt   1/1     Running   0          127m
web-944cddf48-vl5hg   0/1     Pending   0          38s
[root@k8s-master1 ~]# kubectl get pod -o wide
NAME                  READY   STATUS    RESTARTS   AGE    IP           NODE          NOMINATED NODE   READINESS GATES
web-944cddf48-6qhcl   1/1     Running   0          127m   10.244.0.6   k8s-node2                
web-944cddf48-7ldsv   1/1     Running   0          127m   10.244.0.5   k8s-node2                
web-944cddf48-b299n   1/1     Running   0          127m   10.244.0.7   k8s-node2                
web-944cddf48-cc6n5   0/1     Pending   0          43s                              
web-944cddf48-pl4zt   1/1     Running   0          127m   10.244.2.2   k8s-master1              
web-944cddf48-t8fqt   1/1     Running   0          127m   10.244.1.2   k8s-node1                
web-944cddf48-vl5hg   0/1     Pending   0          43s                              

現(xiàn)在縮容完,由于我的資源比較緊張所以又出現(xiàn)了pending的狀態(tài),所以這就是縮容,當(dāng)縮容之后,還是由控制器去保證pod的副本數(shù)量的,這個(gè)當(dāng)前你要保證一個(gè)其他節(jié)點(diǎn)的冗余性,這樣縮容才有意義,不然出現(xiàn)pending狀態(tài)肯定不行的。
然后刪除k8s-node3節(jié)點(diǎn)

[root@k8s-master1 ~]# kubectl get node
NAME          STATUS                     ROLES    AGE    VERSION
k8s-master1   Ready                         7d2h   v1.16.0
k8s-node1     Ready                         7d2h   v1.16.0
k8s-node2     Ready                         7d2h   v1.16.0
k8s-node3     Ready,SchedulingDisabled      71m    v1.16.0

移除節(jié)點(diǎn),當(dāng)驅(qū)逐完成之后,也要保證在其他的節(jié)點(diǎn)上有預(yù)期的副本,還要做好一定的策略,在下線期間不能做pod的調(diào)度。
或者將node3關(guān)機(jī)也可以,首先要保證其他的節(jié)點(diǎn)的資源是冗余的,即使在出現(xiàn)其他的狀況下,k8s有一定的機(jī)制會(huì)在5分鐘之內(nèi)將出現(xiàn)故障的node節(jié)點(diǎn)上的pod飄移到其他正常的node節(jié)點(diǎn)上,像微服務(wù)我們的服務(wù)當(dāng)我們?nèi)ヲ?qū)逐的時(shí)候,其實(shí)業(yè)務(wù)也會(huì)收到一些影響,畢竟我們需要將這個(gè)節(jié)點(diǎn)上的node做驅(qū)逐,轉(zhuǎn)移到其他節(jié)點(diǎn)上,所以盡量在業(yè)務(wù)低峰期去做這件事。

[root@k8s-master1 ~]# kubectl delete node k8s-node3
node "k8s-node3" deleted
[root@k8s-master1 ~]# kubectl get node
NAME          STATUS   ROLES    AGE    VERSION
k8s-master1   Ready       7d2h   v1.16.0
k8s-node1     Ready       7d2h   v1.16.0
k8s-node2     Ready       7d2h   v1.16.0

網(wǎng)頁題目:Kubernetes高級進(jìn)階之Node自動(dòng)擴(kuò)容/縮容
地址分享:http://weahome.cn/article/pehdes.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部