日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

揭開 Kubernetes 的神秘面紗

 

Kubernetes 是一款生產(chǎn)級(jí)的開源系統(tǒng),用于容器化應(yīng)用程序的自動(dòng)部署、擴(kuò)展和管理。本文關(guān)于使用 Kubernetes 來管理容器。-- Abhinav Nath Gupta(作者)

“容器”已成為最新的流行語之一。但是,這個(gè)詞到底意味著什么呢?說起“容器”,人們通常會(huì)把它和 Docker 聯(lián)系起來,Docker 是一個(gè)被定義為軟件的標(biāo)準(zhǔn)化單元容器。該容器將軟件和運(yùn)行軟件所需的環(huán)境封裝到一個(gè)易于交付的單元中。

容器是一個(gè)軟件的標(biāo)準(zhǔn)單元,用它來打包代碼及其所有依賴項(xiàng),這樣應(yīng)用程序就可以從一個(gè)計(jì)算環(huán)境到另一個(gè)計(jì)算環(huán)境快速可靠地運(yùn)行。容器通過創(chuàng)建類似于 ISO 鏡像的方式來實(shí)現(xiàn)此目的。容器鏡像是一個(gè)輕量級(jí)的、獨(dú)立的、可執(zhí)行的軟件包,其中包含運(yùn)行應(yīng)用程序所需的所有信息,包括代碼、運(yùn)行時(shí)、系統(tǒng)工具、系統(tǒng)庫(kù)和設(shè)置。

容器鏡像在運(yùn)行時(shí)變成容器,對(duì)于 Docker 容器,鏡像在 Docker 引擎上運(yùn)行時(shí)變成容器。容器將軟件與環(huán)境隔離開來,確保不同環(huán)境下的實(shí)例,都可以正常運(yùn)行。

什么是容器管理?

容器管理是組織、添加或替換大量軟件容器的過程。容器管理使用軟件來自動(dòng)化創(chuàng)建、部署和擴(kuò)展容器。這一過程就需要容器編排,容器編排是一個(gè)自動(dòng)對(duì)基于容器的應(yīng)用程序進(jìn)行部署、管理、擴(kuò)展、聯(lián)網(wǎng)和提供可用性的工具。

Kubernetes

Kubernetes 是一個(gè)可移植的、可擴(kuò)展的開源平臺(tái),用于管理容器化的工作負(fù)載和服務(wù),它有助于配置和自動(dòng)化。它最初由 google 開發(fā),擁有一個(gè)龐大且快速增長(zhǎng)的生態(tài)系統(tǒng)。Kubernetes 的服務(wù)、技術(shù)支持和工具得到廣泛應(yīng)用。

Google 在 2014 年開源了 Kubernetes 項(xiàng)目。Kubernetes 建立在 Google 十五年大規(guī)模運(yùn)行生產(chǎn)工作負(fù)載的經(jīng)驗(yàn)基礎(chǔ)上,并結(jié)合了社區(qū)中最好的想法和實(shí)踐以及聲明式句法的使用。

下面列出了與Kubernetes生態(tài)系統(tǒng)相關(guān)的一些常用術(shù)語。

Pod:Pod 是 Kubernetes 應(yīng)用程序的基本執(zhí)行單元,是你創(chuàng)建或部署的 Kubernetes 對(duì)象模型中的最小和最簡(jiǎn)單的單元。Pod 代表在 Kubernetes 集群上運(yùn)行的進(jìn)程。

Pod 將運(yùn)行中的容器、存儲(chǔ)、網(wǎng)絡(luò) IP(唯一)和控制容器應(yīng)如何運(yùn)行的命令封裝起來。它代表 Kubernetes 生態(tài)系統(tǒng)內(nèi)的單個(gè)部署單元,代表一個(gè)應(yīng)用程序的單個(gè)實(shí)例,該程序可能包含一個(gè)或多個(gè)緊密耦合并共享資源的容器。

Kubernetes 集群中的 Pod 有兩種主要的使用方式。第一種是運(yùn)行單個(gè)容器。即“一個(gè)容器一個(gè) Pod”,這種方式是最常見的。第二種是運(yùn)行多個(gè)需要一起工作的容器。

Pod 可能封裝一個(gè)由緊密關(guān)聯(lián)且需要共享資源的多個(gè)同位容器組成的應(yīng)用程序。

副本集(ReplicaSet):副本集的目的是維護(hù)在任何給定時(shí)間運(yùn)行的一組穩(wěn)定的副本容器集。 副本集包含有關(guān)一個(gè)特定 Pod 應(yīng)該運(yùn)行多少個(gè)副本的信息。為了創(chuàng)建多個(gè) Pod 以匹配副本集條件,Kubernetes 使用 Pod 模板。副本集與其 Pod 的鏈接是通過后者的 metas.ownerReferences 字段實(shí)現(xiàn),該字段指定哪個(gè)資源擁有當(dāng)前對(duì)象。

服務(wù)(Services):服務(wù)是一種抽象,用來公開一組 Pod 功能。使用 Kubernetes,你無需修改應(yīng)用程序即可使用陌生服務(wù)發(fā)現(xiàn)機(jī)制。Kubernetes 給 Pod 提供了其自己的 IP 地址和一組 Pod 的單個(gè) DNS 名稱,并且可以在它們之間負(fù)載平衡。

服務(wù)解決的一個(gè)主要問題是 Web 應(yīng)用程序前端和后端的集成。由于 Kubernetes 將幕后的 IP 地址提供給 Pod,因此當(dāng) Pod 被殺死并復(fù)活時(shí),IP 地址會(huì)更改。這給給定的后端 IP 地址連接到相應(yīng)的前端 IP 地址帶來一個(gè)大問題。服務(wù)通過在 Pod 上提供抽象來解決此問題,類似于負(fù)載均衡器。

卷(Volumes): Kubernetes 卷具有明確的生命周期,與圍繞它的 Pod 相同。 因此,卷超過了 Pod 中運(yùn)行的任何容器的壽命,并且在容器重新啟動(dòng)后保留了數(shù)據(jù)。當(dāng)然,當(dāng) Pod 不存在時(shí),該卷也將不再存在。也許比這更重要的是 Kubernetes 支持多種類型的卷,并且 Pod 可以同時(shí)使用任意數(shù)量的卷。

卷的核心只是一個(gè)目錄,其中可能包含一些數(shù)據(jù),Pod 中的容器可以訪問該目錄。該目錄是如何產(chǎn)生的,它后端基于什么存儲(chǔ)介質(zhì),其中的數(shù)據(jù)內(nèi)容是什么,這些都由使用的特定卷類型來決定的。

為什么選擇 Kubernetes?

容器是捆綁和運(yùn)行應(yīng)用程序的好方法。在生產(chǎn)環(huán)境中,你需要管理運(yùn)行應(yīng)用程序的容器,并確保沒有停機(jī)時(shí)間。例如,如果一個(gè)容器發(fā)生故障,則需要啟動(dòng)另一個(gè)容器。如果由系統(tǒng)自動(dòng)實(shí)現(xiàn)這一操作,豈不是更好? Kubernetes 就是來解決這個(gè)問題的!Kubernetes 提供了一個(gè)框架來彈性運(yùn)行分布式系統(tǒng)。該框架負(fù)責(zé)擴(kuò)展需求、故障轉(zhuǎn)移、部署模式等。例如,Kubernetes 可以輕松管理系統(tǒng)的金絲雀部署。

Kubernetes 為用戶提供了:

  1. 服務(wù)發(fā)現(xiàn)和負(fù)載平衡
  2. 存儲(chǔ)編排
  3. 自動(dòng)退出和回退
  4. 自動(dòng)打包
  5. 自我修復(fù)
  6. 秘密配置管理

Kubernetes 可以做什么?

在本文中,我們將會(huì)看到一些從頭構(gòu)建 Web 應(yīng)用程序時(shí)如何使用 Kubernetes 的代碼示例。我們將在 Python 中使用 Flask 創(chuàng)建一個(gè)簡(jiǎn)單的后端服務(wù)器。

對(duì)于那些想從頭開始構(gòu)建 Web 應(yīng)用程序的人,有一些前提條件,即:

  1. 對(duì) Docker、Docker 容器和 Docker 鏡像的基本了解。可以訪問 這里 快速了解。
  2. 系統(tǒng)中應(yīng)該安裝 Docker。
  3. 系統(tǒng)中應(yīng)該安裝 Kubernetes,有關(guān)如何在本地計(jì)算機(jī)上安裝的說明,請(qǐng)?jiān)L問 這里 。

現(xiàn)在,創(chuàng)建一個(gè)目錄,如下代碼片段所示:

mkdir flask-kubernetes/App && cd flask-kubernetes/app

接下來,在 flask-kubernetes/app 目錄中,創(chuàng)建一個(gè)名為 main.py 的文件,如下面的代碼片段所示:

touch main.py

在新創(chuàng)建的 main.py 文件中,粘貼下面代碼:

from flask import Flask

app = Flask(__name__)

 

@app.route("/")

def hello():

 return "Hello from Kubernetes!"

 

if __name__ == "__main__":

 app.run(host='0.0.0.0')

使用下面命令在本地安裝 Flask:

pip install Flask==0.10.1

Flask 安裝后,執(zhí)行下面的命令:

python app.py

應(yīng)該在本地 5000 端口運(yùn)行 Flask 服務(wù)器,這是 Flask 應(yīng)用程序的默認(rèn)端口,并且你可以在 http://localhost:5000 上看到輸出 “Hello from Kubernetes!”。服務(wù)器在本地運(yùn)行之后,我們創(chuàng)建一個(gè)供 Kubernetes 使用的 Docker 鏡像。創(chuàng)建一個(gè)名為 Dockerfile 的文件,并將以下代碼片段粘貼到其中:

FROM python:3.7

 

RUN mkdir /app

WORKDIR /app

ADD . /app/

RUN pip install -r requirements.txt

 

EXPOSE 5000

CMD ["python", "/app/main.py"]

Dockerfile 文件的說明如下:

  1. Docker 將從 DockerHub 獲取 Python 3.7 鏡像。
  2. 將在鏡像中創(chuàng)建一個(gè)應(yīng)用程序目錄。
  3. 它將一個(gè) /app 目錄設(shè)置為工作目錄。
  4. 將內(nèi)容從主機(jī)中的應(yīng)用程序目錄復(fù)制到鏡像應(yīng)用程序目錄。
  5. 發(fā)布端口 5000。
  6. 最后,它運(yùn)行命令,啟動(dòng) Flask 服務(wù)器。

接下來,我們將使用以下命令創(chuàng)建 Docker 鏡像:

docker build -f Dockerfile -t flask-kubernetes:latest .

創(chuàng)建 Docker 鏡像后,我們可以使用以下命令在本地運(yùn)行該鏡像進(jìn)行測(cè)試:

docker run -p 5001:5000 flask-kubernetes

通過運(yùn)行容器在本地完成測(cè)試之后,我們需要在 Kubernetes 中部署它。我們將首先使用 kubectl 命令驗(yàn)證 Kubernetes 是否正在運(yùn)行。如果沒有報(bào)錯(cuò),則說明它正在工作。如果有報(bào)錯(cuò),請(qǐng)參考 該信息 。

接下來,我們創(chuàng)建一個(gè)部署文件。這是一個(gè) Yaml 文件,其中包含有關(guān) Kubernetes 的說明,該說明涉及如何以聲明性的方式創(chuàng)建 Pod 和服務(wù)。因?yàn)槲覀冇?Flask Web 應(yīng)用程序,我們將創(chuàng)建一個(gè) deployment.yaml 文件,并在其中包含 Pod 和服務(wù)聲明。

創(chuàng)建一個(gè)名為 deployment.yaml 的文件并向其中添加以下內(nèi)容,然后保存:

apiVersion: v1

kind: Service

metadata:

 name: flask-kubernetes -service

spec:

 selector:

 app: flask-kubernetes

 ports:

 - protocol: "TCP"

 port: 6000

 targetPort: 5000

 type: LoadBalancer



---

apiVersion: apps/v1

kind: Deployment

metadata:

 name: flask-kubernetes

spec:

 replicas: 4

 template:

 metadata:

 labels:

 app: flask-kubernetes

 spec:

 containers:

 - name: flask-kubernetes

 image: flask-kubernetes:latest

 imagePullPolicy: Never

 ports:

 - containerPort: 5000

使用以下命令將 yaml 文件發(fā)送到 Kubernetes:

kubectl apply -f deployment.yaml

如果執(zhí)行以下命令,你會(huì)看到 Pod 正在運(yùn)行:

kubectl get pods

現(xiàn)在,導(dǎo)航至 http://localhost:6000,你應(yīng)該會(huì)看到 “Hello from Kubernetes!”消息。成功了! 該應(yīng)用程序現(xiàn)在正在 Kubernetes 中運(yùn)行!

Kubernetes 做不了什么?

Kubernetes 不是一個(gè)傳統(tǒng)的,包羅萬象的 PaaS(平臺(tái)即服務(wù))系統(tǒng)。 由于 Kubernetes 運(yùn)行在容器級(jí)別而非硬件級(jí)別,因此它提供了 PaaS 產(chǎn)品共有的一些普遍適用功能,如部署、擴(kuò)展、負(fù)載平衡、日志記錄和監(jiān)控。Kubernetes 為開發(fā)人員平臺(tái)提供了構(gòu)建塊,但在重要的地方保留了用戶的選擇和靈活性。

  • Kubernetes 不限制所支持的應(yīng)用程序的類型。如果應(yīng)用程序可以在容器中運(yùn)行,那么它應(yīng)該可以在 Kubernetes 上更好地運(yùn)行。
  • 它不部署和構(gòu)建源代碼。
  • 它不決定日志記錄、監(jiān)視或警報(bào)解決方案。
  • 它不提供或不要求配置語言/系統(tǒng)。它提供了一個(gè)聲明式的 API 供所有人使用。
  • 它不提供或不采用任何全面的機(jī)器配置、維護(hù)、管理或自我修復(fù)系統(tǒng)。

via: https://opensourceforu.com/2019/11/demystifying-kubernetes/

作者: Abhinav Nath Gupta 選題: lujun9972 譯者: Morisun029 校對(duì): wxy

本文由 LCTT 原創(chuàng)編譯, linux中國(guó) 榮譽(yù)推出

分享到:
標(biāo)簽:Kubernetes
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定