一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

帶你快速了解 kubernetes

馬哥Linux運(yùn)維 ? 來(lái)源:fredalxin ? 2023-01-17 10:00 ? 次閱讀

kubernetes 已經(jīng)成為容器編排領(lǐng)域的王者,它是基于容器的集群編排引擎,具備擴(kuò)展集群、滾動(dòng)升級(jí)回滾、彈性伸縮、自動(dòng)治愈、服務(wù)發(fā)現(xiàn)等多種特性能力。

本文將帶著大家快速了解 kubernetes ,了解我們談?wù)?kubernetes 都是在談?wù)撌裁础?/p>

kubernetes 架構(gòu)

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

從宏觀上來(lái)看 kubernetes 的整體架構(gòu),包括 Master、Node 以及 Etcd。

Master 即主節(jié)點(diǎn),負(fù)責(zé)控制整個(gè) kubernetes 集群。它包括 Api Server、Scheduler、Controller 等組成部分。它們都需要和 Etcd 進(jìn)行交互以存儲(chǔ)數(shù)據(jù)。

Api Server:主要提供資源操作的統(tǒng)一入口,這樣就屏蔽了與 Etcd 的直接交互。功能包括安全、注冊(cè)與發(fā)現(xiàn)等。

Scheduler:負(fù)責(zé)按照一定的調(diào)度規(guī)則將 Pod 調(diào)度到 Node 上。

Controller:資源控制中心,確保資源處于預(yù)期的工作狀態(tài)。

Node 即工作節(jié)點(diǎn),為整個(gè)集群提供計(jì)算力,是容器真正運(yùn)行的地方,包括運(yùn)行容器、kubelet、kube-proxy。

kubelet :主要工作包括管理容器的生命周期、結(jié)合 cAdvisor 進(jìn)行監(jiān)控、健康檢查以及定期上報(bào)節(jié)點(diǎn)狀態(tài)。

kube-proxy : 主要利用 service 提供集群內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡,同時(shí)監(jiān)聽 service/endpoints 變化并刷新負(fù)載均衡。

從創(chuàng)建 deployment 開始

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

deployment 是用于編排 pod 的一種控制器資源,我們會(huì)在后面做介紹。這里以 deployment 為例,來(lái)看看架構(gòu)中的各組件在創(chuàng)建 deployment 資源的過(guò)程中都干了什么。

首先是 kubectl 發(fā)起一個(gè)創(chuàng)建 deployment 的請(qǐng)求

apiserver 接收到創(chuàng)建 deployment 請(qǐng)求,將相關(guān)資源寫入 etcd;之后所有組件與 apiserver/etcd 的交互都是類似的

deployment controller list/watch 資源變化并發(fā)起創(chuàng)建 replicaSet 請(qǐng)求

replicaSet controller list/watch 資源變化并發(fā)起創(chuàng)建 pod 請(qǐng)求

scheduler 檢測(cè)到未綁定的 pod 資源,通過(guò)一系列匹配以及過(guò)濾選擇合適的 node 進(jìn)行綁定

kubelet 發(fā)現(xiàn)自己 node 上需創(chuàng)建新 pod,負(fù)責(zé) pod 的創(chuàng)建及后續(xù)生命周期管理

kube-proxy 負(fù)責(zé)初始化 service 相關(guān)的資源,包括服務(wù)發(fā)現(xiàn)、負(fù)載均衡等網(wǎng)絡(luò)規(guī)則

至此,經(jīng)過(guò) kubenetes 各組件的分工協(xié)調(diào),完成了從創(chuàng)建一個(gè) deployment 請(qǐng)求開始到具體各 pod 正常運(yùn)行的全過(guò)程。

Pod

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

首先我們要考慮的問(wèn)題是,我們?yōu)槭裁葱枰?pod?pod 可以說(shuō)是一種容器設(shè)計(jì)模式,它為那些”超親密”關(guān)系的容器而設(shè)計(jì),我們可以想象 servelet 容器部署 war 包、日志收集等場(chǎng)景,這些容器之間往往需要共享網(wǎng)絡(luò)、共享存儲(chǔ)、共享配置,因此我們有了 pod 這個(gè)概念。

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

對(duì)于 pod 來(lái)說(shuō),不同 container 之間通過(guò) infra container 的方式統(tǒng)一識(shí)別外部網(wǎng)絡(luò)空間,而通過(guò)掛載同一份 volume 就自然可以共享存儲(chǔ)了,比如它對(duì)應(yīng)宿主機(jī)上的一個(gè)目錄。

容器編排

容器編排是 kubernetes 的看家本領(lǐng)了,所以我們有必要了解一下。kubernetes 中有諸多編排相關(guān)的控制資源,例如編排無(wú)狀態(tài)應(yīng)用的 deployment,編排有狀態(tài)應(yīng)用的 statefulset,編排守護(hù)進(jìn)程 daemonset 以及編排離線業(yè)務(wù)的 job/cronjob 等等。

我們還是以應(yīng)用最廣泛的 deployment 為例。deployment、replicatset、pod 之間的關(guān)系是一種層層控制的關(guān)系。簡(jiǎn)單來(lái)說(shuō),replicaset 控制 pod 的數(shù)量,而 deployment 控制 replicaset 的版本屬性。這種設(shè)計(jì)模式也為兩種最基本的編排動(dòng)作實(shí)現(xiàn)了基礎(chǔ),即數(shù)量控制的水平擴(kuò)縮容、版本屬性控制的更新/回滾。

水平擴(kuò)縮容

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

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

更新/回滾

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

更新/回滾則體現(xiàn)了 replicaset 這個(gè)對(duì)象的存在必要性。例如我們需要應(yīng)用 3 個(gè)實(shí)例的版本從 v1 改到 v2,那么 v1 版本 replicaset 控制的 pod 副本數(shù)會(huì)逐漸從 3 變到 0,而 v2 版本 replicaset 控制的 pod 數(shù)會(huì)注解從 0 變到 3,當(dāng) deployment 下只存在 v2 版本的 replicaset 時(shí)變完成了更新?;貪L的動(dòng)作與之相反。

滾動(dòng)更新

可以發(fā)現(xiàn),在上述例子中,我們更新應(yīng)用,pod 總是一個(gè)一個(gè)升級(jí),并且最小有 2 個(gè) pod 處于可用狀態(tài),最多有 4 個(gè) pod 提供服務(wù)。這種”滾動(dòng)更新”的好處是顯而易見的,一旦新的版本有了 bug,那么剩下的 2 個(gè) pod 仍然能夠提供服務(wù),同時(shí)方便快速回滾。

在實(shí)際應(yīng)用中我們可以通過(guò)配置 RollingUpdateStrategy 來(lái)控制滾動(dòng)更新策略,maxSurge 表示 deployment 控制器還可以創(chuàng)建多少個(gè)新 Pod;而 maxUnavailable 指的是,deployment 控制器可以刪除多少個(gè)舊 Pod。

kubernetes 中的網(wǎng)絡(luò)

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

講到網(wǎng)絡(luò)通信,kubernetes 首先得有”三通”基礎(chǔ):

node 到 pod 之間可以通

node 的 pod 之間可以通

不同 node 之間的 pod 可以通

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

簡(jiǎn)單來(lái)說(shuō),不同 pod 之間通過(guò) cni0/docker0 網(wǎng)橋?qū)崿F(xiàn)了通信,node 訪問(wèn) pod 也是通過(guò) cni0/docker0 網(wǎng)橋通信即可。

而不同 node 之間的 pod 通信有很多種實(shí)現(xiàn)方案,包括現(xiàn)在比較普遍的 flannel 的 vxlan/hostgw 模式等。flannel 通過(guò) etcd 獲知其他 node 的網(wǎng)絡(luò)信息,并會(huì)為本 node 創(chuàng)建路由表,最終使得不同 node 間可以實(shí)現(xiàn)跨主機(jī)通信。

微服務(wù)—service

在了解接下來(lái)的內(nèi)容之前,我們得先了解一個(gè)很重要的資源對(duì)象:service。

我們?yōu)槭裁葱枰?service 呢?在微服務(wù)中,pod 可以對(duì)應(yīng)實(shí)例,那么 service 對(duì)應(yīng)的就是一個(gè)微服務(wù)。而在服務(wù)調(diào)用過(guò)程中,service 的出現(xiàn)解決了兩個(gè)問(wèn)題:

pod 的 ip 不是固定的,利用非固定 ip 進(jìn)行網(wǎng)絡(luò)調(diào)用不現(xiàn)實(shí)

服務(wù)調(diào)用需要對(duì)不同 pod 進(jìn)行負(fù)載均衡

service 通過(guò) label 選擇器選取合適的 pod,構(gòu)建出一個(gè) endpoints,即 pod 負(fù)載均衡列表。實(shí)際運(yùn)用中,一般我們會(huì)為同一個(gè)微服務(wù)的 pod 實(shí)例都打上類似app=xxx的標(biāo)簽,同時(shí)為該微服務(wù)創(chuàng)建一個(gè)標(biāo)簽選擇器為app=xxx的 service。

kubernetes 中的服務(wù)發(fā)現(xiàn)與網(wǎng)絡(luò)調(diào)用

在有了上述”三通”的網(wǎng)絡(luò)基礎(chǔ)后,我們可以開始微服務(wù)架構(gòu)中的網(wǎng)絡(luò)調(diào)用在 kubernetes 中是怎么實(shí)現(xiàn)的了。

這部分內(nèi)容其實(shí)在說(shuō)說(shuō) Kubernetes 是怎么實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)的已經(jīng)講得比較清楚了,比較細(xì)節(jié)的地方可以參考上述文章,這里做一個(gè)簡(jiǎn)單的介紹。

服務(wù)間調(diào)用

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

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

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

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

dns 模式很好理解,對(duì) clusterIp 模式的 service 來(lái)說(shuō),它有一個(gè) A 記錄是 service-name.namespace-name.svc.cluster.local,指向 clusterIp 地址。所以一般使用過(guò)程中,我們直接調(diào)用 service-name 即可。

服務(wù)外訪問(wèn)

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

南北向的流量,即外部請(qǐng)求訪問(wèn) kubernetes 集群,主要包括三種方式:nodePort、loadbalancer、ingress。

nodePort 同樣是 service 的一種類型,通過(guò) iptables 賦予了調(diào)用宿主機(jī)上的特定 port 就能訪問(wèn)到背后 service 的能力。

loadbalancer 則是另一種 service 類型,通過(guò)公有云提供的負(fù)載均衡器實(shí)現(xiàn)。

我們?cè)L問(wèn) 100 個(gè)服務(wù)可能需要?jiǎng)?chuàng)建 100 個(gè) nodePort/loadbalancer。我們希望通過(guò)一個(gè)統(tǒng)一的外部接入層訪問(wèn)內(nèi)部 kubernetes 集群,這就是 ingress 的功能。ingress 提供了統(tǒng)一接入層,通過(guò)路由規(guī)則的不同匹配到后端不同的 service 上。ingress 可以看做是”service 的 service”。ingress 在實(shí)現(xiàn)上往往結(jié)合 nodePort 以及 loadbalancer 完成功能。

到現(xiàn)在為止,我們簡(jiǎn)單了解了 kubernetes 的相關(guān)概念,它大致是怎么運(yùn)作的,以及微服務(wù)是怎么運(yùn)行在 kubernetes 中的。于是當(dāng)我們聽到別人討論 kubernetes 時(shí),我們可以知道他們?cè)谟懻撌裁础?/p>

編輯:何安

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 架構(gòu)
    +關(guān)注

    關(guān)注

    1

    文章

    525

    瀏覽量

    25802
  • kubernetes
    +關(guān)注

    關(guān)注

    0

    文章

    237

    瀏覽量

    8908

原文標(biāo)題:快速了解 Kubernetes 的架構(gòu)及特性

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Kubernetes Helm入門指南

    Helm 是 Kubernetes 的包管理工具,它允許開發(fā)者和系統(tǒng)管理員通過(guò)定義、打包和部署應(yīng)用程序來(lái)簡(jiǎn)化 Kubernetes 應(yīng)用的管理工作。Helm 的出現(xiàn)是為了解決在 Kuberne
    的頭像 發(fā)表于 04-30 13:42 ?522次閱讀
    <b class='flag-5'>Kubernetes</b> Helm入門指南

    kubernetes系統(tǒng)基本概念

    一文帶你看透kubernetes 容器編排系統(tǒng)
    發(fā)表于 11-05 08:26

    一篇文章帶你了解原型制作化技術(shù)

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

    深入了解kubernetes

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

    車規(guī)級(jí)芯片到底是什么本文帶你快速了解

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

    帶你快速認(rèn)識(shí)和了解51單片機(jī)的詳細(xì)教程免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是帶你快速認(rèn)識(shí)和了解51單片機(jī)的詳細(xì)教程免費(fèi)下載包括了:1.學(xué)習(xí)51單片機(jī)需要哪些基礎(chǔ)知識(shí),2.如何快速的掌握51單片機(jī),3.什么是單片機(jī),4.單片機(jī)的特點(diǎn)及
    發(fā)表于 05-21 08:00 ?1次下載
    <b class='flag-5'>帶你</b><b class='flag-5'>快速</b>認(rèn)識(shí)和<b class='flag-5'>了解</b>51單片機(jī)的詳細(xì)教程免費(fèi)下載

    Kubernetes是什么,一文了解Kubernetes

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

    帶你深入了解示波器

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

    物聯(lián)網(wǎng)是什么,一文帶你了解物聯(lián)網(wǎng)

    一篇文章帶你了解物聯(lián)網(wǎng)
    的頭像 發(fā)表于 03-23 14:16 ?4416次閱讀

    Kubernetes的基本構(gòu)建塊和挑戰(zhàn)

      通過(guò)在運(yùn)行 Cumulus 操作系統(tǒng)的 NVIDIA Spectrum 交換機(jī)上使用 Cumulus NetQ ,您可以廣泛了解 Kubernetes 部署,并在這些快速變化的動(dòng)態(tài)環(huán)境中運(yùn)行。
    的頭像 發(fā)表于 04-22 11:04 ?1031次閱讀
    <b class='flag-5'>Kubernetes</b>的基本構(gòu)建塊和挑戰(zhàn)

    Kubernetes網(wǎng)絡(luò)模型的基礎(chǔ)知識(shí)

    Kubernetes 是為運(yùn)行分布式集群而建立的,分布式系統(tǒng)的本質(zhì)使得網(wǎng)絡(luò)成為 Kubernetes 的核心和必要組成部分,了解 Kubernetes 網(wǎng)絡(luò)模型可以使你能夠正確運(yùn)行、監(jiān)
    的頭像 發(fā)表于 07-20 09:46 ?1384次閱讀

    快速了解kubernetes

    Master 即主節(jié)點(diǎn),負(fù)責(zé)控制整個(gè) kubernetes 集群。它包括 Api Server、Scheduler、Controller 等組成部分。它們都需要和 Etcd 進(jìn)行交互以存儲(chǔ)數(shù)據(jù)。
    發(fā)表于 08-03 10:38 ?452次閱讀

    kubernetes是怎么運(yùn)作的

    kubernetes 已經(jīng)成為容器編排領(lǐng)域的王者,它是基于容器的集群編排引擎,具備擴(kuò)展集群、滾動(dòng)升級(jí)回滾、彈性伸縮、自動(dòng)治愈、服務(wù)發(fā)現(xiàn)等多種特性能力。 本文將帶著大家快速了解 kubernet
    的頭像 發(fā)表于 09-27 09:18 ?1063次閱讀

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

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

    Kubernetes特性有哪些?

    本文將介紹Kubernetes 的重要特性,這將有助于您更深入地了解 Kubernetes 的功能概念。
    的頭像 發(fā)表于 05-12 16:16 ?1113次閱讀
    <b class='flag-5'>Kubernetes</b>特性有哪些?