一组特殊的容器
初始化容器是用来进行初始化操作的,在很多情况下,程序的启动需要依赖各类配置,资源,但是又不能继承在原有的启动命令或者镜像当中,因为程序的镜像可能并没有加载配置命令,此时InitContainer就起了很大的作用
1.InitConTainer的基本概念
InitContainer是kubernetes的初始化容器他是一个特殊的容器,在Pod内的应用容器启动之前运行,可以包括一些应用镜像中不存在的使用工具和安装脚本,用以在程序启动时初始化,比如创建文件,修改内核参数,等待依赖程序启动等,当所有的Init容器运行完成时,kubernetes才会启动Pod内的普通容器
1:初始化容器
initContainer
不能用探针,lifecycle(钩子,hook)
(1) 延长启动:设定一个时间延迟启动 延迟指定时间后启动
command:["sh","-c","sleep 15"] //表示初始化容器需要休眠15秒
(2) 修改内核:使用初始化容器修改内核参数
在容器内修改内核参数,实际上是修改物理机的内内核参数,一般不允许在容器里修改内核参数
(3) 等待依赖
CoreDNS-》主机的DNS
有时某些服务需要依赖其他组件才能启动,比如后端应用需要数据库启动之后,应用才能正常启动,此时需要检测数据库实例是否正常,等待数据库可以正常使用时,在启动后端应用,此时可以使用初始化容器进行控制
2:pause容器
pauser 容器特点
镜像非常小,目前在700KB
pod中其他各个容器的父容器
提供网络命名空间
网络接口
pod生命周期管理
infra container
3:临时容器 Ephemeral Containers
在生产环境中,为了优化镜像的体积和提高镜像的安全性,并不会在容器中安装太多高危工具,虽然提高了安全性,但是也带来了一些不便,比如:无法查看容器内进程情况,服务出现问题无法很安全的进行查看等,所以在1.6后引入 Ephemeral Containers,安装第三方工具即可在线Debug操作.
临时容器的声明和普通容器类似,但是临时容器没有端口配置,只是用来调式程序的,不会影响其他正常容器,所以他并不需要这些字段配置
tomcat:原始的容器
对tomcat进行测试
为原始容器生成临时容器
4:自动扩缩容HPA ()
在集群安装的过程中,我们可以安装一个叫Metrics,server的组件,该组件在集群中负责采集Pod和Node的度量值指标,比如Pod的cpu,内存使用率和节点的内存,cpu使用率,且安装的Dashboard可以展示cpu,内存信息也是依靠Metrics Server的,当然,该组件不仅仅时用来展示数据的,还可以使用Metrics Server提供的数据结合Kubernetes的HPA功能实现Pod的自动扩缩容
4.1水平Pod自动收缩器
在生产环境中,总有一些想不到的事情发生,比如公司网站流量突然升高,此时创建的Pod不足以支持所有的访问,而我们也不可能24小时守着业务访问,这个时候配置HPA,实现负债过高的情况下自动扩容Pod副本数分担高并发的流量,访问数恢复正常后,HPA会自动缩减Pod的数量
5.污点(节点),容忍(Pod)
Taint(污点)作用在节点上,能够使节点排斥一类特定的Pod
Toleration(容忍)作用在pod上,也就是可以兼容某类污点。
kubeadm部署的k8s集群默认给master节点加了Taints(污点)
增加污点
kubectl taint nodes k8s-node01 key1=value1:NoSchedule
//键名是key1,键值是value1 效果是NoSckedule
表示只拥有和这个污点相匹配的容忍的pod才能够被分配到node1这个节点
移除污点
kubectl taint nodes k8s-node01 key1=value1:NoSchedule-
5.1:taint effect的三种选项:
key=value:effect
NoSchedule:新的Pod不调度,老的pod不影响
PreferNoSchedule:新的pod尽量不调度,老的pod不影响
NoExecute: 新的pod不调度 老的Pod会被赶走
5.2:在容忍度中的写法:
toleration toleration toleration
-key: check -key: check operator:Exists
operator:Equal operator:Exists
value:mycheck
6.警戒(cordon)
转移(drain)
节点亲和性(节点硬亲和)
pod亲和性(看权重,不看顺序)
pod反亲和(非得不去)