Go微服務架構實戰-公粽號:堆棧future
本系列文章主要是針對雲原生領域微服務架構的實戰,包括網關,k8s,etcd以及grpc等相關技術的應用,同時也會把服務發現與注冊,熔斷,降級,限流以及分布式鎖等加入到系列當中作為補充,課程的最后也會安排分布式鏈路追蹤框架的學習,監控平台的搭建以及灰度發布等技術服務,所以總體來講,課程范圍涉及技術領域較廣,知識面比較寬,大家下來各取所需盡量做到熟悉和應用,之后有時間了在研究下源碼,樂哉!
上篇已經完成,大家可以看下,我這里貼出來了,中篇從這周開始陸續為大家產出,因為太耗費精力,所以還望大家多多支持!
1. 微服務架構上篇
1. grpc技術介紹
2. grpc+protobuf+網關實戰
3. etcd技術介紹
4. 基於etcd的服務發現與注冊
5. 基於etcd的分布式鎖實戰
2. 微服務架構中篇
1. k8s架構介紹
1. 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升級改造。
2. k8s能解決什么問題
對於大多數用戶來說,k8s的主要作用是在一個給定的集群上把一個應用運行起來。更進一步說,k8s需要提供的是網關、水平拓展、監控、備份、災難恢復等一系列運維能力。
3. k8s架構圖
k8s系統架構遵循客戶端/服務端(C/S)架構,系統架構分為Master和Node兩部分,Master作為服務端,Node作為客戶端。k8s系統具有多個Master服務端,可以實現高可用。在默認的情況下,一個Master服務端即可完成所有工作。
- 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相關的你就得了解它。
公粽號:堆棧future
使很多處於迷茫階段的coder能從這里找到光明,堆棧創世,功在當代,利在千秋
125篇原創內容