k8s是源自於谷歌內部的borg系統(容器編排工具),後經過go語言重寫並捐獻給了cncf**會開源。
它的主要作用就是作為容器的開源編排框架工具。
官網:一年發布四個大版本)
github:
- 自動裝箱,水平擴充套件,自我修復
- 服務發現和負載均衡
- 自動發布(預設滾動發布模式)和回滾
- 集中配置管理和秘鑰管理
- 儲存編排
- 任務批量處理執行
- pod/pod控制器
- name/namespace
- label/label選擇器
- service/ingress
3.1.1 pod- pod是k8s裡能夠被執行的最小邏輯單元(原子單元)。
- 1個pod裡面可以執行多個容器,它們共享uts+net+ipc命名空間。
- 可以把pod理解成豌豆莢,而同乙個pod內的每個容器都是一顆顆豌豆。
- 乙個pod裡可以執行多個容器,這種模式稱為邊車(sidecar)模式。
3.1.2 pod控制器- pod控制器是pod啟動的一種模板,用來保證k8s裡啟動的pod應始終按照人們的預期執行(副本數、生命週期、健康狀態檢查等)。
- k8s內提供了眾多的pod控制器,常用的有以下幾種:
· deployment
· daemonset
· replicaset
· statefulset
· job
· cronjob
3.2.1 name- 由於k8s內部,使用「資源」來定義每一種邏輯概念(功能),故每種「資源」,都應該有自己的「名稱」。
- 「資源」有api版本(apiversion)、類別(kind)、元資料(metadata)、定義清單(spec)、狀態(status)等配置資訊。
- 「名稱」通常定義在「資源」的「元資料」資訊裡。
3.2.2 namespace- 隨著專案增多、人員增加、集群規模擴大,需要一種能夠隔離k8s內各種「資源」的方法,這就是命名空間。
- 命名空間可以理解為k8s內部的虛擬集群組。
- 不同命名空間內的「資源」,名稱可以相同,相同命名空間內的同種「資源」,「名稱」不能相同。
- 合理的使用k8s的命名空間,可以讓集群管理員更好的對交付到k8s裡的服務進行分類管理和瀏覽。
- k8s裡預設存在的命名空間有:default、kube-system、kube-pulic。
- 查詢k8s裡特定「資源」要帶上相應的命名空間。
3.3.1 label- 標籤是k8s特色的管理方式,便於分類管理資源物件。
- 乙個標籤可以對應多個資源,乙個資源可以有多個標籤,它們是多對多的關係。
- 乙個資源擁有多個標籤,可以實現不同維度的管理。
- 標籤的組成:key=value。
- 與標籤類似的,還有一種「註解」(annotations)。
3.3.2 label選擇器- 給資源打上標籤後,可以使用標籤選擇器過濾指定的標籤。
- 標籤選擇器目前有兩個:基於等值關係(等於、不等於)和基於集合關係(屬於、不屬於、存在)。
- 許多資源支援內嵌標籤選擇器字段
· matchlabels
· matchexpressions
3.4.1 service- 在k8s的世界裡,雖然每個pod都會被分配乙個單獨的ip位址,但這個ip位址會隨著pod的銷毀而消失。
- service就是用來解決這個問題的核心概念。
- 乙個service可以看作一組提供相同服務的pod的對外訪問介面。
- service作用於哪些pod是通過標籤選擇器來定義的。
3.4.2 ingress- ingress是k8s集群裡工作在osi網路參考模型下,第7層的應用,對外暴露的介面。
- service只能進行l4(4層)流量排程,表現形式是ip+port。
- ingress則可以排程不同業務域、不同url訪問路徑的業務流量。
配置儲存中心 → etcd服務
主控節點(master)
- kube-apiserver服務
- kube-controller-manager服務
- kube-scheduler服務
運算節點(node)
- kube-kubelet服務
- kube-proxy服務
4.1.1 核心元件詳解(1)配置儲存中心 → etcd服務
- 類似於zk這種集群管理中心,用來存放集群的元資料資訊,如k8s集群狀態、請求、資源配額等。儲存方式為鍵值對。
(2)kube-apiserver服務
- 提供了集群管理的rest api介面(包括鑑權、資料校驗及集群狀態變更)。
- 負責其他模組之間的資料互動,承擔通訊樞紐功能(集群大腦,所有元件都要通過它來進行通訊)。
- 是資源配額控制的入口。
- 提供完備的集群安全機制。
(3)kube-controller-manager服務(控制器管理器)
- 由一系列控制器組成,通過apiserver監控整個集群的狀態,並確保集群處於預期的工作狀態。
- node controller # 節點控制器
- deployment controller # pod控制器
- service controller # 服務控制器
- volume controller # 儲存卷控制器
- endpoint controller # 接入點控制器
- garbage controller # 垃圾**控制器
- namespace controller # 命名空間控制器
- job controller # 任務控制器
- resource quta controller # 資源配額控制器
- ……………………
(3)kube-scheduler服務
- 主要功能是接收排程pod到適合的運算節點上,主要用下面兩種策略來選擇合適的節點排程。
- 預算策略(predict)
- 優選策略(priorities)
(4)kube-kubelet服務
- 簡單的說,kubelet的主要功能就是定時從某個地方獲取節點上pod的期望狀態(執行什麼容器、執行的副本數量、網路或儲存如何配置等等),並呼叫對應的容器平台介面達到這個狀態。
- 定時匯報當前節點狀態給apiserver,並儲存到etcd裡,以供排程的時候使用。
- 映象和容器的清理工作,保證節點上映象不會沾滿磁碟空間,退出的容器不會占用太多的資源。
(5)kube-proxy服務
- 是k8s在每個節點上執行的網路**,service資源的載體、
- 建立了pod網路和集群網路關係(clusterip → podip)。
- 常用三種流量排程模式
· userspace(廢棄)
· iptables(瀕臨廢棄)
· ipvs(推薦)
- 負責建立和刪除包括更新排程規則,通知apiserver自己的更新,或者從apiserver那裡獲取其他kube-proxy的排程規則變化,來更新自己的
cni網路外掛程式 → flannel/calico
服務發現用外掛程式 → coredns
服務暴露用外掛程式 → traefik
gui管理外掛程式 → dashboard
kubectl
(1)minikube,單節點微型k8s(僅供學習、預覽k8s特性使用)
(2)二進位制安裝部署(生產首選,新手推薦,但是安裝步驟繁雜)
(3)kubeadmin,k8s的部署工具,跑在k8s裡(相對簡單,熟手推薦)
k8s 多租戶 k8s 基礎介紹
備註 1 每乙個pod裡執行著乙個特殊的容器 pause容器,其他容器都是業務容器,這些業務容器共享pause容器的網路棧和volume 邏輯卷 掛載卷。因此他們之間的通訊和資料交換更為高效。2 k8s設計了pod物件,將每個服務程序包裝到相應的pod中,使其成為pod中執行的乙個容器 contai...
k8s入門知識介紹01
k8s中文社群 1四組基本概念 pod pod控制器 name namespace lable label選擇器 service ingress 1.1 pod和pod控制器 kubernetes 的pod控制器 podk8s裡能夠被執行的最小邏輯單元 1個pod裡面可以執行多個容器 sidecar...
k8s元件介紹
master 管理節點 api server 供kubernetes api介面,主要處理 rest操作以及更新etcd中的物件。所有資源增刪改查的唯一入口。scheduler 繫結pod到node上,資源排程。controller manager 所有其他群集級別的功能,目前由控制器manager...