Kubernete知識小普及

?  大部分概念Kubernete官網(wǎng)都有詳細介紹,Kubernete中文官網(wǎng) https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/?

  官網(wǎng)還提供一個比較好的功能是能在線互動,見互動教程,類似實操命令初步感受。

Kubernete主要功能

基于容器的應(yīng)用部署、維護和滾動升級

負載均衡和服務(wù)發(fā)現(xiàn)

跨機器和跨地區(qū)的集群調(diào)度

自動伸縮

無狀態(tài)服務(wù)和有狀態(tài)服務(wù)

廣泛的 Volume 支持

插件機制保證擴展性

Kubernetes是谷歌開源的容器集群管理系統(tǒng)

  Kubernetes 提供了很多的功能,它可以簡化應(yīng)用程序的工作流,加快開發(fā)速度。使用Kubernetes只需一個部署文件,使用一條命令就可以部署多層容器(前端,后臺等)的完整集群。

核心概念

Kubernetes 主要由以下幾個核心組件組成:

etcd 保存了整個集群的狀態(tài);

apiserver 提供了資源操作的唯一入口,并提供認(rèn)證、授權(quán)、訪問控制、API 注冊和發(fā)現(xiàn)等機制;

controller manager 負責(zé)維護集群的狀態(tài),比如故障檢測、自動擴展、滾動更新等;

scheduler 負責(zé)資源的調(diào)度,按照預(yù)定的調(diào)度策略將 Pod 調(diào)度到相應(yīng)的機器上;

kubelet 負責(zé)維護容器的生命周期,同時也負責(zé) Volume(CVI)和網(wǎng)絡(luò)(CNI)的管理;

Container runtime 負責(zé)鏡像管理以及 Pod 和容器的真正運行(CRI);

kube-proxy 負責(zé)為 Service 提供 cluster 內(nèi)部的服務(wù)發(fā)現(xiàn)和負載均衡

?典型的Kubernetes架構(gòu)圖

上圖可以看到如下組件,使用特別的圖標(biāo)表示Service和Label:

Pod

Container(容器)

Label(

)(標(biāo)簽)

Replication Controller(復(fù)制控制器)

Service(服務(wù))

Node(節(jié)點)

Kubernetes Master(Kubernetes主節(jié)點)

Pod

  Pod在節(jié)點上,包含一組容器和卷。同一個Pod里的容器共享同一個網(wǎng)絡(luò)命名空間,可以使用localhost互相通信。Pod是短暫的,不是持續(xù)性實體。如果Pod是短暫的,那么我怎么才能持久化容器數(shù)據(jù)使其能夠跨重啟而存在呢? Kubernetes支持卷的概念,因此可以使用持久化的卷類型。如果Pod是短暫的,那么重啟時IP地址可能會改變,那么怎么才能從前端容器正確可靠地指向后臺容器呢?這時可以使用Service。

Lable

  一些Pod有Label。一個Label是attach到Pod的一對鍵/值對,用來傳遞用戶定義的屬性。比如,你可能創(chuàng)建了一個"tier"和“app”標(biāo)簽,通過Label(tier=frontend, app=myapp)來標(biāo)記前端Pod容器,使用Label(tier=backend, app=myapp)標(biāo)記后臺Pod。然后可以使用Selectors選擇帶有特定Label的Pod,并且將Service或者Replication Controller應(yīng)用到上面。

Replication Controller

  Replication Controller確保任意時間都有指定數(shù)量的Pod“副本”在運行。如果為某個Pod創(chuàng)建了Replication Controller并且指定3個副本,它會創(chuàng)建3個Pod,并且持續(xù)監(jiān)控它們。如果某個Pod不響應(yīng),那么Replication Controller會替換它,保持總數(shù)為3.如下面的動畫所示:

如果之前不響應(yīng)的Pod恢復(fù)了,現(xiàn)在就有4個Pod了,那么Replication Controller會將其中一個終止保持總數(shù)為3。如果在運行中將副本總數(shù)改為5,Replication Controller會立刻啟動2個新Pod,保證總數(shù)為5。還可以按照這樣的方式縮小Pod,這個特性在執(zhí)行滾動升級時很有用。

當(dāng)創(chuàng)建Replication Controller時,需要指定兩個東西:

Pod模板:用來創(chuàng)建Pod副本的模板

Label:Replication Controller需要監(jiān)控的Pod的標(biāo)簽。

  現(xiàn)在已經(jīng)創(chuàng)建了Pod的一些副本,那么在這些副本上如何均衡負載呢?我們需要的是Service。

Service

Service是定義一系列Pod以及訪問這些Pod的策略的一層抽象。Service通過Label找到Pod組。因為Service是抽象的,所以在圖表里通??床坏剿鼈兊拇嬖?,這也就讓這一概念更難以理解。

假定有2個后臺Pod,并且定義后臺Service的名稱為‘backend-service’,lable選擇器為(tier=backend, app=myapp)。backend-service的Service會完成如下兩件重要的事情:

會為Service創(chuàng)建一個本地集群的DNS入口,因此前端Pod只需要DNS查找主機名為 ‘backend-service’,就能夠解析出前端應(yīng)用程序可用的IP地址。

現(xiàn)在前端已經(jīng)得到了后臺服務(wù)的IP地址,但是它應(yīng)該訪問2個后臺Pod的哪一個呢?Service在這2個后臺Pod之間提供透明的負載均衡,會將請求分發(fā)給其中的任意一個(如下面的動畫所示)。通過每個Node上運行的代理(kube-proxy)完成。這里有更多技術(shù)細節(jié)。

  如果不進入網(wǎng)絡(luò)配置,那么達到透明的負載均衡目標(biāo)所涉及的底層網(wǎng)絡(luò)和路由相對先進。

  有一個特別類型的Kubernetes Service,稱為'LoadBalancer',作為外部負載均衡器使用,在一定數(shù)量的Pod之間均衡流量。比如,對于負載均衡Web流量很有用。

Pod與Service

  每個Pod都提供了一個獨立的Endpoint(Pod IP+ContainerPort)以被客戶端訪問,多個Pod副本組成了一個集群來提供服務(wù),一般的做法是部署一個負載均衡器來訪問它們,為這組Pod開啟一個對外的服務(wù)端口如8000,并且將這些Pod的Endpoint列表加入8000端口的轉(zhuǎn)發(fā)列表中,客戶端可以通過負載均衡器的對外IP地址+服務(wù)端口來訪問此服務(wù)。運行在Node上的kube-proxy其實就是一個智能的軟件負載均衡器,它負責(zé)把對Service的請求轉(zhuǎn)發(fā)到后端的某個Pod實例上,并且在內(nèi)部實現(xiàn)服務(wù)的負載均衡與會話保持機制。Service不是共用一個負載均衡器的IP地址,而是每個Servcie分配一個全局唯一的虛擬IP地址,這個虛擬IP被稱為Cluster IP。

Node IP

  Node節(jié)點的IP地址,是Kubernetes集群中每個節(jié)點的物理網(wǎng)卡的IP地址,是真是存在的物理網(wǎng)絡(luò),所有屬于這個網(wǎng)絡(luò)的服務(wù)器之間都能通過這個網(wǎng)絡(luò)直接通信;

Pod IP

  Pod的IP地址,是Docker Engine根據(jù)docker0網(wǎng)橋的IP地址段進行分配的,通常是一個虛擬的二層網(wǎng)絡(luò),位于不同Node上的Pod能夠彼此通信,需要通過Pod IP所在的虛擬二層網(wǎng)絡(luò)進行通信,而真實的TCP流量則是通過Node IP所在的物理網(wǎng)卡流出的;

Cluster IP

Service的IP地址。特性如下:

僅僅作用于Kubernetes Servcie這個對象,并由Kubernetes管理和分配IP地址;

無法被Ping,因為沒有一個“實體網(wǎng)絡(luò)對象”來響應(yīng);

只能結(jié)合Service Port組成一個具體的通信端口;

Node IP網(wǎng)、Pod IP網(wǎng)域Cluster IP網(wǎng)之間的通信,采用的是Kubernetes自己設(shè)計的一種編程方式的特殊的路由規(guī)則,與IP路由有很大的不同;

Node

  節(jié)點(上圖橘色方框)是物理或者虛擬機器,作為Kubernetes worker,通常稱為Minion。每個節(jié)點都運行如下Kubernetes關(guān)鍵組件:

Kubelet:是主節(jié)點代理。

Kube-proxy:Service使用其將鏈接路由到Pod,如上文所述。

Docker或Rocket:Kubernetes使用的容器技術(shù)來創(chuàng)建容器。

Kubernetes Master

  集群擁有一個Kubernetes Master。Kubernetes Master提供集群的獨特視角,并且擁有一系列組件,比如Kubernetes API Server。API Server提供可以用來和集群交互的REST端點。master節(jié)點包括用來創(chuàng)建和復(fù)制Pod的Replication Controller。

應(yīng)用

Kubernetes進行藍綠部署

應(yīng)用程序更新到一個新版本時,部署功能能夠幫您對容器進行滾動更新,若有異??勺詣踊貪L。

Kubernetes在騰訊游戲的應(yīng)用

接入容器數(shù)超過兩萬,接入的業(yè)務(wù)也有兩百多款,包括手游、端游、頁游。

基于Kubernetes的Spark集群部署

相比于在物理機上部署,在Kubernetes集群上部署Spark集群,具有以下優(yōu)勢:

快速部署:安裝1000臺級別的Spark集群,在Kubernetes集群上只需設(shè)定worker副本數(shù)目replicas=1000,即可一鍵部署。

快速升級:升級Spark版本,只需替換Spark鏡像,一鍵升級。

彈性伸縮:需要擴容、縮容時,自動修改worker副本數(shù)目replicas即可。

高一致性:各個Kubernetes節(jié)點上運行的Spark環(huán)境一致、版本一致

高可用性:如果Spark所在的某些node或pod死掉,Kubernetes會自動將計算任務(wù),轉(zhuǎn)移到其他node或創(chuàng)建新pod。

強隔離性:通過設(shè)定資源配額等方式,可與WebService應(yīng)用部署在同一集群,提升機器資源使用效率,從而降低服務(wù)器成本。

Kubernetes、Docker Swarm、 Mesos

網(wǎng)易云容器如何解決Kubernetes在公有云上的問題

微服務(wù)持續(xù)集成 Spring Cloud + GitLab + Docker + K8S

微服務(wù)組成:Gateway api網(wǎng)關(guān)>消費端>服務(wù)端 和 一個注冊中心,共4個Spring Boot項目?

?Kubernetes實際要用起來問題還有很多,需要躺很多坑,搭建起一套Kubernetes環(huán)境就可能會讓你從入門到放棄,再接再勵。

資料來源:

http://www.dockone.io/article/932

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、基礎(chǔ)架構(gòu) 1.1 Master Master節(jié)點上面主要由四個模塊組成:APIServer、scheduler...
    阿斯蒂芬2閱讀 11,153評論 0 44
  • 原文:https://www.cnblogs.com/xhyan/p/6656062.html?Kubernete...
    laosijikaichele閱讀 1,208評論 0 8
  • ?Kubernetes介紹1.背景介紹云計算飛速發(fā)展- IaaS- PaaS- SaaSDocker技術(shù)突飛猛進-...
    Zero___閱讀 14,880評論 0 21
  • 一、 K8s 是什么? Kubernetes(k8s)是自動化容器操作的開源平臺,這些操作包括部署,調(diào)度和節(jié)點集群...
    loveroot閱讀 6,712評論 1 21
  • 注:擬從今天起用圖片記錄每頓吃了什么,方便瑜伽館的老師評估是否合理。 早餐:一碗米飯,蘿卜排骨湯蘿卜大概吃了半根(...
    小葡萄mm閱讀 284評論 1 0

友情鏈接更多精彩內(nèi)容