[30] Summary
那些文件沒告訴你的 AWS EKS 系列文 到此告一個段落, 本系列文將於賽後同步刊登於筆者 部落格 。這系列文章大致上可以分為以下幾類:
- Authentication/Authorization
- Admission Controllers - validating/mutating webhook
- Work Nodes
- Components
- VPC CNI feature
- Logs / Monitor
- Provision tool
- Load Balancer
Authentication/Authorization
- [02] 為什麼 kubectl 可以訪問 EKS cluster
- [03] 為什麼 EKS worker node 可以自動加入 EKS cluster(一)
- [04] 為什麼 EKS worker node 可以自動加入 EKS cluster(二)
Admission Controllers - validating/mutating webhook
- [06] 為什麼 EKS cluster 可以讓 Pod 部署至 Fargate
- [08] 為什麼 EKS 可以整合 IAM roles for service accounts(IRSA)(一)
- [09] 為什麼 EKS 可以整合 IAM roles for service accounts(IRSA)(二)
Work Nodes
Component
- [05] 為什麼 EKS cluster 知道預設 CNI Plugin 為 Amazon VPC CNI plugin
- [12] 為什麼 CoreDNS 可以解析 VPC endpoint 及外部 DNS
- [25] 為什麼 EKS add-on 可以管理 Kubernetes plugin
VPC CNI feature
- [14] 為什麼 security group 可以關聯至單獨的 EKS Pod - Security groups for pods(一)
- [15] 為什麼 security group 可以關聯至單獨的 EKS Pod - Security groups for pods(二)
- [16] 為什麼使用 security group for pod 使用 liveness/readiness probes 需要設定環境變數 DISABLE_TCP_EARLY_DEMUX
- [23] 為什麼 EKS worker node IP address 容易佔用 IP 或是 subnets IP 地址不夠(一)
- [24] 為什麼 EKS worker node IP address 容易佔用 IP 或是 subnets IP 地址不夠(二)
Logs / Monitor
- [17] 為什麼 Fluent Bit/FluentD 可以收集 EKS cluster 上 Pod logs
- [18] 為什麼 CloudWatch Insight 可以收集 EKS cluster node 及 pod metrics
- [19] 為什麼 Container insight node_network_total_bytes 與 EC2 NetworkIn/NetworkOut metrics 不一致
- [20] 為什麼 worker node 上的 veth 與 eth RX/TX metrics 不一致
Provision tool
- [07] 為什麼 CDK 部署 EKS cluster 會比較慢
- [13] 為什麼透過 CloudFormation template 或
ekstcl
啟用的 self-managed node 可以自動加入 EKS cluster
Load Balancer
- [21] 為什麼 EKS 使用 NLB 作為 Kubernetes service 會遇到 connection timeout(一)
- [22] 為什麼 EKS 使用 NLB 作為 Kubernetes service 會遇到 connection timeout(二)
- [26] 為什麼 EKS 在更新 Kubernetes deployment 時會有 HTTP 502 的 error(一)
- [27] 為什麼 EKS 在更新 Kubernetes deployment 時會有 HTTP 502 的 error(二)
- [28] 為什麼 EKS 在更新 Kubernetes deployment 時會有 HTTP 502 的 error(三)
- [29] 為什麼 EKS 在更新 Kubernetes deployment 時會有 HTTP 502 的 error(四)
雖然 EKS 為替使用者託管了 Control Plane 上的元件,從 2018 年 EKS 服務啟用後,愈來愈多的團隊採用雲端平台一鍵啟用 Kubernetes 來作為基礎建設,但是 AWS 環境中整合了諸多服務,如 EC2、EBS、VPC、ELB 及 Auto Scaling Group(ASG)等服務,AWS 服務則有各自的限制,倘若維運人員對於上游 Kubernetes 或是 AWS 服務不甚熟悉,那就會面臨到服務故障而不知道如何進行除錯。以下舉例:
- EKS worker node 無法順利加入 cluster,而 EKS 上使用 EKS optimize AMI,則進行了一連串的 Kubernetes 驗證流程才得以使 Node 可以順利加入節點。
- 整合 ELB 資源,而需了解 ELB 使用限制,如 NLB hairpinning 才能避免連線超時問題。
但也是 AWS 服務功能眾多,才得以在不同需求時可以有相對應的解決方案,如,針對 Storage 使用速度、分享方式等選擇對應 AWS Service,同時支援了數種 Container Storage Interface (CSI) driver 與 Kubernetes 整合, Amazon EBS CSI driver [1]、 Amazon EFS CSI driver [2] 及 Amazon FSx for Lustre CSI driver [3] 等。
官方文章有專門的文章 Best Practices Guide [4] 探討如何針對不同主題討論,接者如何透過 EKS 功能來實現需求及最佳化。
EKS 管理
EKS 本身是個採用原生 Kubernetes 管理平台整合至 AWS 環境,因此其系統架構的設計有非常多層級的概念:
- AWS 服務本身的功能。
- EKS 基於 AWS 服務使用的託管服務功能。
- EKS 基於原生 Kubernetes 實現功能。
- 原生 Kubernetes 功能。
有了 Kubernetes 基礎概念後去查看官方文件或是官方部落格就能較為理解 EKS 運作原理。不過 Kubernetes 版本推新不斷,因此 EKS 文件上難免會有更新較慢或是筆誤部分,這部分都非常歡迎直接到官方 Github 去回報問題,或是點選文件上 feedback 才更有機會將這些問題給修復。
心得
與先前查看鐵人賽一樣,並不預期說會寫一個心得來記錄當下,也可能會覺得為什麼會需要寫一個心得來佔用篇幅,但是仍無法相信已經完成 30 天的鐵人賽。記得剛開始鐵人賽時,眼尖的朋友發現我參加此次鐵人賽,看了幾篇文章就問了「你是不是選了一個相較偏門而非基礎入門教學文章」,大概是想起 jserv 大大於每學期初課堂介紹時會說的:
我不知道有多少人可以完成 這門課,但在放棄之前我希望大家可以學到點什麼。
時常傳聞 EKS 使用上有些許難度,希望想讓大家從入門到放棄前有機會可以一探 EKS 工作原理而開始此次鐵人賽系列。從原生 Kubernetes 原理、AWS 服務限制,基於 Five whys [5] 的方法不斷地問自己是否真的有搞懂原理近一步繼續往下探索而產生花式為什麼
作為主題。
然而原本預計每天一篇的紀錄可能會花 1~2 小時可以完稿,因此在參賽時基本上並沒有什麼存稿甚至沒有大綱或定義主題,最終導致中間有些主題可能都不太連貫。相信大家可以在每天的 log 上面查看到對應的 timestamp 可以查看到實際測試的時間 QQ
雖然多數 EKS 服務及整合 Kubernetes 部分都已經描述到了,但近期仍不斷推出新功能仍需要花時間持續研究學習,若未來有研究也將會持續更新至 部落格 上:
- IPv6 [5]
- Multus CNI [6]
參考文件
- Amazon EBS CSI driver - https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html
- Amazon EFS CSI driver - https://docs.aws.amazon.com/eks/latest/userguide/efs-csi.html
- Amazon FSx for Lustre CSI driver - https://docs.aws.amazon.com/eks/latest/userguide/fsx-csi.html
- EKS Best Practices Guides - https://aws.github.io/aws-eks-best-practices/
- Five whys - https://en.wikipedia.org/wiki/Five_whys
- Tutorial: Assigning IPv6 addresses to pods and services - https://docs.aws.amazon.com/eks/latest/userguide/cni-ipv6.html
- Multiple network interfaces for pods - https://docs.aws.amazon.com/eks/latest/userguide/pod-multiple-network-interfaces.html