K8s核心概念入門
阿新 • • 發佈:2019-03-19
前言
新的一年還是要學習一些新技術的,先從k8s開始吧。 作為一個想成為“微服務技術專家”,除了上層類spring cloud的解決方案,服務治理方案之外,k8s作為底層基礎設施,所承擔的自動擴縮容,devops等功能也是微服務架構中很重要的一環。
k8s
k8s作為容器化作業系統,包括了部署,排程,節點叢集間擴充套件。docker作為k8s底層的排程元件。主要具備:
- 自動化容器的部署和複製
- 隨時擴充套件或收縮容器部署
- 打包容器組,並提供容器間的負載均衡
- 提供容器彈性操作等
k8s叢集
k8s的叢集,一般以一組物理節點或虛擬機器節點組成,在節點上部署k8s,架構圖如下:
通過上圖可以觀察到一些名詞:
- Container
- Pod
- Label
- Replication Controller
- Service
- Node
- K8s Master
Pod
Pod安裝在節點上,包含一組容器和卷,同一個Pod裡面的容器共享網路名稱空間,可以使用localhost進行通訊。pod是隨時建立銷燬的。
- 因為pod是短暫的,所以需要使用k8s的掛載卷儲存持久化容器資料。
- pod的建立可以通過手動建立,也可以使用replication controller根據pod模板創建出拷貝。
- 引入service解決因為pod建立銷燬帶來的ip地址改變的問題。
Label
Label是一個鍵值對,可以用來標記pod,service或者replication controller可以通過selectors選擇帶有指定label的pod。
Replication Controller
通過RC可以確保任何時間都存在指定數量的pod副本。比如建立3個副本,k8s會監控他們,隨時確保永遠有3個副本在執行。
建立RC時,需要指定兩個東西:
- Pod模板:用來建立Pod副本。
- Label:RC需要監控的Pod的副本集。
Service
多個Pod副本可以通過Service做負載均衡。
由於Pod的IP是短暫的,所以引入了Service,Service是個邏輯概念,Service通過selector篩選label和Pod進行繫結。
在Service對pod進行繫結時會做以下事情:
- 為Service建立一個DNS入口,前端Pod會根據DNS查詢service並解析出ip地址。
- 前端pod在得到service的ip地址後,會根據service的負載均衡策略,請求到具體的pod上,底層通過node上的kube-proxy完成。
Node
Node叫做節點,一般是物理機或者虛擬機器,是k8s的工作節點,node上有k8s相關的關鍵元件:
- Kubelet:主節點代理
- Kube-proxy:Serivce使用其路由到Pod
- Docker:用於容器建立
K8s Master
Master是叢集的主節點,擁有K8s api server,可以對外提供rest互動,master節點可以用來建