当前位置: 首页 > news >正文

Kubernetes 高级调度 01

一:初始化容器 Initcontainer

        首先来看初始化容器,顾名思义,初始化容器是用来进行初始化操作的。很多情况下,程序的启动需要依赖各类配置、资源。但是又不能继承在原有的启动命令或者镜像当中,因为程序的镜像可能并没有加载配置命令,此时 Initcontainer 就起了很大的作用。

1:Initcontainer 的基本概念
Initcontainer 是 Kubernetes 的初始化容器(也可称之为 Init 容器),它是一种特殊的容器,在Pod 内的应用容器启动之前运行,可以包括一些应用镜像中不存在的使用工具和安装脚本,用以在程序启动时进行初始化,比如创建文件、修改内核参数、等待依赖程序启动等。
每个 Pod 中可以包含多个容器,同时 Pod 也可以有一个或多个先于应用程序启动的 Init 容器,在 Pod定义中和 container 同级,按顺序逐个执行,当所有的 Init 容器运行完成时,Kubernetes 才会启动 Pod内的普通容器。

Init 容器与普通的容器非常像,除了如下几点:

他们总是运行到完成。
上一个运行完成才会运行下一个。
如果 Pod 的 Init 容器失败,Kubernetes 会不断地重启该 Pod,直到 Init 容器成功为止,但是如果 Pod 对应的 restartPolicy 值为 Never,Kubernetes 则不会重新启动 Pod。

2:示例 1--延迟指定时间后启动

3:示例 2--使用初始化容器修改内核参数

4:示例 3--等待依赖服务启动

(1)创建第一个 Pod

(2)创建第一个被依赖的 service

(3)创建第二个被依赖的 service

4:pause容器

        在 Kubernetes 中,pause 容器并不是指暂停容器的执行,而是指一个特殊的辅助容器,它被用于每个Pod 以帮助实现网络命名空间。pause 容器是 Kubernetes 中每个 Pod 的第一个容器,它的主要作用是作为 Pod 内所有其他容器共享网络命名空间的基础。

        每个 Kubernetes Pod 都有一个 pause 容器,它是 Pod 的第一个容器,也是唯一必须运行的容器。即使 Pod 中的其他容器都停止了,只要 pause 容器还在运行,Pod 就不会被 Kubernetes 认为是完全停止的

(1)pause 容器的作用

网络命名空间:pause 容器为 Pod 内的所有容器提供了一个共享的网络命名空间。这意味着 Pod 内的所有容器都共享同一个 IP 地址和端口空间,从而使得它们可以直接通过 localhost 或者其他指定方式相互通信。
网络接口:pause 容器负责设置 Pod 的网络接口,使得 Pod 内的容器能够通过这个接口访问外部网络。稳定性:如果 Pod 中的所有声明的容器都被删除或停止,pause 容器将保持运行,从而保证 Pod 的网络命名空间不会丢失。这也意味着 Pod 的网络配置仍然保留,直到整个 Pod 被删除。生命周期管理:pause 容器是一个非常简单的容器,其镜像只包含一个命令/pause,该命令实际上是
一个无限循环,保持容器处于运行状态。它不执行任何业务逻辑,仅仅是作为 Pod 网络基础设施的一部分。

(2)使用 pause 容器的好处

简化了 Pod 内的网络配置。
提高了 Pod 网络的一致性。
减少了管理 Pod 网络复杂性的开销。

(3)Pause 容器实现

査看 nginx 的 Pod 运行在的主机

在 k8s-node01 主机上査看 Pod 中的 pause 容器

二:临时容器 Ephemeral containers

1:临时容器的概念

2:临时容器的使用
(1)创建一个 tomcat 的资源清单

(2)创建Pod

三:自动扩缩容 HPA

1:什么是 HPA

HPA(Horizontal Pod Autoscaler,水平 Pod 自动伸缩器)可以根据观察到的 CPU、内存使用率或自定义度量标准来自动扩展或缩容 Pod 的数量。注意 HPA 不适用于无法缩放的对象,比如 DaemonSet。
HPA 控制器会定期调整 RC或 Deployment 的副本数,以使观察到的平均 CPU 利用率与用户指定的目标相匹配。

2:HPA 的工作原理

HPA 根据观察到的 CPU、内存使用率或自定义度量标准来自动扩展或缩容 Pod 的数量。HPA 控制器会定期调整 RC(Replication Controller)或Deployment 的副本数,以使观察到的平均 CPU 利用率(或其他度量标准)与用户指定的目标相匹配。HPA 需要 Metrics Server 获取度量指标,Metrics Server 负责采集 Pod 和 Node 的度量值指标,如CPU、内存使用率等

3:HPA 的工作流程

配置 HPA:使用 kubectl autoscale 命令为 Deployment、Replicaset 或statefulset 等资源创建 HPA 对象,并指定目标 CPU 利用率、最小副本数和最大副本数。度量指标采集: Metrics server 定期采集 Pod 和 Node 的度量值指标,并将这些数据提供给 HPA控制器。
伸缩决策:HPA控制器根据当前 Pod 的度量指标和目标利用率进行比较,如果当前利用率高于目标利用率,则增加 Pod 副本数;如果当前利用率低于目标利用率,则减少 Pod 副本数(在最小副本数和最大副本数之间调整)。
Pod 伸缩:Kubernetes 根据 HPA 控制器的决策自动调整 Pod 的副本数,以实现自动扩缩容。

4:HPA的应用场景

应对流量波动:在 web服务中,流量可能会随时间变化而波动。HPA可以根据流量变化自动调整Pod 副本数,以确保服务的稳定性和响应速度。资源优化:通过自动扩缩容,HPA 可以在保证服务质量的同时最大化资源利用率,降低运营成本。

5:HPA实践--实现 web 服务器的自动伸缩特性

在生产环境中,总会有一些意想不到的事情发生,比如公司网站流量突然升高,此时之前创建的 Pod已不足以支撑所有的访问,而运维人员也不可能 24小时守着业务服务,这时就可以通过配置 HPA,实现负载过高的情况下自动扩容 Pod 副本数以分摊高并发的流量,当流量恢复正常后,HPA 会自动缩减 Pod 的数量

(1)首先用 Deployment 启动一个Nginx 服务(须配置 requests 参数)

(2)配置nginx-server的Service

(3)使用kubectl autoscale 命令创建 HPA

(4)查看当前 HPA 的状态
因为未对其发送任何请求,所以当前 CPU 使用率为 0%

(5)查看当前 Ngmx的 service 地址

(6)压力测试(打开一个新的终端)

(7)查看HPA 状态

(8)再次查看Pod,可以看到已经扩容(Pod 副本增加到了 10 个)

(9)停止压力测试

(10)查看pod 的副本数

(10)清除

http://www.lryc.cn/news/603420.html

相关文章:

  • 实现多路标注截图
  • WMS仓储管理系统在不良品管理中的优化策略
  • OpenCL - study - code04 canny
  • C++基础:模拟实现priority_queue(堆),详细介绍仿函数
  • Python 程序设计讲义(29):字符串的处理方法——大小写转换
  • 网络数据传输与NAT技术的工作原理
  • 计算机网络五层模型
  • 【微信小程序】12、生物认证能力
  • .gitignore 添加 vue.config.js 时不好使
  • 微信小程序无法构建npm,可能是如下几个原因
  • Excel批量加密工具,一键保护多个文件
  • 聚观早报 | 三星获特斯拉AI芯片订单;小米16首发成安卓最强SOC;iPhone 17 Pro支持8倍光学变焦
  • 递归推理树(RR-Tree)系统:构建认知推理的骨架结构
  • [leetcode] 实现 Trie (前缀树)
  • 开发避坑短篇(8):Java Cookie值非法字符异常分析与解决方案:IllegalArgumentException[32]
  • 【C#获取高精度时间】
  • 智能落地扇方案:青稞RISC-V电机 MCU一览
  • SZU大学物理实验报告|电位差计
  • 【dropdown组件填坑指南】—怎么实现下拉框的位置计算
  • python cli命令 cli工具命令 自定义cli命名 开发 兼容 window、mac、linux,调用示例
  • React面试题目和答案大全
  • 注册发送手机短信
  • Linux 完整删除 Systemd 服务的步骤
  • 【自制组件库】从零到一实现属于自己的 Vue3 组件库!!!
  • Rust 实战三 | HTTP 服务开发及 Web 框架推荐
  • leaflet中绘制轨迹线的大量轨迹点,解决大量 marker 绑定 tooltip 同时显示导致的性能问题
  • HTTP 与 HTTPS 的区别
  • div 封装日历
  • C++学习之继承
  • scrapy框架新浪新闻