k8s基本使用入门-了解ReplicationController
文章发布较早,内容可能过时,阅读注意甄别。
刚刚默认创建的 pod 就只有一个,那么如何创建多个 pod,以及动态扩容呢。
我们进行如下操作之前,先将之前启动的 nginx 的 pod 删掉,使用如下指令:
[root@master pod-basic]$kubectl delete -f pod_nginx.yml
pod "nginx" deleted
[root@master pod-basic]$kubectl get pods
No resources found.
1
2
3
4
2
3
4
# 1,ReplicationController。
现在来看一个新的 yaml 文件:
[root@master replicas-set]$cat rc_nginx.yml
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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
这是一个ReplicaSet
类型的,下边又可以看到定义的数字是 3,也就是启动 3 个 pod。
现在开始创建:
[root@master replicas-set]$kubectl create -f rc_nginx.yml
replicationcontroller "nginx" created
[root@master replicas-set]$kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-2qzvm 1/1 Running 0 7s
nginx-c5nk4 0/1 ContainerCreating 0 7s
nginx-r2zcm 0/1 ContainerCreating 0 7s
1
2
3
4
5
6
7
2
3
4
5
6
7
这里可以看到,已经有三个了,其中有两个的状态还是启动中的,那么等待一会儿,就也 running 起来了。
这个时候还可以使用另外一个命令来查看状态:
[root@master replicas-set]$kubectl get rc
NAME DESIRED CURRENT READY AGE
nginx 3 3 3 1m
1
2
3
2
3
此时,我们尝试一下删除其中的一个 pod,看看会有什么效果。
[root@master replicas-set]$kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-2qzvm 1/1 Running 0 4m
nginx-c5nk4 1/1 Running 0 4m
nginx-r2zcm 1/1 Running 0 4m
[root@master replicas-set]$kubectl delete pods nginx-2qzvm
pod "nginx-2qzvm" deleted
[root@master replicas-set]$kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-c5nk4 1/1 Running 0 5m
nginx-qlwl2 0/1 ContainerCreating 0 2s
nginx-r2zcm 1/1 Running 0 5m
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
删除了一个,然后再次查看的时候,发现又有一个新的 pod 在生成中了,也就是说,当 pod 以这种kind: ReplicationController
方式启动的时候,会维持住 3 个这个数目。这就是他的特性,因此在启动一个 pod 的时候,是推荐使用这种方式的,即便数目是 1 个,那么即便这个 pod 会在某个时刻某个原因退出了,仍旧会被自动创建恢复出来。
在动态扩容管理方面,我们需要引入到另外一个参数scale。
依旧是先看下用法:
[root @ master replicas-set] $ kubectl scale --help
为Deployment,ReplicaSet,Replication Controller或StatefulSet设置新大小。
Scale还允许用户为缩放操作指定一个或多个前提条件。
如果指定了--current-replicas或--resource-version,则在尝试扩展之前验证它,并且它是
保证在将比例发送到服务器时前提条件成立。
例子:
#将名为'foo'的复制集缩放为3。
kubectl scale --replicas = 3 rs / foo
#将由“foo.yaml”中指定的类型和名称标识的资源缩放为3。
kubectl scale --replicas = 3 -f foo.yaml
#如果名为mysql当前大小的部署为2,则将mysql扩展为3。
kubectl scale --current-replicas = 2 --replicas = 3 deployment / mysql
#缩放多个复制控制器。
kubectl scale --replicas = 5 rc / foo rc / bar rc / baz
#将名为'web'的statefulset缩放为3。
kubectl scale --replicas = 3 statefulset / web
选项:
--all = false:选择指定资源类型的命名空间中的所有资源
--current-replicas = -1:当前大小的前提条件。要求资源的当前大小与此匹配
价值以便扩大规模。
-f, - filename = []:标识要设置新大小的资源的文件的文件名,目录或URL
--include-extended-apis = true:如果为true,则通过调用API服务器包含新API的定义。 [默认为true]
-o, - output ='':输出模式。使用“-o name”表示较短的输出(资源/名称)。
--record = false:在资源注释中记录当前kubectl命令。如果设置为false,请不要记录
命令。如果设置为true,则记录该命令。如果未设置,则默认仅更新现有注释值
已经存在。
-R, - recursive = false:递归处理-f, - filename中使用的目录。在您想要管理时很有用
在同一目录中组织的相关清单。
--replicas = -1:新的所需副本数。需要。
--resource-version ='':资源版本的前提条件。要求当前资源版本与此匹配
价值以便扩大规模。
-l, - selector ='':要过滤的选择器(标签查询),支持'=','=='和'!='。(例如-l key1 = value1,key2 = value2)
--timeout = 0s:放弃缩放操作之前等待的时间长度,零表示不等待。任何其他
值应包含相应的时间单位(例如1s,2m,3h)。
用法:
kubectl scale [--resource-version = version] [ - current-replicas = count] --replicas = COUNT(-f FILENAME | TYPE NAME)
[选项]
使用“kubectl options”获取全局命令行选项列表(适用于所有命令)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
现在,我想把刚刚启动的 nginx 的 3 个 pod 变成两个,可如下操作:
[root@master replicas-set]$kubectl scale rc nginx --replicas=2
replicationcontroller "nginx" scaled
[root@master replicas-set]$kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-c5nk4 1/1 Running 0 13m
nginx-r2zcm 1/1 Running 0 13m
[root@master replicas-set]$kubectl get rc
NAME DESIRED CURRENT READY AGE
nginx 2 2 2 14m
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
这时看到已经剩下两个了。那么扩容也是一样的,直接扩容就行了。
[root@master replicas-set]$kubectl scale rc nginx --replicas=4
replicationcontroller "nginx" scaled
[root@master replicas-set]$kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-99nns 0/1 ContainerCreating 0 2s
nginx-c5nk4 1/1 Running 0 42m
nginx-fjnrn 0/1 ContainerCreating 0 2s
nginx-r2zcm 1/1 Running 0 42m
[root@master replicas-set]$kubectl get rc
NAME DESIRED CURRENT READY AGE
nginx 4 4 3 42m
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
就这样,非常方便的就实现了扩容等操作了。
上次更新: 2024/06/13, 22:13:45