Kubernetes Pod 中容器的启动优先级
今天分享的主题是:怎么控制 Kubernetes 单个 Pod 中容器的启动顺序。
在前面讲容器设计模式时,我曾提到过 Kubernetes Pod 內有两种容器,分别是
Init Container(初始化容器):在 spec.initContainers 结构体內
Application Container(应用容器):在 spec.containers 结构体內
Init ContainerInit Container 执行优先于 Application Container,且会按照顺序逐一执行,每个 Init Container 成功终止退出后,下一个 Init Container 才开始执行。
Application Container但是 Application Container 则是完全不一样的,数组內的容器之间是平等无序的。什么意思呢?就是说它们会并行运行,所以我们部署服务时绝不能对容器的顺序做出假设。
我们先来看一个完整的 Pod 的 YMAL 结构,如下所示,全部使用一样的镜像地址:
1234567891011121314151617181920212223 ...
Kubernetes 1.27 原地调整 Pod 资源 (alpha)
如果你部署的 Pod 设置了 CPU 或内存资源,你就可能已经注意到更改资源值会导致 Pod 重新启动。以前,这对于运行的负载来说是一个破坏性的操作。
在 Kubernetes v1.27 中,我们添加了一个新的 alpha 特性,允许用户调整分配给 Pod 的 CPU 和内存资源大小,而无需重新启动容器。首先,API 层面现在允许修改 Pod 容器中的 resources 字段下的 CPU 和 memory 资源。资源修改只需 patch 正在运行的 Pod 规约即可。
这也意味着 Pod 定义中的 resource 字段不能再被视为 Pod 实际资源的指标。监控程序必须 查看 Pod 状态中的新字段来获取实际资源状况。Kubernetes 通过 CRI(Container Runtime Interface,容器运行时接口)API 调用运行时(例如 containerd)来查询实际的 CPU 和内存 的请求和限制。容器运行时的响应会反映在 Pod 的状态中。
此外,Pod 中还添加了对应于资源调整的新字段 restartPolicy。这个字段使用户可以控制在资源调整时容器的行为。 ...
如何管理 Docker 容器和 Kubernetes Pod 的 DNS
DNS简介DNS服务是域名系统的缩写, 英文全称:Domain Name System,将域名和IP地址相互映射。在容器环境中,DNS至关重要,例如在Kubernetes集群中,通常一组Pod由一个Service负载,但是Service的IP地址有可能需要变动,那么就可以让Pod通过域名的方式去访问Service,Pod无需理会IP地址的变化。
Docker DNSDocker linkDocker link是一个遗留的特性,在新版本的Docker中,一般不推荐使用。简单来说Docker link就是把两个容器连接起来,容器可以使用容器名进行通信,而不需要依赖ip地址(其实就是在容器的/etc/hosts文件添加了host记录,原本容器之间的IP就是通的,只是我们增加了host记录,可以不用IP去访问)
创建容器centos-1:
1[root@host1 ~]# docker run -itd --name centos-1 registry.cn-shanghai.aliyuncs.com/public-namespace/cr7-centos7-tool:v ...
优化Kubernetes VPA的反应
这里是日文版。
几周前,我在苦战优化VPA(Vertical Pod Autoscaler)的性能。我们在公司计划做一个演示,应该有 5 到 10 分钟长,所以默认的 VPA 行为对我们来说太慢了。最终,不得不修改它的源代码,以便在几分钟内动态地改变 pod 的资源请求。
在本文中,我描述了 VPA 的工作原理,以及优化其性能的方法,包括代码修改。
VPA 是什么?VPA,Vertical Pod Autoscaler(垂直 Pod 自动缩放器),使我们能够动态定义资源请求。它观察 pod 的 cpu 和内存利用率,并在运行时更新这些资源请求。
VPA 是如何工作?VPA 由以下三部分组成。
admission-controller(准入控制器)
recommender(推荐器)
updater(更新器)
准入控制器注册许可网络挂钩以修改 pod 的创建请求。
推荐器检查目标 pod 的资源使用情况,并估计推荐的资源请求,然后更新与目标 pod 相关联的 VPA 对象。这个过程定期执行。
更新器检查记录在 VPA 对象中的推荐资源请求,如果目标 pod 的当前资源请求与推荐不匹配 ...
Pod 原地垂直伸缩 - 一个四年的KEP和两年的PR
该提案旨在允许 Pod 资源 requests 和 limits 的原地更新,而不需要重新启动 Pod 或其容器,该方案的核心思想是让 PodSpec 的 Resources 是可变的,表示所需的资源,此外 扩展 PodStatus 来反映分配给 Pod 的资源,并提供有关应用于 Pod 及其容器的实际资源信息。
此外该提案还提出了改进容器运行时接口(CRI)API,以便在运行时管理容器的 CPU 和内存资源配置,尝试扩展 UpdateContainerResources 这个 CRI API,使其适用于 Windows 和除 Linux 之外的其他未来的运行时。它还需求扩展 ContainerStatus CRI API,以允许 Kubelet 能够发现当前配置在容器上的资源。
原因由于各种原因,分配给 Pod 的容器资源可能需要变更比,这种场景有很多:
如 Pod 处理的负载大幅增加,而目前的资源不足了
又或者说负载大幅减少了,而分配的资源未被使用
资源配置不合理
目前,更改资源分配是需要重新创建 Pod 的,因为 PodSpec 的容器资源是不可改变的。 虽然许多无状态的工 ...
CGroups 以及在 K8s 中的应用 - IO
cgroups(control groups,控制组群) 是 Linux 内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)。cgroups到目前为止,有两个大版本, 即 v1 和 v2 。本文针对cgroups对IO的限制能力做简单介绍。
cgroups v1介绍我们当前的测试环境为centos 7.9 ,内核为 5.4版本,如下所示:
cgoups资源限制测试网络IO资源限制tc(Traffic Control)命令tc(Traffic Control) 是linux系统中常用的来控制传输速率、模拟网络延时丢包等场景的工具,tc命令有三个主要的概念,是qdisc、class和filter,qdisc又分为classless qdisc和classful qdisc,在控制传输速度的方面大致有两种用法
(1)对于classless qdisc,可以直接给网络接口直接添加,作为限流的工具
(2)对于classful qdisc,然后class和filter以这个classful qdisc为父节点,其中filter作为过滤器把流量分到具体的clas ...
CubeFS助力ClickHouse存算分离
01.简介ClickHouse是一个用于关系型联机分析(ROLAP)的列式数据库管理系统(DBMS),擅长PB级数据量的交互式分析。自2016 年开源以来,ClickHouse 凭借其数倍于业界顶尖分析型数据库的极致性能,成为交互式分析领域的后起之秀。CubeFS,则独具创新的设计,与其他产品有较明显的区别:它支持水平扩展的强一致性的元数据服务,提供了副本数弹性可变的多副本存储以及可灵活编码的纠删码存储,此外还支持多级智能加速能力,支持标准S3、POSIX、HDFS三种访问协议,与K8S及容器生态亦有良好兼容性。作为CNCF首个国产开源存储产品,CubeFS吸引了众多社区用户及开发者参与共建,除在OPPO广泛使用外,也已在国内10余家头部企业如京东、网易、贝壳找房、360、魅族、LinkSure网络、Reconova的各个核心业务上落地;部分企业如OPPO、京东、网易、贝壳等使用CubeFS数据规模已达数十PB甚至百PB级。
02.为什么选择CubeFS我们选择CubeFS做冷热分离有以下考虑:
CubeFS提供了比较丰富的接口,支持S3协议, 也可以本地部署client或者嵌入SD ...
K8s 增强版工作负载 OpenKruise 之 CloneSet
OpenKruise(https://openkruise.io) 是一个基于 Kubernetes 的扩展套件,主要聚焦于云原生应用的自动化,比如部署、发布、运维以及可用性防护。OpenKruise 提供的绝大部分能力都是基于 CRD 扩展来定义的,它们不存在于任何外部依赖,可以运行在任意纯净的 Kubernetes 集群中。Kubernetes 自身提供的一些应用部署管理功能,对于大规模应用与集群的场景这些功能是远远不够的,OpenKruise 弥补了 Kubernetes 在应用部署、升级、防护、运维等领域的不足。
OpenKruise 提供了以下的一些核心能力:
增强版本的 Workloads:OpenKruise 包含了一系列增强版本的工作负载,比如 CloneSet、Advanced StatefulSet、Advanced DaemonSet、BroadcastJob 等。它们不仅支持类似于 Kubernetes 原生 Workloads 的基础功能,还提供了如原地升级、可配置的扩缩容/发布策略、并发操作等。其中,原地升级是一种升级应用容器镜像甚至环境变量的全 ...
如何通过Rook/Ceph升级NFS服务
1. 前言nfs是广泛使用的网络化存储服务,用户基础大,技术成熟,具有操作知识的工程师很多。但是,在云原生和分布式存储的角度看,原生的nfs存储服务不能提供存储高可用能力,然而存储高可用能力是云原生的普遍需求。
本文探索通过ceph为nfs服务提供存储的高可用的可行方案。ceph存储结合nfs-ganesha服务,为nfs客户端提供了基于ceph对象存储的nfs协议输出。ceph提供的存储类型丰富,包括RBD,cephfs,RGW,能够有效满足不同业务场景的需求。本文给出了提供cephfs和RGW两种后端存储机制的nfs集成方案。期望nfs的众多用户可以在云原生环境中继续安心使用熟悉的nfs挂载提供存储能力,而同时获得了ceph存储提供的多副本或者纠删码的高可用特性,满足云原生环境对业务运行的新需求。
本文尝试通过rook(1.10.11)管理的ceph(17.2.5)创建nfs导出,为nfs用户提供一种新的选择和参考。
2. 准备cephfs后端存储2.1 cephfs的一些准备性知识
Volume
Volume是cephfs文件系统的一个抽象。在这个层面可以指定存储使用的cep ...
OpenKruise Cloneset 使用
OpenKruise(原名 Kubernetes 增强控制器)是一个 Kubernetes 的扩展框架,它提供了一些新的自定义控制器和 API 所需的 CRD(Custom Resource Definition)来简化应用程序生命周期管理。OpenKruise 旨在帮助开发者更加高效地管理容器应用程序,并支持更丰富、灵活的策略配置。
主要特性如下:
自动水平伸缩:提供了 DaemonSet 集群容器资源限制等高级功能,能够处理特定类型的工作负载并实现自我调整。
灰度发布:通过基于标签的访问控制和路由规则,向指定用户或环境推送应用程序版本部署更新进行测试和验证。
同步升级:支持可以同时定义多个关联对象的应用,实现“熔断”,防止服务时间达到最大值还未响应客户端请求而导致应用中断崩溃。
软件回滚:快速将服务恢复到之前选择正确状态的方法,减少故障对保证稳健运营的影响。
总之,OpenKruise 的目的是为使用 Kubernetes 运行容器的企业提供一个全面的解决方案,使他们可以轻松创建可靠、可扩展、安全和符合要求的应用程序。
openkruise 面向自动化场景的 Kubernete ...