k8s(00)入門知識介紹

發表於2020-07-20

系列文章說明

本系列文章,可以基本算是 老男孩2019年王碩的K8S週末班課程 筆記,根據視訊來看本筆記最好,否則有些地方會看不明白
需要視訊可以聯絡我

k8s概念入門

[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控制器

  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選擇器
    可以使用標籤選擇器過濾指定的標籤
    標籤選擇器有基於等值關係(等於,不等於)和基於集合關係(屬於,存在)的兩種
    許多資源都支援內嵌標籤選擇器欄位:matchLablesmatchExpressions

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

  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

說明:

主控節點和node節點只是邏輯上的概念,物理上可以部署在一起

相關文章