华为云用户手册

  • 简介 节点是容器集群组成的基本元素。节点取决于业务,既可以是虚拟机,也可以是物理机。每个节点都包含运行Pod所需要的基本组件,包括Kubelet、Kube-proxy 、Container Runtime等。 CCE创建的Kubernetes集群包含Master节点和Node节点,本章讲述的节点特指Node节点,Node节点是集群的计算节点,即运行容器化应用的节点。 在云容器引擎CCE中,主要采用高性能的弹性云服务器ECS或裸金属服务器BMS作为节点来构建高可用的Kubernetes集群。
  • 节点paas用户/用户组说明 在集群中创建节点时,默认会在节点上创建paas用户/用户组。节点上的CCE组件和CCE插件在非必要时会以非root用户(paas用户/用户组)运行,以实现运行权限最小化,如果修改paas用户/用户组可能会影响节点上CCE组件和业务Pod正常运行。 CCE组件正常运行依赖paas用户/用户组,您需要注意以下几点要求: 请勿自行修改节点内目录权限、容器目录权限等。 请勿自行修改paas用户/用户组的GID和UID。 请勿在业务中直接使用paas用户/用户组设置业务文件的所属用户和组。
  • 节点生命周期 生命周期是指节点从创建到删除(或释放)历经的各种状态。 表1 节点生命周期状态说明 状态 状态属性 说明 运行中 稳定状态 节点正常运行状态,并且已连接上集群。 在这个状态的节点可以运行您的业务。 不可用 稳定状态 节点运行异常状态。 在这个状态下的实例,不能对外提供业务,需要重置节点。 创建中 中间状态 创建节点实例后,在节点状态进入运行中之前的状态。 安装中 中间状态 节点处于安装Kubernetes软件的过程中。 删除中 中间状态 节点处于正在被删除的状态。 如果长时间处于该状态,则说明出现异常。 关机 稳定状态 节点被正常停止。 在这个状态下的实例,不能对外提供业务,您可以在弹性云服务器列表页对其进行开机操作。 错误 稳定状态 节点处于异常状态。 在这个状态下的实例,不能对外提供业务,需要重置节点。
  • 容器底层文件存储系统说明 Docker 1.15.6及之前集群版本Docker底层文件存储系统采用xfs格式。 1.15.11及之后版本集群新建节点或重置后Docker底层文件存储系统全部采用ext4格式。 对于之前使用xfs格式容器应用,需要注意底层文件存储格式变动影响(不同文件系统格式文件排序存在差异:如部分java应用引用某个jar包,但目录中存在多个版本该jar包,在不指定版本时实际引用包由系统文件排序决定)。 查看当前节点使用的Docker底层存储文件格式可采用docker info | grep "Backing Filesystem"确认。 Containerd 使用Containerd容器引擎的节点,均采用ext4格式的文件存储系统。
  • 弃用和移除 Kubernetes 1.27版本 在Kubernetes 1.27版本,针对卷扩展 GA 特性的以下特性门禁将被移除,且不得再在 --feature-gates 标志中引用。(ExpandCSIVolumes,ExpandInUsePersistentVolumes,ExpandPersistentVolumes) 在Kubernetes 1.27版本,移除--master-service-namespace 命令行参数。该参数支持指定在何处创建名为kubernetes的Service来表示API服务器。自v1.26版本已被弃用,1.27版本正式移除。 在Kubernetes 1.27版本,移除 ControllerManagerLeaderMigration 特性门禁。Leader Migration 提供了一种机制,让 HA 集群在升级多副本的控制平面时通过在 kube-controller-manager 和 cloud-controller-manager 这两个组件之间共享的资源锁,安全地迁移“特定于云平台”的控制器。特性自 v1.24 正式发布,被无条件启用, 在 v1.27 版本中此特性门禁选项将被移除。 在Kubernetes 1.27版本,移除 --enable-taint-manager 命令行参数。该参数支持的特性基于污点的驱逐已被默认启用, 且在标志被移除时也将继续被隐式启用。 在Kubernetes 1.27版本,移除--pod-eviction-timeout 命令行参数。弃用的命令行参数 --pod-eviction-timeout 将被从 kube-controller-manager 中移除。 在Kubernetes 1.27版本,移除 CSI Migration 特性门禁。CSI migration 程序允许从树内卷插件移动到树外 CSI 驱动程序。 CSI 迁移自 Kubernetes v1.16 起正式发布,关联的 CSIMigration 特性门禁将在 v1.27 中被移除。 在Kubernetes 1.27版本,移除 CSIInlineVolume 特性门禁。CSI Ephemeral Volume 特性允许在 Pod 规约中直接指定 CSI 卷作为临时使用场景。这些 CSI 卷可用于使用挂载的卷直接在 Pod 内注入任意状态,例如配置、Secret、身份、变量或类似信息。 此特性在 v1.25 中进阶至正式发布。因此,此特性门禁 CSIInlineVolume 将在 v1.27 版本中移除。 在Kubernetes 1.27版本,移除 EphemeralContainers 特性门禁。对于 Kubernetes v1.27,临时容器的 API 支持被无条件启用;EphemeralContainers 特性门禁将被移除。 在Kubernetes 1.27版本,移除 LocalStorageCapacityIsolation 特性门禁。Local Ephemeral Storage Capacity Isolation 特性在 v1.25 中进阶至正式发布。此特性支持 emptyDir 卷这类 Pod 之间本地临时存储的容量隔离, 因此可以硬性限制 Pod 对共享资源的消耗。如果本地临时存储的消耗超过了配置的限制,kubelet 将驱逐 Pod。 特性门禁 LocalStorageCapacityIsolation 将在 v1.27 版本中被移除。 在Kubernetes 1.27版本,移除 NetworkPolicyEndPort 特性门禁。Kubernetes v1.25 版本将 NetworkPolicy 中的 endPort 进阶至正式发布。 支持 endPort 字段的 NetworkPolicy 提供程序可用于指定一系列端口以应用 NetworkPolicy。 在Kubernetes 1.27版本,移除 StatefulSetMinReadySeconds 特性门禁。对于作为 StatefulSet 一部分的 Pod,只有当 Pod 至少在 minReadySeconds 中指定的持续期内可用(并通过检查)时,Kubernetes 才会将此 Pod 标记为只读。 该特性在 Kubernetes v1.25 中正式发布,StatefulSetMinReadySeconds 特性门禁将锁定为 true,并在 v1.27 版本中被移除。 在Kubernetes 1.27版本,移除 IdentifyPodOS 特性门禁。启用该特性门禁,你可以为 Pod 指定操作系统,此项特性支持自 v1.25 版本进入稳定。 IdentifyPodOS 特性门禁将在 Kubernetes v1.27 中被移除。 在Kubernetes 1.27版本,移除 DaemonSetUpdateSurge 特性门禁。Kubernetes v1.25 版本还稳定了对 DaemonSet Pod 的浪涌支持, 其实现是为了最大限度地减少部署期间 DaemonSet 的停机时间。 DaemonSetUpdateSurge 特性门禁将在 Kubernetes v1.27 中被移除。 在Kubernetes 1.27版本,移除 --container-runtime 命令行参数。kubelet 接受一个已弃用的命令行参数 --container-runtime, 并且在移除 dockershim 代码后,唯一有效的值将是 remote。 Kubernetes v1.27 将移除该参数,该参数自 v1.24 版本以来已被弃用。 Kubernetes 1.26版本 移除v2beta2版本的HorizontalPodAutoscaler API HorizontalPodAutoscaler的autoscaling/v2beta2 API版本将不再在1.26版本中提供,详情请参见各发行版本中移除的API。 用户应迁移至autoscaling/v2版本的API。 移除v1beta1版本的流量控制API组 在Kubernetes 1.26版本后,开始不再提供flowcontrol.apiserver.k8s.io/v1beta1 API版本的FlowSchema和PriorityLevelConfiguration,详情请参见各发行版本中移除的API。但此API从Kubernetes 1.23版本开始,可以使用flowcontrol.apiserver.k8s.io/v1beta2;从Kubernetes 1.26版本开始,可以使用flowcontrol.apiserver.k8s.io/v1beta3。 存储驱动的弃用和移除,移除云服务厂商的in-tree卷驱动。 移除kube-proxy userspace模式 在Kubernetes 1.26版本,Userspace代理模式已被移除,已弃用的Userspace代理模式不再受Linux或Windows支持。Linux用户应使用Iptables或IPVS,Windows用户应使用Kernelspace,现在使用--mode userspace会失败。 Windows winkernel kube-proxy不再支持Windows HNS v1 APIs。 弃用--prune-whitelist标志 在Kubernetes 1.26版本,为了支持Inclusive Naming Initiative,--prune-whitelist标志将被弃用,并替换为--prune-allowlist,该标志在未来将彻底移除。 移除动态Kubelet配置 DynamicKubeletConfig特性门控移除,通过API动态更新节点上的Kubelet配置。在Kubernetes 1.24版本中从Kubelet移除相关代码,在Kubernetes 1.26版本从APIServer移除相关代码,移除该逻辑有助于简化代码提升可靠性,推荐方式是修改Kubelet配置文件然后重启Kubelet。更多信息,请参见在Kubernetes 1.26版本从APIServer移除相关代码。 弃用kube-apiserver命令行参数 在Kubernetes 1.26版本,正式标记弃用 --master-service-namespace 命令行参数,它对APIServer没有任何效果。 弃用kubectl run命令行参数 在Kubernetes 1.26版本,kubectl run未使用的几个子命令将被标记为弃用,并在未来某个版本移除,包括--cascade、--filename、--force、--grace-period、--kustomize、--recursive、--timeout、--wait等这些子命令。 移除与日志相关的原有命令行参数 在Kubernetes 1.26版本,将移除一些与日志相关的命令行参数,这些参数在之前的版本已被弃用。
  • 版本兼容性差异 版本升级路径 版本差异 建议自检措施 v1.23/v1.25 升级至v1.27 容器运行时Docker不再被推荐使用,建议您使用Containerd进行替换,详情请参见容器引擎。 已纳入升级前检查。 v1.23升级至v1.25 在Kubernetes v1.25版本中, PodSecurityPolicy已被移除,并提供Pod安全性准入控制器(Pod Security Admission配置)作为PodSecurityPolicy的替代。 如果您需要将PodSecurityPolicy的相关能力迁移到Pod Security Admission中,需要参照以下步骤进行: 确认集群为CCE v1.23的最新版本。 迁移PodSecurityPolicy的相关能力迁移到Pod Security Admission,请参见Pod Security Admission配置。 确认迁移后功能正常,再升级为CCE v1.25版本。 如果您不再使用PodSecurityPolicy能力,则可以在删除集群中的PodSecurityPolicy后,直接升级为CCE v1.25版本。 v1.21/v1.19 升级至v1.23 社区较老版本的Nginx Ingress Controller来说(社区版本v0.49及以下,对应CCE插件版本v1.x.x),在创建Ingress时没有指定Ingress类别为nginx,即annotations中未添加kubernetes.io/ingress.class: nginx的情况,也可以被Nginx Ingress Controller纳管。但对于较新版本的Nginx Ingress Controller来说(社区版本v1.0.0及以上,对应CCE插件版本2.x.x),如果在创建Ingress时没有显示指定Ingress类别为nginx,该资源将被Nginx Ingress Controller忽略,Ingress规则失效,导致服务中断。 已纳入升级前检查,也可参照nginx-ingress插件升级检查进行自检。 v1.19升级至v1.21 Kubernetes v1.21集群版本修复 了exec probe timeouts不生效的BUG,在此修复之前,exec 探测器不考虑 timeoutSeconds 字段。相反,探测将无限期运行,甚至超过其配置的截止日期,直到返回结果。 若用户未配置,默认值为1秒。升级后此字段生效,如果探测时间超过1秒,可能会导致应用健康检查失败并频繁重启。 升级前检查您使用了exec probe的应用的probe timeouts是否合理。 CCE的v1.19及以上版本的kube-apiserver要求客户侧webhook server的证书必须配置Subject Alternative Names (SAN)字段。否则升级后kube-apiserver调用webhook server失败,容器无法正常启动。 根因:Go语言v1.15版本废弃了X.509 CommonName,CCE的v1.19版本的kube-apiserver编译的版本为v1.15,若客户的webhook证书没有Subject Alternative Names (SAN),kube-apiserver不再默认将X509证书的CommonName字段作为hostname处理,最终导致认证失败。 升级前检查您自建webhook server的证书是否配置了SAN字段。 若无自建webhook server则不涉及。 若未配置,建议您配置使用SAN字段指定证书支持的IP及域名。 v1.15升级至v1.19 CCE v1.19版本的控制面与v1.15版本的Kubelet存在兼容性问题。若Master节点升级成功后,节点升级失败或待升级节点发生重启,则节点有极大概率为NotReady状态。 主要原因为升级失败的节点有大概率重启kubelet而触发节点注册流程,v1.15 kubelet默认注册标签(failure-domain.beta.kubernetes.io/is-baremetal和kubernetes.io/availablezone)被v1.19版本kube-apiserver视为非法标签。 v1.19版本中对应的合法标签为node.kubernetes.io/baremetal和failure-domain.beta.kubernetes.io/zone。 正常升级流程不会触发此场景。 在Master升级完成后尽量避免使用暂停升级功能,快速升级完Node节点。 若Node节点升级失败且无法修复,请尽快驱逐此节点上的应用,请联系技术支持人员,跳过此节点升级,在整体升级完毕后,重置该节点。 CCE的v1.15版本集群及v1.19版本集群将docker的存储驱动文件系统由 xfs切换成ext4,可能会导致升级后的java应用Pod内的import包顺序异常,既而导致Pod异常。 升级前查看节点上docker配置文件/etc/docker/daemon.json。检查dm.fs配置项是否为xfs。 若为ext4或存储驱动为overlay则不涉及。 若为xfs则建议您在新版本集群预先部署应用,以测试应用与新版本集群是否兼容。 { "storage-driver": "devicemapper", "storage-opts": [ "dm.thinpooldev=/dev/mapper/vgpaas-thinpool", "dm.use_deferred_removal=true", "dm.fs=xfs", "dm.use_deferred_deletion=true" ] } CCE的v1.19及以上版本的kube-apiserver要求客户侧webhook server的证书必须配置Subject Alternative Names (SAN)字段。否则升级后kube-apiserver调用webhook server失败,容器无法正常启动。 根因:Go语言v1.15版本废弃了X.509 CommonName,CCE的v1.19版本的kube-apiserver编译的版本为v1.15。CommonName字段作为hostname处理,最终导致认证失败。 升级前检查您自建webhook server的证书是否配置了SAN字段。 若无自建webhook server则不涉及。 若未配置,建议您配置使用SAN字段指定证书支持的IP及域名。 须知: 为减弱此版本差异对集群升级的影响,v1.15升级至v1.19时,CCE会进行特殊处理,仍然会兼容支持证书不带SAN。但后续升级不再特殊处理,请尽快整改证书,以避免影响后续升级。 v1.17.17版本及以后的集群CCE自动给用户创建了PSP规则,限制了不安全配置的Pod的创建,如securityContext配置了sysctl的net.core.somaxconn的Pod。 升级后请参考资料按需开放非安全系统配置,具体请参见PodSecurityPolicy配置。 1.15版本集群原地升级,如果业务中存在initContainer或使用Istio的场景,则需要注意以下约束: 1.16及以上的kubelet统计QosClass和之前版本存在差异,1.15及以下版本仅统计spec.containers下的容器,1.16及以上的kubelet版本会同时统计spec.containers和spec.initContainers下的容器,升级前后会造成Pod的QosClass变化,从而造成Pod中容器重启。 建议参考表1在升级前修改业务容器的QosClass规避该问题。 v1.13升级至v1.15 vpc集群升级后,由于网络组件的升级,master节点会额外占一个网段。在Master占用了网段后,无可用容器网段时,新建节点无法分配到网段,调度在该节点的pod会无法运行。 一般集群内节点数量快占满容器网段场景下会出现该问题。例如,容器网段为10.0.0.0/16,可用IP数量为65536,VPC网络IP分配是分配固定大小的网段(使用掩码实现,确定每个节点最多分配多少容器IP),例如上限为128,则此时集群最多支撑65536/128=512个节点,然后去掉Master节点数量为509,此时是1.13集群支持的节点数。集群升级后,在此基础上3台Master节点会各占用1个网段,最终结果就是506台节点。 表1 1.15版本升级前后QosClass变化 init容器(根据spec.initContainers计算) 业务容器(根据spec.containers计算) Pod(根据spec.containers和spec.initContainers计算) 是否受影响 Guaranteed Besteffort Burstable 是 Guaranteed Burstable Burstable 否 Guaranteed Guaranteed Guaranteed 否 Besteffort Besteffort Besteffort 否 Besteffort Burstable Burstable 否 Besteffort Guaranteed Burstable 是 Burstable Besteffort Burstable 是 Burstable Burstable Burstable 否 Burstable Guaranteed Burstable 是
  • v1.27版本 表2 v1.27补丁版本发布说明 CCE集群补丁版本号 Kubernetes社区版本 特性更新 优化增强 安全漏洞修复 v1.27.4-r0 v1.27.4 支持CronHPA定时扩缩容策略。 支持实例配置Security Context。 - 修复部分安全问题。 v1.27.3-r30 v1.27.4 - 支持一键配置监控告警。 修复部分安全问题。 v1.27.3-r20 v1.27.4 支持安装NGINX Ingress控制器插件。 支持安装云原生监控插件以及云原生日志插件,实现对应用指标的监控以及应用日志采集。 支持应用模板市场。 支持自定义资源(CRD)的使用。 支持对接Cloudshell。 优化集群创建时默认创建NAT网关以便于应用访问公网。 修复部分安全问题。 v1.27.3-r10 v1.27.4 CCE Autopilot支持创建1.27集群版本,有关更多信息请参见Kubernetes 1.27版本说明。 - -
  • v1.28版本 表1 v1.28补丁版本发布说明 CCE集群补丁版本号 Kubernetes社区版本 特性更新 优化增强 安全漏洞修复 v1.28.2-r0 v1.28.3 支持CronHPA定时扩缩容策略。 支持实例配置Security Context。 - 修复部分安全问题。 v1.28.1-r10 v1.28.3 CCE Autopilot支持创建1.28集群版本,有关更多信息请参见Kubernetes 1.28版本说明。 - -
  • 组件说明 表3 everest组件 容器组件 说明 资源类型 everest-csi-controller 此容器负责存储卷的创建、删除、快照、扩容、attach/detach等功能。若集群版本大于等于1.19,且插件版本为1.2.x,everest-csi-controller组件的Pod还会默认带有一个everest-localvolume-manager容器,此容器负责管理节点上的lvm存储池及localpv的创建。 Deployment everest-csi-driver 此容器负责PV的挂载、卸载、文件系统resize等功能。若插件版本为1.2.x,且集群所在区域支持node-attacher,everest-csi-driver组件的Pod还会带有一个everest-node-attacher的容器,此容器负责分布式attach EVS,该配置项在部分Region开放。 DaemonSet
  • CSI和Flexvolume存储插件的区别 表1 CSI与Flexvolume Kubernetes插件方案 CCE插件名称 插件特性 使用推荐 CSI everest CSI插件是kubernetes社区推荐的存储插件机制。CCE发布的kubernetes1.15版本及以上版本默认安装CSI插件everest,并用于对接块存储、文件存储、对象存储、极速文件存储等Iaas存储服务。 everest插件包含两部分: everest-csi-controller:提供存储卷的创建、删除、扩容、云盘快照等功能; everest-csi-driver:提供存储卷在node上的挂载、卸载、格式化等功能。 详情请参见everest 针对1.15及以上版本的集群,在创建时将默认安装CSI插件(everest)。CCE会跟随社区持续更新CSI插件的各种能力。 Flexvolume storage-driver Flexvolume插件是kubernetes社区早期实现的存储卷插件机制。自CCE上线伊始,提供的就是Flexvolume数据卷服务。CCE发布的kubernetes 1.13及以下版本安装的插件是“storage-driver”,并用于对接块存储、文件存储、对象存储、极速文件存储等Iaas存储服务。 详情请参见storage-driver 针对已经创建的1.13及以下版本的集群,仍然使用已经安装的Flexvolume存储插件(storage-driver),CCE已停止更新该插件,您可以升级集群版本。 不支持CSI和Flexvolume插件在同一个集群中使用。 不支持将v1.13及以下版本集群的Flexvolume插件转变到CSI插件,v1.13版本的集群可以通过升级集群版本切换为CSI插件,详情请参见。
  • 约束与限制 在CCE所创的集群中,Kubernetes v1.15.11版本是Flexvolume插件(storage-driver)被CSI插件(everest)兼容接管的过渡版本,v1.17及之后版本的集群中将彻底去除对Flexvolume插件(storage-driver)的支持,请您将Flexvolume插件的使用切换到CSI插件上。 CSI插件(everest)兼容接管Flexvolume插件(storage-driver)后,原有功能保持不变,但请注意不要新建Flexvolume插件(storage-driver)的存储,否则将导致部分存储功能异常。
  • 参考链接 社区v1.11与v1.13版本之间的CHANGELOG v1.12到v1.13的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.13.md v1.11到v1.12的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.12.md
  • 对象存储挂载参数 CCE的存储插件everest在挂载对象存储时默认设置了表1和表2的参数,其中表1中的参数不可取消。除了这些参数外,您还可以设置其他的对象存储挂载参数,具体请参见挂载并行文件系统。 表1 默认使用且不可取消的挂载参数 参数 参数值 描述 use_ino 无需填写 使用该选项,由obsfs分配inode编号。读写模式下自动开启。 big_writes 无需填写 配置后可更改写缓存最大值大小 nonempty 无需填写 允许挂载目录非空 allow_other 无需填写 允许其他用户访问并行文件系统 no_check_certificate 无需填写 不校验服务端证书 enable_noobj_cache 无需填写 为不存在的对象启用缓存条目,可提高性能。对象桶读写模式下自动使用。 从everest 1.2.40版本开始不再默认设置enable_noobj_cache参数。 sigv2 无需填写 签名版本。对象桶自动使用。 public_bucket 1 设置为1时匿名挂载公共桶。对象桶只读模式下自动使用。 表2 默认使用且可修改的挂载参数 参数 参数值 描述 max_write 131072 仅配置big_writes的情况下才生效,推荐使用128KB。 ssl_verify_hostname 0 不根据主机名验证SSL证书。 max_background 100 可配置后台最大等待请求数。并行文件系统自动使用。 umask 三位八进制数 配置文件权限的掩码。 例如,如果umask值为022,对于目录权限(最大权限为777)来说,则该目录权限为777 - 022 = 755,即rwxr-xr-x。
  • 在StorageClass中设置挂载参数 在StorageClass中设置挂载参数同样可以通过mountOptions字段实现,如下所示,mountOptions支持挂载的字段请参见对象存储挂载参数。 使用kubectl连接集群,详情请参见通过kubectl连接集群。 创建自定义的StorageClass,示例如下: kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: csi-obs-mount-option provisioner: everest-csi-provisioner parameters: csi.storage.k8s.io/csi-driver-name: obs.csi.everest.io csi.storage.k8s.io/fstype: s3fs everest.io/obs-volume-type: STANDARD reclaimPolicy: Delete volumeBindingMode: Immediate mountOptions: # 挂载参数 - umask=0027 StorageClass设置好后,就可以使用这个StorageClass创建PVC,动态创建出的PV会默认带有StorageClass中设置的挂载参数,具体操作步骤请参见通过动态存储卷使用对象存储。 验证挂载参数是否生效。 本例中将PVC挂载至使用nginx:latest镜像的工作负载,可以登录到运行挂载对象存储卷的Pod所在节点上通过进程详情观察。 执行以下命令: 对象桶:ps -ef | grep s3fs root 22142 1 0 Jun03 ? 00:00:00 /usr/bin/s3fs {your_obs_name} /mnt/paas/kubernetes/kubelet/pods/{pod_uid}/volumes/kubernetes.io~csi/{your_pv_name}/mount -o url=https://{endpoint}:443 -o endpoint={region} -o passwd_file=/opt/everest-host-connector/***_obstmpcred/{your_obs_name} -o nonempty -o big_writes -o sigv2 -o allow_other -o no_check_certificate -o ssl_verify_hostname=0 -o umask=027 -o max_write=131072 -o multipart_size=20 并行文件系统:ps -ef | grep obsfs root 1355 1 0 Jun03 ? 00:03:16 /usr/bin/obsfs {your_obs_name} /mnt/paas/kubernetes/kubelet/pods/{pod_uid}/volumes/kubernetes.io~csi/{your_pv_name}/mount -o url=https://{endpoint}:443 -o endpoint={region} -o passwd_file=/opt/everest-host-connector/***_obstmpcred/{your_obs_name} -o allow_other -o nonempty -o big_writes -o use_ino -o no_check_certificate -o ssl_verify_hostname=0 -o max_background=100 -o umask=027 -o max_write=131072
  • 安装Helm模板包 您可以使用Helm安装模板包(Chart),在使用Helm命令安装模板包前,您可能需要了解三大概念帮助您更好地使用Helm。 模板包(Chart):模板包中含有Kubernetes应用的资源定义以及大量的配置文件。 仓库(Repository):仓库是用于存放共享模板包的地方,您可以从仓库中下载模板包至本地安装,也可以选择直接在线安装。 实例(Release):实例是Helm在Kubernetes集群中安装模板包后的运行结果。一个模板包通常可以在一个集群中安装多次,每次安装都会创建一个新的实例。以MySQL模板包为例,如果您想在集群中运行两个数据库,可以安装该模板包两次,每一个数据库都会拥有自己的release 和release name。 更多关于Helm命令的使用方法请参见使用Helm。 从Helm官方推荐的仓库Artifact Hub中查找模板包,并配置Helm仓库。 helm repo add {repo_name} {repo_addr} 例如,以WordPress模板包为例: helm repo add bitnami https://charts.bitnami.com/bitnami 使用helm install命令安装模板包。 helm install {release_name} {chart_name} --set key1=val1 例如,以安装WordPress为例,步骤1添加的仓库中WordPress的模板包为bitnami/wordpress,并将实例自定义命名为my-wordpress,同时指定一些配置参数。 helm install my-wordpress bitnami/wordpress \ --set mariadb.primary.persistence.enabled=true \ --set mariadb.primary.persistence.storageClass=csi-disk \ --set mariadb.primary.persistence.size=10Gi \ --set persistence.enabled=false 您可以使用helm show values {chart_name}命令查看模板可配置的选项。例如,查看WordPress的可配置项: helm show values bitnami/wordpress 查看已安装的模板实例。 helm list
  • 安装Helm v3 本文以Helm v3.3.0为例进行演示。 如需选择其他合适的版本,请访问https://github.com/helm/helm/releases。 在连接集群的虚拟机上下载Helm客户端。 wget https://get.helm.sh/helm-v3.3.0-linux-amd64.tar.gz 解压Helm包。 tar -xzvf helm-v3.3.0-linux-amd64.tar.gz 将Helm复制到系统path路径下,以下为/usr/local/bin/helm。 mv linux-amd64/helm /usr/local/bin/helm 查看Helm版本。 helm version version.BuildInfo{Version:"v3.3.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}
  • 弃用和移除 Kubernetes 1.25版本 清理iptables链的所有权 Kubernetes通常创建iptables链来确保这些网络数据包到达, 这些iptables链及其名称属于Kubernetes内部实现的细节,仅供内部使用场景,目前有些组件依赖于这些内部实现细节,Kubernetes总体上不希望支持某些工具依赖这些内部实现细节。详细信息,请参见Kubernetes的iptables链不是API。 在Kubernetes 1.25版本后,Kubelet通过IPTablesCleanup特性门控分阶段完成迁移,是为了不在NAT表中创建iptables链,例如KUBE-MARK-DROP、KUBE-MARK-MASQ、KUBE-POSTROUTING。关于清理iptables链所有权的信息,请参见清理IPTables链的所有权。 存储驱动的弃用和移除,移除云服务厂商的in-tree卷驱动。 Kubernetes 1.24版本 在Kubernetes 1.24版本后,Service.Spec.LoadBalancerIP被弃用,因为它无法用于双栈协议。请使用自定义annotation。 在Kubernetes 1.24版本后,kube-apiserver移除参数--address、--insecure-bind-address、--port、--insecure-port=0。 在Kubernetes 1.24版本后,kube-controller-manager和kube-scheduler移除启动参数--port=0和--address。 在Kubernetes 1.24版本后,kube-apiserver --audit-log-version和--audit-webhook-version仅支持audit.k8s.io/v1,Kubernetes 1.24移除audit.k8s.io/v1[alpha|beta]1,只能使用audit.k8s.io/v1。 在Kubernetes 1.24版本后,kubelet移除启动参数--network-plugin,仅当容器运行环境设置为Docker时,此特定于Docker的参数才有效,并会随着Dockershim一起删除。 在Kubernetes 1.24版本后,动态日志清理功能已经被废弃,并在Kubernetes 1.24版本移除。该功能引入了一个日志过滤器,可以应用于所有Kubernetes系统组件的日志,以防止各种类型的敏感信息通过日志泄漏。此功能可能导致日志阻塞,所以废弃,更多信息请参见Dynamic log sanitization和 KEP-1753。 VolumeSnapshot v1beta1 CRD在Kubernetes 1.20版本中被废弃,在Kubernetes 1.24版本中移除,需改用v1版本。 在Kubernetes 1.24版本后,移除自1.11版本就废弃的service annotation tolerate-unready-endpoints,使用Service.spec.publishNotReadyAddresses代替。 在Kubernetes 1.24版本后,废弃metadata.clusterName字段,并将在下一个版本中删除。 Kubernetes 1.24及以后的版本,去除了kube-proxy监听NodePort的逻辑,在NodePort与内核net.ipv4.ip_local_port_range范围有冲突的情况下,可能会导致偶发的TCP无法连接的情况,导致健康检查失败、业务异常等问题。升级前,请确保集群没有NodePort端口与任意节点net.ipv4.ip_local_port_range范围存在冲突。更多信息,请参见Kubernetes社区PR。
  • 主要特性 Kubernetes 1.25版本 Pod Security Admission进入稳定阶段,并移除PodSecurityPolicy PodSecurityPolicy被废弃,并提供Pod Security Admission取代,具体的迁移方法可参见从PodSecurityPolicy迁移到内置的PodSecurity准入控制器。 Ephemeral Containers进入稳定阶段 临时容器是在现有的Pod中存在有限时间的容器。它对故障排除特别有用,特别是当需要检查另一个容器,但因为该容器已经崩溃或其镜像缺乏调试工具不能使用kubectl exec时。 对cgroups v2的支持进入稳定阶段 Kubernetes支持cgroups v2,与cgroups v1相比提供了一些改进,详情请参见cgroups v2。 SeccompDefault提升到Beta状态 如果要开启该特性,需要给kubelet增加启动参数为--seccomp-default=true,这样会默认开启seccomp为RuntimeDefault,提升整个系统的安全。1.25集群将不再支持使用注解“seccomp.security.alpha.kubernetes.io/pod”和“container.seccomp.security.alpha.kubernetes.io/annotation”来使用seccomp,请使用pod或container中“securityContext.seccompProfile”字段替代,详情请参见为Pod或容器配置安全上下文。 特性开启后可能应用所需的系统调用会被runtime限制,所以开启后应确保在测试环境调试,不会对应用造成影响。 网络策略中的EndPort进入稳定阶段 Network Policy中的EndPort已进入稳定状态,该特性于1.21版本合入。主要是在NetworkPolicy新增EndPort,可以指定一个Port范围,避免声明每一个Port。 本地临时容器存储容量隔离进入稳定阶段 本地临时存储容量隔离功能提供了对Pod之间本地临时存储容量隔离的支持,如EmptyDir。因此,如果一个Pod对本地临时存储容量的消耗超过该限制,就可以通过驱逐Pod来硬性限制其对共享资源的消耗。 CRD验证表达式语言升级为Beta阶段 CRD验证表达式语言已升级为 beta 版本, 这使得声明如何使用通用表达式语言(CEL)验证自定义资源成为可能。 请参考验证规则指导。 引入KMS v2 API 在Kubernetes 1.25版本,引入KMS v2 alpha1 API以提升性能,实现轮替与可观察性改进。 此API使用AES-GCM替代了AES-CBC,通过DEK实现静态数据加密(Kubernetes Secrets),此过程中无需您额外操作,且支持通过AES-GCM和AES-CBC进行读取。 更多信息,请参考使用 KMS provider进行数据加密指南。 Pod新增网络就绪状况 Kubernetes 1.25引入了对kubelet所管理的新的Pod状况PodHasNetwork的Alpha支持, 该状况位于Pod的status字段中 。详情请参见Pod网络就绪。 应用滚动上线所用的两个特性进入稳定阶段 在Kubernetes 1.25版本,StatefulSet的minReadySeconds进入稳定阶段,允许每个Pod等待一段预期时间来减缓StatefulSet的滚动上线。更多信息,请参见最短就绪秒数。 在Kubernetes 1.25版本,DaemonSet的maxSurge进入稳定阶段,允许DaemonSet工作负载在滚动上线期间在一个节点上运行同一 Pod的多个实例,有助于将DaemonSet的停机时间降到最低。DaemonSet不允许maxSurge和hostPort同时使用,因为两个活跃的Pod无法共享同一节点的相同端口。更多信息,请参见DaemonSet工作负载滚动上线。 对使用用户命名空间运行Pod提供Alpha支持 对使用user namespace运行Pod提供alpha支持,将Pod内的root用户映射到容器外的非零ID,使得从容器角度看是root身份运行,而从主机角度看是常规的非特权用户。目前尚处于内测阶段,需要开启特性门控UserNamespacesStatelessPodsSupport, 且要求容器运行时必须能够支持此功能。更多信息,请参见对使用user namespace运行Pod提供alpha支持。 Kubernetes 1.24版本 从kubelet中删除 Dockershim Dockershim自1.20版本被标废弃以来,在1.24版本正式从Kubelet代码中移除。如果还想使用Docker作为容器运行时的话,需要切换到cri-dockerd,或者使用其他支持CRI的运行时比如Containerd/CRI-O等。 从Docker Engine 切换到Containerd的流程请参见将节点容器引擎从Docker迁移到Containerd。 您需要注意排查是否有agent或者应用强依赖Docker Engine的,比如在代码中使用docker ps,docker run, docker inspect等,需要注意兼容多种runtime,以及切换到标准cri接口。 Beta APIs默认关闭 在社区移除一些长期Beta API的过程中发现,90%的集群管理员并没有关心Beta API默认开始,其实Beta特性是不推荐在生产环境中使用,但是因为默认的打开策略,导致这些API在生产环境中都被默认开启,这样会因为Beta特性的bug带来一些风险,以及升级的迁移的风险。所以在1.24版本开始,Beta API默认关闭,之前已经默认开启的Beta API会保持默认开启。 支持OpenAPI v3 在Kubernetes 1.24版本后,OpenAPI V3默认开启。 存储容量跟踪特性进入稳定阶段 在Kubernetes 1.24版本后,CSIStorageCapacity API支持显示当前可用的存储大小,确保Pod调度到足够存储容量的节点上,减少Volumes创建和挂载失败导致的Pod调度延迟,详细信息请参见存储容量。 gRPC 探针升级到Beta阶段 在Kubernetes 1.24版本后,gRPC探针进入Beta,默认可用特性门控参数GRPCContainerProbe,使用方式请参见配置探针。 特性门控LegacyServiceAccountTokenNoAutoGeneration默认启用 LegacyServiceAccountTokenNoAutoGeneration特性门控进入beta状态,默认为开启状态,开启后将不再为Service Account自动生成Secret Token。如果需要使用永不过期的Token,需要自己新建Secrets并挂载,详情请参见服务账号令牌Secret。 避免 IP 分配给服务的冲突 Kubernetes 1.24引入了一项新功能,允许为服务的静态IP地址分配软保留范围。 通过手动启用此功能,集群将从服务IP地址池中自动分配IP,从而降低冲突风险。 基于Go 1.18编译 在Kubernetes 1.24版本后,Kubernetes基于Go 1.18编译,默认不再支持SHA-1哈希算法验证证书签名,例如SHA1WithRSA、ECDSAWithSHA1算法,推荐使用SHA256算法生成的证书进行认证。 StatefulSet支持设置最大不可用副本数 在Kubernetes 1.24版本后,StatefulSets支持可配置maxUnavailable参数,使得滚动更新时可以更快地停止Pods。 节点非体面关闭进入Alpha阶段 在Kubernetes 1.24中,节点非体面关闭特性是Alpha版。当kubelet的节点关闭管理器可以检测到即将到来的节点关闭操作时,节点关闭才被认为是体面的。详情请参见处理节点非体面关闭。
  • 参考链接 社区v1.9与v1.11版本之间的CHANGELOG v1.10到v1.11的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.11.md v1.9到v1.10的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.10.md
  • 查看CustomedHPA策略 您可以查看CustomedHPA策略的规则和最新状态,参照界面中的报错提示有针对性的解决异常事件。 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中单击“策略”,切换至“CustomedHPA策略”页签,单击要查看的CustomedHPA策略前方的。 在展开的区域中,可以看到规则页签,若策略异常,请单击“最新状态”栏中的“详情”,参照展开的详细信息进行定位处理。 您还可以在工作负载详情页中查看已创建的HPA策略: 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中单击“工作负载”,单击工作负载名称查看详情。 在该工作负载详情页的“弹性伸缩”页签下可以看到HPA / CustomedHPA策略,您在“策略”页面配置的伸缩策略也会在这里显示。
  • 查看HPA策略 您可以查看HPA策略的规则、状态和事件,参照界面中的报错提示有针对性的解决异常事件。 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中单击“策略”,切换至“HPA策略”页签,单击要查看的HPA策略前方的。 在展开的区域中,可以看到规则、状态页签,单击策略操作区域的“事件”,可以看到事件页签。若策略异常,请参照界面中的报错提示进行定位处理。 您还可以在工作负载详情页中查看已创建的HPA策略: 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中单击“工作负载”,单击工作负载名称查看详情。 在该工作负载详情页的“弹性伸缩”页签下可以看到HPA / CustomedHPA策略,您在“策略”页面配置的伸缩策略也会在这里显示。 表1 事件类型及名称 事件类型 事件名称 描述 正常 SuccessfulRescale 扩缩容成功 异常 InvalidTargetRange 无效的TargetRange InvalidSelector 无效选择器 FailedGetObjectMetric 获取对象失败数 FailedGetPodsMetric 获取Pod列表失败指标 FailedGetResourceMetric 获取资源失败数 FailedGetExternalMetric 获取外部指标失败 InvalidMetricSourceType 无效的指标来源类型 FailedConvertHPA 转换HPA失败 FailedGetScale 获取比例尺失败 FailedComputeMetricsReplicas 计算指标副本数失败 FailedGetScaleWindow 获取ScaleWindow失败 FailedRescale 扩缩容失败
  • 其他废弃和移除 移除OutOfDisk node condition,改为使用DiskPressure。 scheduler.alpha.kubernetes.io/critical-pod annotation已被移除,如需要改为设置priorityClassName。 beta.kubernetes.io/os和beta.kubernetes.io/arch在1.14版本中已经废弃,计划在1.18版本中移除。 禁止通过--node-labels设置kubernetes.io和k8s.io为前缀的标签,老版本中kubernetes.io/availablezone该label在1.17中移除,整改为failure-domain.beta.kubernetes.io/zone获取AZ信息。 beta.kubernetes.io/instance-type被废弃,使用node.kubernetes.io/instance-type替代。 移除{kubelet_root_dir}/plugins路径。 移除内置集群角色system:csi-external-provisioner和system:csi-external-attacher。
  • 资源变更与弃用 apps/v1beta1和apps/v1beta2下所有资源不再提供服务,使用apps/v1替代。 extensions/v1beta1下daemonsets、deployments、replicasets不再提供服务,使用apps/v1替代。 extensions/v1beta1下networkpolicies不再提供服务,使用networking.k8s.io/v1替代。 extensions/v1beta1下podsecuritypolicies不再提供服务,使用policy/v1beta1替代。 extensions/v1beta1 ingress v1.20版本不再提供服务,当前可使用networking.k8s.io/v1beta1。 scheduling.k8s.io/v1beta1 and scheduling.k8s.io/v1alpha1下的PriorityClass计划在1.17不再提供服务,迁移至scheduling.k8s.io/v1。 events.k8s.io/v1beta1中event series.state字段已废弃,将在1.18版本中移除。 apiextensions.k8s.io/v1beta1下CustomResourceDefinition已废弃,将再1.19不在提供服务,使用apiextensions.k8s.io/v1。 admissionregistration.k8s.io/v1beta1 MutatingWebhookConfiguration和ValidatingWebhookConfiguration已废弃,将在1.19不在提供服务,使用admissionregistration.k8s.io/v1替换。 rbac.authorization.k8s.io/v1alpha1 and rbac.authorization.k8s.io/v1beta1被废弃,使用rbac.authorization.k8s.io/v1替代,v1.20会正式停止服务。 storage.k8s.io/v1beta1 CSINode object废弃并会在未来版本中移除。
  • 重要说明 在Kubernetes 1.28版本,调度框架发生变化,减少无用的重试,从而提高调度程序的整体性能。如果开发人员在集群中使用了自定义调度程序插件,请参见调度框架变化进行适配升级。 在Kubernetes 1.28 版本,Ceph FS 树内插件已在 v1.28 中弃用,并计划在 v1.31 中删除(社区没有计划进行 CSI 迁移)。 建议使用 Ceph CSI 第三方存储驱动程序作为替代方案。 在Kubernetes 1.28 版本,Ceph RBD 树内插件已在 v1.28 中弃用,并计划在 v1.31 中删除(社区没有计划进行 CSI 迁移)。建议使用 RBD 模式的 Ceph CSI 第三方存储驱动程序作为替代方案。
  • 特性门禁及命令行参数 在Kubernetes 1.28版本,kubelet移除了flag –short。因此kubectl version 默认输出与kubectl version –short相同。 在Kubernetes 1.28版本,kube-controller-manager废弃flag--volume-host-cidr-denylist和--volume-host-allow-local-loopback。--volume-host-cidr-denylist是用逗号分隔的一个CIDR范围列表,禁止使用这些地址上的卷插件。--volume-host-allow-local-loopback为false时,禁止本地回路IP地址和--volume-host-cidr-denylist中所指定的CIDR范围。 在Kubernetes 1.28版本,kubelet --azure-container-registry-config 被弃用并在未来的版本中会被删除。 请使用 --image-credential-provider-config 和 --image-credential-provider-bin-dir 来设置。 在Kubernetes 1.28版本,kube-scheduler: 删除了 --lock-object-namespace 和 --lock-object-name。 请使用 --leader-elect-resource-namespace 和 --leader-elect-resource-name 或 ComponentConfig 来配置这些参数。(--lock-object-namespace用来定义锁对象的命名空间,--lock-object-name用来定义锁对象的名称) 在Kubernetes 1.28版本,KMSv1 已弃用,以后只会接收安全更新。请改用 KMSv2。在未来版本中, 设置 --feature-gates=KMSv1=true 以使用已弃用的 KMSv1 功能。 在Kubernetes 1.28版本,移除了如下特性门禁:DelegateFSGroupToCSIDriver、DevicePlugins、KubeletCredentialProviders、MixedProtocolLBService、ServiceInternalTrafficPolicy、ServiceIPStaticSubrange、EndpointSliceTerminatingCondition。
  • API变更与弃用 在Kubernetes 1.28版本,移除特性NetworkPolicyStatus,因此Network Policy不再有status属性。 在Kubernetes 1.28版本,Job对象中增加了新的annotationbatch.kubernetes.io/cronJob-scheduled-timestamp,表示Job的创建时间。 在Kubernetes 1.28版本,Job API中添加podReplacementPolicy和terminating字段,当前一旦先前创建的pod终止,Job就会立即启动替换pod。添加字段允许用户指定是在先前的Pod终止后立即更换Pod(原行为),还是在现有的Pod完全终止后才替换Pod(新行为)。这是一项 Alpha 级别特性,您可以通过在集群中启用JobPodReplacementPolicy 来启用该特性。 在Kubernetes 1.28版本,Job支持BackoffLimitPerIndex字段。当前使用的运行Job的策略是Job中的整个Pod共享一个Backoff机制,当Job达到次Backoff的限制时,整个Job都会被标记为失败,并清理资源,包括尚未运行的index。此字段允许对单个的index设置Backoff。更多信息请参见逐索引的回退限制。 在Kubernetes 1.28版本,添加ServedVersions字段到 StorageVersion API中。该变化由混合代理版本特性引入。该增加字段ServedVersions用于表明API服务器可以提供的版本。 在Kubernetes 1.28版本,SelfSubjectReview 添加到到authentication.k8s.io/v1中,并且kubectl auth whoami走向GA。 在Kubernetes 1.28版本,PersistentVolume有了一个新的字段LastPhaseTransitionTime,用来保存最近一次volume转变Phase的时间。 在Kubernetes 1.28版本,PVC.Status中移除resizeStatus,使用AllocatedResourceStatus替代。resizeStatus表示调整存储大小操作的状态,默认为空字符串。 在Kubernetes 1.28版本,设置了hostNetwork: true并且定义了ports的Pods,自动设置hostport字段。 在Kubernetes 1.28版本,StatefulSet的Pod索引设置为Pod的标签statefulset.kubernetes.io/pod-index。 在Kubernetes 1.28版本,Pod的Condition字段中的PodHasNetwork重命名为PodReadyToStartContainers,用来表明网络、卷等已成功创建,sandbox pod已经创建完成,可以启动容器。 在Kubernetes 1.28版本,在KubeSchedulerConfiguration中添加了新的配置选项 delayCacheUntilActive, 该参数为true时,非master节点的kube-scheduler不会缓存调度信息。这为非主节点的内存减缓了压力,但会导致主节点发生故障时,减慢故障转移的速度。 在Kubernetes 1.28版本,在admissionregistration.k8s.io/v1alpha1.ValidatingAdmissionPolicy中添加namespaceParamRef字段。 在Kubernetes 1.28版本,在CRD validation rules中添加reason和fieldPath,允许用户指定验证失败的原因和字段路径。 在Kubernetes 1.28版本,ValidatingAdmissionPolicy的CEL表达式通过namespaceObject支持namespace访问。 在Kubernetes 1.28版本,将API groups ValidatingAdmissionPolicy 和ValidatingAdmissionPolicyBinding 提升到betav1。 在Kubernetes 1.28版本,ValidatingAdmissionPolicy 扩展了messageExpression字段,用来检查已解析类型。
  • 新增特性及特性增强 社区特性的Alpha阶段默认禁用、Beta阶段一般默认启用、GA阶段将一直默认启用,且不能禁用(会在后续版本中删除这个开关功能)。CCE对新特性的策略与社区保持一致。 版本偏差策略扩展至3个版本 从1.28控制平面/1.25 工作节点开始,Kubernetes版本偏差策略将支持的控制平面/工作节点偏差扩展到 3 个版本。 这使得节点的年度次要版本升级成为可能,同时保持受支持的次要版本。更多细节请参考版本偏差策略。 可追溯的默认 StorageClass 进阶至 GA 在Kubernetes 1.28版本,可追溯默认 StorageClass 赋值现已进阶至GA。 这项增强特性极大地改进了默认的StorageClasses为PersistentVolumeClaim (PVC) 赋值的方式。 PersistentVolume (PV) 控制器已修改为:当未设置 storageClassName 时,自动向任何未绑定的 PersistentVolumeClaim 分配一个默认的 StorageClass。此外,API 服务器中的 PersistentVolumeClaim 准入验证机制也已调整为允许将值从未设置状态更改为实际的 StorageClass 名称。更多使用细节请参考默认StorageClass赋值。 原生边车容器(Alpha) 在Kubernetes 1.28版本,原生边车容器以Alpha版本正式发布。其在 Init 容器中添加了一个新的 restartPolicy 字段, 该字段在 SidecarContainers 特性门控启用时可用。需要注意的是,原生边车容器目前仍有些问题需要解决,因此K8S社区建议仅在 Alpha 阶段的短期测试集群中使用边车功能。 更多使用细节请参考原生边车容器。 混合版本代理(Alpha) 在Kubernetes 1.28版本,发布了用于改进集群安全升级的新机制(混合版本代理)。该特性为Alpha特性。 当集群进行升级时,集群中不同版本的 kube-apiserver 为不同的内置资源集(组、版本、资源)提供服务。在这种情况下资源请求如果由任一可用的 apiserver 提供服务,请求可能会到达无法解析此请求资源的 apiserver 中,导致请求失败。该特性能解决该问题。(主要注意的是,CCE本身提供的升级能力即可做到无损升级,因此不存在该特性涉及的场景)。更多使用细节请参考混合版本代理。 节点非体面关闭特性达到 GA 在Kubernetes 1.28版本,节点非体面关闭特性达到GA阶段。当一个节点被关闭但没有被 Kubelet 的 Node Shutdown Manager 检测到时,StatefulSet 的 Pod 将会停留在终止状态,并且不能移动到新运行的节点上。当用户确认该节点已经处于不可恢复的情况下,可以手动为Node打上out-of-service的污点,以使得该节点上的StatefulSet的Pod和VolumeAttachments被强制删除,并在健康的Node上创建相应的Pod。更多使用细节请参考节点非体面关闭。 NodeSwap特性达到Beta 在Kubernetes 1.28版本,NodeSwap能力进阶至Beta版本。目前仍然处于默认关闭状态,需要使用NodeSwap门控打开。该特性可以为Linux节点上运行的Kubernetes工作负载逐个节点地配置内存交换。需要注意的是,该特性虽然进阶至Beta特性,但仍然存在一些需要增强的问题和安全风险。更多使用细节请参考NodeSwap特性。 Job相关特性 在Kubernetes 1.28版本,增加了Pod更换策略和基于索引的回退限制两个alpha特性。 Pod更换策略 默认情况下,当 Pod 进入终止(Terminating)状态(例如由于抢占或驱逐机制)时,Kubernetes 会立即创建一个替换的 Pod,因此这时会有两个 Pod 同时运行。 在Kubernetes 1.28版本中可以使用JobPodReplacementPolicy 来启用该特性。可以在Job的Spec中定义podReplacementPolicy,目前仅可设置为Failed。在设置为Failed之后,Pod 仅在达到 Failed 阶段时才会被替换,而不是在它们处于终止过程中(Terminating)时被替换。此外,你可以检查 Job 的 .status.termination 字段。该字段的值表示终止过程中的 Job 所关联的 Pod 数量。 逐索引的回退限制 默认情况下,带索引的 Job(Indexed Job)的 Pod 失败情况会被统计下来,受 .spec.backoffLimit 字段所设置的全局重试次数限制。这意味着,如果存在某个索引值的 Pod 一直持续失败,则会 Pod 会被重新启动,直到重试次数达到限制值。 一旦达到限制值,整个 Job 将被标记为失败,并且对应某些索引的 Pod 甚至可能从不曾被启动。此时逐索引的回退限制就显得有用。 在Kubernetes 1.28版本中,可以通过启用集群的 JobBackoffLimitPerIndex 特性门控来启用此特性。开启之后,允许在创建带索引的 Job(Indexed Job)时指定 .spec.backoffLimitPerIndex 字段。当某个Job的失败次数超过设定的上限时,将不再进行重试。 CEL相关特性 在Kubernetes 1.28版本,CEL能力进行了相应的增强。 CRD 使用 CEL 进行 Validate 的特性进阶至Beta 该特性在v1.25版本就已经升级为Beta版本。通过将 CEL 表达式直接集成在 CRD 中, 可以使开发者在不使用 Webhook 的情况下解决大部分对 CR 实例进行验证的用例。在未来的版本,将继续扩展 CEL 表达式的功能,以支持默认值和 CRD 转换。 基于CEL的准入控制进阶至Beta 基于通用表达式语言 (CEL) 的准入控制是可定制的,对于 kube-apiserver 接受到的请求,可以使用 CEL 表达式来决定是否接受或拒绝请求,可作为 Webhook 准入控制的一种替代方案。在 v1.28 中,CEL 准入控制被升级为 Beta,同时添加了一些新功能,包括但不限于: ValidatingAdmissionPolicy 类型检查现在可以正确处理 CEL 表达式中的 “authorizer” 变量。 ValidatingAdmissionPolicy 支持对 messageExpression 字段进行类型检查。 kube-controller-manager 组件新增 ValidatingAdmissionPolicy 控制器,用来对 ValidatingAdmissionPolicy 中的 CEL 表达式做类型检查,并将原因保存在状态字段中。 支持变量组合,可以在 ValidatingAdmissionPolicy 中定义变量,然后在定义其他变量时使用它。 新增 CEL 库函数支持对 Kubernetes 的 resource.Quantity 类型进行解析。 其它特性说明 在Kubernetes 1.28版本,ServiceNodePortStaticSubrange 特性为beta,允许保留静态端口范围,避免与动态分配端口冲突。具体细节请参考为NodePort Service分配端口时避免冲突。 在Kubernetes 1.28版本,增加了alpha特性ConsistentListFromCache,允许kube-apiserver从缓存中提供一致性列表,Get和List请求可以从缓存中读取数据,而不需要从etcd中获取。 在Kubernetes 1.28版本,kubelet能够配置drop-in目录(alpha特性)。该特性允许向kubelet添加对“--config-dir”标志的支持,以允许用户指定一个插入目录,该目录将覆盖位于/etc/kubernetes/kubelet.conf位置的Kubelet的配置。 在Kubernetes 1.28版本,ExpandedDNSConfig 升级至GA,默认会被打开。该参数用于允许扩展DNS的配置。 在Kubernetes 1.28版本,提供Alpha特性CRD Validation Ratcheting。该特性允许Patch或者Update请求没有更改任何不合法的字段,将允许CR验证失败。 在Kubernetes 1.28版本,kube-controller-manager添加了--concurrent-cron-job-syncs flag用来设置cron job controller的workers数。
  • 参考链接 社区v1.13与v1.15版本之间的CHANGELOG v1.14到v1.15的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.15.md v1.13到v1.14的变化: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.14.md
  • 资源变更与弃用 extensions/v1beta1中Ingress已弃用,1.19正式暂停使用,迁移到networking.k8s.io/v1beta1 extensions/v1beta1中NetworkPolicy 1.16正式暂停使用,迁移到networking.k8s.io/v1 extensions/v1beta1中PodSecurityPolicy 1.16正式暂停使用,迁移到policy/v1beta1 extensions/v1beta1、apps/v1beta1或apps/v1beta2的DaemonSet、Deployment、和ReplicaSet,迁移至apps/v1,1.16版本暂停使用 PriorityClass升级到scheduling.k8s.io/v1,scheduling.k8s.io/v1beta1和scheduling.k8s.io/v1alpha1 1.17正式废弃 events.k8s.io/v1beta1 Event API中series.state字段废弃,将在1.18版本中移除
  • 云原生观测全面升级 监控、日志、告警构建全新的云原生观测能力,帮助开发者实时了解系统的运行状态,为问题的排查和诊断提供数据支撑,提供定制化的云原生观测方案,分别从基础设施层、容器和应用层构建完整的云原生观测生态,打造出一个可视化的运维观测体系。 监控中心 监控中心容器洞察、健康诊断、仪表盘等容器监控与诊断能力,可实时监控应用及资源,采集各项指标及事件等数据以分析应用健康状态,提供全面、清晰、多维度数据可视化能力,可实现故障快速定位,并兼容主流开源组件。 容器洞察:容器洞察功能提供容器视角的可视化视图,支持集群、节点、工作负载和 Pod 等多种维度的监控视图,支持多级下钻与关联分析。 健康诊断:集群健康诊断基于容器运维专家经验对集群健康状况进行全面检查,能够及时发现集群故障与潜在风险并给出修复建议。 仪表盘:仪表盘功能内置常见的容器监控大盘,如Kube-apiserver组件监控、CoreDNS域名解析组件监控和PVC监控等。 日志中心 CCE提供日志采集插件对接云日志服务LTS,您可以一站式采集Kubernetes集群的业务日志、控制面的组件日志和审计日志。 告警中心 集群内置集群告警规则最佳实践,覆盖常见的集群和应用故障场景,支持一键开启能力,在集群发生故障时能够及时发现并预警,协助您维护业务稳定性。
共100000条