k8s(四):核心技术-Controller
文章目录
- 1. 什么是controller
- 2. Pod和Controller的关系
- 3. 五种控制器类型
- 3.1 deployment
- 3.1.1 特点
- 3.1.2 示例
- 3.1.3 应用升级回滚和弹性伸缩
- 3.2 StatefulSet
- 3.2.1 特点
- 3.2.2 无状态和有状态区别
- 3.2.3 部署有状态应用
- 3.3 DaemonSet
- 3.3.1 特点
- 3.3.2 示例
- 3.4 Job普通任务
- 3.4.1 特点
- 3.4.2 示例
- 3.5 CronJob定时任务
- 3.5.1 特点
- 3.5.2 示例
- 4. StatefulSet与Deployment区别
1. 什么是controller
- 在集群上管理和运行容器的对象,它是实际存在的,不像pod是抽象的
- 可以进行有状态应用部署和无状态应用部署
2. Pod和Controller的关系
- Pod是通过Controller实现应用的运维,比如伸缩,滚动升级等等
- Pod和Controller通过label建立关系
3. 五种控制器类型
3.1 deployment
3.1.1 特点
- 部署无状态的应用。如nginx,web服务,微服务等
- 管理Pod和ReplicaSet
- 具有上线部署、副本设定、滚动升级、回滚等功能
3.1.2 示例
- 生成yml文件
kubectl create deployment web --image=nginx #不能做复用,只能做测试kubectl create deployment web --image=nginx --dry-run -o yaml > web.yaml #生成yaml文件样板
web.yml
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: webname: web
spec:replicas: 1selector: # 与下面的labels完成匹配matchLabels:app: webstrategy: {}template:metadata:creationTimestamp: nulllabels: # 完成匹配app: webspec:containers:- image: nginxname: nginxresources: {}
status: {}
- 使用yaml部署应用
[root@k8sMaster ~]# kubectl apply -f web.yaml
deployment.apps/web created
[root@k8sMaster ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
web-5dcb957ccc-2fvt9 0/1 ContainerCreating 0 6s
- 对外发布(暴露对外端口号)
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web1 -o yaml > web1.yamlkubectl apply -f web1.yaml
- 查看暴露端口号并访问
[root@k8sMaster ~]# kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/web-5dcb957ccc-2fvt9 1/1 Running 0 12mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 20d
service/web1 NodePort 10.97.135.244 <none> 80:30800/TCP 5m47s
30800为对外暴露端口
3.1.3 应用升级回滚和弹性伸缩
- 应用升级
应用升级时,先下载镜像,当pod启动后,会替换掉旧版本
kubectl set image deployment web nginx=nginx:1.15
- 查看升级版本
[root@k8sMaster ~]# kubectl rollout history deployment web
deployment.apps/web
REVISION CHANGE-CAUSE
1 <none>
2 <none>
- 查看升级状态
[root@k8sMaster ~]# kubectl rollout status deployment web
deployment "web" successfully rolled out
这是升级成功的显示
- 回滚到上一个版本
[root@k8sMaster ~]# kubectl rollout undo deployment web
deployment.apps/web rolled back
- 回滚到指定版本
[root@k8sMaster ~]# kubectl rollout undo deployment web --to-revison=2
deployment.apps/web rolled back
- 弹性伸缩
[root@k8sMaster ~]# kubectl scale deployment web --replicas=10
deployment.apps/web scaled
3.2 StatefulSet
3.2.1 特点
部署有状态应用
解决Pod独立生命周期,保持Pod启动顺序和唯一性
稳定,唯一的网络标识符,持久存储(例如: etcd 配置文件,节点地址发生变化,将无法使用)
有序,优雅的部署和扩展、删除和终止(例如: mysql 主从关系,先启动主,再启动从)
有序,滚动更新
应用场景: 数据库
3.2.2 无状态和有状态区别
无状态:
(1) deployment认为所有的pod都是一样的
(2) 不用考虑顺序的要求
(3) 不用考虑在哪个node节点上运行
(4) 可以随意扩容和缩容有状态:
(1) 实例之间有差别,每个实例都有自己的独特性,元数据不同,例如etcd, zookeeper
(2) 实例之间不对等的关系,以及依靠外部存储的应用。
3.2.3 部署有状态应用
常规service和无头服务区别:
(1) service: 一组Pod访问策略,提供cluster-IP群集之间通讯,还提供负载均衡和服务发现。
(2) Headless service无头服务, 不需要cluster-IP,直接绑定具体的Pod的IP(当Pod的IP地址是动态变化时,所以常用于绑定DNS访问)
注意无头service(即:clusterIP:None)
创建开始
查看pod,有三个pod,每个都是唯一名称
查看创建无头的service,这里为None表示无头service
3.3 DaemonSet
3.3.1 特点
- 部署守护进程
- 确保所有的node运行同一个pod
应用场景:Agent、监控
3.3.2 示例
用DaemonSet 控制器类型创建nginx pod资源,没有指定副本replicats,它会根据node节点的个数创建,如果再新加一个node节点,也会给新node节点创建pod
3.4 Job普通任务
3.4.1 特点
应用场景:离线数据处理,视频解码等业务
3.4.2 示例
用job控制器类型创建资源,执行算圆周率的命令,保持后2000位,创建过程等同于在计算
,重试次数默认是6次,修改为4次,当遇到异常时Never状态会重启,所以要设定次数。
# vim job.yaml
apiVersion: batch/v1
kind: Job
metadata:name: pi
spec:template:spec:containers:- name: piimage: perlcommand: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]restartPolicy: NeverbackoffLimit: 4在node节点提前下载perl镜像,因为镜像比较大所以提前下载好
node1 node2节点:
# docker pull perl创建过程等同于在计算
# kubectl apply -f job.yaml
job.batch/pi created查看状态
# kubectl get pods
# kubectl describe pod pi-tkdlc 查看日志,看计算结果,结果输出到控制台
# kubectl logs pi-tkdlc
3.141592653589793.............................................共2000位
3.5 CronJob定时任务
3.5.1 特点
周期性任务,像Linux的Crontab一样。
周期性任务
应用场景:通知,备份
3.5.2 示例
每隔一分钟输出一条信息,打印hello
# vim cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:name: hello
spec:schedule: "*/1 * * * *"jobTemplate:spec:template:spec:containers:- name: helloimage: busyboxargs:- /bin/sh- -c- date; echo Hello from the Kubernetes clusterrestartPolicy: OnFailurebusybox 是linux内核镜像# kubectl create -f cronjob.yaml
# kubectl get cronjob
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
hello */1 * * * * False 0 <none> 25s
# kubectl get pods
查看日志,内容输出到控制台
# kubectl logs hello-1581917340-dzxbj
Mon Feb 17 05:29:09 UTC 2020
Hello from the Kubernetes cluster等待一分钟后又会再执行一次
# kubectl get pods
# kubectl logs hello-1581917400-nkb72最后删除资源,不然第二天服务器宕机
# kubectl delete -f cronjob.yaml
4. StatefulSet与Deployment区别
StatefulSet创建的pod是有身份的,有唯一标识的。
- 每个pod都有唯一的主机名
- 唯一域名生成规则:格式:主机名.service名称.名称空间.svc.cluster.local【例如:
】
参考博客:https://blog.csdn.net/weixin_45691464/article/details/106326605
k8s(四):核心技术-Controller相关推荐
- k8s核心技术-Controller(statefulSet)_部署有状态应用---K8S_Google工作笔记0033
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们说k8s的controller可以部署无状态的应用,也可以部署有状态的应用 首先我们要明确 ...
- k8s核心技术-Controller控制器_Controller(Job和Cronjob)_一次任务和定时任务---K8S_Google工作笔记0035
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们来说一下这个k8s支持的这样一个功能,就是k8s支持,job,也就是任务,也就是说 我们有 ...
- k8s核心技术-Controller(Deployment)_发布应用---K8S_Google工作笔记0029
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后咱们来说一下,怎么利用deployment这个控制器controller来部署应用 这里咱们使 ...
- k8s核心技术-Controller(Deployment)_概述和应用场景---K8S_Google工作笔记0028
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 接下来咱们开始说controller master节点上的controller manager 咱 ...
- k8s核心技术-Controller(DaemonSet)_部署守护进程---K8S_Google工作笔记0034
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这个守护进程是什么意思,其实就是说,我们要保证,每个node上都要运行在同一个pod中, 也就是说 ...
- k8s核心技术-Controller(Deployment)控制器对pod的管理实现_升级回滚和弹性伸缩---K8S_Google工作笔记0030
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这个应用的升级和回滚很好理解,之前咱们创建nginx的pod的时候,没有 指定版本,就默认部署的是 ...
- 7、kubernetes 核心技术-Controller 控制器
文章目录 一.什么是Controller? 二.Pod和Controller的关系 三.Deployment控制器应用场景 四.Deployment控制器部署应用 4.1 导出yaml文件 4.2 使 ...
- 第四章 Controller接口控制器详解(5)——跟着开涛学SpringMVC
2019独角兽企业重金招聘Python工程师标准>>> 原创内容,转载请注明iteye http://jinnianshilongnian.iteye.com/ 4.15.Multi ...
- k8s四种port解析:nodePort、port、targetPort、containerPort
1. nodePort nodePort提供了集群外部客户端访问service的一种方式,:nodePort提供了集群外部客户端访问service的端口,即nodeIP:nodePort提供了外部流量 ...
最新文章
- Python爬虫(九)_案例:使用正则表达式的爬虫
- 201602021344_《Javascript柯里化uncurrying()(将内置方法独立成为一个通用方法)》
- 从零开始-android 4.2之旅
- Spring Boot----Dubbo
- 太阳直射点纬度计算公式_高中地理,常用计算公式大盘点,高中满分特辑!
- php isnumber 小数点,JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】...
- 第一个被赋予公明身份的机器人_机器人索菲亚扬言要消灭人类!曾经狂妄无比,现在过得如何...
- Unity3D笔记 切水果 一
- python如何设置双索引_python-在新的多索引下串联熊猫列
- c语言约瑟夫环分析报告,约瑟夫环C语言实现验证报告.doc
- [VT虚拟化驱动]利用EPT实现无痕HOOK
- 怎样学好高一数学,首先掌握这4种方法
- Java程序应用实例:“你好 Java”
- LabVIEW基础课程(2) ----虚拟抽奖机
- PAT(甲级) 1003. Emergency
- moore 数据集_【数据集】一文道尽医学图像数据集与竞赛
- 实验名称: 类的构造函数、析构函数和友员成员应用
- 牛客小白月赛19A:「水」滔天巨浪
- 新手如何安装ai换脸软件deepfacelab中文版
- html输入框中加入按钮,INPUT输入框和按钮
热门文章
- linux系统命令make.clean的用法讲解
- python 小说人物分析_Python文章相关性分析---金庸武侠小说分析
- Legacy引导转UEFI引导(BIOS、Legacy引导、UEFI引导、GPT/MBR分区)
- 全球与中国冷冻莴苣市场深度研究分析报告
- 计算机网络基础昆明理工大学,昆明理工大学 计算机网络基础 实验三
- android五子棋源代码,Android五子棋游戏源码详解
- pandas +re获取pubmed中文献的标题和摘要
- html一键使网页字体变大,网页字体变大了怎么办
- html tab focus,tabindex解决div获得焦点focus()和失去焦点blur()的问题
- rails dbconsole