zoukankan      html  css  js  c++  java
  • 二进制部署K8S集群(十七)之控制器使用

    一.pod控制器

    controller用于控制pod。

    控制器主要分为:

    • ReplicationController(相当于ReplicaSet的老版本,现在建议使用Deployments加ReplicaSet替代RC)
    • ReplicaSet 副本集,控制pod扩容,裁减
    • Deployments 控制pod升级,回退
    • StatefulSets 部署有状态的pod应用
    • DaemonSet 运行在所有集群节点(包括master),比如使用filebeat,node_exporter
    • Jobs 一次性
    • Cronjob 周期性

    1.1 Deployment&ReplicaSet

    1.1.1 Replicaset控制器的功能:
    • 支持新的基于集合的selector(以前的rc里没有这种功能)
    • 通过改变Pod副本数量实现Pod的扩容和缩容
    1.1.2 Deployment控制器的功能:
    • Deployment集成了上线部署、滚动升级、创建副本、回滚等功能
    • Deployment里包含并使用了ReplicaSet
    1.1.3 YAML文件创建deployment
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx2 # deployment名
    spec:
      replicas: 1 # 副本集,deployment里使用了
      selector:
        matchLabels:
          app: nginx # 匹配的pod标签,表示deployment和rs控制器控制带有此标签的pod
     template: # 代表pod的配置模板
       metadata:
         labels:
           app: nginx # pod的标签
      spec:
        containers: # 以下为pod里的容器定义
        - name: nginx
          image: nginx:1.15-alpine
          imagePullPolicy: IfNotPresent
          ports:
          - containerPort: 80
    kubectl apply -f nginx2-deployment.yml
    kubectl get deployment
    kubectl get pods
    

    1.2 DaemonSet控制器

    • DaemonSet能够让所有(或者特定)的节点运行同一个pod。
    • 当节点加入到K8S集群中,pod会被(DaemonSet)调度到该节点上运行,当节点从K8S集群中被移除,被DaemonSet调度的pod会被移除。
    • 如果删除DaemonSet,所有跟这个DaemonSet相关的pods都会被删除。
    • 如果一个DaemonSet的Pod被杀死、停止、或者崩溃,那么DaemonSet将会重新创建一个新的副本在这台计算节点上。
    • DaemonSet一般应用于日志收集、监控采集、分布式存储守护进程等。
    vim nginx-daemonset.yml
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: nginx-daemonset
    spec:
      selector:
        matchLabels:
          name: nginx-test
     template:
       metadata:
         labels:
           name: nginx-test
       spec:
         tolerations: # tolerations代表容忍
         - key: node-role.kubernetes.io/master  # 能容忍的污点key
           effect: NoSchedule  # kubectl explain pod.spec.tolerations查看(能容忍的污点effect)
         containers:
         - name: nginx
           image: nginx:1.15-alpine
           imagePullPolicy: IfNotPresent
           resources:   # resources资源限制是为了防止master节点的资源被占太多(根据实际情况配置)
           limits:
             memory: 100Mi
           requests:
             memory: 100Mi
    

    1.3 Job控制器

    • Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。
    1.3.1 创建一次性job
    vim job.yml
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi # job名
    spec:
      template:
        metadata:
          name: pi # pod名
      spec:
        containers:
        - name: pi # 容器名
          image: perl # 此镜像有800多M,可提前导入到所有节点,也可能指定导入到某一节点然后指定调度到此节点
          imagePullPolicy: IfNotPresent
          command: ["perl",  "-Mbignum=bpi", "-wle", "printbpi(2000)"]
        restartPolicy: Never # 执行完后不再重启
    kubectl apply -f job.yml
    kubectl get jobs
    kubectl get pods
    kubectl logs pi-tjq9b
    
    1.3.2 创建固定次数job
    vim job2.yml
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: busybox-job
    spec:
      completions: 10 # 执行job的次数
      parallelism: 1 # 执行job的并发数
     template:
       metadata:
         name: busybox-job-pod
      spec:
        containers:
        - name: busybox
          image: busybox
          imagePullPolicy: IfNotPresent
          command: ["echo", "hello"]
        restartPolicy: Never
    kubectl apply -f job2.yml
    kubectl get job
    

    1.4 crontab控制器

    • 类似于Linux系统的crontab,在指定的时间周期运行相关的任务。
    vim cronjob.yml
    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: cronjob1
    spec:
      schedule: "* * * * *"         # 分时日月周
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: hello
                image: busybox
                args:
                - /bin/sh
                - -c
                - date; echo hello kubernetes
                  imagePullPolicy: IfNotPresent
                  restartPolicy: OnFailure
    kubectl apply -f cronjob.yml
    kubectl get cronjob
    kubectl get pod
    

    1.5 创建service

    cat > nginx_service.yml <<eof
    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
      namespace: default
    spec:
      clusterIP: 10.2.11.22 # 这个ip可以不指定,让它自动分配,需要与集群分配的网络对应
      type: ClusterIP # ClusterIP类型,也是默认类型
      ports: # 指定service 端口及容器端口
      - port: 80 # service ip中的端口
        protocol: TCP
        targetPort: 80 # pod中的端口
      selector: # 指定后端pod标签(不是deployment的标签)
        app: nginx # 可通过kubectl get pod -l  app=nginx查看哪些pod在使用此标签
    

    1.6 pod版本升级(滚动更新)

    # 升级前查看版本
    kubectl describe pod nginx1-7d9b8757cf-czcz4 | grep Image # 升级前版本
      Image:      nginx:1.15-alpine
    kubectl exec nginx1-7d9b8757cf-czcz4 --nginx -v
    
    # 正式升级
    kubectl set image deployment nginx1 nginx1=nginx:1.16-alpine --record     # 升级为1.16版
    kubectl set image -h       # 查看帮助
    kubectl rollout status deployment nginx1        # 滚动更新
    
    # 查看版本
    kubectl get pods
    kubectl describe pod nginx1-7ffc8cb4fb-tn4ls |grep Image:
    kubectl exec nginx1-7ffc8cb4fb-tn4ls --nginx -v
    

    参数含义解释:
    deployment nginx1 代表名为nginx1的deployment
    nginx1=nginx:1.16-alpine 前面的nginx1为容器名
    --record 表示会记录

    1.7 pod版本回滚

    kubectl rollout history deployment nginx1    # 查看版本历史信息
    kubectl rollout history deployment nginx1--revision=1 # 定义要回退的版本为1
    kubectl rollout undo deployment nginx1 --to-revision=1 # 开始回退
    deployment.extensions/nginx1 rolled back
    kubectl rollout history deployment nginx1 deployment.extensions/nginx1 # 查看有没回退
    kubectl get pods
    kubectl describe pod nginx1-7d9b8757cf-m7rt4 |grep Image:
    kubectl exec nginx1-7d9b8757cf-m7rt4 --nginx -v
    

    1.8 副本扩容

    kubectl scale -h # 查看帮助
    kubectl scale deployment nginx1 --replicas=10 -n kube-public # 扩容为10个副本,改小字则副本缩减
    kubectl get pods -o wide
    
  • 相关阅读:
    Note/Solution 转置原理 & 多点求值
    Note/Solution 「洛谷 P5158」「模板」多项式快速插值
    Solution 「CTS 2019」「洛谷 P5404」氪金手游
    Solution 「CEOI 2017」「洛谷 P4654」Mousetrap
    Solution Set Border Theory
    Solution Set Stirling 数相关杂题
    Solution 「CEOI 2006」「洛谷 P5974」ANTENNA
    Solution 「ZJOI 2013」「洛谷 P3337」防守战线
    Solution 「CF 923E」Perpetual Subtraction
    KVM虚拟化
  • 原文地址:https://www.cnblogs.com/even160941/p/15048637.html
Copyright © 2011-2022 走看看