Kubernetes核心原理(二)之Controller Manager
1. Controller Manager簡介
Controller Manager作為叢集內部的管理控制中心,負責叢集內的Node、Pod副本、服務端點(Endpoint)、名稱空間(Namespace)、服務賬號(ServiceAccount)、資源定額(ResourceQuota)的管理,當某個Node意外宕機時,Controller Manager會及時發現並執行自動化修復流程,確保叢集始終處於預期的工作狀態。
每個Controller通過API Server提供的介面實時監控整個叢集的每個資源物件的當前狀態,當發生各種故障導致系統狀態發生變化時,會嘗試將系統狀態修復到“期望狀態”。
2. Replication Controller
為了區分,資源物件Replication Controller簡稱RC,而本文是指Controller Manager中的Replication Controller,稱為副本控制器。副本控制器的作用即保證叢集中一個RC所關聯的Pod副本數始終保持預設值。
- 只有當Pod的重啟策略是Always的時候(RestartPolicy=Always),副本控制器才會管理該Pod的操作(建立、銷燬、重啟等)。
- RC中的Pod模板就像一個模具,模具製造出來的東西一旦離開模具,它們之間就再沒關係了。一旦Pod被建立,無論模板如何變化,也不會影響到已經建立的Pod。
- Pod可以通過修改label來脫離RC的管控,該方法可以用於將Pod從叢集中遷移,資料修復等除錯。
- 刪除一個RC不會影響它所建立的Pod,如果要刪除Pod需要將RC的副本數屬性設定為0。
- 不要越過RC建立Pod,因為RC可以實現自動化控制Pod,提高容災能力。
2.1. Replication Controller的職責
- 確保叢集中有且僅有N個Pod例項,N是RC中定義的Pod副本數量。
- 通過調整RC中的spec.replicas屬性值來實現系統擴容或縮容。
- 通過改變RC中的Pod模板來實現系統的滾動升級。
2.2. Replication Controller使用場景
使用場景 | 說明 | 使用命令 |
---|---|---|
重新排程 | 當發生節點故障或Pod被意外終止執行時,可以重新排程保證叢集中仍然執行指定的副本數。 | |
彈性伸縮 | 通過手動或自動擴容代理修復副本控制器的spec.replicas屬性,可以實現彈性伸縮。 | kubectl scale |
滾動更新 | 建立一個新的RC檔案,通過kubectl 命令或API執行,則會新增一個新的副本同時刪除舊的副本,當舊副本為0時,刪除舊的RC。 | kubectl rolling-update |
[[email protected] ~] # kubectl rolling-update --help Perform a rolling update of the given ReplicationController. Replaces the specified replication controller with a new replication controller by updating one pod at a time to use the new PodTemplate. The new-controller.json must specify the same namespace as the existing replication controller and overwrite at least one (common) label in its replicaSelector. Usage: kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags] Aliases: rolling-update, rollingupdate Examples: # Update pods of frontend-v1 using new replication controller data in frontend-v2.json. $ kubectl rolling-update frontend-v1 -f frontend-v2.json # Update pods of frontend-v1 using JSON data passed into stdin. $ cat frontend-v2.json | kubectl rolling-update frontend-v1 -f - # Update the pods of frontend-v1 to frontend-v2 by just changing the image, and switching the # name of the replication controller. $ kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2 # Update the pods of frontend by just changing the image, and keeping the old name $ kubectl rolling-update frontend --image=image:v2 |
3. Node Controller
kubelet在啟動時會通過API Server註冊自身的節點資訊,並定時向API Server彙報狀態資訊,API Server接收到資訊後將資訊更新到etcd中。
Node Controller通過API Server實時獲取Node的相關資訊,實現管理和監控叢集中的各個Node節點的相關控制功能。流程如下
1、Controller Manager在啟動時如果設定了--cluster-cidr引數,那麼為每個沒有設定Spec.PodCIDR的Node節點生成一個CIDR地址,並用該CIDR地址設定節點的Spec.PodCIDR屬性,防止不同的節點的CIDR地址發生衝突。
2、具體流程見以上流程圖。
3、逐個讀取節點資訊,如果節點狀態變成非“就緒”狀態,則將節點加入待刪除佇列,否則將節點從該佇列刪除。
4. ResourceQuota Controller
資源配額管理確保指定的資源物件在任何時候都不會超量佔用系統物理資源。
支援三個層次的資源配置管理:
1)容器級別:對CPU和Memory進行限制
2)Pod級別:對一個Pod內所有容器的可用資源進行限制
3)Namespace級別:包括
- Pod數量
- Replication Controller數量
- Service數量
- ResourceQuota數量
- Secret數量
- 可持有的PV(Persistent Volume)數量
說明:
- k8s配額管理是通過Admission Control(准入控制)來控制的;
- Admission Control提供兩種配額約束方式:LimitRanger和ResourceQuota;
- LimitRanger作用於Pod和Container;
- ResourceQuota作用於Namespace上,限定一個Namespace裡的各類資源的使用總額。
ResourceQuota Controller流程圖:
5. Namespace Controller
使用者通過API Server可以建立新的Namespace並儲存在etcd中,Namespace Controller定時通過API Server讀取這些Namespace資訊。
如果Namespace被API標記為優雅刪除(即設定刪除期限,DeletionTimestamp),則將該Namespace狀態設定為“Terminating”,並儲存到etcd中。同時Namespace Controller刪除該Namespace下的ServiceAccount、RC、Pod等資源物件。
6. Endpoint Controller
Service、Endpoint、Pod的關係:
Endpoints表示了一個Service對應的所有Pod副本的訪問地址,而Endpoints Controller負責生成和維護所有Endpoints物件的控制器。它負責監聽Service和對應的Pod副本的變化。
- 如果監測到Service被刪除,則刪除和該Service同名的Endpoints物件;
- 如果監測到新的Service被建立或修改,則根據該Service資訊獲得相關的Pod列表,然後建立或更新Service對應的Endpoints物件。
- 如果監測到Pod的事件,則更新它對應的Service的Endpoints物件。
kube-proxy程序獲取每個Service的Endpoints,實現Service的負載均衡功能。
7. Service Controller
Service Controller是屬於kubernetes叢集與外部的雲平臺之間的一個介面控制器。Service Controller監聽Service變化,如果是一個LoadBalancer型別的Service,則確保外部的雲平臺上對該Service對應的LoadBalancer例項被相應地建立、刪除及更新路由轉發表。
參考《Kubernetes權威指南》
相關推薦
Kubernetes核心原理(二)之Controller Manager
1. Controller Manager簡介Controller Manager作為叢集內部的管理控制中心,負責叢集內的Node、Pod副本、服務端點(Endpoint)、名稱空間(Namespace)、服務賬號(ServiceAccount)、資源定額(ResourceQ
Kubernetes核心原理(一)之API Server
1. API Server簡介 k8s API Server提供了k8s各類資源物件(pod,RC,Service等)的增刪改查及watch等HTTP Rest介面,是整個系統的資料匯流排和資料中心。 kubernetes API Server的功能: 提供了叢集管理的REST API介面(包括認
計算機組成原理(二)之系統匯流排
在這個系列文章的第一講,漫談計算機組成原理(一)之程式執行的過程 中說過,現代計算機是從馮若伊曼計算機發展起來的。其組成部分有儲存器、運算器、控制器、輸入裝置、輸出裝置,在現代計算機中,人們將運算器與控制器封裝起來成為CPU(中央處理
淺析SSH核心原理(二)
Hibernate是一個開放原始碼的ORM(物件-關係對映)框架,它對JDBC進行了非常輕量級的物件封裝,使得Java程式設計師可以隨心所欲的使用物件程式設計思維來操縱資料庫。 Hibernate可以應用在任何使用JD
漫談計算機組成原理(二)之系統匯流排
在這個系列文章的第一講,漫談計算機組成原理(一)之程式執行的過程 中說過,現代計算機是從馮若伊曼計算機發展起來的。其組成部分有儲存器、運算器、控制器、輸入裝置、輸出裝置,在現代計算機中,人們將運算器與控制器封裝起來成為CPU(中央處理單元)。計算機的各種部
Vue 進階系列(二)之外掛原理及實現
Vue進階系列彙總如下,歡迎閱讀,歡迎加群討論(文末)。 Vue 進階系列(一)之響應式原理及實現 Vue 進階系列(二)之外掛原理及實現 使用方法 外掛的詳細使用方法詳情看Vue官網 Vue官網之外掛Plugins 概括出來就是 1、通過Vue.use(MyPlugin)使用,
spring原始碼學習之路---IOC實現原理(二)
上一章我們已經初步認識了BeanFactory和BeanDefinition,一個是IOC的核心工廠介面,一個是IOC的bean定義介面,上章提到說我們無法讓BeanFactory持有一個Map package org.springframework.beans.factory.supp
Apache Kafka入門教程輕鬆學-第四章 Kafka核心元件和流程-設計-原理(二)協調器(消費者和組協調器)
本入門教程,涵蓋Kafka核心內容,通過例項和大量圖表,幫助學習者理解,任何問題歡迎留言。 目錄: 上一節介紹了kafka工作的核心元件--控制器。本節將介紹消費者密切相關的元件--協調器。它負責消費者的出入組工作。大家可以回想一下kafka核心概念中關於吃蘋果的場景,如
hadoop之hdfs基本原理(二)
一 HDFS基本概念 hdfs檔案被分成塊進行儲存,預設64M,塊是檔案儲存處理的邏輯單元 hdfs有兩個節點,NameNode和DataNode NameNode存放檔案元資料:分別是檔案與資料塊的對映表,資料塊與資料節點的對映表。配置副本策略和處理客戶
python爬蟲從入門到放棄(二)之爬蟲的原理
在上文中我們說了:爬蟲就是請求網站並提取資料的自動化程式。其中請求,提取,自動化是爬蟲的關鍵!下面我們分析爬蟲的基本流程爬蟲的基本流程發起請求通過HTTP庫向目標站點發起請求,也就是傳送一個Request,請求可以包含額外的header等資訊,等待伺服器響應獲取響應內容如果伺服器能正常響應,會得到一個Resp
Oracle之SQL優化-索引的基本原理(二)
導讀:1、為什麼使用索引? 2、什麼情況下適合建立索引? 3、建立索引的策略。 4、如何對索引進行操作。 5、常用到的一些索引操作。 1、為什麼使用索引? (1)、原因 索引中只有一列,io小,所以較快; 索引中此列是排序的,二叉查詢,提高查詢速度。 (2)、原因分
編譯原理實驗(二)之語法分析
採用實驗1的簡單語言,設計並實現含多條簡單賦值語句的語法分析程式,要求採用算符優先的分析演算法。 注意與實驗1、2的銜接。 using System; using System.Collections.Generic; using System.IO; usin
Oracle 叢集】ORACLE DATABASE 11G RAC 知識圖文詳細教程之ORACLE叢集概念和原理(二)
概述:寫下本文件的初衷和動力,來源於上篇的《oracle基本操作手冊》。oracle基本操作手冊是作者研一假期對oracle基礎知識學習的彙總。然後形成體系的總結,一則進行回顧複習,另則便於查詢使用。本圖文文件亦源於此。閱讀Oracle RAC安裝與使用教程前,筆者先對這篇文章整體構思和形成進行梳理。
SpringMVC原始碼分析(二)之請求如何轉發到對應的Controller
在前一篇對DispatcherServlet的分析中,初略的過了下請求是如何處理的,本文將重點分析,HandlerMapping與HandlerAdapter是如何工作的 在web容器啟動的過程中,會初初始化一系列SpringMVC所需
Spring原始碼學習之IOC實現原理(二)-ApplicationContext
一.Spring核心元件結構 總的來說Spring共有三個核心元件,分別為Core,Context,Bean.三大核心元件的協同工作主要表現在 :Bean是包裝我們應用程式自定義物件Object的,Object中存有資料,而Context就是為了這些資料存放提供一個生存環境,儲存各個 bean之間的
Zigbee學習(二)之Zstack協議棧執行原理分析
Zigbee協議棧的實現方式採用的是分層的思想,分別有物理層、資料鏈路層(介質訪問控制層)、網路層和應用層。每一層都實現了不同的功能,但是每一層實現的功能對於其它層來說又是封閉的,如果要進行資料互通,需要呼叫一些API函式。這是一些淺顯的基本概念,百度一下都可以知道的啦!那
Kubernetes學習筆記(二):網路原理
Kubernetes網路模型 Kubernetes網路模型設計的一個基礎原則是:每個Pod都擁有一個獨立的IP地址,而且假定所有Pod都在一個可以直接連通的、扁平的網路空間中。所以不管它們是否執行在同一個Node(宿主機)中,都要求它們可以直接通過對方的
推薦一個壓縮圖片,但是品質影響不大的網站(二)之原理探索
我一直好奇他是怎麼壓縮的,今天我來說說自己的一些發現 首先,我上次有個錯誤,說PS我已經不知道該怎麼壓縮了,果然只是我不知道怎麼壓縮,懂的太少而已。 1.我的原始工程其實本來就選擇成了8位通道; 2
Atlassian In Action-Jira之核心配置(二)
道生一,一生二,二生三,三生萬物。 --《道德經》 如果說第一節的指導思想是管理之“道“,那我們本節的核心配置就是Jira系統之”道“了。有了核心配置,才有後續的各種管理方法的實施可能。 本節的核心配置包括下面幾點: 專案 使用者組 問題型別 欄位配置 工作流 專案(Project) 專案的主要用途
重學計算機組成原理(二)- 制定學習路線,攀登“效能”之巔
0 學習路線的知識點概括 學習計算機組成原理,就是學習計算機是如何協調執行的 計算機組成原理的英文叫Computer Organization Organization 意"組織機構"。 該組織機構能夠進行各種計算、控制、讀取輸入,進行輸出,達成各種強大的功能。 把整個計算機組成原理的知識點拆分成了