1.k8s:架構,組件,基礎概念

目錄

一、k8s了解

1.什么是k8s

2.為什么要k8s

(1)部署方式演變

(2)k8s作用

(3)Mesos,Swarm,K8S三大平臺對比

二、k8s架構、組件

1.k8s架構

2.k8s基礎組件

3.k8s附加組件

三、k8s基礎概念

1.服務的分類

(1)無狀態

(2)有狀態

2.資源的分類

(1)元數據型

*1)Horizontal Pod Autoscaler(HPA)

*2)Pod Template

*3)LimitRange

(2)集群級

*1)Namespace

*2)Node

*3)ClusterRole

*4)ClusterRoleBinding

(3)命名空間級pod型資源

*1)適用于無狀態服務的pod型資源

^1) 副本

^2)Replication Controller (RC)

^3)ReplicaSet(RS)

^4)Deployment controller

*2)適用于有狀態服務的pod型資源(StatefulSet )

^1) 主要特點

^2) Headless Service

^3)volumeClaimTemplate

^4)注意事項

*3)守護進程(DaemonSet)

*4)任務/定時任務

3.服務發現

(1)service

(2)Ingress

4.存儲

(1)Volume

(2)CSI

5.特殊類型配置

(1)ConfigMap

(2)Secret

(3)DownwardAPI

(4)Role

(5)RoleBinding

6.規約(spec)

7.狀態(Status)

四、感謝支持


前面我們有了解過一些k8s,但是那個版本比較老,因此會產生很多的bug和不兼容的問題以及依賴或者鏈接丟失的問題,我們用比較新的版本重頭學一遍k8s。

一、k8s了解

1.什么是k8s

k8s是管理容器化應用的平臺,且能夠管理云平臺多主機,能讓我們容器化部署更高效更容易。

2.為什么要k8s

(1)部署方式演變

傳統服務:

環境不隔離,并發修改,內存、cpu、帶寬資源爭搶

虛擬化部署:

虛擬機占用過多,擴展也不大好擴展

容器化部署:

大大縮短容器生命周期

(2)k8s作用

當容器生命周期大大縮短之后,ip、數據可能就會不穩定就需要k8s去管理他們:

  • 自我監控,自我修復
  • 彈性伸縮
  • 自動部署和回滾
  • 服務發現、負載均衡
  • 配置管理
  • 存儲編排:存儲資源抽象成虛擬磁盤,然后虛擬磁盤映射物理磁盤
  • 批處理

(3)Mesos,Swarm,K8S三大平臺對比

Mesos:

主要用于資源管理,發布最早,能管理5W+機器。主要面向節點,而非面向容器。

Docker Swarm:

docker官方都不用了,無縫集成docker,用于節點不多,簡單的業務場景。

k8s:

復雜容器管理。

二、k8s架構、組件

1.k8s架構

一個kubernetes集群主要是由控制節點(master)、工作節點(node)構成,每個節點上都會安裝不同的組件。

master:集群的控制平面,負責集群的決策 ( 管理 )

  • ApiServer : 資源操作的唯一入口,接收用戶輸入的命令,提供認證、授權、API注冊和發現等機制
  • Scheduler : 負責集群資源調度,按照預定的調度策略將Pod調度到相應的node節點上
  • ControllerManager : 負責維護集群的狀態,比如程序部署安排、故障檢測、自動擴展、滾動更新等。
  • Etcd :負責存儲集群中各種資源對象的信息

node:集群的數據平面,負責為容器提供運行環境 ( 干活 )

  • Kubelet : 負責維護容器的生命周期,即通過控制docker,來創建、更新、銷毀容器
  • KubeProxy : 負責提供集群內部的服務發現和負載均衡
  • Container runtime:負責鏡像管理以及 Pod 和容器的真正運行

下面,以部署一個nginx服務來說明kubernetes系統各個組件調用關系:

  1. 首先要明確,一旦kubernetes環境啟動之后,master和node都會將自身的信息存儲到etcd數據庫中
  2. 一個nginx服務的安裝請求會首先被發送到master節點的apiServer組件
  3. apiServer組件會調用scheduler組件來決定到底應該把這個服務安裝到哪個node節點上
  4. 在此時,它會從etcd中讀取各個node節點的信息,然后按照一定的算法進行選擇,并將結果告知apiServer
  5. apiServer調用controller-manager去調度Node節點安裝nginx服務
  6. kubelet接收到指令后,會通知docker,然后由docker來啟動一個nginx的pod
  7. pod是kubernetes的最小操作單元,容器必須跑在pod中
  8. 至此,一個nginx服務就運行了,如果需要訪問nginx,就需要通過kube-proxy來對pod產生訪問的代理
  9. 這樣,外界用戶就可以訪問集群中的nginx服務了

2.k8s基礎組件

  • Master:集群控制節點,每個集群需要至少一個master節點負責集群的管控
  • Node:工作負載節點,由master分配容器到這些node工作節點上,然后node節點上的docker負責容器的運行
  • Pod:kubernetes的最小控制單元,容器都是運行在pod中的,一個pod中可以有1個或者多個容器
  • Controller:控制器,通過它來實現對pod的管理,比如啟動pod、停止pod、伸縮pod的數量等等
  • Service:pod對外服務的統一入口,下面可以維護者同一類的多個pod
  • Label:標簽,用于對pod進行分類,同一類pod會擁有相同的標簽
  • NameSpace:命名空間,用來隔離pod的運行環境

3.k8s附加組件

  • kube-dns:負責為整個集群提供 DNS 服務
  • Ingress Controller: 為服務提供外網入口
  • Prometheus :提供資源監控
  • Dashboard :提供 GUI
  • Federation :提供跨可用區的集群
  • Fluentd-elasticsearch :提供集群日志采集、存儲與查詢

三、k8s基礎概念

1.服務的分類

(1)無狀態

代表應用:Nginx、Apache

優點:對客戶端透明,無依賴關系,可以高效實現擴容、遷移

缺點:不能存儲數據,需要額外的數據服務支撐

(2)有狀態

代表應用:MySQL、Redis

優點:可以獨立存儲數據,實現數據管理

缺點:集群環境下需要實現主從、數據同步、備份、水平擴容復雜

2.資源的分類

(1)元數據型

*1)Horizontal Pod Autoscaler(HPA)

用于Pod 自動擴容:可以根據 CPU 使用率或自定義指標(metrics)自動對 Pod 進行擴/縮容

  • 每隔30s查詢metrics的資源使用情況
  • 支持的metrics:預定義metrics、自定義的Pod metrics、自定義的object metrics
  • metrics查詢方式:Heapster、自定義的REST API

*2)Pod Template

控制器通過 Pod Template 信息來創建 Pod。

*3)LimitRange

批量設置了某一個范圍內(某個命名空間)的 Pod 的資源使用限制

(2)集群級

*1)Namespace

用于實現多團隊/環境的資源隔離。

*2)Node

Node 本質上不是Kubernetes 來創建的,Kubernetes 只是管理 Node 上的資源。

*3)ClusterRole

ClusterRole 是一組權限的集合,可以進行鑒權。

*4)ClusterRoleBinding

將 Subject 綁定到 ClusterRole、使規則在所有命名空間中生效。

(3)命名空間級pod型資源

*1)適用于無狀態服務的pod型資源
^1) 副本

一個 Pod 可以被復制成多份,每一份可被稱之為一個副本

^2)Replication Controller (RC)

RC 可以保證在任意時間運行的 Pod 的副本數量總是可用的,它實現了 Pod 的高可用性。

^3)ReplicaSet(RS)

RS主要的作用就是用來確保容器應用的副本數始終保持在用戶定義的副本數。

注:?Kubernetes 官方建議使用 RS替代 RC進行部署

^4)Deployment controller

Deployment 為 Pod 和 RS 提供聲明式更新,你只需要在 Deployment 中描述你想要的目標狀態是什么,Deployment controller 就會幫你將 Pod 和 Replica Set 的實際狀態改變到你的目標狀態。

Deployment controller可以用來創建 Replica Set / Pod

*2)適用于有狀態服務的pod型資源(StatefulSet )
^1) 主要特點
  • 穩定的持久化存儲

  • 穩定的網絡標志

  • 有序部署,有序擴展。有序收縮,有序刪除

^2) Headless Service

用于定義網絡標志(DNS domain)。

Domain Name Server:域名服務,將域名與 ip 綁定映射關系
?

^3)volumeClaimTemplate

用于創建 PersistentVolumes

^4)注意事項
  • 有狀態的pod型,kubernetes v1.5 版本以上才支持
  • 所有Pod的Volume必須使用PersistentVolume或者是管理員事先創建好

  • 為了保證數據安全,刪除StatefulSet時不會刪除Volume

  • StatefulSet 需要一個 Headless Service 來定義 DNS domain,需要在 StatefulSet 之前創建好

*3)守護進程(DaemonSet)

DaemonSet 保證會在每個 Node 上都運行一個容器副本,常用來部署一些集群的日志、監控或者其他系統管理應用

*4)任務/定時任務

有一次性任務和定時任務。

3.服務發現

(1)service

Pod 不能直接提供給外網訪問,而是應該使用 service。Service 就是把 Pod 暴露出來提供服務

(2)Ingress

Ingress 可以提供外網訪問 Service 的能力。可以把某個請求地址映射、路由到特定的 service。

ingress 需要配合 ingress controller 一起使用才能發揮作用,ingress 只是相當于路由規則的集合而已,真正實現路由功能的,是 Ingress Controller,ingress controller 和其它 k8s 組件一樣,也是在 Pod 中運行。

4.存儲

(1)Volume

數據卷,共享 Pod 中容器使用的數據。用來放持久化的數據,比如數據庫數據。

(2)CSI

CSI 規范定義了存儲提供商實現 CSI 兼容的 Volume Plugin 的最小操作集和部署建議,是一種規范

5.特殊類型配置

(1)ConfigMap

用來放配置, ConfigMap 放的是明文的數據

(2)Secret

用來放配置, Secret放的是密文的數據

(3)DownwardAPI

讓 pod 里的容器能夠直接獲取到這個 pod 對象本身的一些信息。

(4)Role

Role 是一組權限的集合

(5)RoleBinding

Subject 綁定到 Role,RoleBinding 使規則在命名空間內生效。

6.規約(spec)

描述了對象的期望狀態(Desired State)—— 希望對象所具有的特征。當創建 Kubernetes 對象時,必須提供對象的規約,用來描述該對象的期望狀態,以及關于對象的一些基本信息

7.狀態(Status)

k8s 會通過一系列的控制器對對應對象進行管理,讓對象盡可能的讓實際狀態與期望狀態重合。

四、感謝支持

感謝各位大佬支持,如果覺得滿意可以請喝一杯咖啡嗎:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/35947.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/35947.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/35947.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

5種算法簡單介紹:貪心算法、分治法、回溯法、動態規劃法、最大流算法

1. 貪心算法(Greedy Algorithm) 定義: 貪心算法是一種在每一步選擇中都采取在當前狀態下最好或最優(即最有利)的選擇,從而希望導致結果是全局最好或最優的算法。貪心算法并不是對所有問題都能得到整體最優…

【STM32-存儲器映射】

STM32-存儲器映射 ■ STM32F1-4G地址空間分成8個塊■ STM32F1-Block0■ STM32F1-Block1■ STM32F1-Block2■ STM32F1- ■ STM32F1-4G地址空間分成8個塊 ■ STM32F1-Block0 有出廠 BootLoader 就可以使用串口下載程序。如Keil5圖中IROM地址是0x8000000 開始 就是flash地址 ■ S…

使用方法——注意事項及好處

public class MethodDemo01 {public static void main(String[] args) {// 目標:掌握定義方法的完整性,清楚使用方法的好處。// 需求:假如現在有很多程序員都要進行2個整數求和的操作。//1、李工。int rs sun(10,20);System.out.println(&q…

低代碼開發平臺賦能智慧警務管理:創新引領下的安全新篇章

隨著信息技術的飛速發展,智慧警務管理已經成為維護社會治安、保障人民安全的重要手段。在這一背景下,低代碼開發平臺以其高效、靈活、易用的特性,為智慧警務管理注入了新的活力。本文將探討低代碼開發平臺在智慧警務管理中的應用,…

vue-codemirror的簡單使用

功能 代碼編輯器 安裝 命令行&#xff1a;npm install codemirror vue-codemirror --save 單文件引入 import { Codemirror } from vue-codemirror 單文件展示 <codemirrorv-model"localCode"class"code-mirror":placeholder"placeholder&qu…

[vscode] 自定義log快捷生成代碼

1、進入設置頁面&#xff1a;文件>首選項>用戶代碼片段>選擇設置的語言。 2. 關于代碼段顯示位置的調整設置 文件>首選項>設置&#xff0c;搜索代碼段或snippetSuggestions&#xff0c;修改為”top”; 參考&#xff1a; vscode自定義log快捷生成代碼

vue 設置定時器在某個時間段執行

業務需求&#xff1a;數據大屏頁面中的某個方法需要在今天12:00執行一次&#xff0c;或是在今天的17:00執行一次&#xff0c; 這里用到 setTimeout定時器來實現。 //獲取某個時間的時間戳 getCurrentDate(time) {let now new Date();let year now.getFullYear();let mont…

直流電機雙閉環調速Simulink仿真

直流電機參數&#xff1a; 仿真模型算法介紹&#xff1a; 1&#xff09;三相整流橋&#xff0c;采用半控功率器件SCR晶閘管&#xff1b; 2&#xff09;采用轉速環、電流環 雙閉環控制算法&#xff1b; 3&#xff09;外環-轉速環&#xff0c;采用PI 比例積分控制&#xff1b;…

Java進階-Lambda

Java進階-Lambda 前言Lambda表達式什么是Lambda表達式初識Lambda表達式Lambda表達式的簡單使用Lambda表達式格式分析與傳統接口方法實現的比較 理解Lambda表達式函數式編程非純函數實例純函數示例函數式編程在Lambda表達式中的體現 閉包閉包與Lambda表達式的示例 類型推導-匿名…

633. 平方數之和(中等)

633. 平方數之和 1. 題目描述2.詳細題解3.代碼實現3.1 Python3.2 Java內存溢出溢出代碼正確代碼與截圖 1. 題目描述 題目中轉&#xff1a;633. 平方數之和 2.詳細題解 本題是167. 兩數之和 II - 輸入有序數組&#xff08;中等&#xff09;題目的變型&#xff0c;由兩數之和變…

數字圖像分析(第二部分)

文章目錄 第8章 圖像分割圖像分割定義閾值分割依賴像素的閾值選取Otsus方法依賴區域的閾值選取依賴坐標的閾值選取變化閾值法區域生長法分裂合并方法分水嶺算法聚類分割算法K-meansAP算法Graph cut第9章 圖像特征表達基于全局特征的圖像表達直方圖GIST基于局部特征的圖像表達簡…

ROS中里程計崩潰的原因分析

里程計節點崩潰可能由多種原因引起&#xff0c;以下是一些可能的因素&#xff1a; 1. **場景特征不足**&#xff1a;如果機器人或車輛所處環境缺乏足夠的特征&#xff08;如在單調、重復紋理的地面或墻面&#xff09;&#xff0c;視覺里程計等定位方法可能因找不到匹配特征而失…

JavaScript通用下載方法,但jpg圖片下載打不開

通用下載方法&#xff0c;通過Blob的方式&#xff0c;訪問Url地址&#xff0c;下載對應的圖片&#xff0c;excel等文件。 axios({method: "get",url,responseType: "blob",}).then((res: any) > {const link document.createElement("a");co…

安裝IIS報錯 0x8024402C

我在windows2012上安裝.NET 運行環境時&#xff0c; 先安裝的sqlserver&#xff0c; 然后提示缺少framework3.5的安裝之類的。 然后又進行IIS和.NET運行庫framework的安裝&#xff0c;結果也提示安裝失敗&#xff0c;錯誤代碼0x8024402C。 我照著網上的幫助卸載了sqlserver 并…

前端打包配置+nginx配置實現部署及部署地址帶特定前綴的幾種方式

前端打包后要部署到服務器&#xff0c;在瀏覽器中可以通過url訪問到我們開發的系統&#xff0c;通過nginx代理在工作中是一種很常用的方式。 這里以本地為例&#xff0c;把本地電腦當作一個服務器&#xff0c;實現普通部署、帶特定前綴等 前端使用vue-clivue作為例子 以下內容…

第2次作業

問題&#xff1a;cs與msf權限傳遞&#xff0c;以及mimikatz抓取win2012明文密碼。 一、CS與MSF權限傳遞 CS&#xff08;Cobalt Strike&#xff09;和MSF&#xff08;Metasploit Framework&#xff09;是兩種常用的滲透測試工具&#xff0c;它們都支持在滲透過程中傳遞權限。以…

1.3 Sqoop 數據同步工具詳細教程

Apache Sqoop 是一個開源工具&#xff0c;用于在 Apache Hadoop 和關系型數據庫&#xff08;如 MySQL、Oracle、PostgreSQL 等&#xff09;之間高效傳輸數據。Sqoop 可以將結構化數據從關系型數據庫導入到 Hadoop 的 HDFS、Hive 和 HBase 中&#xff0c;也可以將數據從 Hadoop …

git 多分支實現上傳文件但避免沖突檢測

文章目錄 背景實現步驟 背景 對于某些通過命令生成的配置文件&#xff08;如 TypeScript 類型文件等&#xff09; 實現步驟 1

背包問題(動歸)

目錄 問能否能裝滿背包&#xff08;或者最多裝多少&#xff09;&#xff1a;dp[j] max(dp[j], dp[j - nums[i]] nums[i]); 對應題目如下&#xff1a; 416.分割等和子集 (物品正序&#xff0c;背包倒序) 問裝滿背包有幾種方法&#xff1a;dp[j] dp[j - nums[i]] &#xff…

父級設置最大寬度,其寬度自適應子級中的內容

父級寬度自適應 1.父級限制最大寬度 2.子級豎著排放,每列的個數明確 3.父級的寬度跟隨子級元素的個數變化寬度 tips: 因為父級要設置"background-color"屬性,所以父級DIV必須要給明確的寬高,這就意味著純CSS自適應寬度無法做到(好吧,是我做不到) HTML <temp…