開始使用 Kubernetes (上)

要開始了解 Kubernetes,首先要先創建出一個實體來用於學習。

開始使用 Kubernetes (上)

要開始了解 Kubernetes,首先要先創建出一個實體來用於學習。

💡  我個人是使用 mac,所以下面有關於安裝的想關內容會以 mac 為主。
幾乎所有的工具我都是使用 asdf來安裝的,非常推薦使用!
💡  下面 asciinema 影片裡的所有指令直接 highlight 用於複製貼上!

kubectl

在開始使用 k8s 之前,首先需要安裝 kubectlkubectl 是一個 k8s 命令行工具,用於部署應用、檢視日誌、及各種和 k8s cluster 的互動。我個人喜歡使用 asdf 來安裝這類工具,但是根據官方文檔來安裝也是非常容易的。上面是一段很隨便的 asciinema,主要只是演示一些非常簡單的 kubectl

創建 Kubernetes Clusters

從零開始創建一個 Kubernetes Cluster 實際上是非常繁雜的一件事,但在開源社群的推動下,現在已經逐漸變得越來越簡單了。這裡將會簡單介紹各個常見的創建 Kubernetes 方法。

Locally 本地

在本地創建 k8s 是相較起來比較簡單且快速的辦法,非常適合用於各種測試和學習。常見的工具有 minikubekind

minikube

minikube 是一個用於創建本地單一集群 k8s 簡單的工具,是一個在 VM上創建一個單一節點 node 的 cluster。這是目前最常見用於在本地上模擬一個 k8s cluster 的工具。
因為是在本地上創建的 k8s,所以效能還是受限於自己電腦的處理器及內存大小,但作為學習用工具,在大多數情況下都是足夠的。
minikube  的安裝有許多種辦法,可以根據官方文檔來安裝。我個人喜歡使用 asdf 來安裝這類工具,上面是一段用 minikube 創建 cluster 的簡單 asciinema

kind

kindKubernetes in Docker 的簡寫,是使用 docker 為節點來創建 k8s 的工具。開發 kind 的初衷是為了測試 k8s 本身,但因為其輕便及簡單的特信,近來慢慢被使用於各種簡單的 local k8s service 測試等等。
kind 的安裝有許多種辦法,可以根據官方文檔來安裝。我個人喜歡使用 asdf 來安裝這類工具,上面是一段用 kind 創建 cluster 的簡單 asciinema

Cloud Managed

因為 Kubernetes 的快速普及,市面上幾乎所有的雲供應商都有自己的 Managed Kubernetes 服務。像是 GCP 的 Google Kubernetes Engine (GKE)AWS 的 Elastic Kubernetes Service (EKS)Azure 的 Azure Kubernetes Service (AKS),以至於 Digital Ocean、Linode、阿里巴巴、IBM、RedHat 等等,真的是一大堆而且競爭激烈!
Managed k8s 和一般自己創建和維護的 k8s 主要的差別就是,k8s 中的 master nodes 是由雲供應商管理的。簡單來說就是各種 control plane 的維護和運行都由廠商承包了,所以可以省下許多維護和升級所需的時間。
創建這些 managed k8s 的方法主要是透過各個雲供應商的使用者頁面 (UI/Console) 來完成的。但因為 GitOps 以及 Infrastructure as Code 概念的衍生,愈來愈多科技大廠開始使用 terraform 或是 pulumi 來在幾大雲供應商創建 k8s 了。

Self-Managed

有許多公司因為資安原因或是各種客製化原因,會組建一個團對來管理自己的 k8s clusters (像是我目前就職的公司)。像這種時候就會使用像是 kopskube-spraykubeadm 來創建 cluster。這些工具主要用途也是在各大雲供應商或 bare metal 上創建 k8s,但是不像 EKS、GKE、AKS 等等由雲供應商管理控制組件 Control Plane Component,所有創建的 k8s 都是由自己全權管理的。

kubeadm 是一個由 Kubernetes 官方推出的工具,其主要功能包括 kubeadm init 以及 kubeadm join 。簡單來說,就是簡化了初始化 k8s 的步驟創建新節點 Node 的步驟kubeadm 比較適用於在 bare metal 時使用,因為如果是使用雲供應商的話 kopskube-spray 都想叫簡單。我個人認為 kubeadm 也很適合用於學習了解 k8s cluster 的創建步驟以及細節。

kopsKubernetes Operations 的英文縮寫,是一個非常好用的 k8s 管理工具。其有許多的 configuration 選項讓管理 k8s 變得非常的簡單,並且每一個新的版本都都有許多資安方面的考量,而且背後開源團隊的成員真的都非常強 (因為其中有我們公司的一個大神)!

kube-spray 是一個 Kubernetes Incubator 中的項目,主要是透過 Ansible Playbook 來完成定義系統及 k8s 的部署任務。與 kops 不同的是,kops 和雲供應商有有較大的綁定,但 kube-spray 因為是使用 Ansible 來完成各項部署工作,所有在運行平台上有較多的選擇和客製化選擇。但使用難度確實是比 kops 要高上一些的。

其他 k8s 的練習管道

除了自己創建自己的 k8s 來起步之外,也可以選擇透過一些類似於模擬的網站來練習。像是由 O'Reilly 提供的 Katacoda 的 k8s playground,有各種不同的情境讓人練習各種簡單的狀況,或是 Play With Kubernetes,一個從零開始練習創建 k8s 的網站。

總結

上面提供各種常見開始使用 k8s 的方式。雖然直接在雲供應商上創建一個 k8s cluster 是最貼近業界需求的方法,但一般來說如果是純屬練習用途並不推薦這樣做,因為除了要對各個雲供應商有基本的瞭解之外還要考量到價格。我個人最推薦的就是使用 minikube 或是 kind 在本地創建,首先是難度較低且沒有太多的門檻,再來就是相較使用 katacoda 這類網站比較有真實感,而且因為是自己的 cluster,所以想怎麼嘗試都沒問題。
推薦想要開始學習 k8s 的讀者可以自己試著使用 minikube 來在本地創建一個 cluster,以便於後續教學文章中的實作內容。

💡使用 kind 也可以,這裡推薦 minikube 是因為撰寫的當下 kind 還沒有 GA。