zoukankan      html  css  js  c++  java
  • 深入理解常用控制器

    Pod与controllers的关系

    • controllers:在集群上管理和运行容器的对象
    • 通过label-selector相关联
    • Pod通过控制器实现应用的运维,如伸缩,滚动升级等

    image.png

    一般在部署应用的时候很少直接部署pod,都是通过控制器来部署。

    Deployment

    Deployment功能: 

    • 部署无状态应用

    无状态和有状态部署的区别

    无状态服务,K8S使用RC(或更新的Replica Set)来保证一个服务的实例数量,如果说某个Pod实例由于某种原因Crash了,RC会立刻用这个Pod的模版新启一个Pod来替代它,由于是无状态的服务,新启的Pod与原来健康状态下的Pod一模一样。在Pod被重建后它的IP地址可能发生变化,为了对外提供一个稳定的访问接口,K8S引入了Service的概念。一个Service后面可以挂多个Pod,实现服务的高可用。

    普通有状态服务,和无状态服务相比,它多了状态保存的需求。Kubernetes提供了以Volume和Persistent Volume为基础的存储系统,可以实现服务的状态保存。

    有状态集群服务,与普通有状态服务相比,它多了集群管理的需求。K8S为此开发了一套以Pet Set为核心的全新特性,方便了有状态集群服务在K8S上的部署和管理。具体来说是通过Init Container来做集群的初始化工作,用 Headless Service 来维持集群成员的稳定关系,用动态存储供给来方便集群扩容,最后用Pet Set来综合管理整个集群。

    • 管理Pod和ReplicaSet 
    • 具有上线部署、副本设定、滚动升级、回滚等功能
    • 提供声明式更新,例如只更新一个新的Image 应用场景:Web服务,微服务
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: default
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
            - name: nginx
              image: nginx:latest
              ports:
              - containerPort: 80
    kubectl apply -f nginx-deployment.yaml
    kubectl expose deployment nginx-deployment  --port=80 --type=NodePort --target-port=80 --name=web

    image.png

    image.png

    image.png

    curl k8s-node1:31109
    curl k8s-node2:31109

    #创建
    kubectl create deployment web --image=nginx:1.14
    kubectl get deploy,pods
    #发布
    kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web
    kubectl get service
    #升级
    kubectl set image deployment/web nginx=nginx:1.15
    kubectl rollout status deployment/web
    #回滚
    kubectl rollout history deployment/web
    kubectl rollout undo deployment/web
    kubectl rollout undo deployment/web --to-revision=2  #revision表示具体第几次发布
    #扩容/缩容
    kubectl scale deployment nginx-deployment --replicas=10

    当执行升级应用,rs采用的是k8s的默认滚动更新机制

    kubectl set image deployment/nginx-deployment nginx=nginx:1.15

    kubectl describe deploy nginx-deployment 

    image.png

    应用回滚版本

    image.png

    image.png

    执行回滚,应用的版本 从 nginx:1.15 回滚到 nginx:latest

    image.png

    执行具体版本回滚,应用会准确的回滚到具体版本,nginx:1.15对应的revision 为2

    image.png

    image.png

    应用扩容 将原先的 3副本 扩容成 5副本

    image.png

    image.png

    应用缩容,将原先的5副本缩容为3副本

    image.png

    deployment 是使用最广泛的一种控制器

    DaemonSet

    DaemonSet功能:

    • 在每一个Node上运行一个Pod

    • 新加入的Node也同样会自动运行一个Pod

    应用场景:Agent

    image.png

    DaemonSet 官网:https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: zabbix-daemonset
      namespace: default
    spec:
      selector:
        matchLabels:
          app: zabbix
      template:
        metadata:
          labels:
            app: zabbix
        spec:
          containers:
            - name: zabbix
              image: zabbix/zabbix-agent
              ports:
              - containerPort: 80

    image.png

    Job

    Job分为普通任务(Job)和定时任务(CronJob)

    • 一次性执行

    应用场景:离线数据处理,视频解码等业务

    job.yaml

    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

    image.png

    计算pi

    image.png

    job官网:https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/

    CronJob

    定时任务,像Linux的Crontab一样。

    • 定时任务

    应用场景:通知,备份

    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: hello
    spec:
      schedule: "*/1 * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: hello
                image: busybox
                args:
                - /bin/sh
                - -c
                - date; echo Hello from the Kubernetes cluster
              restartPolicy: OnFailure

    image.png

    image.png

     
     
  • 相关阅读:
    Spring学习笔记(一)IoC(XML部分)
    近期计划
    《番茄工作法图解》读后笔记
    第一篇随笔
    JavaScript 基本语法
    Eclipse启动之四 : Eclipse核心框架启动(百度空间迁移)
    Eclipse启动之三 : 启动器插件(百度空间迁移)
    Eclipse启动之二:Eclipse动态库(百度空间迁移)
    Eclipse启动之一:外壳程序(百度空间迁移)
    04SQL 查询当天,本月,本周的记录
  • 原文地址:https://www.cnblogs.com/benjamin77/p/12446749.html
Copyright © 2011-2022 走看看