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