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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 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”解析(中):能让你为集群编写插件的新模型

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
15天前
|
Kubernetes 负载均衡 网络安全
Kubernetes 网络模型与实践
【8月更文第29天】Kubernetes(K8s)是当今容器编排领域的佼佼者,它提供了一种高效的方式来管理容器化应用的部署、扩展和运行。Kubernetes 的网络模型是其成功的关键因素之一,它支持服务发现、负载均衡和集群内外通信等功能。本文将深入探讨 Kubernetes 的网络模型,并通过实际代码示例来展示服务发现和服务网格的基本概念及其实现。
33 1
|
10天前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
81 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
10天前
|
Kubernetes 容器 Perl
Kubernetes网络插件体系及flannel基础
文章主要介绍了Kubernetes网络插件体系,特别是flannel网络模型的工作原理、配置和测试方法。
31 3
Kubernetes网络插件体系及flannel基础
|
10天前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
22 2
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
Transformer图解以及相关的概念解析
前言 transformer是目前NLP甚至是整个深度学习领域不能不提到的框架,同时大部分LLM也是使用其进行训练生成模型,所以transformer几乎是目前每一个机器人开发者或者人工智能开发者不能越过的一个框架。接下来本文将从顶层往下去一步步掀开transformer的面纱。 transformer概述 Transformer模型来自论文Attention Is All You Need。 在论文中最初是为了提高机器翻译的效率,它使用了Self-Attention机制和Position Encoding去替代RNN。后来大家发现Self-Attention的效果很好,并且在其它的地
24 2
|
10天前
|
存储 Kubernetes 测试技术
k8s使用pvc,pv,sc关联ceph集群
文章介绍了如何在Kubernetes中使用PersistentVolumeClaim (PVC)、PersistentVolume (PV) 和StorageClass (SC) 来关联Ceph集群,包括创建Ceph镜像、配置访问密钥、删除默认存储类、编写和应用资源清单、创建资源以及进行访问测试的步骤。同时,还提供了如何使用RBD动态存储类来关联Ceph集群的指南。
25 7
|
10天前
|
存储 Kubernetes 数据安全/隐私保护
k8s对接ceph集群的分布式文件系统CephFS
文章介绍了如何在Kubernetes集群中使用CephFS作为持久化存储,包括通过secretFile和secretRef两种方式进行认证和配置。
21 5
|
10天前
|
Kubernetes 负载均衡 应用服务中间件
kubeadm快速构建K8S1.28.1高可用集群
关于如何使用kubeadm快速构建Kubernetes 1.28.1高可用集群的详细教程。
26 2
|
10天前
|
机器学习/深度学习 数据采集 存储
一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
蒙特卡洛方法起源于1945年科学家斯坦尼斯劳·乌拉姆对纸牌游戏中概率问题的思考,与约翰·冯·诺依曼共同奠定了该方法的理论基础。该方法通过模拟大量随机场景来近似复杂问题的解,因命名灵感源自蒙特卡洛赌场。如今,蒙特卡洛方法广泛应用于机器学习领域,尤其在超参数调优、贝叶斯滤波等方面表现出色。通过随机采样超参数空间,蒙特卡洛方法能够高效地找到优质组合,适用于处理高维度、非线性问题。本文通过实例展示了蒙特卡洛方法在估算圆周率π和优化机器学习模型中的应用,并对比了其与网格搜索方法的性能。
84 1
|
10天前
|
Kubernetes Linux API
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
该博客文章详细介绍了在CentOS 7.6操作系统上使用kubeadm工具部署kubernetes 1.17.2版本的测试集群的过程,包括主机环境准备、安装Docker、配置kubelet、初始化集群、添加节点、部署网络插件以及配置k8s node节点管理api server服务器。
38 0
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇

热门文章

最新文章

推荐镜像

更多