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