Kubernetes学习笔记-kubernetes应用扩展-自定义API对象(1)20230622

news2024/12/29 9:02:22

1、CustomResourceDefinitions介绍

开发者只需要只需向kubernetes api服务器提交CRD对象,即可定义新的资源类型。成功提交CRD之后,就能通过API服务器提交JSON清单或者YAML清单的方式创建自定义资源,以及其他kubernetes资源实例

创建一个CRD对象

website-crd.yaml

apiVersion:apiextensions.k8s.io/v1beta1

kind:CustomResourceDefinition

metadata:

        name:websites.extensions.example.com

spec:

        scope:Namespaced

group:extensions.example.com

version:v1

names:

        kind:Website

        singular:website

        plural:website

命令行创建crd

$kubectl create -f website-crd-definition.yaml

创建自定义资源实例

一个自定义网站资源:kubia-website.yaml

apiVersion:extensions.example.com/v1

kind:Website

metadata:

        name:kubia

spec:

        gitRepo:https://github.com/luksa/kubia-website-example.git

 这个自定义资源的kind是website,而apiversion是由api组和你在crd中定义的版本号两部分组成的。

创建网站对象:

$kubectl create -f kubia-website.yaml 

检索自定义资源实例

$kubectl get websites

删除自定义资源实例

$kubectl  delete website kubia

注意:删除的是网站实例,而不是网站CRD资源。

2、使用自定义控制器自动定制资源

为了让你的网站对象运行在一个通过服务暴露的web服务器pod,需要构建和部署一个网站控制器,它能查看api服务器创建网站对象的过程,然后为每一个对象创建服务和web服务器pod

控制器将创建Deployment资源,而不是直接创建非托管pod,这样就能确保pod既能被管理,还能在遇到节点故障时继续正常工作。

使用网站控制器创建网站对象并创建Deployment和Service

了解网站控制器的功能

启动后,控制器立即开始通过以下URL 请求查看网站对象:

http://localhost:8080/apis/extensions.example.com/v1/websites?watch=true

通过识别主机名和端口,控制器不直接连接到API服务器,而是连接到kubectl proxy进程。该进程在同一个po中的sidecar容器中运行,并充当API服务器的ambassador。代理将请求转发给API服务器,并同时处理TLS加密认证。

通过HTTP GET请求打开链接,API服务器将针对任何网站对象的每个更改发送监听事件(watch event) 

每次创建新的网站对象时,API服务器都会发生ADDED监听事件。当控制器收到这样的事件时,就会在该监听事件所包含的网站对象中提取网站名称和Git存储库的url,然后将他们的json清单发布到api服务器,来创建Deployment和Service对象

Deployment资源包含一个具有两个容器的pod模版:其中一个容器运行nginx服务器,另一个容器则运行gitsync进程,用来保持本地目录与Git仓库的内容同步。本地目录通过一个emptyDir卷与nginx容器共享。作为一个NodePort Service,他通过每个节点上的随机端口公开你的web服务器pod(所有节点使用相同的端口)。这样,当Deployment对象创建一个pod时,用户既可以通过节点端口访问该网站。

当网站资源实例被删除时,API服务器还会发送DELETED监听事件。在收到监听事件厚,控制器就会删除之前创建的Deployment资源和Service资源。与此同时,控制器也会关闭并删除该网站提供服务的web服务器。

 3、验证自定义对象

在kubernetes1.8版本中,自定义对象的验证作为alpha特性被引入。如果想要让API服务器验证自定义对象,需要再API服务器中启用CustomResoureceValidation特性,并在CRD中指定一个JSON schema。

4、为自定义对象提供自定义API服务器

如果想要更好的支持在kubernetes中添加自定义对象,最好的方式是使用你自己的API服务器,并让他直接与客户端进行交互。

API服务器聚合

每个API服务器会负责存储他自己的资源,如上图,它可以云自己的etcd实例(或整个etcd集群),也可以通过创建CRD实例将其资源存储在核心API服务器的ectd存储中。在这种情况下,就需要先创建一个CRD对下,然后才能创建CRD实例。

注册一个自定义API服务器 

想要自定义API服务器添加到集群中,可以将其部署为一个pod并通过Service暴露。下一步,为了将它集成在主API服务中,需要部署一个描述APIService资源的YAML列表,如下代码:

APIService YAML定义

apiVersion:apiregistration.k8s.io/vbeta1

kind:APIService

metadata:

        name:v1alpha1.extensions.example.com

spec:

        group:extensions.example.com

        version:v1alpha1

        priority:150

        service:

                name:website-api

                namespace:default

创建以上代码 列表中的APIService资源后,被发送到主API服务器的包含extensions.example.com API组任何资源的客户端请求,会和v1alpha1版本号一起被转发到通过website-api Service公开的自定义API 服务器pod

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/674276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【雕爷学编程】Arduino动手做(118)---PS2接口模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

浅谈常见的加密算法及实现

浅谈常见的加密算法及实现 简介: 随着公司业务的发展,系统用户量日益增多,系统安全性问题一直在脑子里反复回旋,以前系统用户少影响面小,安全方面也一直没有进行思考和加固,现如今业务发展了,虽…

电力安全带安全帽穿戴监测算法

电力安全带安全帽穿戴监测算法通过TensorFlow机器学习的框架,电力安全带安全帽穿戴监测算法对人员的安全带和安全帽佩戴情况进行实时监测,当检测到有工作人员未正确佩戴安全帽或安全带时,电力安全带安全帽穿戴监测算法将自动发出警报提示现场…

论文精读 BlazePose结合LSTM 跌倒检测

Fall Detection for Shipboard Seafarers Based on Optimized BlazePose and LSTM 基于BlazePose-LSTM的海员跌倒检测 本博客通过全文翻译和总结的方式对论文进行精读。读完此论文颇受启发,比如: 视频中的时间序列问题;文章简单明了的整体脉…

29基于贝叶斯(Bayes)判别的机场航班延误因素分析(附matlab程序)

1.简述 学习目标: 基于贝叶斯判别的机场航班延误因素分析 利用所创建的朴素贝叶斯分类器对象ObjBayes,对训练样本进行判别 并利用贝叶斯预测误差统计 中国民航业近年来快速发展,航班量增多,航班密度逐步加大,许多资源配置的矛盾也日益凸显出来.机场大面…

Godot 4 源码分析 - 代码自动补全流程

使用Godot 4过程中,有一点比较吸引我:代码自动补全 用RAD开发时,代码自动补全功能一直被吐槽,主要是速度慢 但我看Godot 4中的Script编写过程中,代码补全很快,这个可以研究一下。 研究代码可找到&#x…

Linux国产操作系统,UCA-系统工程师学习必备技能,使用dpkg管理软件包、apt命令、内网获取依赖包及源码安装

目录 ​编辑 1.使用dpkg管理软件包 2.apt命令 3.内网获取依赖包 4.源码安装 1.使用dpkg管理软件包 第一种方法当然可以上网搜索软件安装包,下载然后解压成软件。 第二种也就是我接下来要介绍的,dpkg 命令,dpkg 全称叫做debian package…

Linux系统编程:进程的管理和创建

目录 一. 什么是进程 二. Linux对进程的管理方法 2.1 PCB描述进程 2.2 进程的组织 2.3 进程的查看 三. 子进程的创建 3.1 子进程创建函数fork的使用 3.2 子进程创建的原理 四. 总结 一. 什么是进程 进程(process)是指计算机中已经存在并运行的…

动态规划 DP (一)

1.动态规划(Dynamic Programming,简称DP) 维基百科的定义说的很清楚: 动态规划不能解决所有的问题, 只能应用于有最优子结构的问题。例如背包问题、最长公共子序列问题、最短路径问题等。 最优子结构:局部…

Vue3通信方式之defineProps、defineEmits、useAttrs、插件mitt和v-model

目录 1、使用defineProps2、使用defineEmits接受自定义事件2.1原生DOM事件2.2自定义事件 3、全局事件总线(插件mitt)4、v-model5、useAttrs 1、使用defineProps props可以实现父子组件通信,在vue3中我们可以通过defineProps获取父组件传递的数据。且在组…

Opencv医学图片分割-以血管、胼胝体MR等分割为例

用到环境 1、pycharm community edition 2022.3.2 2、Python 3.10 后面应该会传代码到资源,比较需要的可以私信我。 总体设计 图1 扩展实验二“医学图像分割”流程图 ## 具体步骤 1. 导入OpenCV和NumPy库 2. 定义阈值分割方法threshold_segmentation,接…

spring框架-概述(spring特性、生命周期)(一)

文章目录 什么是springspring重要特性spring生命周期知识扩展 什么是spring Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器 ,是为了解决企业级编程开发中的复杂性,实现敏捷开发…

[进阶]网络通信:TCP通信-支持与多个客户端同时通信

目前我们开发的服务端程序,是否可以支持与多个客户端同时通信? 不可以的。因为服务端现在只有一个主线程,只能处理一个客户端的消息。 代码演示如下: 客户端: public class Client {public…

SpringBoot 异常处理的最佳实践

SpringBoot 异常处理的最佳实践 在 Web 开发中,异常处理是非常重要的一环。在 SpringBoot 框架中,异常处理方式有很多种,但是如何选择最佳实践呢?本文将介绍 SpringBoot 异常处理的最佳实践,并附带代码示例。 异常处理…

flutter - 编写 阿里云-金融级实名认证插件

项目中有实名认证的需求,用户上传身份证反正面,进行人脸核验,后台集成的是阿里云的金融级实名认证SDK,巧合的是阿里云没有packages 需要自己造轮子。 废话不多少,直接上代码: 新建项目 ProjectType Plugin…

网站图片优化技巧及最佳实践

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言使用适当的图片格式…

0017-TIPS-pawnyable : eBPF

原文 BPFの導入 検証器とJITコンパイラ eBPFのバグの悪用 题目下载 BPF介绍 BPF 在介绍eBPF之前,先介绍其前身BPF。 随着时代的发展,BPF的用途越来越广泛,扩展也越来越多。在重大更改后的BPF有时被称为eBPF(扩展BPF&#xff09…

路漫漫其修远兮,吾将上下而求索

路漫漫其修远兮,吾将上下而求索 一、坚定信念二、持之以恒地努力三、谦虚和学习的态度四、上下而求索也要遵循道德底线和原则五、建立合适的人际关系和互助机制六、坚定自己的信仰和信念七、个人经验与体会 路漫漫其修远兮,吾将上下而求索——这句话不仅…

python期末上机题:

1、编写Python程序,创建类Temperature,其包含成员变量degree(表示温度)以及实例方法ToHuaShiDu()和ToSheShiDu,并编写测试代码。 程序运行示例: 请输入摄氏温度:30 摄氏温度 30.0&#xff0…

栈和队列(一)

文章目录 顺序表,链表的有点和缺点链表顺序表 栈和队列栈的实现栈的应用(括号匹配问题) 顺序表,链表的有点和缺点 链表 优点: 1、任意位置插入删除,时间复杂度位O(1) 2、按需申请释放空间 缺点&#xff1a…