摘要:核心概念是最小的調(diào)度單元,可以由一個(gè)或者多個(gè)容器組成。該模式會(huì)跟云服務(wù)商有關(guān),比如可以通過(guò)等創(chuàng)建一個(gè)外部的負(fù)載均衡器,將請(qǐng)求轉(zhuǎn)發(fā)到對(duì)應(yīng)的服務(wù)組。而可以提供外部服務(wù)可訪問(wèn)的負(fù)載均衡器等。
概述
Kubernetes 有各類資源對(duì)象來(lái)描述整個(gè)集群的運(yùn)行狀態(tài)。這些對(duì)象都需要通過(guò)調(diào)用 kubernetes api 來(lái)進(jìn)行創(chuàng)建、修改、刪除,可以通過(guò) kubectl 命令工具,也可以直接調(diào)用 k8s api,或者使用對(duì)象語(yǔ)言的客戶端庫(kù)(例如:golang , pythion )。
每個(gè) kubernetes 對(duì)象都會(huì)包含兩個(gè)關(guān)鍵字段:Object Spec 和 Object Status。spec 描述了對(duì)象所期望達(dá)到的狀態(tài),status 描述了該對(duì)象的實(shí)際狀態(tài)。
下面會(huì)寬泛的介紹一些 Kubernetes 的核心概念,便于初步的理解它們特征及工作模式。
核心概念 PodPod 是 Kubernetes 最小的調(diào)度單元,可以由一個(gè)或者多個(gè)容器組成。
Pod 的設(shè)計(jì)理念是支持多個(gè)容器在一個(gè) Pod 中共享網(wǎng)絡(luò)和文件系統(tǒng),可以通過(guò)進(jìn)程間通信和文件共享這種簡(jiǎn)單高效的方式組合完成服務(wù)。
Pod 的特征:
可以包含多個(gè)容器,它們之間共享 IPC、Network 、UTC、PID namespace,可以直接通過(guò) localhost 進(jìn)行通信。
支持 CPU / Mem 超賣
支持一個(gè)或者多個(gè) init containers
Pod 可以共享 Volume,使得多個(gè)容器之間可以共享數(shù)據(jù)。
Pod 生命周期短暫,且不會(huì)自愈。需要結(jié)合 Deployment、DaemonSet、StatefulSet 等控制器來(lái)達(dá)到容錯(cuò)。
優(yōu)雅退出:Pod 刪除的時(shí)候先給其進(jìn)程發(fā)送 SIGTERM,等待一段時(shí)間(grace period)后才強(qiáng)制停止依然還在運(yùn)行的進(jìn)程。
支持(反)親和性
支持指定調(diào)度器
支持優(yōu)先級(jí)和搶占性調(diào)度(v1.8 及以上)
支持配置 serviceAccount
kubernetes v1.8+ 且 docker >= 1.13.1 才支持容器之間共享 PID namespace,還需要配置 kubelet —docker-disable-shared-pid=falseLabels & SelectorsInit Containers - Kubernetes
Labels 是 Key-Value 對(duì),k8s 用于標(biāo)識(shí)其所有資源;而 Selectors 是標(biāo)簽選擇器,用于選擇特定 labels 的資源。
Selectors 目前支持兩種選擇器:Equality-based(基于平等) 和 Set-based(基于集合)。
1. Equality-based
基于相等的或者不想等的條件用標(biāo)簽的 keys 和 values 進(jìn)行過(guò)濾。支持三種運(yùn)算符:“=”,“==” 和 “!=”。還可以使用逗號(hào)操作符,連接多個(gè)運(yùn)算符。
2. Set-based
Set-based 的選擇器允許用一組 value 來(lái)過(guò)濾 key。
支持三種操作符:in,notin 和 exists(僅針對(duì)于 key 符號(hào))。
例如:
env in (dev, test, staging, prod) env notin (staging, prod) partition !partition
Set-based 可以和 Equality-based 條件結(jié)合使用。
DeploymentKubernetes 有幾個(gè)版本的副本控制器,比如 Replication Controller、Replica Set(RC 升級(jí)版)和 Deployments。
Deployment 是邏輯層的一種抽象,為 Pod 和 ReplicaSet 提供了一種聲明式定義,來(lái)代替以前的 Replication Controller 更方便的管理應(yīng)用。
在 Kubernetes 的實(shí)際使用中,RS 也屬于底層概念,由 Deployment 來(lái)管理,因此用戶一般都是與 Deployment 打交道。
Deployment 有幾種 典型的應(yīng)用場(chǎng)景,比如:
定義 Deployment 來(lái)創(chuàng)建 Pod 和 ReplicaSet
滾動(dòng)升級(jí)和回滾應(yīng)用,比如藍(lán)綠發(fā)布,金絲雀發(fā)布等等
擴(kuò)容和縮容
暫停和繼續(xù) Deployment
RC、RS、Deployment 等對(duì)象都是為了解決無(wú)狀態(tài)服務(wù)而設(shè)計(jì),下面還會(huì)針對(duì)有狀態(tài)服務(wù),介紹對(duì)應(yīng)的對(duì)象。Service
Kubernetes Pod 有自己的生命周期,可以隨時(shí)被創(chuàng)建和銷毀,而一旦銷毀就永遠(yuǎn)結(jié)束了。而每個(gè) Pods 都有自己的 IP,而 Pod 的生命周期也意味著 這些 IP 地址不總是穩(wěn)定可靠的。所以需要有針對(duì)容器的服務(wù)發(fā)現(xiàn)與負(fù)載均衡機(jī)制,來(lái)訪問(wèn)這個(gè) Pod 邏輯分組。
service 是對(duì)一組提供相同功能的 Pods 集合的抽象,為這組Pods提供統(tǒng)一的訪問(wèn)入口。借助 Service 可以方便的實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)與負(fù)載均衡,并實(shí)現(xiàn)應(yīng)用的零宕機(jī)升級(jí)。
在 Kubernetes 集群中,每個(gè) Node 都會(huì)部署一個(gè) kube-proxy 進(jìn)程。kube-proxy 負(fù)責(zé)為 Service 實(shí)現(xiàn)了一種 VIP (虛 IP)。
Service 有四種類型:
ClusterIP:默認(rèn)類型,自動(dòng)分配一個(gè)僅 cluster 內(nèi)部可以訪問(wèn)的虛擬 IP。
NodePort:該模式會(huì)在每臺(tái)機(jī)器上綁定一個(gè)端口,這樣可以通過(guò) NodeIP:NodePort 進(jìn)行服務(wù)訪問(wèn)。
LoadBalancer:該模式會(huì)跟云服務(wù)商有關(guān),比如可以通過(guò) aliyun、aws 等創(chuàng)建一個(gè)外部的負(fù)載均衡器,將請(qǐng)求轉(zhuǎn)發(fā)到對(duì)應(yīng)的服務(wù)組。
ExternalName:支持將服務(wù)通過(guò) DNS CNAME 記錄方式轉(zhuǎn)發(fā)到指定的域名(通過(guò) spec.externalName 設(shè)定)。需要 kube-dns 版本大于 1.7。
Ingress通常情況下,Service 和 Pod 僅支持在集群內(nèi)部進(jìn)行服務(wù)訪問(wèn)。而 Ingress 可以提供外部服務(wù)可訪問(wèn)的 URL / 負(fù)載均衡器等。
Ingress 對(duì)象只是配置了一些規(guī)則,若要實(shí)現(xiàn)集群外部的訪問(wèn),還需要部署一個(gè) Ingress Controller,它會(huì)從 kube-apiserver 監(jiān)聽(tīng) Ingress 和 Service 的變更,并根據(jù) Ingress 的規(guī)則配置負(fù)載均衡來(lái)提供訪問(wèn)入口。
JobJob 負(fù)責(zé)批量處理短暫的一次性任務(wù),僅執(zhí)行一次,并保證處理的一個(gè)或者多個(gè)Pod成功結(jié)束。
具體的可以查看:深入K8S Job(一):介紹
PV & PVCPersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 提供了方便的持久化卷:PV 提供網(wǎng)絡(luò)存儲(chǔ)資源,而 PVC 請(qǐng)求存儲(chǔ)資源。這樣,設(shè)置持久化的工作流包括配置底層文件系統(tǒng)或者云數(shù)據(jù)卷、創(chuàng)建持久性數(shù)據(jù)卷、最后創(chuàng)建 PVC 來(lái)將 Pod 跟數(shù)據(jù)卷關(guān)聯(lián)起來(lái)。PV 和 PVC 可以將 pod 和數(shù)據(jù)卷解耦,pod 不需要知道確切的文件系統(tǒng)或者支持它的持久化引擎。
PV 也是集群的資源(等同于cpu / mem),但不同于 pod volume,它是獨(dú)立于 Pod 的生命周期。
支持類別劃分,比如不同的服務(wù)質(zhì)量級(jí)別(SSD / SATA),不同的備份策略等。
支持動(dòng)態(tài) PV(StorageClass)。
支持卷的擴(kuò)容及快照(v1.8+ 特性)。
支持 Local Volume,允許將 Node 本地的磁盤、分區(qū)或者目錄作為持久化存儲(chǔ)使用。但是需要注意該模式不支持動(dòng)態(tài)創(chuàng)建,使用前需要預(yù)先創(chuàng)建好 PV。
PV 是存儲(chǔ)資源,而 PVC 是對(duì) PV 的請(qǐng)求。PVC 和 Pod 類似,Pod 消費(fèi) Node 資源,而 PVC 消費(fèi) PV 資源;Pod 能夠請(qǐng)求 CPU 和內(nèi)存資源,而 PVC 請(qǐng)求特定大小和訪問(wèn)模式的數(shù)據(jù)卷。
StatefulSetStatefulSet 用于支持部署有狀態(tài)服務(wù),而有狀態(tài)的服務(wù)很關(guān)鍵的就是持久化存儲(chǔ),這就依賴上面介紹的 PV & PVC 了。
StatefulSet 的應(yīng)用場(chǎng)景包括:
穩(wěn)定的持久化存儲(chǔ),即不需要關(guān)心 Pod 的重新調(diào)度,服務(wù)訪問(wèn)的還是相同的持久化數(shù)據(jù)。
穩(wěn)定的網(wǎng)絡(luò)標(biāo)志,即 Pod 重新調(diào)度后其 PodName 和 HostName 不變。
有序部署,即 Pod 的創(chuàng)建是有順序的,在部署或者擴(kuò)展的時(shí)候要依據(jù)定義的順序依次進(jìn)行創(chuàng)建,基于 init containers 來(lái)實(shí)現(xiàn)。
有序收縮(刪除)。
參考案例:Running ZooKeeper, A Distributed System Coordinator - Kubernetes
Other推薦在 k8s v1.9 + 的版本使用 statefulSet。
為了保證數(shù)據(jù)安全,刪除 StatefulSet 是不會(huì)刪除 PV 的,需要考慮清理策略。
StatefulSet 需要提前創(chuàng)建一個(gè) Headless Service 來(lái)定義 DNS domain。
還有很多別的資源對(duì)象,這里暫不一一介紹了,因?yàn)樯婕暗钠鶗?huì)比較長(zhǎng)。
對(duì)于上面或者未提及的資源對(duì)象需要多了解一下的,建議查閱官方文檔。
比如:
Namespace
Node
Secret:集群的秘藥管理
ConfigMap:集群的配置管理
Event:記錄k8s集群運(yùn)行所遇到的各種大事件
HPA(HorizontalPodAutoscaler):自動(dòng)擴(kuò)縮容
DaemonSet:保證每個(gè)Node上都運(yùn)行一個(gè)容器副本,常用于部署一些集群服務(wù)的agent(日志/監(jiān)控…), 也可以基于Pod進(jìn)行親和部署。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/32743.html
摘要:標(biāo)識(shí)是與操作對(duì)象間的紐帶。集群為每個(gè)對(duì)象維護(hù)三類信息對(duì)象元數(shù)據(jù)期望狀態(tài)與實(shí)際狀態(tài)元數(shù)據(jù)指對(duì)象的基本信息,比如命名標(biāo)簽注釋等等,用于識(shí)別對(duì)象期望狀態(tài)一般由用戶配置來(lái)描述的實(shí)際狀態(tài)是由集群各個(gè)組件上報(bào)的集群實(shí)際的運(yùn)行情況。 綜述 學(xué)習(xí)Kubernetes時(shí),發(fā)現(xiàn)它的概念和術(shù)語(yǔ)還是比較多的,光靠啃官方文檔比較晦澀。所以邊學(xué)習(xí)邊整理,對(duì)主要的概念和術(shù)語(yǔ)做一下分類及簡(jiǎn)要說(shuō)明。感覺(jué)把重要概念都理解...
摘要:本文中,我們將描述系統(tǒng)的架構(gòu)開(kāi)發(fā)演進(jìn)過(guò)程,以及背后的驅(qū)動(dòng)原因。應(yīng)用管理層提供基本的部署和路由,包括自愈能力彈性擴(kuò)容服務(wù)發(fā)現(xiàn)負(fù)載均衡和流量路由。 帶你了解Kubernetes架構(gòu)的設(shè)計(jì)意圖、Kubernetes系統(tǒng)的架構(gòu)開(kāi)發(fā)演進(jìn)過(guò)程,以及背后的驅(qū)動(dòng)原因。 showImg(https://segmentfault.com/img/remote/1460000016446636?w=1280...
摘要:早在年針對(duì)高科技行業(yè)和高科技企業(yè)生命周期的特點(diǎn),提出了著名的鴻溝理論。今天我們嘗試以鴻溝理論為基礎(chǔ)來(lái)分析云原生領(lǐng)域顛覆性的創(chuàng)新技術(shù)?;剡^(guò)頭來(lái)看,靈雀云從早期全力投入技術(shù)棧,是最早進(jìn)行產(chǎn)品化的廠商。 歷史進(jìn)入2019年,放眼望去,今天的整個(gè)技術(shù)大環(huán)境和生態(tài)都發(fā)生了很大的變化。在己亥豬年春節(jié)剛剛過(guò)去的早春時(shí)節(jié),我們來(lái)梳理和展望一下整個(gè)云原生技術(shù)趨勢(shì)的發(fā)展,是一件很有意義的事情,這其中有些變...
摘要:出現(xiàn)后,新的監(jiān)控架構(gòu)將變成上圖的樣子核心流程黑色部分這是正常工作所需要的核心度量,從等獲取度量數(shù)據(jù),再由提供給控制器等使用。本文為容器監(jiān)控實(shí)踐系列文章,完整內(nèi)容見(jiàn) 概述 從 v1.8 開(kāi)始,資源使用情況的監(jiān)控可以通過(guò) Metrics API的形式獲取,具體的組件為Metrics Server,用來(lái)替換之前的heapster,heapster從1.11開(kāi)始逐漸被廢棄。 Metrics-S...
摘要:出現(xiàn)后,新的監(jiān)控架構(gòu)將變成上圖的樣子核心流程黑色部分這是正常工作所需要的核心度量,從等獲取度量數(shù)據(jù),再由提供給控制器等使用。本文為容器監(jiān)控實(shí)踐系列文章,完整內(nèi)容見(jiàn) 概述 從 v1.8 開(kāi)始,資源使用情況的監(jiān)控可以通過(guò) Metrics API的形式獲取,具體的組件為Metrics Server,用來(lái)替換之前的heapster,heapster從1.11開(kāi)始逐漸被廢棄。 Metrics-S...
閱讀 2677·2021-11-24 09:38
閱讀 1987·2019-08-30 15:53
閱讀 1248·2019-08-30 15:44
閱讀 3240·2019-08-30 14:10
閱讀 3591·2019-08-29 16:29
閱讀 1811·2019-08-29 16:23
閱讀 1108·2019-08-29 16:20
閱讀 1481·2019-08-29 11:13