Kubernetes ReplicationController介绍

转载请注明出处:www.huamo.online
字节杭州 求贤若渴:

  1. https://job.toutiao.com/s/JXTdQaH
  2. https://job.toutiao.com/s/JXTMWW3
  3. https://job.toutiao.com/s/JXT1tpC
  4. https://job.toutiao.com/s/JXTdu6h

英文原文: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/

ReplicationController是什么?

一个ReplicationController可以保证在任一个时刻都有指定数量的pod副本在运行。换句话说,一个ReplicationController保证了一个或多个相同pod总是运行可用的。如果存在了过多的pod,它会杀掉多余的一些。如果pod数量过少,ReplicationController会启动更多的pod。不同于手动创建pod,被ReplicationController维护的pod,如果遇到了宕机,被删除,被终止的情况,都会被自动替换为新的pod。举个例子,你的pod会在破坏性的维护之后被重建,比如内核升级。基于此,我们推荐即使你的应用只需要一个pod,也使用ReplicationController。你可以把ReplicationController想象成类似一个进程监控的东西,而不是单独节点上的个别进程,ReplicationController监督跨越多个节点的多个pod。在讨论中,ReplicationController常简写为rc或者rcs,并且这也是kubectl命令行中的缩写形式。

一个简单的场景是创建一个ReplicationController对象用来无限期地可靠运行一个pod实例。更复杂一些的例子是运行一个可复制服务的多个相同副本,例如web服务器。

运行一个ReplicationController例子

这里有一个ReplicationController示例配置。它运行了nginxweb服务器的3个副本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# replication.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80

用如下命令运行这个例子:

1
2
$ kubectl create -f ./replication.yaml
replicationcontroller "nginx" created

查看ReplicationController的状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ kubectl describe replicationcontrollers/nginx
Name: nginx
Namespace: default
Image(s): nginx
Selector: app=nginx
Labels: app=nginx
Replicas: 3 current / 3 desired
Pods Status: 0 Running / 3 Waiting / 0 Succeeded / 0 Failed
Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- ---- ------ -------
20s 20s 1 {replication-controller } Normal SuccessfulCreate Created pod: nginx-qrm3m
20s 20s 1 {replication-controller } Normal SuccessfulCreate Created pod: nginx-3ntk0
20s 20s 1 {replication-controller } Normal SuccessfulCreate Created pod: nginx-4ok8v

这里,3个pod被创建,但都还没有在运行,可能是因为还在拉取镜像。等一会再运行相同的命令,应该会得到如下的结果:

1
Pods Status:    3 Running / 0 Waiting / 0 Succeeded / 0 Failed

如果想要以一种机器可读的格式,罗列出属于这个rc的所有pod,可以使用如下命令:

1
2
3
$ pods=$(kubectl get pods --selector=app=nginx --output=jsonpath={.items..metadata.name})
$ echo $pods
nginx-3ntk0 nginx-4ok8v nginx-qrm3m

这里,selector等同于ReplicationControllerselector--output=jsonpath选项指定了一个表达式,用来只获取返回列表中每个pod的名字。

书写一个ReplicationController

转载请注明出处:www.huamo.online