什么是控制器

Kubernetes中内建了很多的controller(控制器),这些控制器相当于一个状态机,用来控制Pod的具体状态和行为

控制器的类型

ReplicationController和ReplicaSet

ReplicationController(RC)用来确保容器应用的副本数始终维持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来替代,而如果异常多出来的容器也会自动回收。

在新版本的Kubernetes中建议使用ReplicaSet来取代ReplicationController,ReplicaSet跟ReplicationController没有本质的区别,只是名字不一样,并且ReplicaSet支持集合式的selector(标签)。

apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:name: frontend
spec:replicas: 3selector:natchLatels:tier: frontendtemplate:metadata:latels:tier: frontendsepc:containsers:- name: myappimage: myapp:v1env:- name: GET_HOST_FROMvalues: dnsports:- containerPort: 80

Deployment

Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController类方便的管理应用,典型的应用场景包括:

  • 定义Deployment来创建Pod和ReplicaSet
  • 滚动升级和回滚应用
  • 扩容和缩容
  • 暂停和继续Deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 3template:metadata:labels:app: nginxspec:containers:- name: nginximage: myapp:v1ports:- containerPort: 80

扩容

kubectl scale deployment nginx-deployment --replicats 10

如果集群支持HPA的话,还可以为Deployment设置自动扩展

kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80

更新镜像也比较简单

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

回滚

kubectl rollout undo deployment/nginx-deployment
kubectl rollout status deployments nginx-deployment #查看回滚状态
kubectl rollout history deployment/nginx-deployment #查看回滚历史
kubectl rollout pause deployment/nginx-deployment #暂停deployment的更新

DaemonSet

Daemon确保全部或者一些Node上运行一个Pod的副本,当有Node加入集群时,也会为他们新增一个Pod,当有Node从集群移除时,这些Pod也会被回收,删除DaemonSet将会删除它创建的所有Pod

使用DaemonSet的一些典型用法:

  • 运行集群存储daemon,如glusterd、ceph
  • 在每个Node上运行日志手机daemon,如fluentd、logstash
  • 在每个Node上运行监控daemon,如prometheus Node Exporter、colletcd、Datadog代理、New Relic代理,或Ganglia gmond
apiVersion: apps/v1
kind: DaemonSet
metadata:name: daemonset-example #与下面的selector.matchLabels中的name必须保持一致,不然会一直重启labels:app: daemonset
spec:selector:matchLabels:name: daemonset-exampletemplate:metadata:labels:name: daemonset-examplespec:containers:- name: daemonset-exampleimage: myapp:v1

StateFulSet

StateFulSet作为Controller为Pod提供唯一的标识,它可以保证部署和scale的顺序

StateFulSet是为了解决有状态服务的问题,对应Deployment和ReplicaSet是为无状态服务而设计的,器应用场景包括:

  • 稳定的持久化存储,即Pod重新调度后还能访问到相同的持久化数据,基于PVC来实现
  • 稳定的网络标识,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现
  • 有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Runing和Ready状态),基于init containers来实现
  • 有序收缩,有序删除(即从N-1到0)

Job/CronJob

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

CronJob管理基于时间的Job,即:

  • 在给定时间只运行一次
  • 周期性地在给定时间点运行

典型应用场景如数据库备份,发送邮件等

Job

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

CronJob

apiVersion: batch/v1beta1
kind: CronJob
metadata:name: hello
spec:schedule: "*/1 * * * *" #必须填写的字段completions: 1 #标志Job结束需要成功运行的Pod个数,默认为1parallelism: 1 #标志并行运行的Pod个数,默认为1activeDeadlineSeconds: 5 #标志失败Pod的重试最大时间,超过这个时间不会继续重试startingDeadlinSeconds: 5 #启动Job的期限(秒级别)concurrencyPolicy: Allow #并发策略,可选Allow(默认)允许并发运行Job、Forbid禁止编发运行、Replace替换jobTemplate: #必须填写的字段spec:template:spec:containers:- name: helloimage: busyboxargs:- /bin/sh- -c- date: echo Hello from the Kubernetes clusterrestartPolicy: OnFailure

Horizontal Pod Autoscaling

应用的资源使用率通常都有高峰和低谷的时候,如何削峰填谷,提高集群的整体资源利用率,让service中的Pod个数自动调整呢?这就要依赖于Horizontal Pod Autoscaling了,即Pod的水平自动缩放

Kubernetes的控制器类型即使用案例相关推荐

  1. 为什么要使用 Kubernetes 准入控制器

    Kubernetes 准入控制器是什么?为什么要使用准入控制器?如何使用?本文对 Kubernetes 准入控制器进行了详细解释. 来源 | K8sMeetup 作者 | Arun Prasad 头图 ...

  2. kubernetes资源控制器【一】- ReplicaSet控制器

    一.Pod控制器 Master的各组件中,API Server仅负责将资源存储于etcd中,并将其变动通知给各相关的客户端程序,如kubelet.kube-scheduler.kube-proxy和k ...

  3. HPA控制器介绍以及实战案例

    背景: 根据当前pod的负载,动态调整 pod副本数量,业务高峰期自动扩容pod的副本数以尽快响应pod的请求. 在业务低峰期对pod进行缩容,实现降本增效的目的. 动态伸缩控制器类型: 水平pod自 ...

  4. 为什么需要 Kubernetes 准入控制器

    Kubernetes 准入控制器是集群管理必要功能.这些控制器主要在后台工作,并且许多可以作为编译插件使用,它可以极大地提高部署的安全性. 准入控制器在 API 请求传递到 APIServer 之前拦 ...

  5. 八、kubernetes Pod控制器

    Pod 控制器 文章目录 Pod 控制器 1. ReplicaSet(RS) 2. Deployment(Deploy) 3. Horizontal Pod Autoscaler(HPA) 4. Da ...

  6. Kubernetes准入控制器指南

    Kubernetes准入控制器指南 作者:Malte Isberner(StackRox) Kubernetes极大地提高了当今生产中后端群集的速度和可管理性.由于其灵活性.可扩展性和易用性,Kube ...

  7. k8s,盘他!k8s的五种控制器类型解析

    文章目录 一:k8s的五种控制器 1.1:k8s的控制器类型 1.2:Deployment控制器 1.2.1:测试deployment控制器 1.3:SatefulSet控制器 1.3.1:创建无头服 ...

  8. k8s--五种控制器类型解析

    文章目录 一.k8s的五种控制器 1.1 k8s的控制器类型 1.2 Deployment控制器 1.3 SatefulSet控制器 1.4 DaemonSet控制器 1.5 Job控制器 1.6 c ...

  9. Kubernetes Volume及其类型(NFS、SAN) - PV - PVC - PV与PVC与Pod的关系

    目录 volume 卷 官方文档:卷 | Kubernetes 一.emptyDir(临时卷) 二.hostPath卷 type字段参数 hostPath 实验: 三.第3方提供的存储卷(百度云.阿里 ...

最新文章

  1. Bitmap上下合成图片
  2. 3D原子映射有助于研究生命的起源
  3. 苹果iOS 15发布:关机也能定位,ASMR重度用户狂喜,这波库克又“去苹果化”了...
  4. jQuery 中 jQuery(function(){})与(function(){})(jQuery) 的区别
  5. vue框架实现pdf在线预览
  6. 深度学习-Tensorflow2.2-深度学习基础和tf.keras{1}-梯度下降算法概述-03
  7. 处理接口超时_架构设计 | 接口幂等性原则,防重复提交Token管理
  8. Leetcode 34.排序数组中的第一个元素和最后一个元素
  9. 江苏2021168查询高考成绩,重磅!高考成绩查询!!
  10. 记录一次挖坑过程,idea git 代码分支合反了,如何补救
  11. 算法分析之渐近分析(Asymptotic Analysis)
  12. 【DockerCE】Docker-CE 20.10.17正式版发布
  13. PCB焊接——原理篇
  14. 直播系统开发之ios对接腾讯云直播sdk
  15. linux系统文件信息系统满,在Deepin系统中提示系统盘已经满了(/home文件大)的解决方案...
  16. 阿里云服务器的mysql安装
  17. 【已解决】ping: www.baidu.com: 未知的名称或服务
  18. VB.net小技巧——读取文本文件并显示到文本框中
  19. 硬件SPI+LCD增强屏幕刷新率
  20. Kibana常用查询

热门文章

  1. python怎么封装方法然后调用_我现在想把自己写的python模块源代码封装成dll,然后在别的python脚本里调用,可以吗?...
  2. VMware发布新版vSphere6.5虚拟化平台,助力企业数字化转型
  3. coredump 断点_coredump调试的使用
  4. 正点原子stm32f429 pcb_正点原子【STM32-F407探索者】第十六章 电容触摸按键实验
  5. Py之paddlehub:paddlehub的简介、安装、使用方法之详细攻略
  6. 6.1 Tensorflow笔记(基础篇):队列与线程
  7. 《疯狂Java讲义》4
  8. 超哥笔记--linux准备知识(1)
  9. 从Activity中返回数据
  10. NHibernate部分错误