日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
開發(fā)也需了解的運(yùn)維知識(shí)之Kubernetes

開發(fā)也需了解的運(yùn)維知識(shí)之Kubernetes

作者: wujiuye 2020-06-09 08:10:20

云計(jì)算 Docker與Kubernetes是什么關(guān)系?這可能是我們剛接觸Kubernetes時(shí)都有的一個(gè)疑問(wèn)。那么Kubernetes是什么?

10余年的淇縣網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整淇縣建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“淇縣網(wǎng)站設(shè)計(jì)”,“淇縣網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

本文轉(zhuǎn)載自微信公眾號(hào)「 Java藝術(shù)」,轉(zhuǎn)載本文請(qǐng)聯(lián)系 Java藝術(shù)公眾號(hào)。

Docker與Kubernetes是什么關(guān)系?這可能是我們剛接觸Kubernetes時(shí)都有的一個(gè)疑問(wèn)。那么Kubernetes是什么?

Kubernetes是一個(gè)容器集群編排管理系統(tǒng),用于實(shí)現(xiàn)容器集群的自動(dòng)化部署、自動(dòng)擴(kuò)縮容等功能。Docker提供用于運(yùn)行應(yīng)用程序的容器技術(shù),而Kubernetes本身并不提供用于運(yùn)行應(yīng)用程序的容器,而是負(fù)責(zé)管理容器。

了解Docker與Kubernetes的關(guān)系之后,就能理解為什么我們要先學(xué)習(xí)Docker再學(xué)習(xí)Kubernetes,這與先學(xué)習(xí)Spring框架才能更好地學(xué)習(xí)Spring Boot、Spring Cloud是一樣的。如果還不了解Docker可以先看下上一篇《開發(fā)也需了解的運(yùn)維知識(shí)之Docker》。

作為開發(fā),我們?yōu)槭裁匆私馊萜骷夹g(shù),這不是運(yùn)維該學(xué)習(xí)的嗎?作為開發(fā)者,只有足夠了解容器技術(shù),才能做好技術(shù)選型,以及開發(fā)部署在Kubernetes容器服務(wù)之上的應(yīng)用應(yīng)該要注意哪些問(wèn)題。如果運(yùn)維不了解代碼,開發(fā)也不了解Kubernetes,誰(shuí)能解決將服務(wù)遷移到Kubernetes上遇到的各種問(wèn)題呢?

關(guān)于Kubernetes

學(xué)習(xí)Kubernetes首先要了解Kubernetes的架構(gòu),了解一些“概念”,再了解配置文件。配置文件這塊對(duì)初學(xué)者來(lái)說(shuō)是最難理解的,因此推薦大家閱讀《Kubernetes in Action中文版》這本書,跟著例子一步步掌握一些配置文件中每種kind的作用,每個(gè)配置項(xiàng)的作用是什么。

Kubernetes管理所有可用的物理機(jī),以阿里云容器服務(wù)Kubernetes為例,Kubernetes負(fù)責(zé)管理一堆ECS實(shí)例,這需要我們?cè)趧?chuàng)建Kubernetes集群時(shí),購(gòu)買足夠的ECS實(shí)例,至少兩臺(tái)。后續(xù)也可將新購(gòu)買的ECS實(shí)例加到Kubernetes集群,由Kubernetes管理。

開發(fā)者和運(yùn)維都不需要知道一個(gè)應(yīng)用程序部署在哪個(gè)ECS實(shí)例上,只需要指定運(yùn)行應(yīng)用程序所需要的cpu、內(nèi)存等資源,Kubernetes會(huì)根據(jù)要求計(jì)算出滿足條件的節(jié)點(diǎn)(ECS),并在節(jié)點(diǎn)(ECS)上從鏡像倉(cāng)庫(kù)拉取應(yīng)用程序的鏡像創(chuàng)建容器并運(yùn)行容器,并且監(jiān)控容器的整個(gè)生命周期。我們可以把Kubernetes管理的所有節(jié)點(diǎn)(ECS)看成一個(gè)大的物理機(jī),這臺(tái)大的物理機(jī)的cpu、內(nèi)存是所有節(jié)點(diǎn)(ECS)的總和。

 

(圖片來(lái)之《Kubernetes in Action》)

如上圖所示,開發(fā)者只需要將應(yīng)用構(gòu)造成鏡像,并將鏡像push到遠(yuǎn)程鏡像倉(cāng)庫(kù),然后編寫一個(gè)配置文件,在配置文件中描述應(yīng)用程序鏡像運(yùn)行所需要的資源、鏡像從哪拉取等,使用kubectl調(diào)用Kubernetes提供的API就能將應(yīng)用程序部署到Kubernetes。

Kubernetes由兩種類型的節(jié)點(diǎn)組成。

 

(圖片來(lái)自《Kubernetes in Action》)

一種是主節(jié)點(diǎn)Master,負(fù)責(zé)控制和管理整個(gè)集群,為實(shí)現(xiàn)高可用,主節(jié)點(diǎn)也要求部署集群。主節(jié)點(diǎn)上會(huì)部署一些組件,這些組件可以運(yùn)行在單個(gè)主節(jié)點(diǎn)上,或者通過(guò)副本分別部署在多個(gè)主節(jié)點(diǎn)上,實(shí)現(xiàn)高可用。如基于Reft協(xié)議實(shí)現(xiàn)的數(shù)據(jù)強(qiáng)一致性存儲(chǔ)服務(wù)etcd、提供給我們使用的Kubernetes API服務(wù)、調(diào)度應(yīng)用部署的Scheculer組件、執(zhí)行集群功能的Controller Manager組件。這些組件我們可以先這么簡(jiǎn)單了解,暫時(shí)不用過(guò)于深究。

另一種是工作節(jié)點(diǎn),運(yùn)行用戶實(shí)際部署的應(yīng)用。

假設(shè)我們?cè)诎⒗镌瀑?gòu)買了托管的Kubernetes服務(wù),那么主節(jié)點(diǎn)就由阿里云托管,而工作節(jié)點(diǎn)就是我們購(gòu)買的ECS實(shí)例,一個(gè)集群中有多少個(gè)ECS實(shí)例就是有多少個(gè)工作節(jié)點(diǎn)。

工作節(jié)點(diǎn)就是運(yùn)行容器的機(jī)器,除了運(yùn)行用于運(yùn)行我們部署的應(yīng)用程序的容器外,每個(gè)工作節(jié)點(diǎn)上還會(huì)運(yùn)行一些組件,這些組件負(fù)責(zé)運(yùn)行、監(jiān)控和管理應(yīng)用服務(wù)。如Docker、Kubelet、Kube-proxy。Docker我們已經(jīng)很熟悉了;Kubelet負(fù)責(zé)與主節(jié)點(diǎn)的Kubernetes API服務(wù)通信,并管理它所在的工作節(jié)點(diǎn)的容器;Kube-proxy負(fù)責(zé)組件之間的負(fù)載均衡網(wǎng)絡(luò)流量。

 

上圖是根據(jù)到目前為止我們對(duì)Kubernetes的了解所畫出的一個(gè)應(yīng)用部署流程圖。

  • 1、開發(fā)者在本地機(jī)器構(gòu)建應(yīng)用程序鏡像;
  • 2、開發(fā)者將本地應(yīng)用程序鏡像psuh到鏡像倉(cāng)庫(kù);
  • 3、開發(fā)者為運(yùn)行應(yīng)用程序編寫描述文件(yaml配置文件);
  • 4、開發(fā)者使用kubectl調(diào)用Kubernetes API將應(yīng)用程序描述文件提交給Kubernetes;
  • 5、Scheduler組件根據(jù)描述文件調(diào)度工作節(jié)點(diǎn)部署應(yīng)用程序;
  • 6、在工作節(jié)點(diǎn)上由Container runtime負(fù)責(zé)從鏡像倉(cāng)庫(kù)拉取鏡像、創(chuàng)建容器并運(yùn)行容器;

在實(shí)際項(xiàng)目部署時(shí),我們可能最關(guān)系也最難理解就是網(wǎng)絡(luò)和容器這部分內(nèi)容。比如,在不使用Kubernetes時(shí),我們部署一個(gè)需要SSD資源的應(yīng)用程序時(shí),先購(gòu)買SSD掛載在該服務(wù)器上,而使用Kubernetes時(shí),我們要告訴Kubernetes只在具有SSD的節(jié)點(diǎn)中選擇節(jié)點(diǎn)部署應(yīng)用。網(wǎng)絡(luò)和容器卷的內(nèi)容還是很多很復(fù)雜的,本篇就不過(guò)多介紹,后續(xù)文章中再介紹,當(dāng)然也只是簡(jiǎn)單的理解和怎么去用,因?yàn)楣P者目前理解的也不多。

需要了解的一些概念

namespaces:用于區(qū)分不同的資源,如測(cè)試環(huán)境資源、生產(chǎn)環(huán)境資源;當(dāng)然也可以使用labels區(qū)分。不指定namespaces則默認(rèn)使用default,如果使用非defalut名稱空間,則在使用kubectl創(chuàng)建secret、創(chuàng)建ServiceAccount等都需要明確指定namespaces。

節(jié)點(diǎn)(Node):節(jié)點(diǎn)就是實(shí)際的機(jī)器或者虛擬機(jī),例如阿里云ECS。

Pod:Pod是Kubernetes創(chuàng)建或部署的最小基本單位,一個(gè)Pod封裝一個(gè)或多個(gè)應(yīng)用容器,存儲(chǔ)資源、一個(gè)獨(dú)立的網(wǎng)絡(luò)IP以及管理控制容器運(yùn)行方式的策略選項(xiàng)。

 

(圖片來(lái)自《Kubernetes in Action》)

如上圖所示,當(dāng)一個(gè)Pod包含多個(gè)容器時(shí),這些容器總是運(yùn)行于同一個(gè)工作節(jié)點(diǎn)上,不會(huì)跨越多個(gè)工作節(jié)點(diǎn)。例如我們部署一個(gè)java程序,可以在一個(gè)Pod中運(yùn)行多個(gè)該java程序的容器。Pod可以封裝緊密耦合的應(yīng)用,它們需要由多個(gè)容器組成,它們之間能夠共享資源,例如前后端部署在一起(這個(gè)例子不恰當(dāng))。而對(duì)于我們開發(fā)java微服務(wù)應(yīng)用來(lái)說(shuō),一般一個(gè)Pod只會(huì)運(yùn)行一個(gè)容器,因此初學(xué)時(shí)可以不用過(guò)多去糾結(jié)這些概念。

Service:Service抽象的概念,是Pod的邏輯分組,這一組Pod能夠被Service訪問(wèn)到,通常是通過(guò)Label、Selector實(shí)現(xiàn)。例如:

  
 
 
 
  1. apiVersion: v1 
  2. kind: Service 
  3. metadata: 
  4.   name: demo-srv-service 
  5.   namespace: sit 
  6. spec: 
  7.   selector: 
  8.     app: demo-srv 
  9.     env: sit 
  10.   ports: 
  11.     - protocol: TCP 
  12.       port: 80 
  13.       targetPort: 8080 

通過(guò)selector匹配app為demo-srv、env為sit的一組Pod,這組Pod對(duì)應(yīng)demo-srv-service這個(gè)Service。更簡(jiǎn)單一點(diǎn)理解,假設(shè)我們部署一個(gè)java程序,一個(gè)Pod只啟動(dòng)一個(gè)該java程序的容器,那么啟動(dòng)多個(gè)該java程序就對(duì)應(yīng)多個(gè)Pod,而這組Pod對(duì)應(yīng)同一個(gè)Service。

ReplicationController:ReplicationController(簡(jiǎn)稱RC)是確保用戶定義的Pod副本數(shù)保持不變。在用戶定義范圍內(nèi),如指定一個(gè)java程序部署的集群數(shù)量為3,如果Pod超過(guò)3(例如手動(dòng)啟動(dòng)),則RC會(huì)終止額外的Pod,如果少于3(例如內(nèi)存溢出導(dǎo)致),RC會(huì)創(chuàng)建新的Pod,始終保持在定義范圍。

ReplicaSet:ReplicaSet簡(jiǎn)稱RS,是RC的升級(jí)版本。RS和RC之間的唯一區(qū)別是對(duì)選擇器(Selector)的支持,這里不做過(guò)多介紹。

Deployments:Deployment為Pod和ReplicaSet提供聲明式更新。你只需要在Deployment中描述你想要的目標(biāo)狀態(tài)是什么,Deployment Controller就會(huì)幫你將Pod和ReplicaSet的實(shí)際狀態(tài)改變到你的目標(biāo)狀態(tài)。

  
 
 
 
  1. apiVersion: apps/v1 
  2. kind: Deployment 
  3. metadata: 
  4.   name: demo-srv-deployment 
  5.   namespace: sit 
  6. spec: 
  7.   # 副本數(shù),運(yùn)行多少個(gè)`Pod` 
  8.   replicas: 3 
  9.   # 選擇器,使用標(biāo)簽匹配 
  10.   selector: 
  11.     matchLabels: 
  12.       app: demo-srv 
  13.   template: 
  14.     metadata: 
  15.       # 標(biāo)簽 
  16.       labels: 
  17.         app: demo-srv 
  18.         env: sit 
  19.     spec: 
  20.       # 容器,指定多個(gè)容器就會(huì)在一個(gè)`Pod`內(nèi)運(yùn)行多個(gè)容器 
  21.       containers: 
  22.         - name: demo-srv 
  23.           image: registry.cn-shenzhen.aliyuncs.com/wujiuye/demo-srv 

DaemonSet:確保每個(gè)節(jié)點(diǎn)(物理機(jī)器或者虛擬機(jī))上只運(yùn)行一個(gè)該應(yīng)用的Pod。如阿里云的實(shí)現(xiàn)的日記收集,就是在每個(gè)節(jié)點(diǎn)上運(yùn)行一個(gè)用于收集日記的應(yīng)用程序容器,對(duì)應(yīng)一個(gè)Pod。

網(wǎng)絡(luò)通信

Pod之間的網(wǎng)絡(luò)通信:

Kubernetes集群中的所有Pod都在同一個(gè)共享網(wǎng)絡(luò)地址空間中,這意味著每個(gè)Pod都可以通過(guò)其他Pod的IP地址來(lái)實(shí)現(xiàn)相互訪問(wèn)。這也表示它們之間沒(méi)有NAT網(wǎng)關(guān)。當(dāng)兩個(gè)Pod彼此之間發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包時(shí),它們都會(huì)將對(duì)方的實(shí)際IP地址看作數(shù)據(jù)包中的源IP。

 

無(wú)論是將兩個(gè)Pod安排在單一的還是不同的工作節(jié)點(diǎn)上,同時(shí)不管實(shí)際節(jié)點(diǎn)間的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如何,這些Pod內(nèi)的容器都能夠像在局域網(wǎng)上的計(jì)算機(jī)一樣通信。

Service之間的網(wǎng)絡(luò)通信:

Kubernetes service為一組功能相同的Pod提供單一不變的接入點(diǎn)。當(dāng)服務(wù)存在時(shí),它的IP地址和端口不會(huì)改變。客戶端通過(guò)IP地址和端口號(hào)建立連接,這些連接會(huì)被路由到提供該服務(wù)的任意一個(gè)Pod上,會(huì)實(shí)現(xiàn)負(fù)載均衡。通過(guò)這種方式,客戶端不需要知道每個(gè)單獨(dú)的提供服務(wù)的Pod的地址,這樣這些Pod就可以在集群中隨時(shí)被創(chuàng)建或移除。

 

假設(shè)現(xiàn)有一個(gè)項(xiàng)目,該項(xiàng)目有兩個(gè)微服務(wù),分別是demo-srv、demo-cap?,F(xiàn)在將這兩個(gè)服務(wù)部署到阿里云容器服務(wù)Kubernetes上,在控制臺(tái)的服務(wù)列表頁(yè)可以看到,這兩個(gè)服務(wù)都有一個(gè)集群IP,不管這個(gè)兩個(gè)服務(wù)部署多少個(gè)Pod,也不管Pod怎么變,其它服務(wù)都可以通過(guò)這個(gè)集群IP訪問(wèn)背后的Pod,當(dāng)然訪問(wèn)背后Pod也是實(shí)現(xiàn)負(fù)載均衡的。

也是因?yàn)槿绱?,我們開發(fā)微服務(wù)實(shí)現(xiàn)的服務(wù)發(fā)現(xiàn)都是基于Service的,那么在應(yīng)用程序中實(shí)現(xiàn)負(fù)載均衡就顯得多余了。

類型:

  • ClusterIP:通過(guò)集群的內(nèi)部IP暴露服務(wù),選擇該值,服務(wù)只能夠在Kubernetes集群內(nèi)部可以訪問(wèn)。
  • NodePort:通過(guò)每個(gè)Node上的IP和靜態(tài)端口(NodePort)暴露服務(wù)。NodePort服務(wù)會(huì)路由到ClusterIP服務(wù),這個(gè)ClusterIP服務(wù)會(huì)自動(dòng)創(chuàng)建。通過(guò)請(qǐng)求 : ,可以從集群的外部訪問(wèn)一個(gè)NodePort服務(wù)。
  • LoadBalancer:如使用阿里云提供的負(fù)載均衡器,可以向外部暴露服務(wù)。外部的負(fù)載均衡器可以路由到NodePort服務(wù)和ClusterIP服務(wù)。

本篇就介紹到這,Kubernetes要學(xué)的知識(shí)點(diǎn)很多,但作為開發(fā),我們可能不會(huì)去過(guò)多的關(guān)注一些細(xì)節(jié),本篇介紹的知識(shí)點(diǎn)是筆者認(rèn)為作為開發(fā)應(yīng)掌握的知識(shí)的。網(wǎng)絡(luò)、容器卷這部署建議多了解一些,網(wǎng)絡(luò)有關(guān)服務(wù)間的調(diào)用,而容器卷有關(guān)日記的打印、文件存儲(chǔ),如果使用阿里云容器服務(wù),那么日記這塊我們可以不輸出到文件,使用阿里提供的日記服務(wù)收集日記。但如果需要持久化存儲(chǔ)的服務(wù),就必須要了解容器卷Volume。

不懂的概念可以查閱官方文檔:http://docs.kubernetes.org.cn

 

想要深入學(xué)習(xí)還是推薦閱讀《Kubernetes in Action》中文版

 


本文題目:開發(fā)也需了解的運(yùn)維知識(shí)之Kubernetes
標(biāo)題URL:http://m.5511xx.com/article/dpsjgse.html