Go 微服務架構實戰 - 中篇 1- k8s 架構介紹
Go 微服務架構實戰
本系列文章主要是針對雲原生領域微服務架構的實戰,包括網關,k8s,etcd 以及 grpc 等相關技術的應用,同時也會把服務發現與註冊,熔斷,降級,限流以及分佈式鎖等加入到系列當中作爲補充,課程的最後也會安排分佈式鏈路追蹤框架的學習,監控平臺的搭建以及灰度發佈等技術服務,所以總體來講,課程範圍涉及技術領域較廣,知識面比較寬,大家下來各取所需儘量做到熟悉和應用,之後有時間了在研究下源碼,樂哉!
上篇已經完成,大家可以看下,我這裏貼出來了,中篇從這周開始陸續爲大家產出,因爲太耗費精力,所以還望大家多多支持!
-
k8s 架構介紹 ===========
-
k8s 是什麼
k8s 就是 k 到 s 之間的距離是 8,所以叫做 k8s。
廢話:原名是 Kubernetes,簡稱 k8s,k 到 s 中間隔 8 個字符,爲了方便記憶和書寫就省去了這八個字符,用數字 8 代替。
k8s 是 Google 公司開源的一個容器編排與調度管理框架,該項目最初是 Google 內部面向容器的集羣管理系統,而現在是由 CNCF 託管的開源平臺,由 Google、AWS、Microsoft、IBM、Intel、Cisco 和 Red Hat 等主要參與者支持,其目標是通過創建一組新的通用容器技術來推進雲原生技術和服務的開發。作爲領先的容器編排引擎,k8s 提供了一個抽象層,使其可以在物理或虛擬環境中部署容器應用程序,提供以容器爲中心的基礎架構。
這是官方說法,說白了就是你之前 docker 起的容器以及對這些容器的管理和調度比較複雜,你使用 k8s 之後,容器的創建,調度,滾動升級等都變得異常簡單,所以各個大廠小廠都在擁抱這種變化,對現有的服務進行 k8s 升級改造。
- k8s 能解決什麼問題
對於大多數用戶來說,k8s 的主要作用是在一個給定的集羣上把一個應用運行起來。更進一步說,k8s 需要提供的是網關、水平拓展、監控、備份、災難恢復等一系列運維能力。
- k8s 架構圖
- Master 節點
- 主要負責
-
集羣的 “大腦”,負責管理所有節點(Node)。
-
負責調度 Pod 在哪些節點上運行。
-
負責控制集羣運行過程中的所有狀態。
- 包含組件
-
etcd:保存整個集羣的狀態
-
apiserver 提供了資源的唯一入口,並提供認證、授權、訪問控制、API 註冊和發現等
-
controller manager 負責維護集羣的狀態,比如故障檢測、自動擴展、滾動更新等
-
scheduler 負責資源的調度,按照預定的調度策略將 Pod 調度到相應的機器上
- Node 節點
- 主要負責
-
負責管理所有容器(Container)。
-
負責監控 / 上報所有 Pod 的運行狀態。
- 包含組件
-
kubelet 負責維護容器的生命週期,同時也負責 Volume(CVI) 和網絡(CNI)的管理
-
Container runtime 負責鏡像的管理以及 Pod 和容器的真正運行 (CRI)
-
kube-poxy 負責爲 Service 提供 cluster 內部的服務發現和負載均衡
除了核心組件,還有一些推薦的組件:
-
kube-dns 負責爲整個集羣提供 DNS 服務
-
Ingress Controller 爲服務提供外網入口
-
Heapster 提供資源監控
-
Flannel(提供集羣間網絡)
-
Dashboard 提供 GUIFederation 提供跨可用區的集羣
-
Fluentd-elasticsearch 提供集羣日誌採集,存儲與查詢
說完組件之後,接下來開始 k8s 中各個資源對象的介紹。
-
Pod 對象
-
k8s 中最小的管理和部署單位,一個 Pod 中可以有一個或多個容器。同一 Pod 中的容器共享 IP 地址、通過 localhost 相互通信、共享數據卷。
-
不同 Pod 之間可以相互訪問或者通過 service 訪問
-
Pod 有自己的 IP,但是不能對外使用,只能集羣內使用,因爲 Pod 隨時就會被丟棄,外部的 IP 就無效了,可以通過別的方式對外暴露。
-
從集羣外部訪問不鳥,因爲集羣網絡都是隔離的,需要藉助別的資源打通
-
Service 對象
-
一組邏輯 Pods 和它們訪問策略的抽象,爲一組相同屬性的 Pods 抽象出一個固定 IP 地址,允許 Pod 之間以及 Pod 與 Service 之間相互通信。
-
簡稱 svc,通過篩選 Pod 的標籤將一組 Pod 管理起來
-
svc 提供一定的負載均衡能力
-
對於 Pod 來說 svc 就是它們的統一入口
-
Deployment 對象
-
提供 Pod 滾動更新和 ReplicaSets 的控制器
-
創建 Pod,創建 Pod 的副本集
-
刪除 Pod 以及副本集
-
ReplicaSet 對象
-
保證集羣在任何時間點上都有指定數量的 Pod 副本,除非你需要定製滾動更新的策略或者不需要滾動更新,K8s 推薦使用 Deployment 而不是直接操作 ReplicaSet
-
Namespace 對象
-
將集羣資源彙總在指定的空間之下
-
隔離資源對象
-
默認是 default 空間
還有其它很多對象就不逐一介紹了,大家下去重點了解哈。
在我們瞭解了上述架構,組件以及資源對象之後,中篇後期文章所有基於這些對象和組件編排任務的流程就會清晰很多,我們會在上篇創建的基於 grpc+etcd+gateway 的項目上進行 k8s 任務編排,把裸機部署改造爲容器化部署
最後放一張 docker 相關命令圖,因爲 k8s 管理的容器目前都是基於 docker 容器運行時環境,所有 docker 相關的你就得了解它。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/HYnSs3ElTvef743JX-jXzA