Day12-Kubernetes 那些事 - Replication Controller

前言

在上一篇文章提到由於 Pod 是 Stateless ,因此我们可以扩充 Pod ,今天这篇文章就要正式进入如何扩充 Pod 了,首先我们先从最简单的 [Replication Controller](在上一篇文章提到由於 Pod 是 Stateless ,因此我们可以扩充 Pod ,今天这篇文章就要正式进入如何扩充 Pod 了,首先我们先从最简单的 Replication Controller 开始说起。) 开始说起。

什麽是 Replication Controller?

大家看到这个名词可能会猜到又是一个 Controller 了,没错 Replication Controller 也是一种 Controller 负责控制 Replication ,而 Replication 翻成中文就是复制的意思,在 K8s 中 Replication 代表的就是同一种 Pod 的复制品,有没有觉得 K8s 蛮多设定都很相近呢XD

这边要带大家认识一个很重要的设定: replicareplica 就是复制品的意思,透过这个设定我们就可以快速产生一样内容的 Pod ,举例来说:今天设定了 replica: 2 就代表会产生两个内容一样的 Pod 出来。

Replication Controller 用途

上面提到 Replication Controller 可以利用设定 replica 的方式快速建立 Pod 数量,其实除了建立之外 Replication Controller 也确保了 Pod 的数量与我们设定的 replica 一致,假如今天不小心删除了其中一个 Pod ,这时候 Replication Controller 就会自动在产生一个新的 Pod 出来填补那个空缺,所以善用 Replication Controller 可以让我们的产品变得更加稳定,一种鸡蛋不会摆在同个篮子的概念XD

Replication Controller 写法

这边稍微把之前写过的 Pod 加以改写一下。

apiVersion: v1
kind: ReplicationController
metadata:
  name: helloworld
spec:
  replica: 2
  selector:
    app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
        - name: helloworld
          image: w5151381guy/helloworld
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080

这份设定档看似复杂但其实很简单,可以发现 template 区块内的设定基本上就是 Pod 的设定,上面再加一些 Replication Controller 自身的设定而已。

由於我们要建立的是 Replication Controller ,因此在一开始的 spec 我们要填的是 Replication Controller 的设定,所以 replica 会摆在第一个 spec 内。

再来又看到 selector 了,前面提到 Replication Controller 要控制的就是 Pod 的数量,所以这边的 selector 就是要选取 Pod ,就跟 Service 要选取 Pod 是一样的意思。

最後就是一个新的设定: templatetemplate 就是用来定义 Pod 的资讯,所有 Pod 的内容像是 metadataspec 等等都会写在 template 内,所以可以把 template 想像成是一个不用写 apiVersion 以及 kind 的 Pod 描述档,有了这个观念在看 template 内的描述就相当简单了,就只是把 Pod 的内容复制过来而已,而 template 内的 spec 就是写上 Pod 的 container 资讯喽。

Replication Controller 建立

一样也是要用 apply 的参数来建立描述档。

为了查看 Replication Controller 是否有正确建立起来可以下 kubectl get replicationcontroller 但大家都知道工程师通常都蛮喜欢简写的,所以直接下 kubectl get rc 即可。

接下来我们就可以查看 Pod 是否真的出现 2 个,所以下了 kubectl get pod,发现真的产生两个 Pod ,但为了不让名字重复所以 Replication Controller 会在 Pod 名称後面带一些自己生成的值进去。

最後来查看 Replication Controller 是否真的会控制 Pod 数量,因此我们先下 kubectl delete pod PodName 最後再查看 Pod 发现真的有自动生成一个 Pod 出来,让我们的 replca 始终都能保持在两个。

这时候你可能会思考那我是不是没办法永远砍掉 Replication Controller 生成的 Pod 了,因为都会不断的生出一个新的 Pod 出来,其实是可以的我们只要把 Replication Controller 砍掉,而 Replication Controller 就会自动终止底下的 Pod ,随後这些 Pod 也就会自动消失了。

最後一样回到我们网页,发现 Hello World 也有正确的显示,代表整体是正常运行的。

小结

今天这篇文章介绍了 Replication Controller ,相信大家应该更了解 K8s 是如何控制 Pod 的数量,但其实 K8s 官方并不建议用 Replication Controller 的方式来控制 Pod ,而是建议用 Deployment 搭配 ReplicaSet 来控制。

所以下一篇文章就会来好好介绍这两个物件,如果对於文章有任何问题都欢迎留言给我,那我们就下篇文章见喽~


<<:  (笔记D2) Spring MVC 框架处理流程

>>:  Day 12 Odoo Server Actions (ir.actions.server)

第 10 集:浅谈 Container Wrapper 差异

此篇会探讨 container 与 wrapper 用法,会着重在 wrapper 的探讨。 在开...

Day 29 - Baseball Game

大家好,我是毛毛。ヾ(´∀ ˋ)ノ 废话不多说开始今天的解题Day~ 682. Baseball G...

第48天-学习 crontab 工作排程

今天进度 鸟哥私房菜 - 第十五章、例行性工作排程(crontab) 我在 Crontab.guru...

资安制度建立前须蒐集的资料

一、充份授权 企业或机构应指派专责人员(Chief Information Security Off...

ISO 27001 资讯安全管理系统 【解析】(九)

(一)正式范围定义的目的 范围定义的目的是准确说明组织所做的事情,范围说明应准确说明组织所做的事情是...