K8s 的ReplicaController ReplicaSe

作者: AlienPaul | 来源:发表于2020-02-17 18:56 被阅读0次

    什么是ReplicationController

    ReplicationController是k8s的一种资源对象,能够保证指定数量的pod处于运行状态。如果pod由于某些原因挂掉,ReplicationController会立刻启动新的pod,使得同时运行的pod数量满足配置中的要求。

    ReplicationController的三个组成部分

    • Label selector
    • Replica count
    • Pod template

    ReplicationController的描述文件

    一个ReplicationController的描述文件样例如下:

    apiVersion: v1
    kind: ReplicationController
    metadata:
        name: kubia
    spec:
        replicas: 3
        selector:
            app: kubia # 可以不提供这一行,ReplicationController会使用template创建新的pod
    template:
        metadata:
            labels:
            app: kubia
        spec:
            containers:
            - name: kubia
              image: luksa/kubia
              ports:
              - containerPort: 8080
    

    ReplicationController的相关操作

    创建ReplicationController

    kubectl create -f my-replication-controller.yaml
    

    获取ReplicationController

    kubectl get rc
    

    显示某个ReplicationController的详情信息

    kubectl describe rc kubia
    

    修改某个ReplicationController的配置

    kubectl edit rc kubia
    

    修改ReplicationController的pod副本数

    kubectl scale rc kubia --replicas=10
    

    删除ReplicationController

    # 删除rc,但是它创建的pod扔保持运行
    kubectl delete rc kubia --cascade=false
    
    # 删除rc,pod也删除
    kubectl delete rc kubia
    

    ReplicaSet

    ReplicaSet使用pod selector指定一组pod。负责维持一定数量的pod运行。pod运行数量少于预期的时候会使用pod template创建pod,pod运行数量多于预期的时候会删除掉多余的pod。

    一个pod被ReplicaSet关联之后,它的属性中会增加metadata.ownerReferences

    如果一个pod的label匹配ReplicaSet的pod selector,同时这个pod没有ownerReferences或者ownerReferences不是Controller,这个pod会立刻被此ReplicaSet管理。

    Replica Set相比 Replication Controller支持更复杂的label selector。

    ReplicaSet的描述文件

    一个ReplicaSet描述文件的样板如下所示:

    apiVersion: apps/v1beta2
    kind: ReplicaSet
    metadata:
        name: kubia
    spec:
        replicas: 3
        selector:
            matchLabels:
                app: kubia
        template:
            metadata:
                labels:
                    app: kubia
            spec:
                containers:
                - name: kubia
                  image: luksa/kubia
    

    ReplicaSet的相关操作

    获取所有的replicaSet

    kubectl get rs
    

    获取replicaSet的信息

    kubectl describe rs
    

    获取名字为kubia的replicaSet的信息

    kubectl describe rs/kubia
    

    ReplicaSet和Horizontal Pod Autoscaler

    创建HPA描述文件:

    apiVersion: autoscaling/v1
    kind: HorizontalPodAutoscaler
    metadata:
      name: frontend-scaler
    spec:
      scaleTargetRef:
        kind: ReplicaSet
        name: frontend
      minReplicas: 3
      maxReplicas: 10
      targetCPUUtilizationPercentage: 50
    

    HPA会监视CPU的利用率,动态调整ReplicaSet的replicas数量(3-10之间),直到CPU利用率为50%

    以上配置等效于如下命令:

    kubectl autoscale rc frontend --min=3 --max=10 --cpu-percent=50
    

    删除replicaSet

    kubectl delete rs kubia
    

    更复杂的选择器

    Replica支持更加复杂的选择器。如下所示:

    selector:
        matchExpressions:
        - key: app
          operator: In
          values:
            - kubia
    
    • In:key对应的value必须包含values中给定的值。
    • NotIn:key对应的value必须不包含values中给定的值。
    • Exists:给定的key必须存在,不用再指定values。
    • DoesNotExist:给定的key必须不存在,不用再指定values。

    DaemonSet

    DaemonSet管理的Pod在集群中所有节点运行,且对于同一个节点只会启动一个。DaemonSet的replica数量为集群节点的数量,无法更改。DaemonSet的这个特性非常适合运行一些类似于节点状态监控的服务。

    DaemonSet的描述文件

    一个DaemonSet的例子如下:

    apiVersion: apps/v1beta2
    kind: DaemonSet
    metadata:
        name: ssd-monitor
    spec:
        selector:
            matchLabels:
                app: ssd-monitor
    template:
        metadata:
            labels:
                app: ssd-monitor
        spec:
            nodeSelector:
                disk: ssd
            containers:
            - name: main
              image: luksa/ssd-monitor
    

    DaemonSet的相关操作

    获取daemon set信息

    kubectl get ds
    

    其余的命令和ReplicaSet,ReplicationController一致,不再赘述。

    Job

    Job 是一种特殊的controller,job期待着它控制的pod内的container运行成功后停止。不像是其他controller,pod停止运行后会自动重启。但是如果job控制的pod异常退出,job的默认行为会重启这个pod,直到任务运行成功,或者是累计失败一定的次数后停止。

    Job的描述文件

    一个Job描述文件的例子如下:

    apiVersion: batch/v1
    kind: Job
    metadata:
        name: batch-job
    spec:
        template:
            metadata:
                labels:
                    app: batch-job
            spec:
                restartPolicy: OnFailure
                containers:
                - name: main
                  image: luksa/batch-job
    

    和之前介绍的几个controller不同的是。Job的restart policy 不能使用always。
    可以使用的值为onFailure(默认值)和Never。

    Job的相关操作

    获取job的信息

    kubectl get jobs
    

    查看运行完成的pod

    kubectl get po -a
    

    Job的高级配置

    配置job需要完成多次(串行执行)

    apiVersion: batch/v1
    kind: Job
    metadata:
        name: multi-completion-batch-job
    spec:
        completions: 5
        template:
            ...
    

    允许job并行执行

    apiVersion: batch/v1
    kind: Job
    metadata:
        name: multi-completion-batch-job
    spec:
        completions: 5
        parallelism: 2
        template:
            ...
    

    动态修改job的并行度

    kubectl scale job multi-completion-batch-job --replicas 3
    

    限制job完成最大耗时

    配置job的pod spec中的activeDeadlineSeconds属性

    job失败前最大重试次数

    配置pod的spec.backoffLimit。如果Job执行失败超过这个次数,Job会失败,不再重新启动。

    cronjob定时任务

    一个例子如下:

    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
        name: batch-job-every-fifteen-minutes
    spec:
        schedule: "0,15,30,45 * * * *"
        jobTemplate:
            spec:
                template:
                    metadata:
                        labels:
                            app: periodic-batch-job
                    spec:
                        restartPolicy: OnFailure
                        containers:
                        - name: main
                          image: luksa/batch-job
    

    周期性定时任务的关键配置是schedule配置项。
    Schedule配置项后每个数字分别对应着:

    1. Minute
    2. Hour
    3. Day of month
    4. Month
    5. Day of week

    定时任务最大启动延迟时间

    定时任务最大启动延迟时间配置项为startingDeadlineSeconds。超过这个时间未启动成功,job会被标记为失败。

    apiVersion: batch/v1beta1
    kind: CronJob
    spec:
        schedule: "0,15,30,45 * * * *"
        startingDeadlineSeconds: 15
        ...
    

    相关文章

      网友评论

        本文标题:K8s 的ReplicaController ReplicaSe

        本文链接:https://www.haomeiwen.com/subject/vhlifhtx.html