kubernetes Pod控制器 -RC/RS控制器

1.控制器概述

1.ReplicationController 和 ReplicaSet 详解

缩写可以 rc 和 rs

创建 1.rc.yaml 

apiVersion: v1
kind: ReplicationController
metadata:
 name: rc-demo
spec:
 replicas: 3
 selector:
   app: rc-demo
 template:
   metadata:
     labels:
       app: rc-demo
   spec:
     containers:
       - name: rc-demo-container
         image: wangyanglinux/myapp:v1.0
         env:
           - name: GET_HOSTS_FROM
             value: dns
           - name: zhangsan
             value: "123"
         ports:
           - containerPort: 80

类别写的是 RC 

不清楚可以执行下面命令

kubectl explain rc

metadata 下面起了rc的名字

spec 起了 RC 的规格 

1.replicas 定义当前的副本数量 

上面定义的是3

pod的数量

2.selector 选择器

匹配的 app:rc-demo

具有app:rc-demo 标签的pod 被我管理

3.template 创建 pod 怎么创建 由他定义

就是怎么创建pod的相关信息

1.metadata

label 定义pod的标签
app:rc-demo 

必须是选择器的子集合才可以

当前选择不是子集合就会报错

2.spec pod规格

1.containers 容器组
1.name容器名
2.image 镜像
3.env 环境变量
4.端口映射
kubectl create -f 1.rc.yaml
kubectl get rc

最重要特性

保证副本值与期望值一致

 他只会根据你服务器的有限资源尽量去尝试满足 

pod 内部容器损坏 和 pod直接没了 是两个概念 

pod 内部容器损坏会根据重启策略 重启内部容器

如果pod直接没了 那么就要靠我们的RC 去重建一个 pod

4.RC是根据 selector 选择器的标签是某个pod的子集来选中pod

1.给pod添加标签

kubectl label pod [pod名] [标签key]=[标签值]
kubectl label pod rc-demo-967m7 version=v1

我们发现我们pod数量没有创建新的也没有减少,说明就是子集来选中的

2.给pod修改标签 

kubectl label pod [pod名] [想要修改标签的key]=[想要修改标签的值]  --overwrite
kubectl label pod rc-demo-scrc7 app=jmj --overwrite

RC又创建了一个新的pod

我们又改回去 发现pod又被控制回三个了 

 优先选择离现在时间最靠近的一个容器 删除

因为运行时间旧的pod 产生更多的数据 给用户连接的数量越多

5.调整RC 副本的数量

kubectl scale rc [rc名字] --replicas=[数量]
kubectl scale rc rc-demo --replicas=10

 

保证当前的pod 数量 与 期望值一致

 新版本用RS取代 RC 

ReplicaSet

2.RS控制器

apiVersion: apps/v1
kind: ReplicaSet
metadata:
 name: rs-ml-demo
spec:
 replicas: 3
 selector:
  matchLabels:
   app: rs-ml-demo
   domain: jmj
 template:
  metadata:
   labels:
    app: rs-ml-demo
    domain: jmj
    version: v1
  spec:
   containers:
    - name: rs-ml-demo-container
      image: wangyanglinux/myapp:v1.0
      env:
        - name: GET_HOSTS_FROM
          value: dns
      ports:
        - containerPort: 80

 

 matchLabels 

那我们的标签内容与pod做子集运算 如果是子集 则匹配

删除也能自动恢复 

 

 1.用匹配表达式匹配标签

selector.matchExpressions
rs 在标签选择器上,除了可以定义键值对的选择形式,还支持 matchExpressions 字段,可以提供多种选择。
目前支持的操作包括:
  1. Inlabel 的值在某个列表中
  2. NotInlabel 的值不在某个列表中
  3. Exists:某个 label 存在
  4. DoesNotExist:某个 label 不存在
apiVersion: apps/v1
kind: ReplicaSet
metadata:
 name: rs-me-exists-demo
spec:
 selector:
  matchExpressions:
   - key: app
     operator: Exists
 template:
  metadata:
   labels:
    app: spring-k8s
  spec:
   containers:
     - name: rs-me-exists-demo-container
       image: wangyanglinux/myapp:v1.0
       ports:
        - containerPort: 80

 没定义副本数量 默认是 1

2.kubernetes 特殊机制

  1. 必须是我控制器创建的pod 才会被我管理
  2. 我的标签还要是被我创建标签的子集
  3. 才会控制管理这些副本pod 

 这里不全对,控制器创建时,会接管符合标签的 Pod,把它算作副本,前提是该 Pod 没被其他控制器接管。

kubectl label pod rs-me-exists-demo-r5jxv app=jmj --overwrite

但是我们的rs控制器并没有创建新的pod出来,说明匹配了key

 3.不用子集匹配创建pod 就会报错

apiVersion: apps/v1
kind: ReplicaSet
metadata:
 name: rs-me-in-demo
spec:
 selector:
  matchExpressions:
   - key: app
     operator: In
     values:
      - spring-k8s
      - hahahah
 template:
  metadata:
   labels:
    app: sg-k8s
  spec:
   containers:
     - name: rs-me-in-demo-container
       image: wangyanglinux/myapp:v1.0
       ports:
         - containerPort: 80

如果不报错 ,那么就会无线创建 BUG

 所以新版本就会报错

apiVersion: apps/v1
kind: ReplicaSet
metadata:
 name: rs-me-in-demo
spec:
 selector:
  matchExpressions:
   - key: app
     operator: In
     values:
      - spring-k8s
      - hahahah
 template:
  metadata:
   labels:
    app: hahahah
  spec:
   containers:
     - name: rs-me-in-demo-container
       image: wangyanglinux/myapp:v1.0
       ports:
         - containerPort: 80

有一个东西隐含很重要 

因为这个pod被RS抛弃了,变成了孤儿Pod,所以就会被其他RS控制器接管 

通过标签匹配可以对不同的 service 提供给用户 做负载均衡

 3.清空实验资源

清楚RC 

kubectl delete rc --all

清楚RS 

kubectl delete rs --all

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值