删除匹配所有key_K8S动手教程3.2:rc删除,水平缩放,ReplicaSet

内容摘要

rc删除

rc水平缩放

ReplicaSet


测试环境

创建两节点K8S集群。


rc水平缩放

上一节我们讲到了rc的副本数,该副本数可以在rc运行时修改,可以增加也可以减少,这就是rc的水平缩放特性。

我们仍旧使用上一节的测试容器镜像,rc的配置如下:

apiVersion: v1kind: ReplicationControllermetadata: name: myrcspec: replicas: 3 selector: app: myrc template: metadata: labels: app: myrc spec: containers: - name: rcimage image: huqianakls/rc_image:latest ports: - containerPort: 8080

创建该rc,查询Pod,结果为:

84a04436e6b7da91b245615f98349940.png

1、修改rc的replicas属性,将副本数量增加到5

使用kubectl edti rc 命令修改,修改后,查询Pod,结果如下:

fa7b4b3475b1e6b87fba1acb42b183a9.png

副本数量增加了2个。


2、修改rc的replicas属性,将副本数量减少到3

仍旧使用kubectl edit rc命令修改,查询Pod,结果如下:

ee02b3dcae8152c461b7fb32c6060e51.png

rc停止了两个Pod,数量减少到3个。

除了使用上面修改rc的方式实现水平缩放,还可以使用如下命令:

kubectl scale rc rc名称 --replicas=副本数量

下面我们使用这个命令来实验下能否将副本数减少到0,运行结果如下:

a636207895db6841ec7831c43a050c97.png

可以看到,所有的Pod都被停止了。

这种方式可以实现删除Pod,不删除rc。


rc删除

rc删除方式如下:

1、kubectl delete -f rc的yaml文件

2、kubectl delete rc rc名称

上述两种方式比较简单,大家自己测试。

如何在删除rc的时候不想删除Pod如何做呢?

使用--cascade= false参数可以做到这一点,下面我们实验一下:

首先将前面的rc副本数增加到3,命令为:

kubectl scale rc myrc --replicas=3

带Pod状态变为Running后,执行如下命令:

kubectl delete rc myrc --cascade=false

查询rc:

cb1d0cffaaa04366c4f0bc0ed7da8da4.png

rc被成功删除。

查询Pod:

226b4013fe76e5854b0f93ddb24d7a8b.png

Pod还在,没有删除。


在rc删除,Pod没有删除时,我们可以再次新建rc,rc不会新建Pod,而是和已有的Pod匹配。下面实验一下:

使用kubectl create -f 命令创建,查询rc:

7486a5a1fe12ecb914bd99665cc96854.png

查询Pod:

b7b735b2fe132556c0ea43ef410c0323.png

没有新建Pod,还是先前的Pod。


ReplicaSet

rc是第1代副本控制器,后来K8S又提供了ReplicaSet,下面简称rs。rs比rc要更加先进,主要体现在Pod选择器属性上,rs具有更加灵活的Pod标签匹配机制。rs将会完全替换rc,rc最终要被废弃。

下面我们通过实验来展示一下rs标签匹配机制的强大。

创建上面的rc,之后再使用--cascade=false参数删除该rc,这样系统中就有3个不受rc约束的Pod了。3个Pod信息如下:

89abcf20e8cdc919b792964c6c489f41.png

下面我们创建一个rs,先来个简单的,rs配置如下:

apiVersion: apps/v1beta2kind: ReplicaSetmetadata: name: myrsspec: replicas: 3 selector: matchLabels: app: myrc template: metadata: labels: app: myrc spec: containers: - name: rs image: huqianakls/rc_image:latest

说明:

1、由于3个Pod的标签是app=myrc,所有这里还是使用它;

2、第1个spec下的selector中,使用了matchLabels属性,这是rc没有的,这里的配置的和先前的rc一样;

3、请注意kind和apiVerson;

创建rs,查询rs和Pod:

0dd92ce024dd07fbb7400208fcbbe909.png

可以看到3个Pod和我们新建的rs匹配成功。


查询rs详情,命令为:

kubectl describe rs myrs
46c4b66be8c4dcb5cb760f32e5f94100.png

Events显示,没有新建Pod。

rs还支持更加复杂的表达式,比如:

apiVersion: apps/v1beta2kind: ReplicaSetmetadata: name: myrsspec: replicas: 3 selector: matchExpressions: - key: app operator: In values: - myrc template: metadata: labels: app: myrc spec: containers: - name: rs image: huqianakls/rc_image:latest

说明:

1、上面的Pod选择器变成了一个表达式,表示app这个key的值可以是myrc,values属性是一个数组,因此可以指定多个值,In表示在某个集合中,是一个逻辑运算符;

2、rs支持的逻辑运算符包括:

In:表示key的值必须与至少一个values中的项匹配;

NotIn:表示key的值与任何values中的项都不匹配;

Exists:表示Pod必须存在某个key才能和rs匹配;

DoesNotExist:表示Pod必须不存在某个key才能和rs匹配;


下面我们实验下这些表达式:

1、创建上面的rs

先删除先前创建rs,使用--cascasde=false参数,只删除rs,不删除Pod,结果如下图:

b2722f962816c0c6bae052118d12495b.png

创建上面的rs,结果如下:

2fbe3ef273f8341627eab8d66355f1cd.png

可以看到和已有的Pod匹配成功。

下面我们在做个实验,rs改为如下配置:

apiVersion: apps/v1beta2kind: ReplicaSetmetadata: name: myrsspec: replicas: 3 selector: matchExpressions: - key: app operator: Exists  template: metadata: labels: app: myrc spec: containers: - name: rs image: huqianakls/rc_image:latest

说明:将operator改为Exists,匹配规则变为存在app标签。

先删除上面的rs,同样不删除Pod,之后创建rs,结果如下:

ba33f98e2b3c18dd8bf24b13a1e895f6.png

匹配成功。

其他表达式大家可以自行测试。


实验

1、创建rc,测试水平缩放;

2、创建rs;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值