• 常用工作控制器


     一.工作控制器是什么

    工作控制器(Workload  Controller)是k8s的一个抽象概念,用于更高层次对象,部署和管理pod
    
    常用工作负载控制器:
    • Deployment:无状态应用部署
    • StatefulSet:有状态应用部署
    • DaemonSet:确保所有Node运行同一个pod
    • Job:一次性任务
    • Cronjob:定时任务

    控制器的作用:

    • 管理pod对象  
    • 使用标签与pod关联
    • 控制器实现了pod的运维:例如滚动更新、伸缩、副本管理、维护pod状态

    二、Deployment

    功能:
        管理pod和ReplicaSet
        具有线上部署、副本设定、滚动升级、回滚等功能
        提供声明式更新,例如更新一个新的image
    
    应用场景:
        网站  api 微服务

    PS:
      Deployment并不直接操纵Pod,而是操纵Replicaset对象

      ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。
      kubectl get rs -o yaml 可以看到对应的replicaset对象的yaml

     1.部署(根据事先定义好的yaml)

    apiVersion: apps/v1
    kind: Deployment            # 控制器类型
    metadata:
      name: web
      namespace: default
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx           # 与pod的标签一一致
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: web
            image: nginx:1.15 
            #####此处可以定义各种调度策略#############

    通过expose暴露出去,让外部访问

    kubectl expose deployment web --port=8080 --target-port=80 --type=NodePort

    2.滚动升级

    • kubectl apply -f xxx.yaml               # 修改yaml文件里的镜像版本
    • kubectl set image deployment/web nginx=nginx:1.16 --record  # set image 指定对应镜像的版本  container_name=镜像版本  deployment/deployment-name
    • kubectl edit deployment/web         #通过edit命令进行修改image版本

    滚动更新策略:
    spec:
      replicas: 3
      revisionHistoryLimit: 10 # RS历史版本保存数量
      selector:
        matchLabels:
          app: nginx
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25% 
        type: RollingUpdate


    ########
    maxSurge:滚动更新过程中最大的pod副本数,确保在更新时启动的pod数量比期望(replicas)pod数量最大多出25%
    maxUnavailable:滚动更新过程中最大的不可用pod副本数。确保在更新时最大25%pod数量不可用,即75的pod数量是可用状态

    3.水平扩缩容

    水平扩缩容(启动多实例,提高并发)
        • 修改yaml里replicas值,再apply
        • kubectl scale deployment web --replicas=10

    ###replicas控制副本数量,总共副本数量,不是在当前基础上+或者-

    4.回滚

    回滚(发布失败恢复正常版本)
        kubectl rollout history deployment/web # 查看历史发布版本
        kubectl rollout undo deployment/web # 回滚上一个版本
        kubectl rollout undo deployment/web --to-revision=2 # 回滚历史指定版本
    
    注:回滚是重新部署某一次部署时的状态,即当时版本所有配置
    ###实际生产中,原生的回滚功能用的不多,回滚的版本一般都是研发来定的

    4.下线

    kubectl delete svc web     # 删除
    kubectl delete -f nginx-deployment.yaml  #删除控制器下线

    ##### replicaSet

    三.DaemonSet

    DaemoSet的功能:
    • 在没一个node上运行一个pod
    • 新加入的node也同样自动运行一个pod

    应用场景: 网络插件(kube-proxy、calico)、其他agent(监控、日志采集等)

    支持滚动升级

    [root@k8s-master yaml]# kubectl get daemonset -n kube-system filebeat -o yaml |grep Roll
    type: RollingUpdate

    示例:在mater上及每个节点上部署一个日志采集程序

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: filebeat
      namespace: kube-system
    spec:
      selector:
        matchLabels:
         name: filebeat
      template:
        metadata:
          labels:
            name: filebeat
        spec:
          tolerations: # 配置master污点容忍
          - key: node-role.kubernetes.io/master       
            effect: NoSchedule
          containers:
            - name: log
              image: elastic/filebeat:7.3.2

    四.Job

    Job的功能:
        一次性执行
    
    应用场景:
        离线数据处理  视频解码任务

    示例:perl打印圆周率

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi
    spec:
      template:
        spec:
          containers:
          - name: pi
            image: perl
            command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
          restartPolicy: Never
      backoffLimit: 4 # 重试次数
    [root@k8s-master yaml]# kubectl get pod 
    NAME       READY   STATUS      RESTARTS   AGE
    pi-dkm26   0/1     Completed   0          25m

    # 执行完后正常退出,status是Completed

    五.CronJob

    CronJob用于实现定时任务,和Linux的crontab一样
    
    应用场景:一些定时操作(备份、通知等)

    示例:

    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: hello
    spec:
      schedule: "*/1 * * * *"  # 和Linux的crontab格式一样
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: hello
                image: busybox
                args:
                - /bin/sh
                - -c
                - date
              restartPolicy: OnFailure
  • 相关阅读:
    Winform中设置ZedGraph曲线图的字体样式是避免出现边框
    50本精品前端开发书籍免费下载
    一切“归零”的开始
    小公司大企业
    给“精点们”的一封信
    一个程序员的自我救赎
    一个微服务框架的情节
    《深入理解Java虚拟机》虚拟机类加载机制
    一个微服务框架的故事
    一个程序员的自我剖析
  • 原文地址:https://www.cnblogs.com/lichunke/p/14047096.html
Copyright © 2020-2023  润新知