91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

帶你快速了解 kubernetes

馬哥Linux運維 ? 來源:fredalxin ? 2023-01-17 10:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

kubernetes 已經成為容器編排領域的王者,它是基于容器的集群編排引擎,具備擴展集群、滾動升級回滾、彈性伸縮、自動治愈、服務發現等多種特性能力。

本文將帶著大家快速了解 kubernetes ,了解我們談論 kubernetes 都是在談論什么。

kubernetes 架構

51e2d51e-95c1-11ed-bfe3-dac502259ad0.png

從宏觀上來看 kubernetes 的整體架構,包括 Master、Node 以及 Etcd。

Master 即主節點,負責控制整個 kubernetes 集群。它包括 Api Server、Scheduler、Controller 等組成部分。它們都需要和 Etcd 進行交互以存儲數據。

Api Server:主要提供資源操作的統一入口,這樣就屏蔽了與 Etcd 的直接交互。功能包括安全、注冊與發現等。

Scheduler:負責按照一定的調度規則將 Pod 調度到 Node 上。

Controller:資源控制中心,確保資源處于預期的工作狀態。

Node 即工作節點,為整個集群提供計算力,是容器真正運行的地方,包括運行容器、kubelet、kube-proxy。

kubelet :主要工作包括管理容器的生命周期、結合 cAdvisor 進行監控、健康檢查以及定期上報節點狀態。

kube-proxy : 主要利用 service 提供集群內部的服務發現和負載均衡,同時監聽 service/endpoints 變化并刷新負載均衡。

從創建 deployment 開始

520a5c6a-95c1-11ed-bfe3-dac502259ad0.png

deployment 是用于編排 pod 的一種控制器資源,我們會在后面做介紹。這里以 deployment 為例,來看看架構中的各組件在創建 deployment 資源的過程中都干了什么。

首先是 kubectl 發起一個創建 deployment 的請求

apiserver 接收到創建 deployment 請求,將相關資源寫入 etcd;之后所有組件與 apiserver/etcd 的交互都是類似的

deployment controller list/watch 資源變化并發起創建 replicaSet 請求

replicaSet controller list/watch 資源變化并發起創建 pod 請求

scheduler 檢測到未綁定的 pod 資源,通過一系列匹配以及過濾選擇合適的 node 進行綁定

kubelet 發現自己 node 上需創建新 pod,負責 pod 的創建及后續生命周期管理

kube-proxy 負責初始化 service 相關的資源,包括服務發現、負載均衡等網絡規則

至此,經過 kubenetes 各組件的分工協調,完成了從創建一個 deployment 請求開始到具體各 pod 正常運行的全過程。

Pod

在 kubernetes 眾多的 api 資源中,pod 是最重要和基礎的,是最小的部署單元。

首先我們要考慮的問題是,我們為什么需要 pod?pod 可以說是一種容器設計模式,它為那些”超親密”關系的容器而設計,我們可以想象 servelet 容器部署 war 包、日志收集等場景,這些容器之間往往需要共享網絡、共享存儲、共享配置,因此我們有了 pod 這個概念。

5222e6ea-95c1-11ed-bfe3-dac502259ad0.png

對于 pod 來說,不同 container 之間通過 infra container 的方式統一識別外部網絡空間,而通過掛載同一份 volume 就自然可以共享存儲了,比如它對應宿主機上的一個目錄。

容器編排

容器編排是 kubernetes 的看家本領了,所以我們有必要了解一下。kubernetes 中有諸多編排相關的控制資源,例如編排無狀態應用的 deployment,編排有狀態應用的 statefulset,編排守護進程 daemonset 以及編排離線業務的 job/cronjob 等等。

我們還是以應用最廣泛的 deployment 為例。deployment、replicatset、pod 之間的關系是一種層層控制的關系。簡單來說,replicaset 控制 pod 的數量,而 deployment 控制 replicaset 的版本屬性。這種設計模式也為兩種最基本的編排動作實現了基礎,即數量控制的水平擴縮容、版本屬性控制的更新/回滾。

水平擴縮容

523337f2-95c1-11ed-bfe3-dac502259ad0.png

水平擴縮容非常好理解,我們只需修改 replicaset 控制的 pod 副本數量即可,比如從 2 改到 3,那么就完成了水平擴容這個動作,反之即水平收縮。

更新/回滾

52472a6e-95c1-11ed-bfe3-dac502259ad0.png

更新/回滾則體現了 replicaset 這個對象的存在必要性。例如我們需要應用 3 個實例的版本從 v1 改到 v2,那么 v1 版本 replicaset 控制的 pod 副本數會逐漸從 3 變到 0,而 v2 版本 replicaset 控制的 pod 數會注解從 0 變到 3,當 deployment 下只存在 v2 版本的 replicaset 時變完成了更新。回滾的動作與之相反。

滾動更新

可以發現,在上述例子中,我們更新應用,pod 總是一個一個升級,并且最小有 2 個 pod 處于可用狀態,最多有 4 個 pod 提供服務。這種”滾動更新”的好處是顯而易見的,一旦新的版本有了 bug,那么剩下的 2 個 pod 仍然能夠提供服務,同時方便快速回滾。

在實際應用中我們可以通過配置 RollingUpdateStrategy 來控制滾動更新策略,maxSurge 表示 deployment 控制器還可以創建多少個新 Pod;而 maxUnavailable 指的是,deployment 控制器可以刪除多少個舊 Pod。

kubernetes 中的網絡

我們了解了容器編排是怎么完成的,那么容器間的又是怎么通信的呢?

講到網絡通信,kubernetes 首先得有”三通”基礎:

node 到 pod 之間可以通

node 的 pod 之間可以通

不同 node 之間的 pod 可以通

5260809a-95c1-11ed-bfe3-dac502259ad0.png

簡單來說,不同 pod 之間通過 cni0/docker0 網橋實現了通信,node 訪問 pod 也是通過 cni0/docker0 網橋通信即可。

而不同 node 之間的 pod 通信有很多種實現方案,包括現在比較普遍的 flannel 的 vxlan/hostgw 模式等。flannel 通過 etcd 獲知其他 node 的網絡信息,并會為本 node 創建路由表,最終使得不同 node 間可以實現跨主機通信。

微服務—service

在了解接下來的內容之前,我們得先了解一個很重要的資源對象:service。

我們為什么需要 service 呢?在微服務中,pod 可以對應實例,那么 service 對應的就是一個微服務。而在服務調用過程中,service 的出現解決了兩個問題:

pod 的 ip 不是固定的,利用非固定 ip 進行網絡調用不現實

服務調用需要對不同 pod 進行負載均衡

service 通過 label 選擇器選取合適的 pod,構建出一個 endpoints,即 pod 負載均衡列表。實際運用中,一般我們會為同一個微服務的 pod 實例都打上類似app=xxx的標簽,同時為該微服務創建一個標簽選擇器為app=xxx的 service。

kubernetes 中的服務發現與網絡調用

在有了上述”三通”的網絡基礎后,我們可以開始微服務架構中的網絡調用在 kubernetes 中是怎么實現的了。

這部分內容其實在說說 Kubernetes 是怎么實現服務發現的已經講得比較清楚了,比較細節的地方可以參考上述文章,這里做一個簡單的介紹。

服務間調用

首先是東西向的流量調用,即服務間調用。這部分主要包括兩種調用方式,即 clusterIp 模式以及 dns 模式。

clusterIp 是 service 的一種類型,在這種類型模式下,kube-proxy 通過 iptables/ipvs 為 service 實現了一種 VIP(虛擬 ip)的形式。只需要訪問該 VIP,即可負載均衡地訪問到 service 背后的 pod。

5278bd0e-95c1-11ed-bfe3-dac502259ad0.png

上圖是 clusterIp 的一種實現方式,此外還包括 userSpace 代理模式(基本不用),以及 ipvs 模式(性能更好)。

dns 模式很好理解,對 clusterIp 模式的 service 來說,它有一個 A 記錄是 service-name.namespace-name.svc.cluster.local,指向 clusterIp 地址。所以一般使用過程中,我們直接調用 service-name 即可。

服務外訪問

528908ee-95c1-11ed-bfe3-dac502259ad0.png

南北向的流量,即外部請求訪問 kubernetes 集群,主要包括三種方式:nodePort、loadbalancer、ingress。

nodePort 同樣是 service 的一種類型,通過 iptables 賦予了調用宿主機上的特定 port 就能訪問到背后 service 的能力。

loadbalancer 則是另一種 service 類型,通過公有云提供的負載均衡器實現。

我們訪問 100 個服務可能需要創建 100 個 nodePort/loadbalancer。我們希望通過一個統一的外部接入層訪問內部 kubernetes 集群,這就是 ingress 的功能。ingress 提供了統一接入層,通過路由規則的不同匹配到后端不同的 service 上。ingress 可以看做是”service 的 service”。ingress 在實現上往往結合 nodePort 以及 loadbalancer 完成功能。

到現在為止,我們簡單了解了 kubernetes 的相關概念,它大致是怎么運作的,以及微服務是怎么運行在 kubernetes 中的。于是當我們聽到別人討論 kubernetes 時,我們可以知道他們在討論什么。

編輯:何安

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 架構
    +關注

    關注

    1

    文章

    528

    瀏覽量

    25979
  • kubernetes
    +關注

    關注

    0

    文章

    245

    瀏覽量

    9064

原文標題:快速了解 Kubernetes 的架構及特性

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Kubernetes Helm入門指南

    Helm 是 Kubernetes 的包管理工具,它允許開發者和系統管理員通過定義、打包和部署應用程序來簡化 Kubernetes 應用的管理工作。Helm 的出現是為了解決在 Kuberne
    的頭像 發表于 04-30 13:42 ?2265次閱讀
    <b class='flag-5'>Kubernetes</b> Helm入門指南

    kubernetes系統基本概念

    一文帶你看透kubernetes 容器編排系統
    發表于 11-05 08:26

    一篇文章帶你了解原型制作化技術

    一篇文章帶你了解什么是原型制作化技術?
    發表于 04-26 06:15

    深入了解kubernetes

    2014年出現的kubernetes(又叫k8s)更加炙手可熱,我想大部分人僅僅是聽說過,簡單了解它,但并沒有真正使用過。那今天本文將帶著大家一起走近kubernetes
    的頭像 發表于 02-09 15:56 ?4660次閱讀
    深入<b class='flag-5'>了解</b><b class='flag-5'>kubernetes</b>

    車規級芯片到底是什么本文帶你快速了解

    車規級芯片到底是什么本文帶你快速了解
    的頭像 發表于 03-17 10:18 ?2.7w次閱讀

    帶你快速認識和了解51單片機的詳細教程免費下載

    本文檔的主要內容詳細介紹的是帶你快速認識和了解51單片機的詳細教程免費下載包括了:1.學習51單片機需要哪些基礎知識,2.如何快速的掌握51單片機,3.什么是單片機,4.單片機的特點及
    發表于 05-21 08:00 ?1次下載
    <b class='flag-5'>帶你</b><b class='flag-5'>快速</b>認識和<b class='flag-5'>了解</b>51單片機的詳細教程免費下載

    Kubernetes是什么,一文了解Kubernetes

    香了。 這時候就需要我們的主角 Kubernetes 上場了,先來了解一下 Kubernetes 的基本概念,后面再介紹實踐,由淺入深步步為營。 關于 Kubernetes 的基本概念
    發表于 12-21 13:40 ?1917次閱讀
    <b class='flag-5'>Kubernetes</b>是什么,一文<b class='flag-5'>了解</b><b class='flag-5'>Kubernetes</b>

    帶你深入了解示波器

    帶你深入了解示波器
    發表于 02-07 14:26 ?19次下載

    物聯網是什么,一文帶你了解物聯網

    一篇文章帶你了解物聯網
    的頭像 發表于 03-23 14:16 ?4572次閱讀

    Kubernetes的基本構建塊和挑戰

      通過在運行 Cumulus 操作系統的 NVIDIA Spectrum 交換機上使用 Cumulus NetQ ,您可以廣泛了解 Kubernetes 部署,并在這些快速變化的動態環境中運行。
    的頭像 發表于 04-22 11:04 ?1093次閱讀
    <b class='flag-5'>Kubernetes</b>的基本構建塊和挑戰

    Kubernetes網絡模型的基礎知識

    Kubernetes 是為運行分布式集群而建立的,分布式系統的本質使得網絡成為 Kubernetes 的核心和必要組成部分,了解 Kubernetes 網絡模型可以使你能夠正確運行、監
    的頭像 發表于 07-20 09:46 ?1490次閱讀

    快速了解kubernetes

    Master 即主節點,負責控制整個 kubernetes 集群。它包括 Api Server、Scheduler、Controller 等組成部分。它們都需要和 Etcd 進行交互以存儲數據。
    發表于 08-03 10:38 ?514次閱讀

    kubernetes是怎么運作的

    kubernetes 已經成為容器編排領域的王者,它是基于容器的集群編排引擎,具備擴展集群、滾動升級回滾、彈性伸縮、自動治愈、服務發現等多種特性能力。 本文將帶著大家快速了解 kubernet
    的頭像 發表于 09-27 09:18 ?1180次閱讀

    GUS帶你了解社交距離的游戲

    電子發燒友網站提供《GUS帶你了解社交距離的游戲.zip》資料免費下載
    發表于 11-10 09:29 ?0次下載
    GUS<b class='flag-5'>帶你</b><b class='flag-5'>了解</b>社交距離的游戲

    Kubernetes特性有哪些?

    本文將介紹Kubernetes 的重要特性,這將有助于您更深入地了解 Kubernetes 的功能概念。
    的頭像 發表于 05-12 16:16 ?1189次閱讀
    <b class='flag-5'>Kubernetes</b>特性有哪些?
    主站蜘蛛池模板: 男人的午夜影院 | 欧美乱淫 | 亚洲乱码一区二区三区在线观看 | 狠狠躁夜夜躁人人爽天天段 | 一级毛片真人免费播放视频 | 国产在线欧美精品卡通动漫 | kkkbo色综合 lsj老司机精品视频在线观看 | 日本大片免aaa费观看视频 | 欧美又粗又长又湿又黄的视频 | 亚洲影视网 | 色多多黄色 | 亚州国产精品精华液 | 最新在线网址 | 亚洲欧美日本视频 | 波多野结衣一级毛片 | 国产重口老太和小伙乱视频 | 91av免费在线观看 | 伊人色综合久久天天爱 | 国产女人18毛片水真多18精品 | 狠狠色噜噜狠狠狠狠97老肥女 | 国产特黄一级一片免费 | 丁香六月婷婷精品免费观看 | 天堂成人一区二区三区 | 国产精品一区二区综合 | 超级香蕉97视频在线观看一区 | 午夜精品福利影院 | 亚洲一区二区三 | 国产精品一级毛片不收费 | 性69交片免费看 | 免费男女视频 | 国产亚洲精品久久久久久久软件 | 天天操天天插 | 国产www色 | 欧美系列在线观看 | 亚洲看片 | 激情综合网激情 | 欧美一级三级在线观看 | 2018天天干天天操 | 久久影视精品 | 日本丰满毛茸茸熟妇 | 午夜色视频在线观看 |