Kubernetes CKA課程筆記 11

Kubernetes Cluster 安裝步驟細節解說

ZONGRU Li
6 min readOct 10, 2021

目前我們在AWS的EC2 Server上有1 x master Node + 2 x worker Node

以下講解實際Kubernetes Cluster安裝步驟

步驟1.

  1. 安裝Container Runtime到這三台(並設置為常態的Linux運行)
  2. 安裝kubelet到這三台(並設置為常態的Linux運行)

上述兩個都能由應用程式儲存的倉庫(package repository)進行安裝

(就當作一般應用程式那樣安裝)

當上述兩樣安裝完後,即可佈署Pods提供給其他K8s元件

步驟2.(這邊安裝物件出現差異,是以Pod形式的部分)

master Node(Control Plane)上此時可以安裝部分Pods

由這些Pods運行前面章節提到master該運行的系統:

  1. API Server
  2. Scheduler
  3. Controller Manager
  4. etcd

步驟3.

另外一提要在三台都要佈署的是 — kube proxy(以Pod形式運作)

步驟4.

考量到上述有些系統要用Pod方式運行,就該有以下考量

  1. 製作其K8s manifest file
  2. 並保證其能安全地運作(Deploy securely,i.e.別人手伸不進這些系統)

(保證這些系統間溝通是加密安全地方式)

有上述考量情況下,就還要談到K8s的另一種Pod — Static Pods

前面章節我們講到的Pod都是要我們自己對著master的API Server發動請求

API Server再去呼喚Scheduler

Scheduler決定好要分配的Node後命令kubelet去這個Node搭建實際的Pod

之後Pod的資料儲存進etcd store

(上述Pod的就是普通的Regular Pod)

但是我們都還沒搭好這些元件(API Server,Scheduler,Controller Manager,etcd),怎麼透過這些物件建立Pod呢!?到底是先要有蛋還是先要有雞!?

所以要引入 — Static Pods

Static Pods:

  • 直接地由kubelet daemon管理
  • 不用master Node(Control Plane)驅動
  • 所以只要搭建好Container Runtime
  • 並且搭建好kubelet
  • 即可建立Static Pods

所以簡單將兩種Pod作圖劃分如下:

而實際Kubelet怎麼做到呢?

答案是:

Kubelet會一直盯著一個default目錄的manifests file,這個目錄位置是:

/etc/kubernetes/manifests

並依據這些manifests file建立成Static Pods(不需要master其他程式協助)

再來就要談到Regular Pods vs Static Pods差異:

  • Kubelet(不是Controller Manager)會親自監視Static Pods運作/重啟
  • Static Pods 名稱字尾會帶著node HostName!!!

總結上述的內容,我們在master node上要先製作四個文檔:

  1. API ServerStatic Pod manifests file
  2. SchedulerStatic Pod manifests file
  3. Controller ManagerStatic Pod manifests file
  4. etcdStatic Pod manifests file

然後放置到/etc/kubernetes/manifests目錄下

在來還要談及各個安裝的元件之間如何安全地溝通

比如說日後API Server怎麼有區別性地(identify)呼叫kubelet

(這邊可能是因為日後master可能有多個node,也就是有多個API Server)

並且不同元件間的溝通理應是加密的形式(mutual TLS的加密溝通)

這時候就需要 →憑證(Certificates)

總歸兩個問題點:

1.在K8s Cluster內誰跟誰溝通?

  • 在K8s Cluster中,API Server管理了全部的溝通
  • (除了前面章節的外部Client發動請求到API Server外還包辦Node間溝通)
  • 幾乎所有非API Server的元件(像是Kubelet等元件)
  • 這些非API Server元件都會直接地與API Server溝通
  • 並且這些溝通都會帶著自簽(self-signed)憑證(K8s-CA憑證)(概念如下圖)
  • 每個元件都分別會有client或server憑證(看下面分類整理)
  • 這些憑證儲存於路徑=>/etc/kubernetes/pki

每個元件需要的憑證種類:

  1. API Server需要Server憑證
  2. SchedulerController ManagerClient憑證,以發動Req到API Server
  3. Kubeletetcd需要Server憑證,因為API Server也要呼叫他們,所以
  4. API Server還需要Client憑證
  5. Kubelet也需要Client憑證,因為Kubelet也會反過來呼叫API Server

當有Kubelet Request呼叫API Server,怎麼確定這個Request不是駭客發動的?

所以發動端就要拿著同一個CA(Certificate Authority)簽發的憑證

用以證明是同一個Cluster發動的的請求

管理整個Cluster內部憑證的部分就是 — PKI(Public Key Infrastructure)

但是還有一個請求是來自K8s Cluster外部的 — 就是我們自己(i.e. K8s Admin)

身為K8s Admin拿著的憑證自然也要同一個CA簽發的

總結在安裝K8s Cluster前我們要準備好以下:

  1. 對於整個K8s Cluster需要一份自簽憑證(K8s Cluster root CA)
  2. 而各個元件所需要的憑證也要來自同一個CA簽發

自此在安裝前我們需要準備:

Static Pod Manifests…#%$@#%^&^%^憑證....$超多....太複雜了.....

但是有一個command line工具提供上述準備的解套 →kubeadm

kubeadm:

  • 將協助快速建置K8s Cluster
  • 快速建立必要的設定
  • 快速做好需要的憑證
  • 不太需要擔心過程會有缺漏(因為這東西來自kubernetes官方維護)

所以後面就是用這個kubeadm工具來作實際kubernetes Cluster建置

參考課程(reference)

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet