Kubernetes的控制器类型即使用案例
什么是控制器
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的控制器类型即使用案例相关推荐
- 为什么要使用 Kubernetes 准入控制器
Kubernetes 准入控制器是什么?为什么要使用准入控制器?如何使用?本文对 Kubernetes 准入控制器进行了详细解释. 来源 | K8sMeetup 作者 | Arun Prasad 头图 ...
- kubernetes资源控制器【一】- ReplicaSet控制器
一.Pod控制器 Master的各组件中,API Server仅负责将资源存储于etcd中,并将其变动通知给各相关的客户端程序,如kubelet.kube-scheduler.kube-proxy和k ...
- HPA控制器介绍以及实战案例
背景: 根据当前pod的负载,动态调整 pod副本数量,业务高峰期自动扩容pod的副本数以尽快响应pod的请求. 在业务低峰期对pod进行缩容,实现降本增效的目的. 动态伸缩控制器类型: 水平pod自 ...
- 为什么需要 Kubernetes 准入控制器
Kubernetes 准入控制器是集群管理必要功能.这些控制器主要在后台工作,并且许多可以作为编译插件使用,它可以极大地提高部署的安全性. 准入控制器在 API 请求传递到 APIServer 之前拦 ...
- 八、kubernetes Pod控制器
Pod 控制器 文章目录 Pod 控制器 1. ReplicaSet(RS) 2. Deployment(Deploy) 3. Horizontal Pod Autoscaler(HPA) 4. Da ...
- Kubernetes准入控制器指南
Kubernetes准入控制器指南 作者:Malte Isberner(StackRox) Kubernetes极大地提高了当今生产中后端群集的速度和可管理性.由于其灵活性.可扩展性和易用性,Kube ...
- k8s,盘他!k8s的五种控制器类型解析
文章目录 一:k8s的五种控制器 1.1:k8s的控制器类型 1.2:Deployment控制器 1.2.1:测试deployment控制器 1.3:SatefulSet控制器 1.3.1:创建无头服 ...
- k8s--五种控制器类型解析
文章目录 一.k8s的五种控制器 1.1 k8s的控制器类型 1.2 Deployment控制器 1.3 SatefulSet控制器 1.4 DaemonSet控制器 1.5 Job控制器 1.6 c ...
- Kubernetes Volume及其类型(NFS、SAN) - PV - PVC - PV与PVC与Pod的关系
目录 volume 卷 官方文档:卷 | Kubernetes 一.emptyDir(临时卷) 二.hostPath卷 type字段参数 hostPath 实验: 三.第3方提供的存储卷(百度云.阿里 ...
最新文章
- Bitmap上下合成图片
- 3D原子映射有助于研究生命的起源
- 苹果iOS 15发布:关机也能定位,ASMR重度用户狂喜,这波库克又“去苹果化”了...
- jQuery 中 jQuery(function(){})与(function(){})(jQuery) 的区别
- vue框架实现pdf在线预览
- 深度学习-Tensorflow2.2-深度学习基础和tf.keras{1}-梯度下降算法概述-03
- 处理接口超时_架构设计 | 接口幂等性原则,防重复提交Token管理
- Leetcode 34.排序数组中的第一个元素和最后一个元素
- 江苏2021168查询高考成绩,重磅!高考成绩查询!!
- 记录一次挖坑过程,idea git 代码分支合反了,如何补救
- 算法分析之渐近分析(Asymptotic Analysis)
- 【DockerCE】Docker-CE 20.10.17正式版发布
- PCB焊接——原理篇
- 直播系统开发之ios对接腾讯云直播sdk
- linux系统文件信息系统满,在Deepin系统中提示系统盘已经满了(/home文件大)的解决方案...
- 阿里云服务器的mysql安装
- 【已解决】ping: www.baidu.com: 未知的名称或服务
- VB.net小技巧——读取文本文件并显示到文本框中
- 硬件SPI+LCD增强屏幕刷新率
- Kibana常用查询
热门文章
- python怎么封装方法然后调用_我现在想把自己写的python模块源代码封装成dll,然后在别的python脚本里调用,可以吗?...
- VMware发布新版vSphere6.5虚拟化平台,助力企业数字化转型
- coredump 断点_coredump调试的使用
- 正点原子stm32f429 pcb_正点原子【STM32-F407探索者】第十六章 电容触摸按键实验
- Py之paddlehub:paddlehub的简介、安装、使用方法之详细攻略
- 6.1 Tensorflow笔记(基础篇):队列与线程
- 《疯狂Java讲义》4
- 超哥笔记--linux准备知识(1)
- 从Activity中返回数据
- NHibernate部分错误