阿里大佬力薦K8s項目實戰(zhàn)筆記!圖文并茂帶你深度解析Kubernetes
一、前言
Kubernetes(簡稱K8S)是開源的容器集群管理系統(tǒng),可以實現(xiàn)容器集群的自動化部署、自動擴縮容、維護等功能。它既是一款容器編排工具,也是全新的基于容器技術(shù)的分布式架構(gòu)領(lǐng)先方案。在Docker技術(shù)的基礎(chǔ)上,為容器化的應用提供部署運行、資源調(diào)度、服務發(fā)現(xiàn)和動態(tài)伸縮等功能,提高了大規(guī)模容器集群管理的便捷性。【Kubernetes是容器集群管理工具】
文章內(nèi)容可以過多,限于文章篇幅,沒辦法為大家展示全部內(nèi)容,有感興趣想要獲取學習的朋友,麻煩幫忙點贊轉(zhuǎn)發(fā)一下,后臺私信【學習】,獲取免費下載方式。
理論篇
第一部分:理解控制器
當我們嘗試去理解 Kubernetes 集群工作原理的時候,控制器肯定是一個難點。這是因為控制器有很多,具體實現(xiàn)大相徑庭;且控制器的實現(xiàn)用到了一些較為晦澀的機制,不易理解。但是,我們又不能繞過控制器,因為它是集群的“大腦”。


第二部分:網(wǎng)絡(luò)詳解
阿里云 Kubernetes 集群網(wǎng)絡(luò)目前有兩種方案,一種是 flannel 方案,另外一種是基于calico 和彈性網(wǎng)卡 eni 的 terway 方案。Terway 和 flannel 類似,不同的地方在于,terway 支持Pod 彈性網(wǎng)卡,以及 NetworkPolicy 功能。


第三部分:伸縮原理
阿里云 Kubernetes 集群的一個重要特性,是集群的節(jié)點可以動態(tài)地增加或減少。有了這個特性,集群才能在計算資源不足的情況下擴容新的節(jié)點,同時也可以在資源利用率降低的時候,釋放放節(jié)點以節(jié)省費用。


第四部分:認證與調(diào)度
在這, 我們以一個簡單的容器化 web 程序為例,著重分析了客戶端怎么樣通過 Kubernetes 集群 APIServer 認證,以及容器應用怎么樣被分派到合適節(jié)點這兩件事情。
在分析過程中,我們棄用了一些便利的工具,比如 kubectl,或者控制臺。我們用了一些更接近底層的小實驗,比如拆解 KubeConfig 文件,再比如分析調(diào)度器日志來分析認證和調(diào)度算法的運作原理。希望這些能對大家進一步理解 Kubernetes 集群有所幫助。


第五部分:服務原理
理解 Kubernetes 集群服務的概念,是比較不容易的一件事情。尤其是當我們基于似是而非的理解,去排查服務相關(guān)問題的時候,會非常不順利。
這體現(xiàn)在,對于新手來說,ping 不同服務的 IP 地址這樣基礎(chǔ)的問題,都很難理解;而就算對方經(jīng)驗很豐富的工程師來說,看懂服務相關(guān)的 iptables 配置,也是相當?shù)奶魬?zhàn)。
這部分來深入解釋一下 Kubernetes 集群服務的原理與實現(xiàn),便于大家理解。


第六部分:鏡像自動拉取
相比 Kubernetes 集群的其他功能,私有鏡像的自動拉取,看起來可能是比較簡單的。而鏡像拉取失敗,大多數(shù)情況下都和權(quán)限有關(guān)。所以,在處理相關(guān)問題的時候,我們往往會輕松地說:這問題很簡單,肯定是權(quán)限問題。但實際的情況是,我們經(jīng)常為一個問題,花了多個人的時間卻找不到原因。這主要還是我們對鏡像拉取,特別是私有鏡像自動拉取的原理理解不深。這篇文章,作者將帶領(lǐng)大家討論下相關(guān)原理。


實踐篇
第七部分:節(jié)點就緒的問題之一
排查完全陌生的問題,完全不熟悉的系統(tǒng)組件,是售后工程師的一大工作樂趣,當然也是挑戰(zhàn)。今天借這篇文章,跟大家分析一例這樣的問題。排查過程中,需要理解一些自己完全陌生的組件,比如 systemd 和 dbus。


第八部分:節(jié)點就緒問題之二
之前分享過一例集群節(jié)點 NotReady 的問題。在那個問題中,我們的排查路徑,從 Kubernetes 集群到容器運行時,再到 sdbus 和 systemd,不可謂不復雜。那個問題目前已經(jīng)在解決 systemd 中做了修復,所以以前基本上能看到那個問題的幾率是越來越低了。
但是,集群節(jié)點就緒問題還是有的,然而原因卻有所不同。
這部分跟大家分享另外一例集群節(jié)點 NotReady 的問題。這個問題和之前那個問題相比,查路徑完全不同。作為姊妹篇分享給大家。


第九部分:命名空間刪除問題
阿里云售后技術(shù)團隊的同學,每天都在處理各式各樣千奇百怪的線上問題。常見的有,網(wǎng)絡(luò)連接失敗,服務器宕機,性能不達標,請求響應慢等情況。但如果要評選,什么問題看起來微不足道事實上卻足以讓人絞盡腦汁,我相信答案肯定是“刪不掉”的問題。比如文件刪不掉,進程結(jié)束不掉,驅(qū)動卸載不了等。這樣的問題就像冰山,隱藏在它們背后的復雜邏輯,往往超過我們的預想。


第十部分:集群安全組配置管理
阿里云容器產(chǎn)品 Kubernetes 版本,即 ACK,基于阿里云 IaaS 層云資源創(chuàng)建。資源包括云服務器 ECS,專有網(wǎng)絡(luò) VPC,彈性伸縮 ESS 等。以這些資源為基礎(chǔ),ACK 產(chǎn)品實現(xiàn)了 Kubernetes 集群的節(jié)點,網(wǎng)絡(luò),自動伸縮等組件和功能。
一般而言,用戶對 ACK 產(chǎn)品有很大的管理權(quán)限,這包括集群擴容,創(chuàng)建服務等。與此同時,用戶可以繞圈過去 ACK 產(chǎn)品,對集群底層資源進行修改。如釋放 ECS,刪除 SLB。如果不能理清背后的影響,這樣的修改會損壞集群功能。
這部分會以 ACK 產(chǎn)品安全組的配置管理為核心,深入討論安全組在集群中扮演的角色,安全組在網(wǎng)絡(luò)鏈路中所處的位置,以及非法修改安全組會產(chǎn)生的各類問題。文章內(nèi)容適用于專有集群和托管集群。


第十一部分:二分之一活的微服務
Istio is the future!基本上,我相信對云原生技術(shù)趨勢有些微判斷的同學,都會有這個感悟。其背后的邏輯其實是比較簡單的:當容器集群,特別是 Kubernetes 成為事實上的標準之后,應用必然會不斷地復雜化,服務治理肯定會成為強需求


第十二部分:服務網(wǎng)格證書過期問題
客戶某一臺 Kubernetes 集群節(jié)點重啟之后,他再也無法創(chuàng)建 Istio 虛擬服務和 Pod 了。一來對 Istio 還不是那么熟悉,二來時間可能有點晚,腦子還在懵圈中,本來一個應該比較輕松解決掉的問題,花了幾十分鐘看代碼,處理的慘不忍睹。最終還是在某位大神的幫助下,解決了問題。鑒于此問題,以及相關(guān)報錯,在網(wǎng)上找不到對應的文章,所以這里分享下這個問題,避免后來的同學,在同樣的地方踩坑。另外謹以此篇致敬工作中遇到過的大神!


總結(jié)
也許你在學習和實踐上也有過這樣的難點與困惑:
網(wǎng)上檢索大量資料來學習,往往會一頭霧水,找不到正確的切入點;而官方文檔像工具書一樣晦澀難懂,往往學起來不得其法,事倍功半。
大部分圖書更為體系化,但重理論多于實踐,而實踐經(jīng)驗才是幫助你在工作中快速上手,真正落地到自己的項目中的助推劑。
自己“硬啃”Kubernetes源碼,但這注定是一條非常非常非常難的路。別問我為什么知道,因為我就是這么死磕代碼過來的。
如果你對學習Kubernetes存在以上問題或者無從下手,這份手冊可以很好地幫助到你,有需要的話麻煩在我主頁私信回復【學習】即可獲取!
本文就是愿天堂沒有BUG給大家分享的內(nèi)容,大家有收獲的話可以分享下,想學習更多的話可以到微信公眾號里找我,我等你哦。
