k8s(00)入門知識介紹
- 2020 年 7 月 20 日
- 筆記
- kubernetes/K8S
系列文章說明
本系列文章,可以基本算是 老男孩2019年王碩的K8S周末班課程 筆記,根據影片來看本筆記最好,否則有些地方會看不明白
需要影片可以聯繫我
k8s概念入門
[K8S中文社區](//docs.kubernetes.org.cn/
1 四組基本概念
- Pod/Pod控制器
- Name/Namespace
- Lable/Label選擇器
- Service/Ingress
1.1 POD和POD控制器
-
Pod
k8s里能夠被運行的最小邏輯單元
1個POD裡面可以運行多個容器(SideCar 邊車模式)
POD中的容器共享 UTS/NAT/IPC 名稱空間
POD和容器顆粒理解為豌豆莢和豌豆 -
Pod控制器
Pod控制器是Pod啟動的一種模板
用來保證在K8S里啟動的Pod始終按預期運行
包括副本數\生命周期\健康檢查等 -
常用的Pod控制器:
控 度器名稱 用途簡述 Deployment 用於管理無狀態應用,支援滾動更新和回滾 DaemonSet 確保集群中的每一個節點上只運行一個特定的pod副本 ReplicaSet 確保pod副本數量符合用戶期望的數量狀態 StatefulSet 管理有狀態應用 Job 有狀態,一次性任務 Cronjob(定時任務) 有狀態,周期性任務
1.2 Name/Namespace
-
Name
K8S使用‘資源’來定義每一種邏輯概念(功能)
每種‘資源’都應該有自己的’名稱’
‘名稱’通常定義在‘資源’的元數據(metadata)資訊中資源的配置資訊包括
- API版本(apiVersion)
- 類別(kind)
- 元數據(metadata)
- 定義清單(spec)
- 狀態(status)
-
Namespace
名稱空間用於隔離K8S內各種資源,類似K8S內部的虛擬分組
同一個名稱空間中,相同資源的名稱不能相同
默認的名稱空間為default
,kube-system
,kube-public
查詢特定資源,要帶上相應的名稱空間
1.3 Lable/Label選擇器
-
Lable
標籤的作用是便於分類管理資源對象
標籤與資源之間是多對多的關係
給一個資源多個標籤,可以實現不同維度的管理 -
Lable選擇器
可以使用標籤選擇器過濾指定的標籤
標籤選擇器有基於等值關係(等於,不等於)和基於集合關係(屬於,存在)的兩種
許多資源都支援內嵌標籤選擇器欄位:matchLables
或matchExpressions
1.4 Service/Ingress
- Service(重點)
POD會分配IP地址,但IP會隨著POD銷毀而消失
多個同類型POD,IP或埠必然不同,但卻相同的服務
Service用來提供相同服務POD的對外訪問介面
Service通過標籤選擇器來確定作用於哪些POD
Service只能提供L4層的調度,即:IP+埠 - Ingress(重點)
Igress也是用來暴露POD的對外訪問介面
Igress提供L7層的調度,即http/https
Igress可以調度不同業務域,不同URL路徑的流量
2 核心組件與核心附件
-
核心組件
配置存儲中心- etcd服務
主控節點(master)
- kube-apiserver服務
- kube-controller-manager服務
- kube-scheduler服務
運算節點(node)
- kube-kubelet服務
- kube-proxy服務
-
CLI客戶端
kubectl命令行工具 -
核心附件
CNI網路插件(flannel/calico)
服務發現插件(coredns)
服務暴露插件(traefik)
GUI管理插件(daahboard)
2.1 核心組件功能
-
配置存儲中心-etcd
etcd是一個非關係型資料庫,作用類似於zookeeper註冊中心
用於各種服務的註冊和數據快取 -
kube-apiserver(master)
提供季軍管理的REST API介面,包括鑒權、數據校驗、集群狀態變更
負責其他模組之間的數據交互,承擔通訊樞紐的功能
和etcd通訊,是資源配額控制的入口
提供玩備的集群控制機制 -
kube-controller-manager
由一系列控制器組成,通過apiserver監控整個集群的狀態,確保集群處於預期的工作狀態
是管理所有控制器的控制器 -
kube-scheduler
主要是接收調度POD到合適的node節點上
通過apiserver,從etcd中獲取資源資訊進行調度
只負責調度工作,啟動工作是node節點上的kubelet負責
調度策略:預算策略(predict)、優選策略(priorities) -
kube-kubelet
定時從apiserver獲取節點上POD的期望狀態(如副本數量、網路類型、存儲空間、容器類型等)然後調用容器平台介面達到這個狀態
提供POD節點具體使用的網路
定時彙報當前節點狀態給apiserver,以供調度
複製鏡像和容器的創建和清理工作 -
kube-proxy
是K8S在每個節點上運行網路的代理,service資源的載體
不直接為POD節點提供網路,而是提供POD間的集群網路
建立了POD網路和集群網路的關係(clusterIp->podIp)
負責建立、刪除、更新調度規則
與apiserver通訊,以更新自己和獲取其他kube-proxy的的調度規則
常用的調度模式:Iptables(不推薦)、Ipvs(推薦)
2.2 K8S的三條網路
- 節點網路
實際網路,就是宿主機網路
建議地址段:10.4.7.0/24
建議通過不同的IP端,區分不同的業務、機房或數據中心 - Pod 網路
實際網路,容器運行的網路
建議172.7.21.0/24
,並建議POD網段與節點IP綁定
如: 節點IP為10.4.7.21
,則POD網路為172.7.21.0/24
- service網路
虛擬網路,也叫集群網路(cluster server),用於內部集群間通訊
構建於POD網路之上, 主要是解決服務發現和負載均衡
通過kube-proxy連接POD網路和service網路
建議地址段為:192.168.0.0/16
3 K8S流程圖
說明:
主控節點和node節點只是邏輯上的概念,物理上可以部署在一起