自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

不懂Kubernetes,被老板邀請(qǐng)爬山!

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

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

[[333278]]

 

圖片來(lái)自 Pexels

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

Kubernetes 架構(gòu)

 

從宏觀上來(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 開始

 

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

步驟如下:

  • 首先是 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 資源,通過一系列匹配以及過濾選擇合適的 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)過 Kubenetes 各組件的分工協(xié)調(diào),完成了從創(chuàng)建一個(gè) Deployment 請(qǐng)求開始到具體各 Pod 正常運(yùn)行的全過程。

Pod

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

首先我們要考慮的問題是,我們?yōu)槭裁葱枰?Pod?Pod 可以說(shuō)是一種容器設(shè)計(jì)模式,它為那些”超親密”關(guān)系的容器而設(shè)計(jì),我們可以想象 Servelet 容器部署 War 包、日志收集等場(chǎng)景。

這些容器之間往往需要共享網(wǎng)絡(luò)、共享存儲(chǔ)、共享配置,因此我們有了 Pod 這個(gè)概念。

 

對(duì)于 Pod 來(lái)說(shuō),不同 Container 之間通過 Infra Container 的方式統(tǒng)一識(shí)別外部網(wǎng)絡(luò)空間,而通過掛載同一份 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ò)縮容

 

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

更新/回滾

 

更新/回滾則體現(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í)變完成了更新。回滾的動(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)用中我們可以通過配置 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 可以通

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

而不同 Node 之間的 Pod 通信有很多種實(shí)現(xiàn)方案,包括現(xiàn)在比較普遍的 Flannel 的 vxlan/hostgw 模式等。

Flannel 通過 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)用過程中,service 的出現(xiàn)解決了兩個(gè)問題:

  • Pod 的 IP 不是固定的,利用非固定 IP 進(jìn)行網(wǎng)絡(luò)調(diào)用不現(xiàn)實(shí)
  • 服務(wù)調(diào)用需要對(duì)不同 Pod 進(jìn)行負(fù)載均衡

Service 通過 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 通過 iptables/ipvs 為 Service 實(shí)現(xiàn)了一種 VIP(虛擬 IP)的形式。只需要訪問該 VIP,即可負(fù)載均衡地訪問到 Service 背后的 Pod。

 

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

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

服務(wù)外訪問

 

南北向的流量,即外部請(qǐng)求訪問 Kubernetes 集群,主要包括三種方式:

  • nodePort
  • loadbalancer
  • ingress

nodePort 同樣是 Service 的一種類型,通過 IPtables 賦予了調(diào)用宿主機(jī)上的特定 Port 就能訪問到背后 Service 的能力。

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

我們?cè)L問 100 個(gè)服務(wù)可能需要?jiǎng)?chuàng)建 100 個(gè) nodePort/Loadbalancer。我們希望通過一個(gè)統(tǒng)一的外部接入層訪問內(nèi)部 Kubernetes 集群,這就是 Ingress 的功能。

Ingress 提供了統(tǒng)一接入層,通過路由規(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>

作者:fredalxin

編輯:陶家龍

出處:https://fredal.xin/what-is-kubernetes

責(zé)任編輯:武曉燕 來(lái)源: fredal.xin
相關(guān)推薦

2020-07-15 08:10:00

瀏覽器安全Fetch

2022-12-01 17:17:09

React開發(fā)

2009-10-28 09:14:43

員工分析軟件

2022-12-22 17:46:19

2019-09-24 14:21:47

CIO數(shù)字化轉(zhuǎn)型目的

2020-04-07 08:00:02

Redis緩存數(shù)據(jù)

2021-01-18 11:27:03

Istio架構(gòu)云環(huán)境

2020-04-24 09:14:21

術(shù)語(yǔ)網(wǎng)絡(luò)安全黑客

2018-12-27 09:10:45

2020-05-28 09:06:23

大數(shù)據(jù)平臺(tái)優(yōu)化

2017-03-21 13:53:17

運(yùn)維戴爾企業(yè)級(jí)解決方案

2015-02-12 09:26:07

2019-05-30 14:05:35

固態(tài)硬盤協(xié)議?

2009-05-21 09:37:32

臺(tái)積電張忠謀被裁員工

2023-10-12 00:00:00

面試程序多線程

2009-12-29 11:09:56

博科資訊物流管理

2023-10-28 00:02:55

2011-04-06 17:44:41

老板IPadAruba

2018-02-07 10:59:38

2022-05-20 16:50:33

區(qū)塊鏈Web3加密資產(chǎn)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)