我們真的了解Kubernetes嗎?
Kebernetes系列一Kebernetes簡介
在很多同仁了解和調(diào)研Kubernetes時,認為它是一套非常復雜的系統(tǒng),各種抽象概念以及復雜的安裝過程,學習和使用成本高,排除故障難度大,在有完善的開發(fā)、測試、生產(chǎn)環(huán)境發(fā)布流程和平臺時,使用Kubernetes反而增加運維負擔,如不能及時排除故障提升業(yè)務的故障率,本人在此對Kubernetes做一下簡介、Kubernetes安裝、dockerfile和deployment demo。
Kubernetes是一個十分強大的容器編排系統(tǒng)。它通過管理控制、高效的任務包裝、超售、和進程級別性能隔離實現(xiàn)了高利用率。它支持高可用性應用程序與運行時功能,最大限度地減少故障恢復時間,減少相關故障概率的調(diào)度策略。目的是實現(xiàn)資源管理的自動化以及跨多個數(shù)據(jù)中心的資源利用率最大化。它是Google開源的一個容器編排引擎,它支持自動化部署、大規(guī)??缮炜s、應用容器化管理。
在Kubernetes中,我們可以創(chuàng)建多個容器,每個容器里面運行一個應用實例,然后通過內(nèi)置的負載均衡策略,實現(xiàn)對這一組應用實例的管理、發(fā)現(xiàn)、訪問,而這些細節(jié)都不需要運維人員去進行復雜的手工配置和處理。
Kubernetes 主要功能包括:
- 基于容器的應用部署、維護和滾動升級
- 負載均衡和服務發(fā)現(xiàn)
- 跨機器和跨地區(qū)的集群調(diào)度
- 自動伸縮,隨時擴展或收縮容器規(guī)模
- 無狀態(tài)服務和有狀態(tài)服務
- 一次打包多地部署
- 廣泛的 Volume 支持
- 支持公有云,私有云,混合云,多重云(multi-cloud)
- 提供容器彈性,如果容器失效就替換它,等等...
Kubernetes架構圖:

Kubernetes核心組件
Kubernetes 主要由以下幾個核心組件組成:
- etcd 提供監(jiān)聽watch機制,監(jiān)聽和推送變更,鍵值發(fā)生變化時會通知到API Server,保存了整個集群的狀態(tài);
- apiserver 提供了資源操作的唯一入口,并提供認證、授權、訪問控制、API 注冊和發(fā)現(xiàn)等機制,結果狀態(tài)持久存儲于etcd中,API Server是整個集群的網(wǎng)關;
- controller manager 負責維護集群的狀態(tài),比如故障檢測、自動擴展、滾動更新等;
- scheduler 負責資源的調(diào)度,按照預定的調(diào)度策略將 Pod 調(diào)度到相應的機器上;
- kubelet 負責維護容器的生命周期,同時也負責 Volume(CVI)和網(wǎng)絡(CNI)的管理;
- kube-proxy 負責為Service 提供 cluster 內(nèi)部的服務發(fā)現(xiàn)和負載均衡
資源抽象
- Pod
為最小調(diào)度單元,同一Pod中容器共享網(wǎng)絡名稱空間和存儲資源,由回環(huán)口lo直接通信
- 資源標簽
Label是將資源進行分類的標識符,是key/values數(shù)據(jù),為指定對象提供辨識性屬性
- 標簽選擇器
Selector根據(jù)Label來過濾符合條件的資源對象,使用標簽對資源對象進行分類,使用標簽選擇器挑選出它們
- Pod管制器
通常不直接部署及管理Pod,而是借助控制器Controller進行管理包括 ReplicationController、ReplicaSet、Deployment、StatefulSet、Job等
- 服務資源Service
Service是Pod上的資源抽像,將標簽選擇器選定的一組Pod定義統(tǒng)一固定訪問入口(IP及DNS名稱),到達Service的請求將負載均衡到后端的各Pod,Service也可將集群外部流量引入到集群中
- 存儲卷
Volume分為臨時卷、本地卷和網(wǎng)絡卷,臨時卷和本地卷位于Node本地,常用于數(shù)據(jù)緩存。
- Namespace
Namespace 是對一組資源和對象的抽象集合,比如可以用來將系統(tǒng)內(nèi)部的對象劃分為不同的項目組或用戶組。常見的 pods, services,deployments 等都是屬于某一個 namespace 的(默認是default)。