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

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

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

全面解析Kubernetes自動(dòng)化容器操作的開源平臺(tái)

馬哥Linux運(yùn)維 ? 來源:CSDN技術(shù)社區(qū) ? 作者:stackpush ? 2021-06-04 15:16 ? 次閱讀

一個(gè)目標(biāo):容器操作;兩地三中心;四層服務(wù)發(fā)現(xiàn);五種Pod共享資源;六個(gè)CNI常用插件;七層負(fù)載均衡;八種隔離維度;九個(gè)網(wǎng)絡(luò)模型原則;十類IP地址;百級(jí)產(chǎn)品線;千級(jí)物理機(jī);萬級(jí)容器;相如無億,Kubernetes有億:億級(jí)日服務(wù)人次。

一個(gè)目標(biāo):容器操作

Kubernetes是自動(dòng)化容器操作的開源平臺(tái)。這些容器操作包括:部署,調(diào)度和節(jié)點(diǎn)集群間擴(kuò)展。

具體功能:

自動(dòng)化容器部署和復(fù)制。

實(shí)時(shí)彈性收縮容器規(guī)模。

容器編排成組,并提供容器間的負(fù)載均衡。

調(diào)度:容器在哪個(gè)機(jī)器上運(yùn)行。

組成:

kubectl:客戶端命令行工具,作為整個(gè)系統(tǒng)的操作入口。

kube-apiserver:以REST API服務(wù)形式提供接口,作為整個(gè)系統(tǒng)的控制入口。

kube-controller-manager:執(zhí)行整個(gè)系統(tǒng)的后臺(tái)任務(wù),包括節(jié)點(diǎn)狀態(tài)狀況、Pod個(gè)數(shù)、Pods和Service的關(guān)聯(lián)等。

kube-scheduler:負(fù)責(zé)節(jié)點(diǎn)資源管理,接收來自kube-apiserver創(chuàng)建Pods任務(wù),并分配到某個(gè)節(jié)點(diǎn)。

etcd:負(fù)責(zé)節(jié)點(diǎn)間的服務(wù)發(fā)現(xiàn)和配置共享。

kube-proxy:運(yùn)行在每個(gè)計(jì)算節(jié)點(diǎn)上,負(fù)責(zé)Pod網(wǎng)絡(luò)代理。定時(shí)從etcd獲取到service信息來做相應(yīng)的策略。

kubelet:運(yùn)行在每個(gè)計(jì)算節(jié)點(diǎn)上,作為agent,接收分配該節(jié)點(diǎn)的Pods任務(wù)及管理容器,周期性獲取容器狀態(tài),反饋給kube-apiserver。

DNS:一個(gè)可選的DNS服務(wù),用于為每個(gè)Service對(duì)象創(chuàng)建DNS記錄,這樣所有的Pod就可以通過DNS訪問服務(wù)了。

下面是Kubernetes的架構(gòu)拓?fù)鋱D:

9e1b36ae-c482-11eb-9e57-12bb97331649.jpg

兩地三中心

兩地三中心包括本地生產(chǎn)中心、本地災(zāi)備中心、異地災(zāi)備中心。

兩地三中心要解決的一個(gè)重要問題就是數(shù)據(jù)一致性問題。Kubernetes使用etcd組件作為一個(gè)高可用、強(qiáng)一致性的服務(wù)發(fā)現(xiàn)存儲(chǔ)倉庫。用于配置共享和服務(wù)發(fā)現(xiàn)。

它作為一個(gè)受到ZooKeeper和Doozer啟發(fā)而催生的項(xiàng)目。除了擁有他們的所有功能之外,還擁有以下4個(gè)特點(diǎn):

簡單:基于http+json的API讓你用curl命令就可以輕松使用。

安全:可選SSL客戶認(rèn)證機(jī)制。

快速:每個(gè)實(shí)例每秒支持一千次寫操作。

可信:使用Raft算法充分實(shí)現(xiàn)了分布式。

四層服務(wù)發(fā)現(xiàn)

先上一張圖解釋一下網(wǎng)絡(luò)七層協(xié)議:

9e61daaa-c482-11eb-9e57-12bb97331649.jpg

Kubernetes提供了兩種方式進(jìn)行服務(wù)發(fā)現(xiàn):

環(huán)境變量:當(dāng)創(chuàng)建一個(gè)Pod的時(shí)候,kubelet會(huì)在該P(yáng)od中注入集群內(nèi)所有Service的相關(guān)環(huán)境變量。需要注意的是,要想一個(gè)Pod中注入某個(gè)Service的環(huán)境變量,則必須Service要先比該P(yáng)od創(chuàng)建。這一點(diǎn),幾乎使得這種方式進(jìn)行服務(wù)發(fā)現(xiàn)不可用。

比如,一個(gè)ServiceName為redis-master的Service,對(duì)應(yīng)的ClusterIP:Port為10.0.0.11:6379,則對(duì)應(yīng)的環(huán)境變量為:

9e7205f6-c482-11eb-9e57-12bb97331649.jpg

DNS:可以通過cluster add-on的方式輕松的創(chuàng)建KubeDNS來對(duì)集群內(nèi)的Service進(jìn)行服務(wù)發(fā)現(xiàn)。

以上兩種方式,一個(gè)是基于TCP,眾所周知,DNS是基于UDP的,它們都是建立在四層協(xié)議之上。

五種Pod共享資源

Pod是Kubernetes最基本的操作單元,包含一個(gè)或多個(gè)緊密相關(guān)的容器,一個(gè)Pod可以被一個(gè)容器化的環(huán)境看作應(yīng)用層的“邏輯宿主機(jī)”;一個(gè)Pod中的多個(gè)容器應(yīng)用通常是緊密耦合的,Pod在Node上被創(chuàng)建、啟動(dòng)或者銷毀;每個(gè)Pod里運(yùn)行著一個(gè)特殊的被稱之為Volume掛載卷,因此他們之間通信和數(shù)據(jù)交換更為高效,在設(shè)計(jì)時(shí)我們可以充分利用這一特性將一組密切相關(guān)的服務(wù)進(jìn)程放入同一個(gè)Pod中。

同一個(gè)Pod里的容器之間僅需通過localhost就能互相通信。一個(gè)Pod中的應(yīng)用容器共享五種資源:

PID命名空間:Pod中的不同應(yīng)用程序可以看到其他應(yīng)用程序的進(jìn)程ID。

網(wǎng)絡(luò)命名空間:Pod中的多個(gè)容器能夠訪問同一個(gè)IP和端口范圍。

IPC命名空間:Pod中的多個(gè)容器能夠使用SystemV IPC或POSIX消息隊(duì)列進(jìn)行通信。

UTS命名空間:Pod中的多個(gè)容器共享一個(gè)主機(jī)名。

Volumes(共享存儲(chǔ)卷):Pod中的各個(gè)容器可以訪問在Pod級(jí)別定義的Volumes。

Pod的生命周期通過Replication Controller來管理;通過模板進(jìn)行定義,然后分配到一個(gè)Node上運(yùn)行,在Pod所包含容器運(yùn)行結(jié)束后,Pod結(jié)束。

Kubernetes為Pod設(shè)計(jì)了一套獨(dú)特的網(wǎng)絡(luò)配置,包括:為每個(gè)Pod分配一個(gè)IP地址,使用Pod名作為容器間通信的主機(jī)名等。

六個(gè)CNI常用插件

CNI(Container Network Interface)容器網(wǎng)絡(luò)接口,是Linux容器網(wǎng)絡(luò)配置的一組標(biāo)準(zhǔn)和庫,用戶需要根據(jù)這些標(biāo)準(zhǔn)和庫來開發(fā)自己的容器網(wǎng)絡(luò)插件。CNI只專注解決容器網(wǎng)絡(luò)連接和容器銷毀時(shí)的資源釋放,提供一套框架,所以CNI可以支持大量不同的網(wǎng)絡(luò)模式,并且容易實(shí)現(xiàn)。

下面用一張圖表示六個(gè)CNI常用插件:

9ec8b874-c482-11eb-9e57-12bb97331649.jpg

七層負(fù)載均衡

提負(fù)載均衡就不得不先提服務(wù)器之間的通信。

IDC(Internet Data Center),也可稱數(shù)據(jù)中心、機(jī)房,用來放置服務(wù)器。IDC網(wǎng)絡(luò)是服務(wù)器間通信的橋梁。

上圖里畫了很多網(wǎng)絡(luò)設(shè)備,它們都是干啥用的呢?

路由器、交換機(jī)、MGW/NAT都是網(wǎng)絡(luò)設(shè)備,按照性能、內(nèi)外網(wǎng)劃分不同的角色。

內(nèi)網(wǎng)接入交換機(jī):也稱為TOR(top of rack),是服務(wù)器接入網(wǎng)絡(luò)的設(shè)備。每臺(tái)內(nèi)網(wǎng)接入交換機(jī)下聯(lián)40-48臺(tái)服務(wù)器,使用一個(gè)掩碼為/24的網(wǎng)段作為服務(wù)器內(nèi)網(wǎng)網(wǎng)段。

內(nèi)網(wǎng)核心交換機(jī):負(fù)責(zé)IDC內(nèi)各內(nèi)網(wǎng)接入交換機(jī)的流量轉(zhuǎn)發(fā)及跨IDC流量轉(zhuǎn)發(fā)。

MGW/NAT:MGW即LVS用來做負(fù)載均衡,NAT用于內(nèi)網(wǎng)設(shè)備訪問外網(wǎng)時(shí)做地址轉(zhuǎn)換。

外網(wǎng)核心路由器:通過靜態(tài)互聯(lián)運(yùn)營商或BGP互聯(lián)美團(tuán)統(tǒng)一外網(wǎng)平臺(tái)。

先說說各層負(fù)載均衡:

二層負(fù)載均衡:基于MAC地址的二層負(fù)載均衡。

三層負(fù)載均衡:基于IP地址的負(fù)載均衡。

四層負(fù)載均衡:基于IP+端口的負(fù)載均衡。

七層負(fù)載均衡:基于URL等應(yīng)用層信息的負(fù)載均衡。

這里用一張圖來說說四層和七層負(fù)載均衡的區(qū)別:

9ede1728-c482-11eb-9e57-12bb97331649.jpg

上面四層服務(wù)發(fā)現(xiàn)講的主要是Kubernetes原生的kube-proxy方式。Kubernetes關(guān)于服務(wù)的暴露主要是通過NodePort方式,通過綁定minion主機(jī)的某個(gè)端口,然后進(jìn)行Pod的請(qǐng)求轉(zhuǎn)發(fā)和負(fù)載均衡,但這種方式有下面的缺陷:

Service可能有很多個(gè),如果每個(gè)都綁定一個(gè)Node主機(jī)端口的話,主機(jī)需要開放外圍的端口進(jìn)行服務(wù)調(diào)用,管理混亂。

無法應(yīng)用很多公司要求的防火墻規(guī)則。

理想的方式是通過一個(gè)外部的負(fù)載均衡器,綁定固定的端口,比如80,然后根據(jù)域名或者服務(wù)名向后面的Service IP轉(zhuǎn)發(fā),Nginx很好的解決了這個(gè)需求,但問題是如果有的新的服務(wù)加入,如何去修改Nginx的配置,并且加載這些配置?Kubernetes給出的方案就是Ingress。這是一個(gè)基于7層的方案。

八種隔離維度

Kubernetes集群調(diào)度這邊需要對(duì)上面從上到下從粗粒度到細(xì)粒度的隔離做相應(yīng)的調(diào)度策略。

九個(gè)網(wǎng)絡(luò)模型原則

Kubernetes網(wǎng)絡(luò)模型要符合4個(gè)基礎(chǔ)原則,3個(gè)網(wǎng)絡(luò)要求原則,1個(gè)架構(gòu)原則,1個(gè)IP原則。

每個(gè)Pod都擁有一個(gè)獨(dú)立的IP地址,而且假定所有Pod都在一個(gè)可以直接連通的、扁平的網(wǎng)絡(luò)空間中,不管是否運(yùn)行在同一Node上都可以通過Pod的IP來訪問。

Kubernetes中的Pod的IP是最小粒度IP。同一個(gè)Pod內(nèi)所有的容器共享一個(gè)網(wǎng)絡(luò)堆棧,該模型稱為IP-per-Pod模型。

Pod由docker0實(shí)際分配的IP,Pod內(nèi)部看到的IP地址和端口與外部保持一致。同一個(gè)Pod內(nèi)的不同容器共享網(wǎng)絡(luò),可以通過localhost來訪問對(duì)方的端口,類似同一個(gè)VM內(nèi)不同的進(jìn)程。

IP-per-Pod模型從端口分配、域名解析、服務(wù)發(fā)現(xiàn)、負(fù)載均衡、應(yīng)用配置等角度看,Pod可以看做是一臺(tái)獨(dú)立的VM或物理機(jī)。

所有容器都可以不用NAT的方式同別的容器通信。

所有節(jié)點(diǎn)都可以在不同NAT方式下同所有容器心痛,反之亦然。

容器的地址和別人看到的地址是同一個(gè)地址。

要符合下面的架構(gòu):

由上圖架構(gòu)引申出來IP概念從集群外部到集群內(nèi)部。

十類IP地址

大家都知道IP地址分為ABCDE類,另外還有5類特殊用途的IP。

A類

1.0.0.0-126.255.255.255,默認(rèn)子網(wǎng)掩碼/8,即255.0.0.0

B類

128.0.0.0-191.255.255.255,默認(rèn)子網(wǎng)掩碼/16,即255.255.0.0

C類

192.0.0.0-223.255.255.255,默認(rèn)子網(wǎng)掩碼/24,即255.255.255.0

D類

224.0.0.0-239.255.255.255,一般用于組播

E類

240.0.0.0-255.255.255.255(其中255.255.255.255為全網(wǎng)廣播地址),E類地址一般用于研究用途

0.0.0.0

嚴(yán)格來說,0.0.0.0已經(jīng)不是一個(gè)真正意義上的IP地址了。它表示的是這樣一個(gè)集合:所有不清楚的主機(jī)和目的網(wǎng)絡(luò)。這里的不清楚是指在本機(jī)的路由表里沒有特定條目指明如何到達(dá)。作為缺省路由。

127.0.0.1

本機(jī)地址。

224.0.0.1

組播地址。如果你的主機(jī)開啟了IRDP(Internet路由發(fā)現(xiàn),使用組播功能),那么你的主機(jī)路由表中應(yīng)該有這樣一條路由。

169.254.x.x

使用了DHCP功能自動(dòng)獲取了IP的主機(jī),DHCP服務(wù)器發(fā)生故障,或響應(yīng)時(shí)間太長而超出了一個(gè)系統(tǒng)規(guī)定的時(shí)間,系統(tǒng)會(huì)為你分配這樣一個(gè)IP,代表網(wǎng)絡(luò)不能正常運(yùn)行。

10.xxx、172.16.x.x~172.31.x.x、192.168.x.x

私有地址,大量用于企業(yè)內(nèi)部。保留這樣的地址是為了避免亦或是哪個(gè)接入公網(wǎng)時(shí)引起地址混亂。

編輯:jq

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

    關(guān)注

    2

    文章

    1468

    瀏覽量

    61693
  • DNS
    DNS
    +關(guān)注

    關(guān)注

    0

    文章

    214

    瀏覽量

    19753
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    491

    瀏覽量

    22015
  • SSL
    SSL
    +關(guān)注

    關(guān)注

    0

    文章

    122

    瀏覽量

    25699

原文標(biāo)題:Kubernetes 超詳細(xì)總結(jié)

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    k8s可以部署私有云嗎?私有云部署全攻略

    Kubernetes(簡稱K8S)可以部署私有云。Kubernetes是一個(gè)開源容器編排引擎,能夠自動(dòng)化
    的頭像 發(fā)表于 10-25 09:32 ?51次閱讀

    基于CSS融合存儲(chǔ)系統(tǒng)的自動(dòng)化制造服務(wù)平臺(tái)存儲(chǔ)解決方案

    基于CSS融合存儲(chǔ)系統(tǒng)的自動(dòng)化制造服務(wù)平臺(tái)存儲(chǔ)解決方案
    的頭像 發(fā)表于 09-10 10:15 ?223次閱讀
    基于CSS融合存儲(chǔ)系統(tǒng)的<b class='flag-5'>自動(dòng)化</b>制造服務(wù)<b class='flag-5'>平臺(tái)</b>存儲(chǔ)解決方案

    羅克韋爾自動(dòng)化FactoryTalk Optix可視平臺(tái)概述

    羅克韋爾自動(dòng)化FactoryTalk Optix可視平臺(tái)概述
    的頭像 發(fā)表于 09-05 15:19 ?436次閱讀

    如何使用Kubeadm命令在PetaExpress Ubuntu系統(tǒng)上安裝Kubernetes集群

    Kubernetes,通??s寫為K8s,是一個(gè)開源容器編排平臺(tái),旨在自動(dòng)化容器
    的頭像 發(fā)表于 07-15 13:31 ?765次閱讀
    如何使用Kubeadm命令在PetaExpress Ubuntu系統(tǒng)上安裝<b class='flag-5'>Kubernetes</b>集群

    機(jī)械自動(dòng)化和電氣自動(dòng)化區(qū)別是什么

    生產(chǎn)過程中的自動(dòng)化控制和管理。它主要涉及到機(jī)械設(shè)計(jì)、制造、裝配、檢測等環(huán)節(jié),通過自動(dòng)化設(shè)備替代人工操作,提高生產(chǎn)效率和產(chǎn)品質(zhì)量。 電氣自動(dòng)化 電氣
    的頭像 發(fā)表于 07-01 09:33 ?3231次閱讀

    機(jī)械自動(dòng)化自動(dòng)化的一種嗎

    引言 自動(dòng)化技術(shù)是指利用控制裝置對(duì)生產(chǎn)過程進(jìn)行控制,以實(shí)現(xiàn)生產(chǎn)過程的自動(dòng)化。機(jī)械自動(dòng)化自動(dòng)化技術(shù)的一種,它主要涉及到使用機(jī)械設(shè)備和控制系統(tǒng)來實(shí)現(xiàn)生產(chǎn)過程的
    的頭像 發(fā)表于 07-01 09:32 ?1355次閱讀

    工業(yè)機(jī)器人、PLC與自動(dòng)化之間的關(guān)系

    隨著科技的不斷進(jìn)步和工業(yè)領(lǐng)域的快速發(fā)展,自動(dòng)化已成為現(xiàn)代工業(yè)生產(chǎn)的重要趨勢。在這一進(jìn)程中,工業(yè)機(jī)器人和PLC(可編程邏輯控制器)作為自動(dòng)化的兩大核心要素,發(fā)揮著至關(guān)重要的作用。本文將深入探討工業(yè)機(jī)器人、PLC與自動(dòng)化之間的關(guān)系,
    的頭像 發(fā)表于 06-17 11:10 ?1070次閱讀

    機(jī)械制造與自動(dòng)化自動(dòng)化類嗎

    機(jī)械制造與自動(dòng)化自動(dòng)化領(lǐng)域的一個(gè)重要分支,它涉及到機(jī)械設(shè)計(jì)、制造、檢測、控制等多個(gè)方面,是現(xiàn)代制造業(yè)的核心組成部分。 機(jī)械制造與自動(dòng)化是指利用計(jì)算機(jī)、機(jī)器人、傳感器等自動(dòng)化設(shè)備和技術(shù)
    的頭像 發(fā)表于 06-11 11:18 ?1313次閱讀

    工業(yè)自動(dòng)化自動(dòng)化區(qū)別是什么

    工業(yè)自動(dòng)化自動(dòng)化是兩個(gè)密切相關(guān)但又有所區(qū)別的概念。在這篇文章中,我們將詳細(xì)探討它們之間的區(qū)別,以及它們在現(xiàn)代工業(yè)生產(chǎn)中的應(yīng)用。 一、自動(dòng)化的定義 自動(dòng)化是指通過使用機(jī)器、計(jì)算機(jī)和其他
    的頭像 發(fā)表于 06-11 11:13 ?1401次閱讀

    PID控制器在工業(yè)自動(dòng)化中的應(yīng)用

    于各種工業(yè)自動(dòng)化系統(tǒng)中。本文將詳細(xì)介紹PID控制器的工作原理、參數(shù)調(diào)整及其在工業(yè)自動(dòng)化中的應(yīng)用,旨在為讀者提供對(duì)PID控制器在工業(yè)自動(dòng)化中應(yīng)用的全面認(rèn)識(shí)。
    的頭像 發(fā)表于 06-05 16:24 ?1273次閱讀

    非標(biāo)自動(dòng)化設(shè)備

    1、非標(biāo)自動(dòng)化設(shè)備 2、根據(jù)需求設(shè)計(jì)和制造 3、完成代替人工的目標(biāo)
    發(fā)表于 03-25 09:52

    K8S落地實(shí)踐經(jīng)驗(yàn)分享

    k8s 即 Kubernetes,是一個(gè)開源容器編排引擎,用來對(duì)容器應(yīng)用進(jìn)行自動(dòng)化部署、 擴(kuò)
    的頭像 發(fā)表于 01-02 11:45 ?963次閱讀
    K8S落地實(shí)踐經(jīng)驗(yàn)分享

    電源測試怎么自動(dòng)化?電源模塊自動(dòng)化測試系統(tǒng)如何實(shí)現(xiàn)?

    納米軟件在電測行業(yè)深耕十余年,在行業(yè)的大背景下,為了進(jìn)一步完善自動(dòng)化測試,開發(fā)出了新的智能的電源模塊自動(dòng)化測試系統(tǒng)ATECLOUD-POWER,實(shí)現(xiàn)自動(dòng)化測試,
    的頭像 發(fā)表于 12-15 14:40 ?751次閱讀
    電源測試怎么<b class='flag-5'>自動(dòng)化</b>?電源模塊<b class='flag-5'>自動(dòng)化</b>測試系統(tǒng)如何實(shí)現(xiàn)?

    淺析中國工業(yè)自動(dòng)化與智能應(yīng)用

    自動(dòng)化驅(qū)動(dòng)產(chǎn)品與智能操控系統(tǒng)主要用于工業(yè)自動(dòng)化中的設(shè)備自動(dòng)化領(lǐng)域,其中自動(dòng)化驅(qū)動(dòng)產(chǎn)品是實(shí)現(xiàn)設(shè)備單機(jī)自動(dòng)化的核心部件;智能操控系統(tǒng)是在設(shè)備單機(jī)
    發(fā)表于 12-01 10:11 ?838次閱讀
    淺析中國工業(yè)<b class='flag-5'>自動(dòng)化</b>與智能<b class='flag-5'>化</b>應(yīng)用

    Python 模擬鍵盤鼠標(biāo)的方式實(shí)現(xiàn)自動(dòng)化

    實(shí)現(xiàn)自動(dòng)化。 Python中模擬鍵盤和鼠標(biāo)最著名的模塊是: pymouse 和 pykeyboard 。一次安裝兩個(gè)模塊比較麻煩,而有一個(gè)庫整合了這兩個(gè)模塊,而且能支持跨平臺(tái)操作,這個(gè)庫叫
    的頭像 發(fā)表于 11-02 14:48 ?1242次閱讀
    Python 模擬鍵盤鼠標(biāo)的方式實(shí)現(xiàn)<b class='flag-5'>自動(dòng)化</b>