Kubernetes理论基础
1 介紹
高可用集群副本數(shù)據(jù)最好是 >= 3 奇數(shù)個
2 組件介紹
k8s架構(gòu)
2.1 核心組件
2.1.1 api server
所有服務(wù)訪問統(tǒng)一入口
2.1.2 ControllerManager
維護(hù)副本的期望數(shù)
2.1.3 Scheduler
負(fù)責(zé)介紹任務(wù),選擇合適的節(jié)點(diǎn)進(jìn)行分配任務(wù)
2.1.4 etcd
鍵值對數(shù)據(jù)庫,存儲K8S集群的所有重要信息(持久化)
- ETCD
etcd 的官方將它定位程一個可信賴的分布式鍵值存儲服務(wù),它能夠?yàn)檎麄€分布式集群存儲一些關(guān)鍵服務(wù)數(shù)據(jù),協(xié)助分布式集群的正藏運(yùn)轉(zhuǎn)。
架構(gòu)圖
AWL:日志
Store:持久化寫入本地磁盤
2.1.5 Kubelet
直接跟容器交互實(shí)現(xiàn)容器的生命周期管理
2.1.6 Kube-proxy
負(fù)責(zé)寫入規(guī)則至IPTABELS、IPVS,實(shí)現(xiàn)服務(wù)映射訪問的
2.2. 其他插件
2.2.1 CoreDNS
可以為集群中的SVC創(chuàng)建一個域名、IP對應(yīng)關(guān)系解析
2.2.2 dashboard
給K8S集群提供一個B/S結(jié)構(gòu)的訪問體系
2.2.3 Ingress Controller
官方只能實(shí)現(xiàn)四層代理,Ingress可以實(shí)現(xiàn)7層
2.2.4 fedetation
提供一個可以跨集群中心多K8S統(tǒng)一管理功能
2.2.5 prometheus
提供一個K8S集群監(jiān)控能力
2.2.6 ELK
提供K8S集群日志統(tǒng)一分析介入平臺
3 Pod
3.1 Pod概念
- 自主式Pod
- 控制器管理的Pod
注:官方不是安上面的分類的
3.1.1 Pod服務(wù)類型
HPA
Horizontal Pod Autoscaling僅適用于Deployment和ReplicaSet,在V1版本中僅支持根據(jù)Pod的CPU利用率擴(kuò)縮容,在vlalpha版本中,支持根據(jù)內(nèi)存和用戶自定義的metric擴(kuò)縮容。
StatefulSet
是為了解決有狀態(tài)服務(wù)的問題(對應(yīng)Deployments和ReplicaSets是為了無狀態(tài)服務(wù)而假設(shè)),其場景包括:
- 穩(wěn)定的持久化存儲:即Pod重新調(diào)度后還是能訪問到相同的持久化數(shù)據(jù),基于PVC來實(shí)現(xiàn)。
- 穩(wěn)定的網(wǎng)絡(luò)標(biāo)志,即Pod重新調(diào)度后其PodName和HostName不變,基于Headless Service(即沒有Cluster Ip的Service)來實(shí)現(xiàn)。
- 有序部署,有序擴(kuò)展,即Pod是有順序的,在部署或者擴(kuò)展的時候要依據(jù)定義的順序依次進(jìn)行(即從0到N-1,在下一個運(yùn)行之前所有的Pod必須都是Running和Read狀態(tài)),基于init containers來實(shí)現(xiàn)
- 有序收縮,有序刪除(即從N-1到0)
DaemonSet
確保全部(或者一些)Node上運(yùn)行一個Pod的副本。當(dāng)有Node加入集群時,也會為他們新增一個Pod。當(dāng)有Node從集群移除時,這些Pod也會被回收。刪除DaemonSet將會刪除它創(chuàng)建的所有Pod
使用DaemonSet的一些典型用法
- 運(yùn)行集群存儲daemon,例如在每個Node上運(yùn)行g(shù)lusterd、ceph
- 在每個Node上運(yùn)行日志手機(jī)daemon,例如fluentd、logstash
- 在每個Node上運(yùn)行監(jiān)控daemon,例如Prometheus Node Exporter
Job
負(fù)責(zé)批處理任務(wù),即執(zhí)行一次任務(wù),它保證批處理任務(wù)的一個或多個Pod成功結(jié)束
Cron Job
管理基于時間的Jod,即
- 在給定的時間點(diǎn)只運(yùn)行一次
- 周期性地在給定的時間點(diǎn)運(yùn)行
3.1.2 Pod 服務(wù)發(fā)現(xiàn)
4 網(wǎng)絡(luò)通訊方式
Kubernetes的網(wǎng)絡(luò)模型假定了所有的Pod都在一個可以直接連通的扁平的網(wǎng)絡(luò)空間中,這在GCE(Google Comute Engine)里面是現(xiàn)成的網(wǎng)絡(luò)模型,Kubernetes假定這個網(wǎng)絡(luò)已經(jīng)存在。而在私有云里面搭建Kubernetes集群,就不能假定這個網(wǎng)絡(luò)已經(jīng)存在了。我們需要自己實(shí)現(xiàn)這個網(wǎng)絡(luò)假設(shè),將不同節(jié)點(diǎn)上的Docker容器之間的互相訪問先打通,然后運(yùn)行Kubernetes。
- 同一個Pod內(nèi)的多個容器之間:lo
- 各Pod之間的通訊:Overlay Network
- Pod與Service之間通訊:各節(jié)點(diǎn)的Iptables規(guī)則
Flannel是CoreOS團(tuán)隊(duì)針對Kubernetes設(shè)計(jì)的一個網(wǎng)絡(luò)規(guī)劃服務(wù),簡單來說,它的功能是讓集群中的不同節(jié)點(diǎn)主機(jī)創(chuàng)建的Docker容器都具有全集群唯一的虛擬IP地址。而且它還能在這些IP地址之間建立一個覆蓋網(wǎng)絡(luò)(Overlay Network),通過這個覆蓋網(wǎng)絡(luò),將數(shù)據(jù)包原封不動地傳遞到目標(biāo)容器內(nèi)。
etcd之Flannel提供說明
- 存儲管理Flannel可分配的IP地址段資源
- 監(jiān)控etcd中每個Pod的實(shí)際地址,并在內(nèi)存中建立維護(hù)Pod節(jié)點(diǎn)路由表
學(xué)習(xí)地址:
https://www.bilibili.com/video/BV1w4411y7Go
總結(jié)
以上是生活随笔為你收集整理的Kubernetes理论基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux服务器各种后门查杀
- 下一篇: kubernetes集群命令行工具kub