ReplicationController 与 ReplicaSet、DaemonSet (RC&RS、DS)


    RC作用:
        1、确保一个pod(或多个pod副本)持续运行,方法是在现有pod丢失时启动一个新pod
        2、集群节点发送故障时,它将故障节点上运行的所有pod创建替代副本(故障迁移)
        3、实现pod自动水平伸缩。(手动或者自动)都可以
    RC主要分为三部分:
        1、label selector (标签选择器)、用于确定RC作用域中有哪些pod
        2、replica count (副本个数)、 指定运行的pod数量
        3、pod template (pod模板)、 用于创建新的pod副本

    RC创建示例: kubia-re.yaml

        apiVersion: v1
        kind: ReplicationControlier        #定义配置为RC
        metadata:
            name: kubia      #rc名称
        spec:    
            replicas: 3     #pod实例数目
            selector:
                app: kubia    #pod选择器,决定了RC的操作对象
            template:                        #
                metadata:                    #   创建新pod所用的pod模板
                  labels:                    #
                      app: kubia                #
                spec:                        #
                  containers:                #
                  - name: kubia             #
                    image: lukasa/kubia     #
                    ports:                    #
                    - containerPort: 8080   #

        k8s 会创建一个名为kubia的新的rc,它确保符合标签选择器app=kubia的pod实例始终是三个,模板中pod标签必须和
            RC的标签选择器匹配,否则控制器将无休止的创建新容器。
        注:可以在RC中不指定POD选择器,让K8S在pod 模板中提取。

        编写完模板后执行 kubectl create -f kubia-rc.yaml 创建POD

        常用命令:
            获取RC信息:
                kubectl get rc 
            显示RC详细信息:
                kubectl describes rc kubia #显示名为kubia的详细信息
        pod迁入或迁出RC的作用域
            通过更改pod标签可以将它从RC的作用域中添加或者删除甚至从一个RC迁移到另一个RC中。
            给RC管理的pod添加标签:
                kubectl label pod kubia-dmdck type=special #给名为kubia-dmdck的容器添加新标签为type=special,原有的标签不会改变。
            更改已托管的pod的标签:
                kubectl label pod kubia-dmdck app=foo --overwrite #将kubia-dmdck pod标签改为app=foo, --overwrite 参数必须要,否则只打印警告并不会变更。
            根据标签查看pod:
                kubectl get pods -L app   #-L  查看名为app的标签
            编辑RC模板:
                kebectl edit rc kubia #编辑kubia的配置文件
            RC扩容:
                kubectl scale rc kubia --relicas=10 #扩容kubia pod副本为10个,扩容和缩减只需改--relicas=N
            删除RC:
                
                kubectl delete rc kubia     #删除RC的同时,pod也会被删除。
                kubectl delete rc kubia --cascade=false #删除RC时 pod不被删除,pod变成独立运行。

replicaSet(rs)与replicationCtontroller (rc)
                RS是RC的替代版本,在功能上RS要比RC强大,比如RC无法将pod标签env=production和env=devel标签的pod同时匹配,但RS可以将两组pod视为一个大组。

            定义ReplicaSet
            apiVersion: apps/v1beta2  #不是v1版本api的一部分,但属于apps api在的v1beta2版本
            kind: ReplicaSet        #定义配置为RS
            metadata:
              name: kubia      #RS名称
            spec:    
              replicas: 3     #pod实例数目
              selector:
                matchLabels:   #使用了更简单的matchlabels选择器,类似于RC选择器
                  app: kubia    #选择器名称
            template:                        #
                metadata:                    #   该模板与RC中的相同
                  labels:                    #
                      app: kubia                #
                spec:                        #
                  containers:                #
                  - name: kubia             #
                    image: lukasa/kubia     #
                    ports:                    #
                    - containerPort: 8080   #

            需要注意,RS不在是v1 API的一部分,在创建资源的时候指定正确的apiVersion,RS 与RC的内容大致相同,唯一不同的就是不必在selector属性中直接列出pod需要的标签,而是在
            selector.matchLabels下指定。
            显示RS信息:
                kubectl get rs 
                kubectl describe rs 
            使用RS matchExpressions 更强大的选择器。
                示例:
                    selector:
                      matchExpressions:   
                        - key: app   #此选择要求该pod名为"app"的标签
                          operator: In
                          values:
                            - kubia  #标签的值必须是 "kubia"
            可以给选择器添加额外的表达式,例如每个表达式必须包含一个key一个operator(运算符),并且可能还有一个values的列表(取决于运算符)
            常见四个运算符:
                In: Label的值必须与妻子一个指定的values匹配
                NotIn: Label的值与任何指定的values匹配
                Exists: POD必须包含一个指定的名称的标签(值不重要)使用此运算符时,不应指定values字段。
                DoesNotExist: pod不得包含指定名称的标签。

daemonset 在每个节点上运行一个pod
          daemonset将pod部署到集群中的所有节点上,除非指定这些pod只在部分节点运行,通过pod模板中的nodeSelector属性指定。
          示例:
              创建一个daemonset 部署在标记为disk: ssd的node节点上。
              apiVersion: apps/v1beta2     #Daemonset 在apps的api组中,版本是v1beta2
              kind: DaemonSet
              metadata:
                name: ssd-monitor
              spec:
                selector:
                  matchLabels:
                    app: ssd-monitor
              template:
                metadata:
                  labels:
                    app: ssd-monitor
                spec:
                  nodeSelector:                     #pod模板中包含一个节点选择器,会选择有disk=ssd标签
                    disk: ssd                        #的节点。
                  containers:
                  - name: main
                    image: luksa/ssd-monitor 
             
             kubectl create -f ssd-monitor-daemonset.yaml  #创建daemon  pod
             kubectl get  ds   #查看daemonset
             如果创建后 ssd-monitor pod 显示为0 执行kubectl get po 查看是否有pod
             kubectl get node  #查看node节点是否有  disk: ssd 标签
             kubectl  label node minikube(node名称) disk=ssd  #给节点添加标签

             变更node节点标签:
             kubectl label node minikube disk=hdd  --overwrite 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值