最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

軟件開(kāi)發(fā)人員 Kubernetes 入門(mén)指南|Part 1

2023-10-11 10:03 作者:SEAL安全  | 我要投稿

Kubernetes 是一個(gè)用于部署和管理容器的編排系統(tǒng)。使用 Kubernetes,用戶可以通過(guò)自動(dòng)執(zhí)行管理任務(wù)(例如在跨節(jié)點(diǎn)間擴(kuò)展容器并在容器停止時(shí)重新啟動(dòng)任務(wù)),在不同環(huán)境中可靠地運(yùn)行容器。
?

Kubernetes 提供的抽象可以讓你從 Pod(容器)、Services(網(wǎng)絡(luò)端點(diǎn))和 Jobs(一次性任務(wù))等應(yīng)用組件的角度進(jìn)行思考。它有一個(gè)聲明式配置模型,可簡(jiǎn)化設(shè)置并防止漂移,也就是用戶可以定義環(huán)境應(yīng)該是什么樣子,然后系統(tǒng)會(huì)自動(dòng)應(yīng)用操作來(lái)實(shí)現(xiàn)這種狀態(tài)。
?

軟件開(kāi)發(fā)人員為何要學(xué)習(xí) Kubernetes?

了解如何使用 Kubernetes 的開(kāi)發(fā)人員可以輕松復(fù)制生產(chǎn)基礎(chǔ)設(shè)施,并更多地參與運(yùn)維。無(wú)論是在您的機(jī)器上本地部署,還是在云中以生產(chǎn)規(guī)模部署,您可以使用相同的工具和流程,將您的工作部署到任何環(huán)境中。
?

了解 Kubernetes 還能讓您對(duì)系統(tǒng)擁有更大的自主權(quán)。您可以做出有影響力的改變,改善自己和他人的部署和操作體驗(yàn)。當(dāng)所有應(yīng)用環(huán)境都使用 Kubernetes 運(yùn)行時(shí),每個(gè)人都在按照相同的共享部署模板工作,這樣減少了錯(cuò)誤和差異的發(fā)生。如果操作員因生產(chǎn)中的問(wèn)題而要求更改,您可以自行測(cè)試和驗(yàn)證,而無(wú)需等待他們的反饋。這樣就縮短了開(kāi)發(fā)周期,提高了工作效率。
?

過(guò)去幾年中,人們對(duì) Kubernetes 的興趣日益高漲,因此熟悉 Kubernetes 也有助于未來(lái)的職業(yè)發(fā)展。Dynatrace 的一項(xiàng) 2023 年調(diào)查報(bào)告顯示,2022 年期間,Kubernetes 的采用率增長(zhǎng)了 127%,CNCF 調(diào)查結(jié)果顯示 96% 的組織正在使用或評(píng)估該技術(shù)。Kubernetes 是一種流行技術(shù),因此了解其工作原理、對(duì)應(yīng)用程序的影響方式以及如何使用,可以增加您的就業(yè)前景。
?

Kubernetes 的關(guān)鍵組件

正如我們已經(jīng)簡(jiǎn)要提到的,Kubernetes 有自己的對(duì)象類型詞匯表,代表集群內(nèi)不同類型的資源。有些組件是集群本身的一部分,如節(jié)點(diǎn)(Nodes),而其他組件,如 Pod 和服務(wù)(Services),則是應(yīng)用程序的模型部分。在深入學(xué)習(xí)本指南時(shí),您需要熟悉這些術(shù)語(yǔ)。
?

Pods

Pods 是 Kubernetes 集群中的計(jì)算單元。Pod 的每個(gè)實(shí)例可容納一個(gè)或多個(gè)容器,所有容器都調(diào)度到集群中的同一個(gè)節(jié)點(diǎn)。與單個(gè) Pod 的手動(dòng)交互相對(duì)較少。它們通常由更高級(jí)別的控制器(如 ReplicaSets[1] 和 Deployments[2])創(chuàng)建,這些控制器為您管理 Pod 的復(fù)制和擴(kuò)展。
?

Nodes

Nodes 是集群中的一臺(tái)物理機(jī)器。它運(yùn)行一個(gè)名為 kubelet 的代理進(jìn)程,負(fù)責(zé)與控制平面保持通信。Nodes 負(fù)責(zé)運(yùn)行容器。當(dāng)你創(chuàng)建一個(gè)新 Pod 時(shí),控制平面會(huì)根據(jù)資源利用率和你設(shè)置的任何 Nodes 選擇器等標(biāo)準(zhǔn),選擇運(yùn)行資源的最佳 Nodes 。被選中的 Node 會(huì)提取所需的鏡像并啟動(dòng)容器。如果 Node離線,Kubernetes 會(huì)注意到它的缺席,并將 Pod 重新安排到集群的不同成員。
?

Deployments

Deployments 是 Kubernetes 的對(duì)象,促進(jìn) Pod 的聲明式更新,用于部署應(yīng)用程序的主容器,而無(wú)需手動(dòng)創(chuàng)建和維護(hù) Pod 對(duì)象。
?

Deployments 有幾個(gè)優(yōu)點(diǎn)。將 Deployment 添加到群集時(shí),您可以定義要運(yùn)行的容器鏡像和要?jiǎng)?chuàng)建的副本數(shù)量。Kubernetes 會(huì)根據(jù)請(qǐng)求的副本數(shù)量自動(dòng)創(chuàng)建正確數(shù)量的 Pod,并將它們分布到集群中的節(jié)點(diǎn)上。通過(guò)修改 Deployment 對(duì)象的配置來(lái)添加更多副本,Kubernetes 將自動(dòng)啟動(dòng)更多 Pod 來(lái)滿足該情況。如果減少副本數(shù)量,Kubernetes 將刪除較舊的 Pod 以縮小規(guī)模。
?

Deployment 還允許您暫停擴(kuò)展更改的推出,然后稍后恢復(fù)。您也可以回滾到以前的版本,確??焖倬徑夂徒鉀Q新應(yīng)用版本遇到的任何問(wèn)題。
?

集群

Kubernetes 集群是應(yīng)用程序運(yùn)行的整體環(huán)境。它包括集群中的 Nodes,以及管理整個(gè)系統(tǒng)的控制平面組件。
?

集群的控制平面包括與你交互的 API 服務(wù)器、將 Pod 分配給 Nodes 的調(diào)度器,以及實(shí)現(xiàn)特定集群行為的控制器。這還包括一個(gè)用于持久化集群狀態(tài)的 etcd 數(shù)據(jù)存儲(chǔ)。
?

Namespace

Namespace 允許您將集群資源組織到不同的邏輯組中。
?

集群中的對(duì)象名稱只需在每個(gè) Namespace 內(nèi)是唯一的即可。

?

Namespace 通常用于將集群劃分為多個(gè)環(huán)境,如development和?production。它允許多個(gè)用戶和應(yīng)用程序在一個(gè)群集中共存。您可以通過(guò)設(shè)置配額來(lái)控制 Namespace 內(nèi)的資源利用率,防止單個(gè) Namespace 占用所有可用容量。
?

基本命令和操作

一旦建立了 Kubernetes 集群,就可以使用前面提到的 kubectl 與之交互。它是官方的命令行客戶端應(yīng)用程序。讓我們來(lái)介紹幾個(gè)可以開(kāi)始使用的簡(jiǎn)單命令。
?

kubectl run

kubectl run集群中啟動(dòng)一個(gè)新 Pod,運(yùn)行指定的容器鏡像。這將啟動(dòng)一個(gè)名為?nginx的 Pod,運(yùn)行nginx:latest鏡像:

$ kubectl run nginx --image nginx:latest pod/nginx created

?

kubectl get

get命令會(huì)列出特定類型集群中的所有對(duì)象,如pod

$ kubectl get pods NAME ? ?READY ? STATUS ? ?RESTARTS ? AGE nginx ? 1/1 ? ? Running ? 0 ? ? ? ? ?81s

?

kubectl describe

describe?提供特定命名對(duì)象的詳細(xì)信息:

$ kubectl describe pod nginx Name: ? ? ? ? ? ? nginx Namespace: ? ? ? ?defaultPriority: ? ? ? ? 0Service Account: ?defaultNode: ? ? ? ? ? ? minikube/192.168.49.2Start Time: ? ? ? Sat, 06 May 2023 13:21:07 +0100Labels: ? ? ? ? ? run=nginx Annotations: ? ? ?<none>Status: ? ? ? ? ? RunningIP: ? ? ? ? ? ? ? 10.244.0.8... Events: ?Type ? ?Reason ? ? Age ? From ? ? ? ? ? ? ? Message ?---- ? ?------ ? ? ---- ?---- ? ? ? ? ? ? ? ------- ?Normal ?Scheduled ?2m9s ?default-scheduler ?Successfully assigned default/nginx to minikube ?Normal ?Pulling ? ?2m8s ?kubelet ? ? ? ? ? ?Pulling image "nginx:latest" ?Normal ?Pulled ? ? 2m ? ?kubelet ? ? ? ? ? ?Successfully pulled image "nginx:latest" in 8.202082294s (8.202097725s including waiting) ?Normal ?Created ? ?2m ? ?kubelet ? ? ? ? ? ?Created container nginx ?Normal ?Started ? ?2m ? ?kubelet ? ? ? ? ? ?Started container nginx

?

當(dāng)你需要排查特定對(duì)象的問(wèn)題時(shí),比如 Pod 為何停留在pending狀態(tài)而不是running狀態(tài),請(qǐng)使用該命令。?describe輸出底部的Events列表包含有關(guān) Kubernetes 所采取的行動(dòng)的有用信息。
?

kubectl delete

使用delete命令從集群中刪除命名對(duì)象:

$ kubectl delete pod nginx pod "nginx" deleted

?

在 Kubernetes 中部署應(yīng)用程序

您可以通過(guò)多種方式將應(yīng)用程序部署到 Kubernetes。Helm?是一種用于生產(chǎn)的流行解決方案,它為 Kubernetes 工作負(fù)載提供了一種包管理器體驗(yàn)。當(dāng)然,kubectl CLI?也是理想的入門(mén)工具。
?

在下面的步驟中,我們將演示如何通過(guò)創(chuàng)建 Deployment 對(duì)象,在 Kubernetes 中運(yùn)行 NGINX Web 服務(wù)器的多個(gè)副本。
?

如果您沒(méi)有可用的 Kubernetes 集群,可以嘗試使用 minikube 在你的機(jī)器上快速啟動(dòng)一個(gè)。

?

創(chuàng)建 Deployment

您可以使用以下 kubectl 命令創(chuàng)建新的部署:

$ kubectl create deployment nginx --image nginx:latest --replicas 3deployment.apps/nginx created

?

添加一個(gè)名為nginx?的 Deployment 對(duì)象,該對(duì)象運(yùn)行nginx:latest容器鏡像。運(yùn)行以下命令即可看到該對(duì)象:

$ kubectl get deployments NAME ? ?READY ? UP-TO-DATE ? AVAILABLE ? AGE nginx ? 3/3 ? ? 3 ? ? ? ? ? ?3 ? ? ? ? ? 45s

?

此輸出確認(rèn)已請(qǐng)求了三個(gè)副本,并且三個(gè)副本都已準(zhǔn)備就緒。Deployment 已自動(dòng)創(chuàng)建 Pod 以運(yùn)行容器:

$ kubectl get pods NAME ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? ?RESTARTS ? AGE nginx-654975c8cd-74rjx ? 1/1 ? ? Running ? 0 ? ? ? ? ?113s nginx-654975c8cd-7mkwk ? 1/1 ? ? Running ? 0 ? ? ? ? ?113s nginx-654975c8cd-bbphv ? 1/1 ? ? Running ? 0 ? ? ? ? ?113s

?

根據(jù)您指定的副本數(shù)量,有三個(gè) Pod?,F(xiàn)在嘗試刪除其中一個(gè):

$ kubectl delete pod nginx-654975c8cd-bbphv pod "nginx-654975c8cd-bbphv"

?

現(xiàn)在重復(fù)命令列出 Pod:

$ kubectl get pods NAME ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? ?RESTARTS ? AGE nginx-654975c8cd-74rjx ? 1/1 ? ? Running ? 0 ? ? ? ? ?2m57s nginx-654975c8cd-7mkwk ? 1/1 ? ? Running ? 0 ? ? ? ? ?2m57s nginx-654975c8cd-vrkvb ? 1/1 ? ? Running ? 0 ? ? ? ? ?19s

?

集群中仍有三個(gè) Pod。在您刪除舊的 Pod 后,Deployment 發(fā)現(xiàn)與您請(qǐng)求的三個(gè)副本有偏差。它自動(dòng)添加了一個(gè)新 Pod 以恢復(fù)可用性。
?

擴(kuò)展 Deployment

您可以使用?kubectl scale?命令更改副本數(shù)量。確定要更改的 Deployment 和要應(yīng)用的新副本數(shù)量:

$ kubectl scale deployment nginx --replicas 5 deployment.apps/nginx scaled

?

Deployment 控制器會(huì)自動(dòng)向群集添加兩個(gè)新 Pod,以滿足更新后的副本數(shù)量:

$ kubectl get pods NAME ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? ?RESTARTS ? AGE nginx-654975c8cd-74rjx ? 1/1 ? ? Running ? 0 ? ? ? ? ?5m11s nginx-654975c8cd-7mkwk ? 1/1 ? ? Running ? 0 ? ? ? ? ?5m11s nginx-654975c8cd-b7hg6 ? 1/1 ? ? Running ? 0 ? ? ? ? ?37s nginx-654975c8cd-hnklt ? 1/1 ? ? Running ? 0 ? ? ? ? ?37s nginx-654975c8cd-vrkvb ? 1/1 ? ? Running ? 0 ? ? ? ? ?2m33s

?

更新 Deployment

您可以通過(guò)運(yùn)行kubectl edit來(lái)更改 Deployment 的屬性。這將在默認(rèn)編輯器中打開(kāi) Deployment 的 YAML 清單:

$ kubectl edit deployment nginx

?

向下滾動(dòng)文件,找到?spec.template.spec.containers?部分。將?image?屬性的值從?nginx:latest?改為?nginx:stable-alpine。

?

保存并關(guān)閉文件。
?

Deployment 會(huì)將 Pod 替換為使用?stable-alpine?圖像標(biāo)記的新 Pod。使用 kubectl 列出群集的 Pod 或 Deployment,并監(jiān)控推出情況:

$ kubectl get deployment NAME ? ?READY ? UP-TO-DATE ? AVAILABLE ? AGE nginx ? 4/5 ? ? 5 ? ? ? ? ? ?4 ? ? ? ? ? 10m

?

回滾 Deployment

有時(shí),您應(yīng)用的更改可能不正確或不理想。例如,你可能選擇了錯(cuò)誤的鏡像或指定了不正確的副本數(shù)量。Kubernetes 可通過(guò)一條命令回滾來(lái)處理這些情況:

$ kubectl rollout undo deployment nginx deployment.apps/nginx rolled back

?

Deployment 的配置會(huì)恢復(fù)到之前的狀態(tài)。
?

您可以選擇指定要恢復(fù)的特定版本號(hào):

$ kubectl rollout undo deployment nginx --to-revision=1

?

聲明式管理 Deployment

上述示例使用 kubectl 命令來(lái)定義和管理 Deployment。這對(duì)入門(mén)很方便,也可以編寫(xiě) YAML 清單來(lái)創(chuàng)建對(duì)象。這些清單可以作為源代碼的一部分進(jìn)行版本控制。
?

下面是與之前創(chuàng)建的 Deployment 相對(duì)應(yīng)的 YAML 清單:

apiVersion: apps/v1kind: Deploymentmetadata: ?name: nginxspec: ?replicas: 3 ?selector: ? ?matchLabels: ? ? ?app: nginx ?template: ? ?metadata: ? ? ?labels: ? ? ? ?app: nginx ? ?spec: ? ? ?containers: ? ? ? ?- name: nginx ? ? ? ? ?image: nginx:latest

?

這部分演示了我們之前介紹過(guò)的標(biāo)簽和選擇器機(jī)制。該 Deployment 包括一個(gè) Pod 的清單模板,每個(gè) Pod 都分配了?app: nginx?標(biāo)簽。其配置了相應(yīng)的標(biāo)簽選擇器(label selector),因此標(biāo)記?app: nginx?的 Pod 將成為該 Deployment 的一部分。
?

將 YAML 保存為?deployment.yaml,然后使用以下命令將其應(yīng)用到集群中:

$ kubectl apply -f deployment.yaml deployment.apps/nginx created

?

要修改 Deployment ,只需編輯原始 YAML 文件即可。嘗試將?spec.replicas?字段改為 5,然后重復(fù)該命令以應(yīng)用您的更改:

$ kubectl apply -f deployment.yaml deployment.apps/nginx configured

?

Kubernetes 會(huì)自動(dòng)將集群轉(zhuǎn)換到新的理想狀態(tài),添加新的 Pod 以實(shí)現(xiàn)更新的副本數(shù):

$ kubectl get pods NAME ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? ?RESTARTS ? AGE nginx-654975c8cd-8xqd8 ? 1/1 ? ? Running ? 0 ? ? ? ? ?91s nginx-654975c8cd-mjwjp ? 1/1 ? ? Running ? 0 ? ? ? ? ?91s nginx-654975c8cd-ngnvv ? 1/1 ? ? Running ? 0 ? ? ? ? ?6s nginx-654975c8cd-qkf2d ? 1/1 ? ? Running ? 0 ? ? ? ? ?6s nginx-654975c8cd-tb6z6 ? 1/1 ? ? Running ? 0 ? ? ? ? ?91s

?

總結(jié)

Kubernetes 可跨物理節(jié)點(diǎn)集群協(xié)調(diào)容器部署,使用 Pod 和 Deployment 等對(duì)象有效地建模應(yīng)用程序組件。您可以擴(kuò)展容器副本,而無(wú)需自己管理故障、依賴關(guān)系、網(wǎng)絡(luò)和存儲(chǔ)。
?

學(xué)習(xí) Kubernetes:

  • 掌握一項(xiàng)多年來(lái)在快速發(fā)展的云原生運(yùn)維領(lǐng)域炙手可熱的技能;

  • 更清楚地了解代碼是如何在生產(chǎn)中到達(dá)用戶的;

  • 掌握運(yùn)維團(tuán)隊(duì)用來(lái)部署實(shí)時(shí)應(yīng)用程序的相同工具;

  • 可以運(yùn)行自己的本地 Kubernetes 集群,在開(kāi)發(fā)人員工作站上準(zhǔn)確復(fù)制生產(chǎn)基礎(chǔ)架構(gòu),從而減少環(huán)境之間的差異。
    ?

現(xiàn)在,你已經(jīng)了解了 Kubernetes 的基本概念,并看到了如何管理簡(jiǎn)單的容器部署。在本系列的第 2 部分,我們將更深入地了解 Kubernetes 網(wǎng)絡(luò)和監(jiān)控,以便您在集群中進(jìn)行實(shí)際應(yīng)用。
?

原文鏈接
https://komodor.com/blog/a-software-developers-guide-to-getting-started-with-kubernetes-part-1/
參考鏈接
[1]https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/
[2]https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

?


軟件開(kāi)發(fā)人員 Kubernetes 入門(mén)指南|Part 1的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
沙洋县| 汕头市| 延川县| 洪江市| 漯河市| 无为县| 长阳| 曲松县| 手游| 绥化市| 确山县| 双流县| 黄冈市| 大埔县| 清镇市| 桐梓县| 精河县| 马尔康县| 泉州市| 成安县| 西青区| 南皮县| 霍林郭勒市| 淮南市| 南郑县| 濉溪县| 西乡县| 秀山| 江西省| 称多县| 和田县| 睢宁县| 云阳县| 民权县| 龙江县| 长乐市| 古交市| 习水县| 宁海县| 抚松县| 镇巴县|