rc控制器与rs控制器

一.rc控制器

replicationcontroller控制器资源,简称:rc控制器

简单理解,rc控制器就是控制相同的pod副本数量

使用rc控制器资源创建pod,就可以设定创建pod的数量

如果 ReplicationController 的标签为空,则这些标签默认为与副本控制器管理的 Pod 相同。 

1.rc控制器资源管理

编辑rc资源清单

[root@master 0720]# cat rc.yaml 
apiVersion: v1
kind: ReplicationController
metadata:
  name: rc
spec:
  replicas: 3
  selector:
    testt: testt
  template:
    metadata:
      name: pod00
      labels:
        testt: testt
    spec:
      containers:
      - name: demo000
        image: nginx:1.20.1-alpine
        ports:
        - containerPort: 80

创建查看rc资源

[root@master 0720]# kubectl apply -f rc.yaml 
replicationcontroller/rc created
[root@master 0720]# kubectl get rc
NAME   DESIRED   CURRENT   READY   AGE
rc     3         3         3       16s

删除rc资源

[root@master 0720]# kubectl delete rc rc
replicationcontroller "rc" deleted

 注:若只pod而不删除rc控制器,pod会重新拉起

rc控制器创建的pod是按照标签进行副本数量控制的

rc控制器资源创建的pod,直接删除pod,还会重新拉起,只有删除rc资源,pod才会消失

修改rc资源,需要重新编rc资源清单,再次apply就可以修改了

2.rc控制器资源实现业务的升级与回滚

·模拟2个版本的镜像

1.第一个镜像
·编辑dockerfile
[root@master 0720]# cat Dockerfile 
FROM nginx:1.20.1-alpine

COPY  code/v1  /usr/share/nginx/html/index.html

CMD   ["/usr/sbin/nginx", "-g", "daemon off;"]
·编辑index文件
[root@master 0720]# cat code/v1
v1: first
·构建镜像推送到harbor仓库
[root@master 0720]# cat 1.sh 
#!/bin/bash
docker login -u admin -p 111aaa.. harbor.test.com

docker image build -t harbor.test.com/test/nginx:v1 .
docker push harbor.test.com/test/nginx:v1
[root@master 0720]# sh 1.sh

2.第二个镜像

· 编辑dockerfile

[root@master 0720]# cat Dockerfile 
FROM nginx:1.20.1-alpine

COPY  code/v2  /usr/share/nginx/html/index.html

CMD   ["/usr/sbin/nginx", "-g", "daemon off;"]

·编辑index文件

[root@master 0720]# cat 1.sh 
#!/bin/bash
docker login -u admin -p 111aaa.. harbor.test.com

docker image build -t harbor.test.com/test/nginx:v2 .
docker push harbor.test.com/test/nginx:v2

·构建镜像推送到harbor仓库

[root@master 0720]# sh 1.sh

·编辑rc、svc资源清单

[root@master 0720]# cat rc.yaml 

apiVersion: v1
kind: ReplicationController
metadata:
  name: rc-nginx
spec:
  #控制pod的副本数量
  replicas: 3
  #选择要创建副本的pod的标签(关联pod标签,把谁的副本设置成n个呀?)
  selector: 
    testa: testa
  #下面就是你要控制的pod了(就是pod资源的编辑);
  template:
    metadata:
      name: pod-nginx
      labels:
        testa: testa
    spec:
      containers:
      - name: c1
        image: harbor.test.com/test/nginx:v1
        ports:
        - containerPort: 80
        command: 
        - "nginx"
        - "-g"
        - "daemon off;"
---
#编辑service资源用于外部访问
apiVersion: v1
kind: Service
metadata:
  name: svc-rc-nginx
spec:
  type: NodePort
  clusterIP: 10.200.10.10
  selector:
    testa: testa
  ports:
  - port: 88
    targetPort: 80
    nodePort: 30001

·创建rc、svc资源

[root@master 0720]# kubectl apply -f rc.yaml 
replicationcontroller/rc-nginx created
service/svc-rc-nginx created
[root@master 0720]# kubectl get pods
NAME             READY   STATUS    RESTARTS   AGE
rc-nginx-hrb5q   1/1     Running   0          7s
rc-nginx-qhlq5   1/1     Running   0          7s
rc-nginx-t6dw7   1/1     Running   0          7s

·浏览器访问

·模拟迭代,换镜像

1.把资源清单中的image镜像从v1换成v2
[root@master 0720]# cat rc.yaml 

apiVersion: v1
kind: ReplicationController
metadata:
  name: rc-nginx
spec:
  #控制pod的副本数量
  replicas: 3
  #选择要创建副本的pod的标签(关联pod标签,把谁的副本设置成n个呀?)
  selector: 
    testa: testa
  #下面就是你要控制的pod了(就是pod资源的编辑);
  template:
    metadata:
      name: pod-nginx
      labels:
        testa: testa
    spec:
      containers:
      - name: c1
        image: harbor.test.com/test/nginx:v2
        ports:
        - containerPort: 80
        command: 
        - "nginx"
        - "-g"
        - "daemon off;"
---
#编辑service资源用于外部访问
apiVersion: v1
kind: Service
metadata:
  name: svc-rc-nginx
spec:
  type: NodePort
  clusterIP: 10.200.10.10
  selector:
    testa: testa
  ports:
  - port: 88
    targetPort: 80
    nodePort: 30001

2.重新执行apply
[root@master 0720]# kubectl apply -f rc.yaml 
replicationcontroller/rc-nginx configured
service/svc-rc-nginx unchanged
3.删除原有pod
[root@master 0720]# kubectl delete pods --all
pod "rc-nginx-hrb5q" deleted
pod "rc-nginx-qhlq5" deleted
pod "rc-nginx-t6dw7" deleted
浏览器查看,发现迭代完成

二.rs控制器

replicaset副本控制器,简称:rs控制器;

        用法:与rc控制器“几乎”相同;

        能力:可以指定pod的副本始终存活,相比于rc控制器;支持标签匹配,也支持标签表达式

        注意:不论是rc还是rs资源,都是通过“标签”惊醒匹配pod的,如果有同样的标签,则算作一个副本

1.rs控制器资源的管理

·基于标签-创建rs资源

1.编辑rs资源清单
[root@master rs]# cat rs.yaml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: rs001
spec:
  #控制pod副本的数量(k8s系统集群中,匹配到标签的数量)
  replicas: 3
  #选择需要创建副本的pod的标签
  selector:
    #声明基于标签匹配pod(这里就是与rc控制器的区别,rc不需要这个资源)
    matchLabels:
      demoo: demoo
  #pod模板,就是编写pod资源
  template:
    metadata:
      name: pod-r
      labels:
        demoo: demoo
    spec:
      containers:
      - name: deemo
        image: harbor.xinjizhiwa.com/test/nginx:v2
        ports:
        - containerPort: 80
        command: ["nginx","-g","daemon off"]
2.创建查看rs资源
[root@master rs]# kubectl apply -f rs.yaml 
replicaset.apps/rs001 created

·基于标签表达式创建rs资源

1.编辑rs资源清单(标签表达式-Exists)
[root@master rs]# cat rs.yaml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: rs001
spec:
  #控制pod副本的数量(k8s系统集群中,匹配到标签的数量)
  replicas: 3
  #选择需要创建副本的pod的标签
  selector:
    #基于标签表达式匹配pod
    matchExpressions:
    - key: demoo
      #指定key和value的关系,4个值可以选择
      #第一个In:只要
      #第二个Notin:只要不..
      #第三个值Exists:只要key匹配成功就行,value可以使任意值;
      #第四个值DoesNotExist:只要不存在指定的key,就算匹配成功
      operator: Exists
  #pod模板,就是编写pod资源
  template:
    metadata:
      name: pod-r
      labels:
        demoo: demoo
    spec:
      containers:
      - name: deemo
        image: harbor.xinjizhiwa.com/test/nginx:v2
        ports:
        - containerPort: 80
        command: ["nginx","-g","daemon off"]
2. 编辑rs资源清单(标签表达式-In
[root@master rs]# cat rs.yaml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: rs001
spec:
  #控制pod副本的数量(k8s系统集群中,匹配到标签的数量)
  replicas: 3
  #选择需要创建副本的pod的标签
  selector:
    #基于标签表达式匹配pod
    matchExpressions:
    - key: demoo
      #指定key和value的关系,4个值可以选择
      #第一个In:只要
      #第二个Notin:只要不..
      #第三个值Exists:只要key匹配成功就行,value可以使任意值;
      #第四个值DoesNotExist:只要不存在指定的key,就算匹配成功
      operator: In
      values:
      - demoo
      - d
  #pod模板,就是编写pod资源
  template:
    metadata:
      name: pod-r
      labels:
        demoo: demoo
    spec:
      containers:
      - name: deemo
        image: harbor.xinjizhiwa.com/test/nginx:v2
        ports:
        - containerPort: 80
        command: ["nginx","-g","daemon off"]

·查看rs资源

[root@master rs]# kubectl apply -f rs.yaml 
replicaset.apps/rs001 created

·删除rs资源

[root@master rs]# kubectl delete rs rs001 
replicaset.apps "rs001" deleted

2.rs资源的升级和回滚

·创建rs与pod资源(v2版本)

1.编辑资源清单
[root@master rs]# cat rs.yaml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: rs001
spec: 
  #控制pod副本的数量(k8s系统集群中,匹配到标签的数量)
  replicas: 3
  #选择需要创建副本的pod的标签
  selector:
    #1,声明基于标签匹配pod(这里就是与rc控制器的区别,rc不需要这个资源)
    matchLabels:
      demo: demo
    #2,基于标签表达式匹配pod
    #matchExpressions:
    #指定标签的key值(:左边的)
    #- key: k8s
      #指定key和value的关系,4个值可以选择
      #第一个In:只要
      #第二个Notin:只要不..
      #第三个值Exists:只要key匹配成功就行,value可以使任意值;
      #第四个值DoesNotExist:只要不存在指定的key,就算匹配成功;
      #operator: Notin
      #指定value的列表
      #values:
      #- a

  #pod模板,就是编写pod资源
  template:
    metadata:
      name: pod-rs
      labels:
        demo: demo
    spec:
      containers:
      - name: c1
        image: harbor.test.com/test/nginx:v2
        ports:
        - containerPort: 80
        command: ["nginx","-g","daemon off;"]
2.创建查看资源
[root@master rs]# kubectl apply -f rs.yaml 
replicaset.apps/rs001 created
[root@master rs]# kubectl get pods -o wide
NAME          READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
rs001-2hprx   1/1     Running   0          15s   10.100.2.70   worker2   <none>           <none>
rs001-bhrkn   1/1     Running   0          15s   10.100.2.71   worker2   <none>           <none>
rs001-hzrhd   1/1     Running   0          15s   10.100.1.52   worker1   <none>           <none>
[root@master rs]# curl 10.100.2.70
v2: second

·将版本镜像回滚到v1

1.修改资源清单
[root@master rs]# cat rs.yaml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: rs001
spec: 
  #控制pod副本的数量(k8s系统集群中,匹配到标签的数量)
  replicas: 3
  #选择需要创建副本的pod的标签
  selector:
    #1,声明基于标签匹配pod(这里就是与rc控制器的区别,rc不需要这个资源)
    matchLabels:
      demo: demo
    #2,基于标签表达式匹配pod
    #matchExpressions:
    #指定标签的key值(:左边的)
    #- key: k8s
      #指定key和value的关系,4个值可以选择
      #第一个In:只要
      #第二个Notin:只要不..
      #第三个值Exists:只要key匹配成功就行,value可以使任意值;
      #第四个值DoesNotExist:只要不存在指定的key,就算匹配成功;
      #operator: Notin
      #指定value的列表
      #values:
      #- a

  #pod模板,就是编写pod资源
  template:
    metadata:
      name: pod-rs
      labels:
        demo: demo
    spec:
      containers:
      - name: c1
        image: harbor.test.com/test/nginx:v1
        ports:
        - containerPort: 80
        command: ["nginx","-g","daemon off;"]
2.重新apply执行清单
[root@master rs]# kubectl apply -f rs.yaml 
replicaset.apps/rs001 configured
3.删除现有rs启动的pod
[root@master rs]# kubectl delete pods --all
pod "rs001-2hprx" deleted
pod "rs001-bhrkn" deleted
pod "rs001-hzrhd" deleted
4.再次查看,全变成v1版本
[root@master rs]# kubectl get pods -o wide
NAME          READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
rs001-bnb5c   1/1     Running   0          16s   10.100.1.53   worker1   <none>           <none>
rs001-gw68s   1/1     Running   0          16s   10.100.1.54   worker1   <none>           <none>
rs001-shdr7   1/1     Running   0          16s   10.100.2.72   worker2   <none>           <none>
[root@master rs]# curl 10.100.1.53
v1: first

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值