Kubernetes 新概念 “Initializers”解析(中):能让你为集群编写插件的新模型

简介: initialization 剖析 1.配置需要 initialization 的资源类型 : InitializerConfiguration(https://kubernetes.io/docs/admin/extensible-admission-controllers/#configure-initializers-on-the-fly) 对象允许你配置被 initializers 分配到的资源类型。

initialization 剖析

1.配置需要 initialization 的资源类型 :


InitializerConfiguration(https://kubernetes.io/docs/admin/extensible-admission-controllers/#configure-initializers-on-the-fly) 对象允许你配置被 initializers 分配到的资源类型。

举个例子来说,你可以进行创建,将“myproxy”initializer 添加到类型apps/v1beta1.Deployment 和 v1.DeamonSet 对象中。你可以尽可能多地创建 InitializerConfigurations,它们将适用于所有命名空间 。

2.API 服务器将为新资源分配 initializers

当你向 apiserver 提交 Deployment 对象时,将更新 Deployment 的metadata.initalizers.pending 并在其中添加“myproxy”值。此字段显示当前分配给资源的initializers 。

准确的说,不是由 apiserver 添加 initializers。有一个名为“Initializer”的准入控制插件,这使整个 initialization 流程成为可能。它通过将 –admission-controller=Initializer 标志添加到 kube-apiserver 来进行启用 。

3.可以编写一个控制器来检测资源情况:

你开发并部署到集群的自定义控制器使用Watch API 来对新的资源进行监听,捕获并进行所需的修改。

4.等待修改资源的轮次:

一旦你的控制器通过 Watch API 拦截一个对象,它只能修改对象,如果它在初始化器列表(metadata.initializers.pending[0])的第一个元素上检查到它的名字的话。否则,这意味着它是一些其他 initializers 修改资源的轮次,而现在应该跳过修改。

5.完成修改, 生成下一个 initializer。

完成对资源的修改后, 控制器应从对象的 metadata.initializers.pending 列表中删除其名称, 并将该对象保存回 API 服务器。

6.不存在更多 initializers 时, 资源准备好进行实现:

当 Kubernetes API 服务器检测到该对象没有其他挂起的 initializers 时, 它会判定对象 “已initialized”。Kubernetes 调度程序和其他控制器可以检测到完全 initialized 的对象并加以利用。

您可以同时在群集上运行多个 initializers。这些自定义控制器中的每一个都将收到有关对资源 (如 Pods) 的修改的通知, 但他们会等待轮次来对对象进行修改,直到他们在列表中检测他们的名字。

Initializers:在 Kubernetes API 中进行实现

在不知道它们实际上是如何在 Kubernetes API 服务器之下实现的情况下,你可以对 initializers 进行开发和部署 。我们来详细讨论一下它是如何在 Kubernetes API 中进行实现的:

简而言之, 当一个 Pod 资源提交到 API 并被分配一个待定的 initializers 列表时, 直到 initialization 完成,它实际上都不会被安排。Kubernetes 调度程序, 这个所谓的调度程序其实是另一个控制器,检测在 API 服务器中显示的 pod,并分配给每个节点。

那么, 为什么调度程序和其他控制器在初始化之前无法看到该对象, 即使该对象保存在 API 服务器 (和预计数据库中), 并且对某些其他控制器 (即 initializers)可见?

答案是存在一个叫 includeUninitialized 的请求参数。此参数默认为 false, 因此, API 将未初始化的对象从默认客户端(如 kubectl)和控制器 (如调度程序) 隐藏在 “监视” 或 “列表” 之类的请求中。所以你开发的 initializers 必须设置 includeUninitialized = true 查询参数才能监测这些对象。

Initializers 阻止创建请求。当创建对象的请求提交到 API 服务器时, 它不会马上返回, 并且请求会一直被阻止, 直到 initialization 完成。如果使用的是 kubectl, 并且对象在 uninitialized 状态下被阻止, 你会在30秒后发现 kubectl 超时。

本文转自中文社区-Kubernetes 新概念 “Initializers”解析(中):能让你为集群编写插件的新模型

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
机器学习/深度学习 数据可视化 算法
机器学习-可解释性机器学习:随机森林与fastshap的可视化模型解析
机器学习-可解释性机器学习:随机森林与fastshap的可视化模型解析
107 1
|
1月前
|
Go 开发者
Go语言并发模型概览:CSP模型解析
【2月更文挑战第17天】Go语言以其强大的并发处理能力在编程领域崭露头角。其中,CSP(Communicating Sequential Processes)模型作为Go语言并发模型的核心之一,在并发编程中发挥着至关重要的作用。本文将深入解析CSP模型的基本原理及其在Go语言中的应用,帮助读者更好地理解Go语言的并发编程特性。
|
25天前
|
存储 NoSQL 算法
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)(二)
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)
36 0
|
28天前
|
机器学习/深度学习 人工智能 自然语言处理
大模型落地实战指南:从选择到训练,深度解析显卡选型、模型训练技、模型选择巧及AI未来展望---打造AI应用新篇章
大模型落地实战指南:从选择到训练,深度解析显卡选型、模型训练技、模型选择巧及AI未来展望---打造AI应用新篇章
大模型落地实战指南:从选择到训练,深度解析显卡选型、模型训练技、模型选择巧及AI未来展望---打造AI应用新篇章
|
29天前
|
Python
继承概念深度解析:代码视角下的科普之旅
继承概念深度解析:代码视角下的科普之旅
6 0
|
1月前
|
存储 编解码 算法
音视频编程ffmepg中的关键术语与概念:深度解析与实践(二)
音视频编程ffmepg中的关键术语与概念:深度解析与实践
59 0
|
1月前
|
存储 编解码 网络协议
音视频编程ffmepg中的关键术语与概念:深度解析与实践(一)
音视频编程ffmepg中的关键术语与概念:深度解析与实践
72 0
|
1月前
|
Kubernetes Linux Docker
深度解析:Kubernetes 1.28.2集群安装过程中的关键步骤
本文旨在为读者提供一份详尽的Kubernetes 1.28.2集群安装指南,帮助您从零开始构建稳定、高效的Kubernetes集群。我们将从环境准备、软件安装、集群初始化到节点添加等各个环节进行逐步讲解,确保您能够顺利完成集群的搭建。
|
1月前
|
数据库 数据库管理
构建信息蓝图:概念模型与E-R图的技术解析
构建信息蓝图:概念模型与E-R图的技术解析
28 0
|
2月前
|
并行计算 API 计算机视觉
Python多线程与多进程:概念、区别及应用场景解析
Python多线程与多进程:概念、区别及应用场景解析

推荐镜像

更多