Kubernetes 复制控制器(复制控制器配置示例) 16

作者 : 慕源网 本文共2796个字,预计阅读时间需要7分钟 发布时间: 2021-11-28 共318人阅读

本文是Kubernetes权威指南系列的一部分,你可以点击Kubernetes权威指南查看所有教程

Kubernetes 复制控制器(复制控制器配置示例) 16

Kubernetes 复制控制器介绍

Kubernetes 复制控制器确保相同 Pod 的所需副本在给定时间点与相同 Pod 的当前副本匹配,这意味着它确保当前状态始终与所需状态匹配。Kubernetes 复制控制器保证一个 Pod 或一组相同的 Pod 永远不会宕机。简而言之,我们称它为“rc”,我们也在 kubectl 命令中使用了这个快捷方式。Kubernetes Replication Controller 几乎类似于 Process Supervisor,但有一个区别,即 Replication Controller 监管多个节点上的多个 Pod,而不是监管单个节点上的单个进程。

复制控制器如何在 Kubernetes 中工作?

Kubernetes 复制控制器不断将所需的 Pod 数量与当前的 Pod 数量相匹配,如果运行的 Pod 多于所需的 Pod 数量,则终止额外的 Pod,或者如果 Pod 的数量少于所需数量,则它会启动更多的 Pod。复制控制器维护的 pod 会在它们失败、删除或终止时自动替换。

例如,如果我们想要一个 Web 服务器的 3 个副本,那么 Replication Controller 确保 Web 服务器的 3 个副本始终启动并运行,并且如果任何 Pod 由于任何破坏性维护(例如内核升级)而停止运行,它会自动启动一个新 pod 以匹配所需的状态,无需任何人工交互。即使应用程序只需要一个 Pod,也建议使用 Replication Controller。

Kubernetes 复制控制器示例

下面给出了 Kubernetes 复制控制器的示例:

示例#1

运行 nginx Web 服务器的三个副本的复制控制器配置示例。

代码:

apiVersion: v1
kind: ReplicationController
metadata:
name: nginx-web
spec:
replicas: 5
selector:
app: nginx-web
template:
metadata:
name: nginx-web
labels:
app: nginx-web
spec:
containers:
- name: nginx-web
image: nginx
ports:
- containerPort: 80

将以上代码保存在 yaml 文件“rc_nginx.yml”中,并使用以下命令应用此文件:

代码:

$kubectl apply -f rc_nginx.yml
注意:在上面的例子中,YAML文件必须在当前工作目录下,如果文件位置不同,请指定文件的完整路径。

输出:

Kubernetes 复制控制器(复制控制器配置示例) 16

解释:

在上面的例子中,当我们应用 yaml 文件时,已经创建了一个名为“nginx-web”的复制控制器。

示例#2

代码:

$kubectl describe replicationcontroller/nginx-web

输出:

Kubernetes 复制控制器(复制控制器配置示例) 16

解释:

在上面的例子中,它描述了与复制控制器“nginx-web”相关的所有细节。我们在 yaml 文件中提到了 5 个副本,我们可以看到当前状态与所需状态匹配,即 5 个副本。

让我们列出集群中所有正在运行的 pod,在下面的快照中,我们可以看到只有 5 个 pod 正在运行,并且 pod 的名称以“nginx-web”开头,这是复制控制器的名称,然后是一些字符串来区分豆荚。如果我们删除突出显示的 pod 并再次列出所有正在运行的 pod,它会再次显示 5 个 pod,但已删除的 pod 在列表中不再可用。我们看到刚刚创建了一个新的 pod,最后有一个新的字符串。这意味着当我们删除作为该复制控制器一部分的 Pod 时,当前状态变为 4,因此复制控制器创建了一个全新的 Pod。

Kubernetes 复制控制器(复制控制器配置示例) 16

Kubernetes 复制控制器(复制控制器配置示例) 16

下面给出了复制控制器的删除:

1. 我们可以使用 ‘kubectl delete’ 删除一个 Replication Controller 及其所有的 pod。

代码:

$kubectl delete replicationcontroller/nginx-web

输出:

Kubernetes 复制控制器(复制控制器配置示例) 16

Kubernetes 复制控制器(复制控制器配置示例) 16

解释:

在上面的示例中,删除复制控制器后 Pod 将被终止。

2. 我们可以通过在 ‘kubectl delete’ 命令中指定选项 ‘–cascade=false’ 来删除一个复制控制器,但不能删除在该控制器下运行的 pod。

代码:

$kubectl delete replicationcontroller/nginx-web --cascade=false

输出:

Kubernetes 复制控制器(复制控制器配置示例) 16

解释: 

在上面的快照中,复制控制器已被删除,但 Pod 仍在运行。

3. 我们还可以通过更改 Pod 的标签从复制控制器中删除 Pod,但是复制控制器将通过创建新 Pod 来替换该 Pod。它主要用于从服务中删除 Pod 以进行调试、数据恢复等。

复制控制器的角色

下面给出了复制控制器的角色:

1. 重新安排

复制控制器确保指定数量的 Pod 一直在运行,无论我们必须在任何情况下运行单个 Pod 还是 100 个 Pod,即使节点出现故障或 Pod 被手动或任何不同的控制代理终止。

2. 缩放

我们可以使用复制控制器轻松地上下复制副本的数量。我们必须简单地手动更新“副本”字段或自动缩放控制代理。

3.滚动更新

我们还可以使用复制控制器来滚动更新服务。复制控制器在滚动更新中一个一个地替换 pod。我们需要创建一个新的复制控制器来实现滚动更新。我们创建了一个带有 1 个副本的新复制控制器,然后将其放大 1,并将旧复制缩小 1 个 pod。我们继续这个过程,直到旧的复制控制器达到 0 个副本。一旦达到 0 个副本,我们将删除旧的复制控制器。

4. 多个发布轨道

“Canary”是我们在生产中进行的一项流行测试。在本次测试中,我们只是向部分用户介绍了应用程序的新版本,并没有完全从生产中删除旧版本的应用程序。

例如,我们有一个针对所有 5 个 pod 的服务,现在我们想推出我们应用程序的新版本。我们设置了一个带有 4 个副本并带有标签“env=prod”和“track=stable”的复制控制器,以及另一个带有标签“env=prod”和“track=canary”的带有 1 个副本的复制控制器。这里的服务同时针对发布轨道“稳定”和“金丝雀”。我们可以根据我们的测试结果扩展复制控制器的副本。

复制控制器的职责

下面给出了复制控制器的职责:

1. Replication Controller 的主要职责是确保所需的副本数与当前的副本数匹配。

2. 这里,Replication Controller 只考虑从计数中排除的终止 pod。

3. 如果一个 pod 正在运行但不可访问,那么复制控制器将替换该 pod,因为它不执行任何准备或活跃度探测。

结论

如果我们想连续运行一个 Pod 或多个相同的 Pod,Kubernetes 复制控制器很有用,因为复制控制器中只允许“始终”重启策略。Kubernetes 复制控制器有可用的替代方案,例如“ReplicaSet”、“Deployment”、“Bare Pods”、“Job”和“DaemonSet”。选择什么完全取决于一个人的要求。


慕源网 » Kubernetes 复制控制器(复制控制器配置示例) 16

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录