Kubernetes介紹

前言

從本周開始以後嘗試開始每周兩更,本篇原計劃是Docker多機網路,該篇文章有些卡文,所以先更新篇Kubernetes文章,關於Docker系列文章後面應該就剩下兩篇了,等後續Kubernetes使用篇講完以後,再開始做一些Docker相關深層次思考。

Docker系列文章:
  1. 為什麼要學習Docker
  2. Docker基本概念
  3. Docker鏡像基本原理
  4. Docker容器數據卷
  5. Dockerfile
  6. Docker單機網路上
  7. Docker單機網路下
  8. Docker單機網路實戰
  9. Docker隔離技術
  10. Docker限制
  11. Docker Compose

什麼是Kubernetes

Kubernetes是Google十幾年來大規模容器實踐的成果,是GoogleBrog的開源版本。Google 每周會啟用超過 20 億個容器——全都由內部平台 Borg 支撐。Borg 是 Kubernetes 的前身,汲取了Brog的經驗和教訓,所以Kubernetes以開源,就迅速稱霸容器領域。

Kubernetes是一個全新基於容器技術的分散式架構方案,它可以幫助用戶省去應用容器化過程的許多手動部署和擴展操作。也就是說,您可以將運行容器的多組主機聚集在一起,由 Kubernetes 幫助您輕鬆高效地管理這些集群。而且,這些集群可跨公共雲、私有雲或混合雲部署主機。因此,對於要求快速擴展的雲原生應用而言,Kubernetes 是優秀的託管平台。

Kubernetes是一個開放平台,它不局限於任何語言,不限制任何編程介面。無論用啥語言編寫的服務,都可以被映射為Kubernetes的服務,並且通過標準的TCP通訊協議進行交互。Kubernetes是一種更高層次的抽象,對編程的語言、框架、中間件沒有任何浸入,現有的系統和平台很容器可以遷移到Kubernetes平台上。

Kubernetes是一個完備的分散式系統支撐平台。Kubernetes具有完善的集群管理能力,包含服務的註冊、服務發現、負責均衡、故障發現、服務滾動升級、在線擴容以及多粒度的資源配額管理等。同時Kubernetes提供的完善的管理工具,這些工具覆蓋了整個軟體生命周期。

總結一下,Kubernetes是一個具有優秀背景的、全新的基於容器技術的分散式架構解決方案,並且是一個一站式的完備的分散式系統開發和支撐平台。

Kubernetes核心概念介紹

Kubernetes的總架構圖

img
img

Kubernetes核心組件介紹

Master
kube-apiserver

kube-apiserver 是 Kubernetes 最重要的核心組件之一,kube-apiserver在Kubernetes 集群中扮演著通訊樞紐的角色。kube-apiserver不僅負責和 etcd 交互,並切對外提供統一的API調用入口, 所有的交互都是kube-apiserver為核心的, kube-apiserver提供了資源操作的唯一入口,並提供認證、授權、訪問控制、API 註冊和發現等機制等功能;

kube-controller-manager

kube-controller-manager 是Kubernetes 集群的大總管,負責集群內 Node、Namespace、Service、Token、Replication 等資源對象的管理,使集群內的資源對象維持在預期的工作狀態。每一個 Controller 通過kube-apiserver提供的 Restful 介面實時監控集群內每個資源對象的狀態,當發生故障,導致資源對象的工作狀態發生變化,就進行干預,嘗試將資源對象從當前狀態恢復為預期的工作狀態。常見的 Controller 有 Namespace Controller、Node Controller、Service Controller、ServiceAccount Controller、Token Controller、ResourceQuote Controller、Replication Controller等。

kube-scheduler

kube-scheduler負責對集群內部的資源進行調度,相當於「調度室」。接收來自kube-apiserver創建Pods的任務,收到任務後它會檢索出所有符合該Pod要求的Node節點(通過預選策略和優選策略),開始執行Pod調度邏輯。調度成功後將Pod綁定到目標節點上。

Etcd

Etcd在Kubernetes中是用來存放數據並通知變動的,Kubernetes中把關鍵數據都存放在Etcd中,在Kubernetes中,數據是隨時發生變化的,比如說用戶提交了新任務、增加了新的Node、容器死掉了等等,都會觸髮狀態數據的變更。狀態數據變更之後,Master上的kube-scheduler和kube-controller-manager,就會重新發起變更,這些變化,都需要及時地通知給每個組件。Etcd有一個特徵,可以在調用它的api中,監聽api的數據,一旦數據發生變化,就會收到通知。Kubernetes利用這個特徵,當節點消失或配置有變動時,Etcd會第一時間發現,就會告知每個訂閱過的組件,這個時候發生變化組件可以知道自己應該做什麼。對於kube-scheduler和kube-controller-manager只需要把最新的數據寫入到Etcd中就可以了,不需要再次去發起調用。

img
img
Node
kubelet

在Kubernetes集群中,每個Node節點都會啟動kubelet進程,用來處理Master節點下發到本節點的任務,管理Pod和其中的容器。kubelet會在kube-apiserver上註冊節點資訊,定期向Master彙報節點資源使用情況,並通過cAdvisor監控容器和節點資源。可以把kubelet理解成Node上的Pod管家。

kube-proxy

在Kubernetes集群中,每個Node節點上都會部署kube-proxy,kube-proxy 會作為守護進程跑在每個節點上通過監聽著Etcd中關於Pod的最新狀態,一旦檢查到一個Pod資源發生變動,kube-proxy 就立即將這些變動,反應在iptables 或 ipvs規則中,當後續再有請求發到Service時,Service可以通過ipvs最新的規則將請求的分發到Pod上,實現Service到Pod的請求路由和轉發,從而實現Kubernetes層級的虛擬網路轉發。

container

在Kubernetes集群中,每個Node節點都會存在container。container負責本機容器的管理和創建,目前最常採用的就是Docker。

結束

歡迎大家點點關注,點點贊!

Tags: