Contents

K8s - 容器編排工具介紹

在現今軟體程式快速迭帶的時代就需要一個 “可靠、可擴展的分散式管理系統”,無論是軟體更新、系統維護都需要高度的穩定性及可用性,如果使用量一旦過多,也能快速且彈性的具備可擴展性,以上都可以透過 K8s 來達成目的。

1. K8s 基本介紹

k8s 全名 Kubernetes ,最早由 Google 開發為了大量編排容器所設計的管理工具,後來將原始碼開源貢獻給CNCF基金會( Cloud Native Computing Foundation )。 CNCF 官網連結請點我。CNCF 項目越來越多,各項目列表如下圖( K8 頂級項目也在其中 )。

https://i.imgur.com/PbFWsKu.png
The landscape from cncf.io


2. K8s 主元件架構

https://i.imgur.com/QLGDP5J.png
The components of a Kubernetes cluster from kubernetes.io

2.1 K8s 的組件作為生產工廠來比喻

一個總部公司加上多個不同區域的生產工廠:

一、 總公司( Master ):

  1. kube-controller-manager 總經理室(管理部門)
  2. kube-apiserver 秘書室 (傳達命令語彙報結果)
  3. etcd 公司檔案庫 ( K - V 格式 )
  4. kube-scheduler 調度室 ( 尋找最佳資源及查看不同調度規則 )
  5. cloud-controller-manager 外事聯絡區 (非必要)

二、 生產工廠(Worker):

  1. kubelet 工廠廠長 ( 控制 container)
  2. kube-proxy 工廠總機 ( 轉接外部請求,轉給正在生產的工廠 )

2.2 kube-controller-manager

總經理室 - 主要隨時監測所屬的狀態,復原計畫等,為整個 K8s 運作大腦,並透過 kube-apiserver 部頒命令,除了 kube-apiserver 秘書可以直接對口之外,其餘任何部門均不得直接與總經理室進行溝通。

2.3 kube-apiserver

秘書室 - 傳達總經理室來的命令,將指命令記錄一份在 ETCD 檔案庫內,並對口總公司各部門及各工廠廠長。

Note
包含使用者 kubectl 命令控制也是直接傳給 kube-apiserver,並不會直接對kube-controller-manager下達指令

2.4 etcd

公司檔案庫 - 分布式的 Key Value 儲存的資料庫。

2.4 kube-scheduler

調度室 - 尋找最佳及最適合生產的工廠(評估目前各機器的 CPU、RAM等各資源),並告知秘書室由此廠進行生產工作,並可以由使用者設定調度計畫,指定哪些機器執行哪些任務。

2.5 cloud-controller-manager

外事聯絡區 - 這是非必要的組件,主要為如果有混合雲,例如 GKE 等外部資源,可以協調控制。

2.6 kubelet

工廠廠長 - 啟動、停止、管理生產線 (容器)

2.7 kube-proxy

工廠總機 - 會與其它工廠總機互相溝通,記錄各工廠有哪些生產線的在生產的產品 ,如果有請求來,就將請求轉到對應生產產品的產品線去

3. K8s 快速安裝

K8s 手動安裝很多參數要配置,特別叢集環境難度很高(要求硬體資源也不少),不過對於一般開發者、或是初學者可以使用 Minikube 是由 Google 發布的一個輕量級工具,可以快速打造一個 k8s 環境,非常方便喔。

Warning
MiniKube 沒有高可用性功能,只有單一節點,請勿使用於正式生產環境

3.1 安裝步驟

  1. 基本需求
  • 2 CPUs
  • 2GB 記憶體
  • 20GB 硬碟空間
  1. 安裝 Docker
1
2
3
4
5
6
sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
sudo systemctl --now enable docker
Tip
Docker 安裝是 Redhat 系列為例,如果是 Ubuntu 或其它系列可以參考 Docker 官網安裝手冊
  1. 創建一個使用者

MiniKube 在安裝時會要求使用非 root 來執行操作,也比較安全,所以這邊創建一個角色為 k8s。

1
2
3
useradd k8s
usermod -aG docker k8s
passwd k8s
  1. 下載 Minikube

安裝檔以 x86 的 linux 為例,如果使用的是 arm 架構可以至 MiniKube 官網下載

1
2
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
  1. 安裝及啟動 Minikube

使用剛剛創建的 k8s 角色來執行,會自動拉取所需的 image 並且啟動

1
minikube start
Warning
Docker 的服務請不要關閉喔, Minikube 預設會藉由 Docker 的容器化技術
  1. 查看啟動後的 k8s

使用 minikube kubectl get pod -A 即可看到目前所有的 POD (服務)

1
2
3
4
5
6
7
8
9
[k8s@servera ~]$ minikube kubectl get po -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS      AGE
kube-system   coredns-64897985d-qszct            1/1     Running   2 (4m ago)   5m
kube-system   etcd-minikube                      1/1     Running   2 (4m ago)   5m
kube-system   kube-apiserver-minikube            1/1     Running   2 (5m ago)   5m
kube-system   kube-controller-manager-minikube   1/1     Running   2 (4m ago)   5m
kube-system   kube-proxy-97bx8                   1/1     Running   2 (4m ago)   5m
kube-system   kube-scheduler-minikube            1/1     Running   2 (5m ago)   5m
kube-system   storage-provisioner                1/1     Running   4 (4m ago)   5m
  1. 安裝 kubectl ( 可選 )

kubectl 可以不用安裝,也能直接用 minikube 封裝好的來使用, 不過習慣使用 kubectl 操作的朋友可以直接至 k8s 官網上下載直接安裝使用。

1
2
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

4. 小結

k8s 十分的強大,不過囿於功能很多,要不斷的練習操作才能變的更佳熟悉。



如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!