亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

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

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

揭開 Kubernetes 的神秘面紗

 

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

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

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

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

什么是容器管理?

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

Kubernetes

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

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

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

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

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

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

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

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

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

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

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

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

為什么選擇 Kubernetes?

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

Kubernetes 為用戶提供了:

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

Kubernetes 可以做什么?

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

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

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

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

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

接下來,在 flask-kubernetes/app 目錄中,創(chuàng)建一個名為 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 端口運行 Flask 服務(wù)器,這是 Flask 應(yīng)用程序的默認端口,并且你可以在 http://localhost:5000 上看到輸出 “Hello from Kubernetes!”。服務(wù)器在本地運行之后,我們創(chuàng)建一個供 Kubernetes 使用的 Docker 鏡像。創(chuàng)建一個名為 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)建一個應(yīng)用程序目錄。
  3. 它將一個 /app 目錄設(shè)置為工作目錄。
  4. 將內(nèi)容從主機中的應(yīng)用程序目錄復(fù)制到鏡像應(yīng)用程序目錄。
  5. 發(fā)布端口 5000。
  6. 最后,它運行命令,啟動 Flask 服務(wù)器。

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

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

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

docker run -p 5001:5000 flask-kubernetes

通過運行容器在本地完成測試之后,我們需要在 Kubernetes 中部署它。我們將首先使用 kubectl 命令驗證 Kubernetes 是否正在運行。如果沒有報錯,則說明它正在工作。如果有報錯,請參考 該信息 。

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

創(chuàng)建一個名為 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í)行以下命令,你會看到 Pod 正在運行:

kubectl get pods

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

Kubernetes 做不了什么?

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

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

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

作者: Abhinav Nath Gupta 選題: lujun9972 譯者: Morisun029 校對: wxy

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

分享到:
標簽:Kubernetes
用戶無頭像

網(wǎng)友整理

注冊時間:

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

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

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

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

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

答題星2018-06-03

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

全階人生考試2018-06-03

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

運動步數(shù)有氧達人2018-06-03

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

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

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

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定