Kubernetes基础:RC(Replication Controller) vs RS(Replica Set)的使用方式

RC(Replication Controller)是早期Kubernetes版本提供的Pod,在现在版本中已经被建议使用Replica Set所代替(准确地说是使用Deployment配合ReplicaSet进行替代),这篇文章就二者的区别以使用方式进行介绍。

使用示例: RC

首先我们通过一个简单的示例来看一下RC的使用方式。YAML设定文件如下所示:

[root@host131 ReplicaSet]# cat busybox-rc.yaml 
---
apiVersion: v1
kind: ReplicationController
metadata:
  name: test-rc
spec:
  replicas: 1
  selector:
    app: busybox-pod
  template:
    metadata:
      name: busybox
      labels:
        app: busybox-pod
    spec:
      containers:
      - name: busybox-host
        image: busybox:latest
        command: ["sleep"]
        args: ["1000"]
...
[root@host131 ReplicaSet]#

RC生成和结果确认

[root@host131 ReplicaSet]# kubectl create -f busybox-rc.yaml 
replicationcontroller/test-rc created
[root@host131 ReplicaSet]# 
[root@host131 ReplicaSet]# kubectl get rc -o wide
NAME      DESIRED   CURRENT   READY   AGE   CONTAINERS     IMAGES           SELECTOR
test-rc   1         1         1       8s    busybox-host   busybox:latest   app=busybox-pod
[root@host131 ReplicaSet]# 
[root@host131 ReplicaSet]# kubectl get pods -o wide
NAME            READY   STATUS    RESTARTS   AGE   IP             NODE              NOMINATED NODE   READINESS GATES
test-rc-t4t57   1/1     Running   0          15s   10.254.152.5   192.168.163.131   <none>           <none>
[root@host131 ReplicaSet]# kubectl exec -it test-rc-t4t57 sh
/ # hostname
test-rc-t4t57
/ # ps -ef
PID   USER     TIME  COMMAND
    1 root      0:00 sleep 1000
   11 root      0:00 sh
   17 root      0:00 ps -ef
/ #

使用示例: RS

我们直接将上述RC的YAML文件进行修改来生成RS的YAML文件,来确认一下两者的区别,首先直接修改Kind

[root@host131 ReplicaSet]# kubectl create -f busybox-rs.yaml 
error: unable to recognize "busybox-rs.yaml": no matches for kind "ReplicaSet" in version "v1"
[root@host131 ReplicaSet]# 

RS在apps/v1,修改之后继续确认,spec规格中需要添加selector

[root@host131 ReplicaSet]# diff busybox-r*
2,3c2,3
< apiVersion: v1
< kind: ReplicationController
---
> apiVersion: apps/v1
> kind: ReplicaSet
[root@host131 ReplicaSet]# kubectl create -f busybox-rs.yaml 
error: error validating "busybox-rs.yaml": error validating data: ValidationError(ReplicaSet.spec.selector): unknown field "app" in io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector; if you choose to ignore these errors, turn validation off with --validate=false
[root@host131 ReplicaSet]#

进行如下修改,添加matchLabels即可,这里将name也进行修改

[root@host131 ReplicaSet]# diff busybox-r*
2,3c2,3
< apiVersion: v1
< kind: ReplicationController
---
> apiVersion: apps/v1
> kind: ReplicaSet
5c5
<   name: test-rc
---
>   name: test-rs
9c9,10
<     app: busybox-pod
---
>     matchLabels:
>       app: busybox-pod
[root@host131 ReplicaSet]# 

YAML文件详细如下:

[root@host131 ReplicaSet]# cat busybox-rs.yaml 
---
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: test-rs
spec:
  replicas: 1
  selector:
    matchLabels:
      app: busybox-pod
  template:
    metadata:
      name: busybox
      labels:
        app: busybox-pod
    spec:
      containers:
      - name: busybox-host
        image: busybox:latest
        command: ["sleep"]
        args: ["1000"]
...
[root@host131 ReplicaSet]#

RS生成和结果确认

[root@host131 ReplicaSet]# kubectl get rs -o wide
NAME      DESIRED   CURRENT   READY   AGE   CONTAINERS     IMAGES           SELECTOR
test-rs   1         1         1       7s    busybox-host   busybox:latest   app=busybox-pod
[root@host131 ReplicaSet]# 
[root@host131 ReplicaSet]# kubectl get pod -o wide
NAME            READY   STATUS    RESTARTS   AGE   IP             NODE              NOMINATED NODE   READINESS GATES
test-rs-vfcdw   1/1     Running   0          15s   10.254.152.5   192.168.163.131   <none>           <none>
[root@host131 ReplicaSet]# 
[root@host131 ReplicaSet]# kubectl exec -it test-rs-vfcdw sh
/ # hostname
test-rs-vfcdw
/ # ps -ef
PID   USER     TIME  COMMAND
    1 root      0:00 sleep 1000
    6 root      0:00 sh
   12 root      0:00 ps -ef
/ #

总结

可以看到RC和RS的基本使用方式大体一致,只需要改一下Kind和selector即可,另外RS虽然可以创建并使用,但是在实际中更多情况则是直接使用Deployment。

参考内容

https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/
https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/

发布了1084 篇原创文章 · 获赞 1299 · 访问量 402万+

猜你喜欢

转载自blog.csdn.net/liumiaocn/article/details/104188898