2019 鐵人賽:Kubernetes 三十天

30 篇 · k8s 核心物件 → EKS 上雲

2019 年的 iThome 鐵人賽,作者把 Kubernetes 從入門帶到實務,三十篇的順序刻意設計成可以照著讀:先回頭複習 Docker 與常用指令,再用 minikube 建一個本機測試環境,接著才拆解 Node、Master、Object 這些容易混淆的架構名詞。

中段依序走過基礎篇(Pod、Deployment、Service)、進階篇(Ingress、Volume、StatefulSet、DaemonSet、Affinity 與 Taints)、管理篇(Monitoring、Resource Quota、RBAC)與實務篇(EKS 上雲、Helm、HPA/CA、EBS/EFS)。系列的特色是同一組概念講兩次:先在本機叢集操作,再到 AWS EKS 上重做一遍,兩者差異之處正好是需要留意的地方。

適合正在把服務搬上叢集,或想弄清楚每個資源物件為何存在的人。

共 30 篇,依發佈順序排列

k8s 初探+簡介

從公司的轉型需求講起:為什麼會從虛擬機走到 Docker,又為什麼需要 Kubernetes 來管這些容器。這篇介紹 K8S 是什麼、它解決什麼問題、整體架構長什麼樣,以及有哪些核心元件。

2019年9月16日
8 min
K8S
Docker
2019 鐵人賽

一日碼頭工:快速 Docker 複習

要理解 k8s 好在哪,得先回到 Docker 把觀念補齊。這篇快速複習容器、映像與相依性管理,說明單機部署的限制在哪,也為後面三十天的 Kubernetes 內容先打好底。

2019年9月17日
15 min
Docker
2019 鐵人賽

k8s 的小型測試環境:minikube 安裝與使用

在正式上線之前,先在自己電腦上架一個小型的 k8s 來驗證服務,用的就是 minikube。這篇從 macOS 的虛擬化檢查、kubectl 安裝到啟動虛擬機一步步來,也說明其他系統該怎麼做。

2019年9月18日
15 min
K8S
minikube
2019 鐵人賽

碼頭工的日常與舵手的逆襲:Docker 與 k8s 常用指令集比較

用了 Docker 再看 k8s,最常見的困惑就是「那我原本那些指令怎麼辦」。這篇把兩邊的常用指令並排對照,說明哪些習慣可以沿用、哪些要換成 kubectl,最後附上指令速查表。

2019年9月19日
7 min
K8S
Docker
2019 鐵人賽

淺談 k8s 架構之一:Node 是什麼?Master 與 Slave 有何不同?

從節點角度看 k8s 架構:Node 是實際跑 Pod 的工作機器,Master 負責調度與管理,兩者分工決定叢集能不能撐住。這篇說明 Node 的角色、它有哪些狀態,並實際操作一次節點管理。

2019年9月20日
12 min
K8S
2019 鐵人賽

淺談 k8s 架構之二:什麼是 Object?什麼是 Abstraction?

k8s 裡的 Object 與 Abstraction 常被混著講,但兩者不在同一個層次。這篇先回顧節點架構,再說明每個 Pod 為何都要有自己的 YAML,以及抽象化讓 k8s 能管住這麼多資源的關鍵。

2019年9月21日
15 min
K8S
2019 鐵人賽

想想我們為何而來:一個完整 DevOps 開發流程的十二個要素

講完 Docker 與 k8s 架構後,回頭看整個 DevOps 流程長什麼樣子。這篇用十二個要素(Codebase、Dependencies、Config 等)拆解從寫程式到部署的完整流程,說明 k8s 站在哪一段。

2019年9月22日
18 min
K8S
DevOps
2019 鐵人賽

k8s 基礎篇(一):Pod、Label、Health check、Scaling

基礎篇第一課,從最小的部署單位開始:Pod 是什麼、為什麼要有 Label 來分類與選取、Health check 怎麼判斷容器還活著,以及流量進來時怎麼做水平擴縮。

2019年9月23日
15 min
K8S
2019 鐵人賽

k8s 基礎篇(二):Deployment、ReplicaSet、Service、Secrets

基礎篇第二課:Deployment 與 ReplicaSet 怎麼管理副本數量、版本更新的滾動過程、出問題時怎麼 rollback,以及 Service 如何把流量導到正確的 Pod,還補上 Secrets。

2019年9月24日
18 min
K8S
2019 鐵人賽

k8s 進階篇(一):Service Discovery、ConfigMap

進入進階篇:同一個 Pod 內的容器用 localhost 就能互通,但跨 Pod 就得靠 Service Discovery。這篇說明這機制怎麼運作、ConfigMap 怎麼把設定抽出來,並附上兩個實際範例。

2019年9月25日
18 min
K8S
2019 鐵人賽

k8s 進階篇(二):Ingress、Volume、PodPreset

這篇講兩件影響整個叢集規劃的事:Ingress 負責把外部流量導進叢集,Volume 則決定資料要放在哪裡。文中示範降低負載與完美分流兩種情境,也補上 PodPreset 的用法。

2019年9月26日
12 min
K8S
2019 鐵人賽

k8s 進階篇(三):StatefulSet、DaemonSet

有狀態的服務不能隨便重啟,這就是 StatefulSet 存在的理由:每個 Pod 都有固定編號與身分。這篇說明它跟 Deployment 的差別、怎麼擴縮與更新,也介紹跑在每台節點的 DaemonSet。

2019年9月27日
12 min
K8S
2019 鐵人賽

k8s 進階篇(四):Affinity and Anti-Affinity、Taints and Tolerations

調度器預設會自己挑節點,但真實場景常需要指定:哪些服務該靠近、哪些絕對不能放一起。這篇說明 Node 與 Pod 的親和/反親和性怎麼設定,以及 Taints 與 Tolerations 的搭配。

2019年9月28日
15 min
K8S
2019 鐵人賽

k8s 管理篇(一):Monitoring、Job、CronJob

管理篇第一篇,從怎麼「用」叢集轉到怎麼「管」叢集。這篇介紹監控的做法(從舊版 heapster 到 Weave Scope 的安裝),以及 Job 與 CronJob 這種跑完就結束的工作怎麼定義。

2019年9月29日
12 min
K8S
2019 鐵人賽

k8s 管理篇(二):Resource Quota、Namespaces

Resource Quota 限制的是一個叢集能分配多少 CPU、記憶體、GPU 與磁碟空間;Namespace 則是把同一個實體叢集切成多個虛擬叢集。這篇說明兩者的設定方式,以及怎麼把配額綁在命名空間上做資源分群。

2019年9月30日
18 min
K8S
2019 鐵人賽

k8s 管理篇(三):User Management、RBAC、Node Maintenance

管理篇最後一篇,處理的是「誰可以做什麼」:怎麼新增一個使用者、用 Role 與 RoleBinding 給對應權限、綁定 RBAC 的實際操作,最後補上節點維護(Node Maintenance)的做法。

2019年10月1日
15 min
K8S
RBAC
2019 鐵人賽

k8s 之 PV 小整合:Pod、Deployment、Service、Job 與 PersistentVolume

把前面學過的元件串起來:Pod、Deployment、Service、Job 搭配新的 PersistentVolume 與 PVC 做一次整合演練。這篇也談臨時儲存與驅逐策略在資源不足時怎麼運作。

2019年10月2日
18 min
K8S
2019 鐵人賽

k8s 之管理篇延伸:Harbor 與 Helm

k8s 是架在 Docker 之上的,所以不少 Docker 時代的管理工具也能沿用或改造。這篇介紹兩個關鍵套件:Harbor 當私有容器倉庫、Helm 當套件管理器,都以 Ubuntu 為例示範。

2019年10月3日
15 min
K8S
Helm
2019 鐵人賽

k8s 上雲端之路:AWS 之蓄勢待發:EOO

上雲端之前得先認識 CCM(Cloud Controller Manager):它讓各家雲端的實作與 k8s 核心脫鉤。這篇介紹 AWS 上會用到的元件(EC2、EBS、ELB、EFS、EKS 等),並實際操作 EC2。

2019年10月4日
15 min
K8S
AWS
2019 鐵人賽

k8s 實務篇(一):EKS 架設 k8s(上)

實務篇上篇,把 k8s 叢集真的架到 AWS 上。內容包含 AWS 的基礎設置(IAM、網路與權限),以及建立 EKS 的控制介面;因為步驟偏多,整個流程拆成上下兩篇。

2019年10月5日
12 min
K8S
AWS
EKS
2019 鐵人賽

k8s 實務篇(二):EKS 架設 k8s(下)

實務篇下篇,接續把叢集收尾:安裝與設定 kubectl、確認 Ubuntu 工作節點的 IP,並登入 EC2 的工作節點做驗證,讓上篇建好的控制介面真的能指揮到節點。

2019年10月6日
12 min
K8S
AWS
EKS
2019 鐵人賽

k8s 基礎篇延伸與 EKS:Pod、Label、Probe、Scaling

叢集架好之後,把基礎篇的內容搬到 EKS 上重做一次:先看多了三個計算節點後差別在哪,再實作有標籤與狀態的 Pod、探針設定、Scaling 與版本更新,對照 minikube 的差異。

2019年10月7日
18 min
K8S
AWS
EKS
2019 鐵人賽

k8s 進階篇延伸與 EKS(一):Ingress、ELB、Service

進階篇延伸到 AWS,先看 minikube 與 EKS 差在哪。這篇在既有叢集上實作 traefik Ingress,目標是透過 Ingress 拿到 AWS 的 ALB,順帶把 Service 一起串起來。

2019年10月8日
18 min
K8S
AWS
EKS
2019 鐵人賽

k8s 進階篇延伸與 EKS(二):Scheduling

排程看起來只是「丟給調度器決定」,實際上 Affinity、Taints 與 Tolerations、Cordon 等設定都會左右結果。這篇用日常維運會遇到的例子,模擬 Pod 該怎麼被安排到正確節點。

2019年10月9日
20 min
K8S
AWS
EKS
2019 鐵人賽

k8s 管理篇延伸與 EKS(一):Service Discovery、Dashboard、Monitoring

管理篇延伸到 EKS,比較同樣的操作在 AWS 與 minikube 上的差異。這篇處理服務發現、把 k8s Dashboard 架起來,以及安裝 Weave Scope 來看叢集的即時狀態。

2019年10月10日
18 min
K8S
AWS
EKS
2019 鐵人賽

k8s 管理篇延伸與 EKS(二):Resource Quota、Namespace、RBAC

延續管理篇上卷,這篇把鏡頭拉到 EKS:資源配額怎麼設、命名空間怎麼切、使用者與 Service Account 怎麼管,以及 RBAC 的角色與綁定規則,補齊多人共用同一個叢集時最常缺的那一塊。

2019年10月11日
10 min
K8S
AWS
EKS
2019 鐵人賽

k8s 應用篇(一):Helm 部署 apps、HPA 和 CA

應用篇上篇:用 Helm 把應用部署到叢集上,再設定 HPA(水平自動擴縮)與 Cluster Autoscaler 讓資源跟著流量調整,最後把 Istio 也部署進 k8s。

2019年10月12日
18 min
K8S
Helm
2019 鐵人賽

k8s 應用篇(二):EBS 和 EFS 的使用

一個整合案例:把 WordPress 與 MySQL 一起跑在 k8s 上,資料要能持久化與共享。這篇分別用 EBS 與 EFS 兩種方式實作,比較它們在儲存特性與適用情境上的差別。

2019年10月13日
18 min
K8S
AWS
2019 鐵人賽

k8s 集群篇:HA、Federation

叢集層級的兩個題目:HA 講的是主節點備援,讓叢集不會因為單點故障倒下;Federation 則是跨叢集溝通與部署。這篇拿 minikube 與 AWS 對照說明,並實作一次 Federation。

2019年10月14日
18 min
K8S
Docker
2019 鐵人賽

k8s 總結:架構整合、圖表整理

三十天系列的最終回,把整個系列收成一張總圖:四大面向、k8s 的架構、k8s 元件之間怎麼協作、以及延伸到雲端之後的差異,另外補上幾個實務上的小技巧與參賽的心得。

2019年10月15日
15 min
K8S
Docker
2019 鐵人賽