1. 程式人生 > >k8s(00)入門知識介紹

k8s(00)入門知識介紹

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