• k8s-pod的资源控制器类型


    k8s-资源控制器类型

    1 RS(ReplicaSet)和deployment

    1.1 RC (ReplicationController )

    主要的作用就是用来确保容器应用的副本数始终保持在用户定义的副本数 。即如

    果有容器异常退出,会自动创建新的Pod来替代;而如果异常多出来的容器也会自动回收

    Kubernetes 官方建议使用 RS(ReplicaSet ) 替代 RC (ReplicationController ) 进行部署,RS 跟 RC 没有本质的不同,只是名字不一样,并且 RS 支持集合式的 selector

     

    实例:

     

    apiVersion: extensions/v1beta1
    kind: ReplicaSet
    metadata:
      name: frontend
    spec:
      replicas: 3
      selector:
        matchLabels:
          tier: frontend
      template:
        metadata:
          labels:
            tier: frontend
        spec:
          containers:
          - name: myapp
            image: wangyanglinux/myapp:v2
            env:
            - name: GET_HOSTS_FROM
              value: dns
            ports:
            - containerPort: 80
    

     

    特性: rc模式如果更新,需要更改配置文件的镜像地址,然后apply一下,但是发现pod还是么有更新,需要手动删除原有的pod,才可以自己更新,相比于deployment不是全自动的。

    1.2 删除rs

     

    [root@k8s-master01 yaml]# kubectl delete rs/frontend
    replicaset.extensions "frontend" deleted
    

     

    2 deployment

    定义Deployment来创建Pod和ReplicaSet

    滚动升级和回滚应用

    扩容和缩容

    暂停和继续Deployment

    实例:

     

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 3
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: wangyanglinux/myapp:v2
            ports:
            - containerPort: 80
    
    
    
    • 扩容

     

    kubectl scale deployment nginx-deployment --replicas 10
    
    • 更新镜像地址

     

    kubectl set image  deployment/nginx-deployment nginx=wangyanglinux/myapp:v3
    
    #也可以直接编辑
    kubectl edit deployment/nginx-deployment
    

     

    • 回滚

     

    kubectl rollout undo deployment/nginx-deployment
    
    

    2.1 删除deployment

     

    root@k8s-master01 yaml]# kubectl delete deploy --all
    deployment.extensions "nginx-deployment" deleted
    

     

    3 Daemonset

    DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们新增一

    个 Pod 。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod

    使用 DaemonSet 的一些典型用法:

    运行集群存储 daemon,例如在每个 Node 上运行 glusterd 、 ceph

    在每个 Node 上运行日志收集 daemon,例如 fluentd 、 logstash

    在每个 Node 上运行监控 daemon,例如 Prometheus Node Exporter、 collectd 、Datadog 代理

    实例:

     

    里面并没有指定副本数量,因为daemonset默认是每个node节点上都创建一个pod

     

     

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: deamonset-example
      labels:
        app: daemonset
    spec:
      selector:
        matchLabels:
          name: deamonset-example
      template:
        metadata:
          labels:
            name: deamonset-example
        spec:
          containers:
          - name: daemonset-example
            image: wangyanglinux/myapp:v1
    
    
    

    3.1 查看daemonset

    [root@k8s-master01 yaml]# kubectl get daemonset
    NAME                DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    deamonset-example   2         2         2       2            2           <none>          31s
    
    

     

    每个node节点都会运行一个pod

    [root@k8s-master01 yaml]# kubectl get pod -o wide
    NAME                      READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
    deamonset-example-s9zsw   1/1     Running   0          40m   10.244.1.109   k8s-node1   <none>           <none>
    deamonset-example-wlxm2   1/1     Running   0          40m   10.244.2.7     k8s-node2   <none>           <none>
    

    4 job

    Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束

    spec.template格式同Pod

    RestartPolicy仅支持Never或OnFailure

    单个Pod时,默认Pod成功运行后Job即结束

    .spec.completions 标志Job结束需要成功运行的Pod个数,默认为1

    .spec.parallelism 标志并行运行的Pod的个数,默认为1

    spec.activeDeadlineSeconds 标志失败Pod的重试最大时间,超过这个时间不会继续重试

     

    实例

     

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi
    spec:
      template:
        metadata:
          name: pi
        spec:
          containers:
          - name: pi
            image: perl
            command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
          restartPolicy: Never
    
    

     

    4.1 查看job任务

    4.2 删除job的pod

     

    kubectl delete pod  pi-w7sr8
    

    4.3 删除job

     

    [root@k8s-master01 yaml]# kubectl delete job pi
    job.batch "pi" deleted
    
    

     

    5 cronjob

    在给定时间点只运行一次

    周期性地在给定时间点运行

     

    CronJob Spec
    .spec.schedule :调度,必需字段,指定任务运行周期,格式同 Cron
    .spec.jobTemplate :Job 模板,必需字段,指定需要运行的任务,格式同 Job
    .spec.startingDeadlineSeconds :启动 Job 的期限(秒级别),该字段是可选的。如果因为任何原因而错
    过了被调度的时间,那么错过执行时间的 Job 将被认为是失败的。如果没有指定,则没有期限
    .spec.concurrencyPolicy :并发策略,该字段也是可选的。它指定了如何处理被 Cron Job 创建的 Job 的
    并发执行。只允许指定下面策略中的一种:
    Allow (默认):允许并发运行 Job
    Forbid :禁止并发运行,如果前一个还没有完成,则直接跳过下一个
    Replace :取消当前正在运行的 Job,用一个新的来替换
    注意,当前策略只能应用于同一个 Cron Job 创建的 Job。如果存在多个 Cron Job,它们创建的 Job 之间总
    是允许并发运行。
    .spec.suspend :挂起,该字段也是可选的。如果设置为 true ,后续所有执行都会被挂起。它对已经开始
    执行的 Job 不起作用。默认值为 false 。
    .spec.successfulJobsHistoryLimit 和 .spec.failedJobsHistoryLimit :历史限制,是可选的字段。它
    们指定了可以保留多少完成和失败的 Job。默认情况下,它们分别设置为 3 和 1 。设置限制的值为 0 ,相
    关类型的 Job 完成后将不会被保留。
    
    

     

    5.1 查看cronjob的信息

     

     

    查看pod日志

     

    [root@k8s-master01 yaml]# kubectl log hello-1584433800-4bfc4
    log is DEPRECATED and will be removed in a future version. Use logs instead.
    Tue Mar 17 08:30:25 UTC 2020
    Hello from the Kubernetes cluster
    
    
    

     

    5.2 删除cronjob

     

    [root@k8s-master01 yaml]# kubectl delete cronjob --all
    cronjob.batch "hello" deleted
    
    
    

    6 StatefulSet

    statefulset见:https://www.cnblogs.com/huningfei/p/12704794.html

     

     

  • 相关阅读:
    Java修饰符/关键字
    深入理解Java面向对象三大特性 封装 继承 多态
    BUG为什么越改越多,越改越乱
    DDMS调试Virtual Box android虚拟机
    android开发之android虚拟机配置
    使用cordova 出现Error: The provided path is not Android project.
    Javascript与Flex AS3的交互
    [Ljava.lang.String; cannot be cast to java.lang.String错误
    使用Flex4的PopUpManager的addPopUp() 方法弹出 removeChild异常的解决办法
    Flex 4 不同主题下容器子元素的管理方法
  • 原文地址:https://www.cnblogs.com/huningfei/p/12704846.html
Copyright © 2020-2023  润新知