3

五个重要的 Kubernetes 概念让学习变得简单

 1 year ago
source link: https://www.51cto.com/article/720108.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Kubernetes 是最流行的开源容器编排解决方案。

开始使用 Kubernetes并不容易。

本文将帮助您了解 Kubernetes 的一些最重要的概念。

1.为什么我们需要容器编排?

大多数企业都在采用微服务架构。

微服务提供了创新的灵活性。

然而,微服务并不是免费的。我们没有部署几个应用程序,而是部署了数百个微服务。这导致复杂性增加。

容器可以帮助简化您的部署和可观察性挑战。但是,在管理基础架构和部署方面仍然存在挑战。示例:我想要 10 个微服务 A 容器实例,15 个微服务 B 容器实例,......等等多个微服务。此外,我的微服务还需要一些其他功能。一些典型特征包括:

  • Auto Scaling- 根据需求扩展容器
  • 服务发现- 帮助微服务找到另一个
  • 负载均衡器- 在微服务的多个实例之间分配负载
  • 自我修复- 进行健康检查并替换失败的实例
  • 零停机部署- 无需停机即可发布新版本

2.什么是容器编排?

容器编排解决方案提供了微服务架构所需的大部分技术特性。您将能够创建一个包含多个 VM 实例的集群并将微服务部署到该集群。容器编排解决方案将管理集群和部署。

76fc8da86c4db7277de925206a2e2627eb217a.jpg

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 和

为什么 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 组件来对多个微服务进行负载均衡)。

5.接下来的步骤

  • 尝试 Kubernetes 游乐场
  • 在其中一个云平台中创建一个 Kubernetes 集群并使用它(GKE 有一个免费层。您可以尝试 AKS 和 EKS,但它们目前还不是免费层的一部分!)。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK