一背镇、概述:
kubernetes是google開源的容器集群管理系統(tǒng)蔓涧,提供應(yīng)用部署谁帕、維護惶凝、擴展機制等功能吼虎,利用kubernetes能方便管理跨集群運行容器化的應(yīng)用,簡稱:k8s(k與s之間有8個字母)
二苍鲜、基本概念
Pod:若干相關(guān)容器的組合思灰,Pod包含的容器運行在同一host上,這些容器使用相同的網(wǎng)絡(luò)命令空間混滔、IP地址和端口洒疚,相互之間能通過localhost來發(fā)現(xiàn)和通信歹颓。另外,這些容器還可共享一塊存儲卷空間油湖。在k8s中創(chuàng)建巍扛,調(diào)度和管理的最小單位就是Pod,而非容器乏德,Pod通過提供更高層次的抽象撤奸,提供了更加靈活的部署和管理模式;
k8s的基本操作單元喊括,一個Pod由一個或多個容器組成胧瓜,通常pod里的容器運行的相同的應(yīng)用;
同一pod包含的容器運行在同一host上郑什,作為統(tǒng)一管理單元:
同一pod 共享著相同的volumes府喳, network命名空間, ip和port空間蘑拯,這是通過Mapped Container做到的钝满;
pid ns:處于同一pod中的應(yīng)用可以看到彼此的進程
network ns:處于同一pod中的應(yīng)用可以訪問一樣的ip和port空間
ipc ns:處于同一pod的應(yīng)用可以用systemV ipc 或者posix消息隊列進行通信
UTC ns:處于同一pod應(yīng)用共用一個主機名
ReplicationController (RC)
RC是用來管理Pod的,每個RC由一個或多個Pod組成强胰;在RC被創(chuàng)建之后舱沧,系統(tǒng)將會保持RC中的可用Pod的個數(shù)與創(chuàng)建RC時定義的Pod個數(shù)一致,如果Pod個數(shù)小于定義的個數(shù)偶洋,RC會啟動新的Pod熟吏,反之則會殺死多余的Pod。
RC通過定義的Pod模板被創(chuàng)建玄窝,創(chuàng)建后對象叫做Pods(也可以理解為RC)牵寺,可以在線修改Pods的屬性,以實現(xiàn)動態(tài)縮減恩脂、擴展Pods的規(guī)模
RC通過label關(guān)聯(lián)對應(yīng)的Pods帽氓,通過修改Pods的label可以刪除對應(yīng)的Pods在需要對Pods中的容器進行更新時,RC采用一個一個替換原則來更新整個Pods中的Pod俩块;
reschudeling: 維護pod副本黎休,“多退少補”;即使是某些minion宕機
scaling:通過修改rc的副本數(shù)來水平擴展或者縮小運行的pods
Rolling updates:一個一個地替換pods來rolling updates服務(wù)玉凯;
multiple release tracks:如果需要在系統(tǒng)中運行multiple release 服務(wù)势腮,replication controller使用labels來區(qū)分multiple release tracks;
Label
Label是用于區(qū)分Pod漫仆、Service捎拯、RC的key/value鍵值對
Pod、Service盲厌、RC可以有多個label署照,但是每個label的key只能對應(yīng)一個value
整個系統(tǒng)都是通過Label進行關(guān)聯(lián)祸泪,得到真正需要操作的目標
Service
Service也是k8s的最小操作單元,是真實應(yīng)用服務(wù)的抽象
Service通常用來將浮動的資源與后端真實提供服務(wù)的容器進行關(guān)聯(lián)
Service對外表現(xiàn)為一個單一的訪問接口建芙,外部不需要了解后端的規(guī)模與機制
Service是定義在集群中一組運行Pod集合的抽象資源没隘,它提供了所有相同的功能。當一個Service資源被創(chuàng)建后岁钓,將會分配一個唯一的IP(也叫做集群IP)升略,這個IP地址將存在于Service的整個生命資源,Service一旦被創(chuàng)建屡限,整個IP無法進行修改。
Pod可以通過Service進行通信炕倘,并且所有的通信將會通過Service自動負載均很到所有的Pod中的容器钧大。
三、kubernetes組成
k8s主要包括:
kubectl 客戶端命令行工具:
將接收的命令罩旋,發(fā)送給kube-apiserver啊央,作為對整個平臺操作的入口。
kube-apiserver REST API服務(wù):
作為整個系統(tǒng)的控制入口涨醋,以REST API的形式公開瓜饥,可以橫向擴展在高可用的架構(gòu)中。
kube-controller-manager?多個控制器的合體浴骂,用來執(zhí)行整個系統(tǒng)中的后臺任務(wù)乓土,多個控制進程的合體:
Node Controller 負責整個系統(tǒng)中node up 或down的狀態(tài)的響應(yīng)和通知
Replication Controller 負責維持Pods中的正常運行的Pod的個數(shù)
Endpoints Controller 負責維持Pods和Service的關(guān)聯(lián)關(guān)系
Service Account & Token Controllers負責為新的命名空間創(chuàng)建默認的賬號和API訪問的Token
kube-scheduler 任務(wù)調(diào)度、命令下發(fā)
負責監(jiān)視新創(chuàng)建的Pods任務(wù)溯警,下發(fā)至未分配的節(jié)點運行該任務(wù)
kube-proxy 網(wǎng)絡(luò)代理轉(zhuǎn)發(fā):
kube-proxy運行在每個節(jié)點上趣苏,負責整個網(wǎng)絡(luò)規(guī)則的連接與轉(zhuǎn)發(fā),使k8s中的service更加抽象化
kubelet 容器的管理
kubelet運行在每個節(jié)點上梯轻,作為整個系統(tǒng)的agent食磕,監(jiān)視著分配到該節(jié)點的Pods任務(wù),負責掛載Pods所依賴的卷組喳挑,下載Pods的秘鑰彬伦,運行Pods中的容器(通常是docker),周期獲取所有容器的狀態(tài)伊诵,通過導出Pod和節(jié)點的狀態(tài)反饋給REST系統(tǒng)单绑;
etcd 信息存儲
flannel IP地址的分配
四、k8s架構(gòu)圖