五個(gè)重要的 Kubernetes 概念讓學(xué)習(xí)變得簡(jiǎn)單
Kubernetes 是最流行的開(kāi)源容器編排解決方案。
開(kāi)始使用 Kubernetes并不容易。
本文將幫助您了解 Kubernetes 的一些最重要的概念。
1.為什么我們需要容器編排?
大多數(shù)企業(yè)都在采用微服務(wù)架構(gòu)。
微服務(wù)提供了創(chuàng)新的靈活性。
然而,微服務(wù)并不是免費(fèi)的。我們沒(méi)有部署幾個(gè)應(yīng)用程序,而是部署了數(shù)百個(gè)微服務(wù)。這導(dǎo)致復(fù)雜性增加。
容器可以幫助簡(jiǎn)化您的部署和可觀察性挑戰(zhàn)。但是,在管理基礎(chǔ)架構(gòu)和部署方面仍然存在挑戰(zhàn)。示例:我想要 10 個(gè)微服務(wù) A 容器實(shí)例,15 個(gè)微服務(wù) B 容器實(shí)例,......等等多個(gè)微服務(wù)。此外,我的微服務(wù)還需要一些其他功能。一些典型特征包括:
- Auto Scaling- 根據(jù)需求擴(kuò)展容器
- 服務(wù)發(fā)現(xiàn)- 幫助微服務(wù)找到另一個(gè)
- 負(fù)載均衡器- 在微服務(wù)的多個(gè)實(shí)例之間分配負(fù)載
- 自我修復(fù)- 進(jìn)行健康檢查并替換失敗的實(shí)例
- 零停機(jī)部署- 無(wú)需停機(jī)即可發(fā)布新版本
2.什么是容器編排?
容器編排解決方案提供了微服務(wù)架構(gòu)所需的大部分技術(shù)特性。您將能夠創(chuàng)建一個(gè)包含多個(gè) VM 實(shí)例的集群并將微服務(wù)部署到該集群。容器編排解決方案將管理集群和部署。
3.什么是 Kubernetes?
有許多容器編排平臺(tái):Docker Swarm、Mesosphere 和 Kubernetes 等。在過(guò)去的幾年里,Kubernetes 已經(jīng)成為容器編排領(lǐng)域的贏家。
4.什么是最重要的 Kubernetes 概念?
假設(shè)您想使用 Kubernetes 建立一個(gè)微服務(wù)架構(gòu)。以下是工作流程的樣子:
- 第 1 步:創(chuàng)建具有多個(gè)節(jié)點(diǎn)(或虛擬機(jī))的容器編排的 Kubernetes 集群
- 第 2 步:部署和配置您的第一個(gè)微服務(wù)
- 第 3 步:部署和配置您的第二個(gè)微服務(wù)
現(xiàn)在讓我們深入研究其中的每一個(gè)。
4.1 什么是集群?
集群是一組虛擬機(jī)。在集群中,有兩種類型的節(jié)點(diǎn):
- 主節(jié)點(diǎn)- 管理集群。您將所有部署指令發(fā)送到主節(jié)點(diǎn)。
- 工作節(jié)點(diǎn)- 所有微服務(wù)都在工作節(jié)點(diǎn)上運(yùn)行。
以下是一些重要的主節(jié)點(diǎn)(控制平面)組件:
- API Server- 處理 K8S 集群的所有通信(來(lái)自節(jié)點(diǎn)和外部)
- 調(diào)度程序- 決定 pod 的位置
- 控制管理中心- 管理部署和副本集
- etcd- 存儲(chǔ)集群狀態(tài)的分布式數(shù)據(jù)庫(kù)
工作節(jié)點(diǎn)的工作是運(yùn)行您的微服務(wù)。此外,一個(gè)名為 Kubelet 的 Kubernetes 組件在每個(gè) pod 上運(yùn)行。Kubelet 使工作節(jié)點(diǎn)能夠與主節(jié)點(diǎn)通信。
4.2 讓我們部署一個(gè)微服務(wù)
假設(shè)我要部署微服務(wù) A 的 V1 的 5 個(gè)實(shí)例。發(fā)出創(chuàng)建部署并為其設(shè)置多個(gè)實(shí)例的命令類似于您在下面看到的:
**create deployment** hello-world-rest-api --image=in28min/hello-world-rest-api:0.0.1.RELEASE
scale deployment hello-world-rest-api --replicas=5
這會(huì)將具有 5 個(gè)實(shí)例的微服務(wù) A 的 v1 部署到 Kubernetes 集群。
在內(nèi)部,Kubernetes 將創(chuàng)建
- 部署
- 一個(gè) ReplicaSet 和
- 5個(gè)豆莢
為什么 Kubernetes 會(huì)這樣做?
讓我們深入挖掘。
4.3 什么是 Pod?
Pod 是 Kubernetes 中最小的可部署單元。一個(gè) pod 代表你的微服務(wù)的一個(gè)實(shí)例。每個(gè) Pod 都分配有一個(gè)臨時(shí)IP 地址。
如果我在 Kubernetes 集群中運(yùn)行 10 個(gè)微服務(wù) A 實(shí)例和 12 個(gè)微服務(wù) B 實(shí)例,那么我總共將運(yùn)行 10 + 12 = 22 個(gè) Pod。
4.4 什么是ReplicaSet?
我們將具有 5 個(gè)實(shí)例的微服務(wù) A 部署到 Kubernetes 集群。這意味著您有 5 個(gè) pod 正在運(yùn)行。假設(shè)你殺死了一個(gè)豆莢。Kubernetes 會(huì)自動(dòng)識(shí)別這一點(diǎn)并創(chuàng)建一個(gè)替換 pod。Kubernetes 監(jiān)控您的 pod 的健康狀況并替換不健康的 pod。Kubernetes 如何做到這一點(diǎn)?
這是 ReplicaSet 的工作。
ReplicaSet 確保指定數(shù)量的 pod 始終在運(yùn)行。在上面的例子中,一個(gè) ReplicaSet 確保了微服務(wù) A 的 5 個(gè)實(shí)例始終在運(yùn)行。
4.5 什么是部署?
如果一個(gè) ReplicaSet 保證了特定數(shù)量的 pod,那么 Deployment 的作用是什么?
部署可確保您在發(fā)布微服務(wù)的新版本時(shí)具有靈活性。
部署代表微服務(wù)的所有版本。
目前,我們只有一個(gè)版本的微服務(wù)。但是,您可以部署新版本。比方說(shuō),我想在不停機(jī)的情況下部署微服務(wù) V2。
這就是部署的工作。
當(dāng)您部署現(xiàn)有微服務(wù)的新版本時(shí),部署將為微服務(wù) A 的 V2 創(chuàng)建一個(gè)新的 ReplicaSet。
你將會(huì)有:
- 一個(gè)部署代表微服務(wù) A
- 微服務(wù)A V1的一個(gè)ReplicaSet
- 微服務(wù) A V2 的一個(gè) ReplicaSet
部署英國(guó)
4.6 快速回顧 - 部署與副本集
kubectl create deployment microservice1 --image=microservice1:v1?
為每個(gè)微服務(wù)創(chuàng)建一個(gè)部署。Deployment 代表一個(gè)微服務(wù)(及其所有版本)。部署管理新版本,確保零停機(jī)時(shí)間。
副本集確保為特定微服務(wù)版本運(yùn)行特定數(shù)量的 pod 。即使其中一個(gè) pod 被殺死,副本集也會(huì)啟動(dòng)一個(gè)新的。
kubectl set image deployment microservice1 microservice1=microservice1:v2?
當(dāng)你部署一個(gè) V2 的微服務(wù)時(shí),會(huì)創(chuàng)建一個(gè)新的 ReplicaSet(V2 ReplicaSet)。
部署根據(jù)配置的發(fā)布策略更新 V1 副本集和 V2 副本集。
4.7 什么是服務(wù)?
在 Kubernetes 中,每個(gè) Pod 都有自己的 IP 地址。在以下情況下,您如何確保外部用戶不受影響:
- 吊艙出現(xiàn)故障并被替換或
- 部署了新版本的微服務(wù),并且舊版本的所有現(xiàn)有 Pod 都被新版本的 Pod 替換
解決方案:創(chuàng)建一個(gè)服務(wù)。
expose deployment name --type=LoadBalancer --port=80?
服務(wù)使用穩(wěn)定的 IP 地址將您的部署暴露給外部世界。這可確保您的用戶不會(huì)在 pod 上下移動(dòng)時(shí)受到影響。
服務(wù)分為三類:
- ClusterIP:在集群內(nèi)部 IP 上公開(kāi)服務(wù)。用例:您希望您的微服務(wù)僅在集群內(nèi)部可用(集群內(nèi)通信)。
- LoadBalancer:使用云提供商的負(fù)載均衡器向外部公開(kāi)服務(wù)。用例:您想為每個(gè)微服務(wù)創(chuàng)建單獨(dú)的負(fù)載均衡器。
- NodePort:在每個(gè)節(jié)點(diǎn)的 IP 上的靜態(tài)端口(NodePort)上公開(kāi)服務(wù)。用例:您不想為每個(gè)微服務(wù)創(chuàng)建一個(gè)外部負(fù)載均衡器(您可以創(chuàng)建一個(gè) Ingress 組件來(lái)對(duì)多個(gè)微服務(wù)進(jìn)行負(fù)載均衡)。
5.接下來(lái)的步驟
- 嘗試 Kubernetes 游樂(lè)場(chǎng)
- 在其中一個(gè)云平臺(tái)中創(chuàng)建一個(gè) Kubernetes 集群并使用它(GKE 有一個(gè)免費(fèi)層。您可以嘗試 AKS 和 EKS,但它們目前還不是免費(fèi)層的一部分?。?。