k8s record 20240708

一、PaaS 云平台

web界面 资源利用查看

Rancher

5台 CPU 4核 Mem 4g 100g的机器
映射的目录是指docker重启后,数据还在
Rancher可以创建集群也可以托管已有集群
在这里插入图片描述
先docker 部署 Rancher,然后通过 Rancher 部署 k8s

想使用 kubectl 还要yum install 安装,还要在rancher web界面 复制config到 .kube/config文件里

kubesphere

kuboard

二、operator开发

普罗米修斯和opertator 都是golang开发的

  1. Restful API 主要以路径来划分,通过http的方法来确定怎么操作资源
  2. k8s API 是我们和k8s 对话,告诉它我们想要什么。它就给我们什么
  3. CRD定义模板— CR传入值— apiserver找到对应的controller,收到后在通过apiserver传到etcd保存
    在这里插入图片描述
    在这里插入图片描述
    Kubernetes Operator 是一种扩展 Kubernetes API 的方法,它允许开发者以声明式的方式管理和自动化复杂应用的生命周期。Operator 通常由自定义资源定义(Custom Resource Definitions,简称 CRD)和控制循环(Control Loop)组成。
    operator = CRD + Control Loop. 控制器以CRD为模板控制实例

整个链条的流程:

  1. 用户通过 Kubernetes CLI 或 API 应用一个 CRD 清单,定义了期望的应用状态。
  2. Operator 的控制器检测到新的 CRD 实例,并开始控制循环。
  3. 控制器分析当前状态,确定需要哪些操作来达到期望状态。
  4. 控制器计划并执行必要的 Kubernetes 操作,如创建 Deployment、Service 等资源。
  5. 控制器持续监视资源状态,确保它们符合用户的期望。
  6. 如果集群状态发生变化,控制器将重新执行控制循环,以确保应用状态的一致性。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

kubebuilder

一个脚手架工具

什么是 Kubebuilder?

Kubebuilder 是一个用于构建 Kubernetes API 的工具包,它简化了自定义控制器和自定义资源的开发。它为开发者提供了一个项目脚手架、代码生成工具以及一组常用的库,这些工具和库可以帮助开发者快速构建和部署 Kubernetes Operator。

Kubebuilder 与 Kubernetes Operator 的关系

Kubernetes Operator 是一种用于管理复杂应用程序的模式,它利用自定义控制器和自定义资源来实现应用的自动化管理。Kubebuilder 提供了一个框架,帮助开发者更容易地创建这些自定义控制器和自定义资源,从而构建 Kubernetes Operator。

Kubebuilder 的功能

  1. 项目脚手架:提供一个标准化的项目结构,使得开发、测试和部署自定义控制器和自定义资源更加方便。
  2. 代码生成:自动生成大量的样板代码,减少了手动编写的重复性工作。
  3. 验证和 Webhook 支持:提供了内置的验证和 Webhook 支持,帮助开发者确保自定义资源的有效性和一致性。
  4. 测试框架:提供了一个集成的测试框架,使得开发者可以方便地编写和运行测试。

使用 Kubebuilder 构建 Operator 的步骤

以下是使用 Kubebuilder 构建一个简单 Operator 的基本步骤:

1. 安装 Kubebuilder

首先,安装 Kubebuilder:

curl -L https://github.com/kubernetes-sigs/kubebuilder/releases/download/vX.Y.Z/kubebuilder_X.Y.Z_linux_amd64.tar.gz | tar -xz -C /usr/local/
export PATH=$PATH:/usr/local/kubebuilder/bin
2. 初始化项目

使用 Kubebuilder 初始化一个新的项目:

kubebuilder init --domain example.com --repo github.com/yourusername/yourproject
3. 创建 API 和控制器

使用 Kubebuilder 创建新的 API 资源和控制器:

kubebuilder create api --group batch --version v1 --kind MySQL

这条命令会生成自定义资源定义(CRD)和控制器的代码模板。

4. 编写控制器逻辑

编辑生成的控制器代码,在其中添加业务逻辑:

// controllers/mysql_controller.gofunc (r *MySQLReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {ctx := context.Background()log := r.Log.WithValues("mysql", req.NamespacedName)// 业务逻辑:确保 MySQL 实例的状态与 CR 描述的状态一致return ctrl.Result{}, nil
}
5. 运行和测试 Operator

使用 make 命令编译并运行 Operator:

make
make run

你可以在 Kubernetes 集群中应用你的 CRD 并创建自定义资源实例:

kubectl apply -f config/crd/bases/batch.example.com_mysqls.yaml
kubectl apply -f config/samples/batch_v1_mysql.yaml

GVK

GVK(Group, Version, Kind)是 Kubernetes 用于唯一标识各种资源类型的关键概念。它通过三个部分(组、版本、类型)来定义资源的类型和版本,使得 Kubernetes 可以有效地组织和管理不同类型的资源

Kubernetes 内置资源的 GVK 可能如下所示:

Pod: Group=“”, Version=“v1”, Kind=“Pod”
Service: Group=“”, Version=“v1”, Kind=“Service”
Deployment: Group=“apps”, Version=“v1”, Kind=“Deployment”

apiVersion: apps/v1
kind: Deployment
metadata:name: my-deployment
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginx

在这个 YAML 文件中:

apiVersion 是 apps/v1,其中 apps 是 Group,v1 是 Version。
kind 是 Deployment,表示资源类型。

kustomize

Kustomize 是 Kubernetes 中的一种配置管理工具,用于管理和定制 Kubernetes 资源。它通过在不修改原始 YAML 文件的基础上进行配置重用和变更,从而简化了复杂的 Kubernetes 配置管理。

Kustomize 的核心概念

  1. 资源(Resources)

    • 原始的 Kubernetes YAML 配置文件,如 deployment.yamlservice.yaml 等。
  2. 生成器(Generators)

    • 用于动态生成 Kubernetes 配置的工具,如 ConfigMap 和 Secret。
  3. 修补程序(Patches)

    • 用于修改现有资源的一小部分配置,如在 Deployment 中增加或修改环境变量。
  4. Kustomization 文件

    • 一个名为 kustomization.yaml 的文件,它定义了如何组合和变更资源。

使用 Kustomize 的步骤

1. 目录结构

Kustomize 依赖于目录结构来组织资源。以下是一个示例目录结构:

my-app/
├── base/
│   ├── kustomization.yaml
│   ├── deployment.yaml
│   └── service.yaml
└── overlays/├── dev/│   ├── kustomization.yaml│   └── patch.yaml└── prod/├── kustomization.yaml└── patch.yaml
  • base 目录包含基础资源。
  • overlays 目录包含环境特定的自定义配置。
2. 基础配置(Base)

基础配置定义了原始的 Kubernetes 资源。在 base/kustomization.yaml 文件中:

resources:- deployment.yaml- service.yaml
3. 环境覆盖(Overlay)

覆盖层定义了针对特定环境的配置变更。在 overlays/dev/kustomization.yaml 文件中:

resources:- ../../basepatchesStrategicMerge:- patch.yaml

overlays/dev/patch.yaml 文件中:

apiVersion: apps/v1
kind: Deployment
metadata:name: my-app
spec:replicas: 2
4. 生成 ConfigMap 和 Secret

Kustomize 支持动态生成 ConfigMap 和 Secret。在 base/kustomization.yaml 文件中:

configMapGenerator:- name: my-configliterals:- key1=value1- key2=value2secretGenerator:- name: my-secretliterals:- password=secret
5. 应用 Kustomize 配置

你可以使用 kubectl 直接应用 Kustomize 配置:

kubectl apply -k overlays/dev

示例

假设我们有以下基础资源文件:

base/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: my-app
spec:replicas: 1selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginx

base/service.yaml

apiVersion: v1
kind: Service
metadata:name: my-app
spec:selector:app: my-appports:- protocol: TCPport: 80targetPort: 80

base/kustomization.yaml

resources:- deployment.yaml- service.yamlconfigMapGenerator:- name: my-configliterals:- key1=value1- key2=value2

针对开发环境的覆盖配置:

overlays/dev/patch.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: my-app
spec:replicas: 2

overlays/dev/kustomization.yaml

resources:- ../../basepatchesStrategicMerge:- patch.yaml

总结

Kustomize 提供了一种声明式的方法来管理 Kubernetes 资源,特别是在需要管理多个环境(如开发、测试、生产)时。通过 Kustomization 文件,你可以在不修改原始资源文件的情况下进行资源配置的重用和变更,从而提高配置管理的灵活性和可维护性。

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

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

相关文章

leetcode--验证二叉搜索树

leetcode地址:验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左 子树 只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必…

71.WEB渗透测试-信息收集- WAF、框架组件识别(11)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:70.WEB渗透测试-信息收集- WAF、框架组件识别(10)-CSDN博客 如果有…

人工智能和机器学习 (复旦大学计算机科学与技术实践工作站)20240703(上午场)人工智能初步、mind+人脸识别

前言 在这个科技日新月异的时代,人工智能(AI)已经逐渐渗透到我们生活的方方面面,从智能家居到自动驾驶,无一不彰显着AI的强大潜力。而人脸识别技术作为AI领域的一项重要应用,更是以其高效、便捷的特点受到了…

人工智能算法工程师(中级)课程2-Opencv视觉处理之高级操作

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程2-Opencv视觉处理之高级操作。在上一节课中的OpenCV基础操作我们了解到OpenCV是一个开源的计算机视觉软件库。它提供了各种视觉处理函数,并支持多种编程语言,如…

USB眼图eye diagram测试

前言: USB有一种测量称为EYE图或信号完整性测试。考虑数字信号从发射机传输到接收机的过程。到达接收器的信号质量可能受到许多因素的影响,包括发射器、电缆或PCB迹线以及连接器。信号质量也被称为信号完整性。眼图是一种用于快速评估数字信号质量的图形工具。眼图这个名字之…

Gymnasium 借游戏来学习人工智能

既然有了免费的linux系统GPU,干脆演示一下使用drivecolab套件来训练模型。 !apt-get install -y build-essential swig !pip install box2d-py !pip install gymnasium[all] !pip install gymnasium[atari] gymnasium[accept-rom-license] !pip install stable_bas…

Python函数 之 模块和包

1.模块 1, 在Python 中, 每个以 .py 结尾的 Python 代码⽂件 都可以称为是⼀个模块。 2, 在模块中 别⼈书写好的功能(变量, 函数, 类),我们可以拿来直接使⽤。 3, 我们自己写的代码文件, 想要作为模块让别⼈使⽤, 你的代码⽂件名(模块名) 满足标识符的规…

Linux驱动开发-03字符设备驱动框架搭建

一、字符设备驱动开发步骤 驱动模块的加载和卸载(将驱动编译模块,insmod加载驱动运行)字符设备注册与注销(我们的驱动实际上是去操作底层的硬件,所以需要向系统注册一个设备,告诉Linux系统,我有…

JVM是如何创建一个对象的?

哈喽,大家好🎉,我是世杰。 本文我为大家介绍面试官经常考察的**「Java对象创建流程」** 照例在开头留一些面试考察内容~~ 面试连环call Java对象创建的流程是什么样?JVM执行new关键字时都有哪些操作?JVM在频繁创建对象时,如何…

Studying-代码随想录训练营day33| 动态规划理论基础、509.斐波那契函数、70.爬楼梯、746.使用最小花费爬楼梯

第33天,动态规划开始,新的算法💪(ง •_•)ง,编程语言:C 目录 动态规划理论基础 动态规划的解题步骤 动态规划包含的问题 动态规划如何debug 509.斐波那契函数 70.爬楼梯 746.使用最小花费爬楼梯 总结 动态…

LeetCode热题100刷题10:46. 全排列、78. 子集、17. 电话号码的字母组合、39. 组合总和、138. 随机链表的复制

回溯问题 46. 全排列 全排列问题&#xff1a; path 递归终止条件&#xff1a;path中是否已存储所有元素&#xff1b; for循环处理节点集合&#xff1a;used0未被使用的元素 class Solution { public:vector<int> path;vector<vector<int>> res;void backt…

HTML 标签简写和全称及其对应的中文说明和实例

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>HTML 标签简写及全称</title><style>…

Linux udp编程

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

效果惊人!LivePortrait开源数字人技术,让静态照片生动起来

不得了了,快手已经不是众人所知的那个短视频娱乐平台了。 可灵AI视频的风口尚未过去,又推出了LivePortrait--开源的数字人项目。LivePortrait让你的照片动起来,合成逼真的动态人像视频,阿里通义EMO不再是唯一选择。 让图像动起来 LivePortrait 主要提供了对眼睛和嘴唇动作的…

20_Inception V3深度学习图像分类算法

回顾GoogleNet:传送门 1.1 介绍 InceptionV3是Google开发的一种深度卷积神经网络架构&#xff0c;它是Inception系列网络中的第三代模型&#xff0c;由Christian Szegedy等人在论文《Rethinking the Inception Architecture for Computer Vision》中提出&#xff0c;该论文发…

gitee上传和下载idea项目的流程

环境&#xff1a;idea2022 一、上传项目 1、在gitee中新建一个仓库。 2、打开所要上传的项目的文件夹&#xff0c;点击Git Bash&#xff0c;生成.git文件夹。 3、在idea中打开所要上传的项目&#xff0c;在控制台的Terminal菜单中&#xff0c;输入git add . (注意&#xf…

解决分布式环境下session共享问题

在分布式环境下&#xff0c;session会存在两个问题 第一个问题:不同域名下&#xff0c;浏览器存储的jsessionid是没有存储的。比如登录时认证服务auth.gulimall.com存储了session&#xff0c;但是搜索服务search.gulimall.com是没有这个session的&#xff1b; 第二个问题&…

鸟类领域超大规模检测实践,基于YOLOv8轻量级检测模型开发构建超大规模生活场景下500种鸟类检测识别分析系统

关于鸟类的检测、识别相关的开发实践在前面的系列博文中也有不少的实践记录&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 【检测类】 《AI识鸟&#xff0c;基于YOLOv5【n/s/m/l/x】全系列参数模型开发构建工业野外场景下鸟类检测识别分析系统》 《基于轻量级YOL…

Eyes Wide Shut Exploring the Visual Shortcomings of Multimodal LLMs

Eyes Wide Shut? Exploring the Visual Shortcomings of Multimodal LLMs 近两年多模态大模型&#xff08;Multimodal LLM&#xff0c;MLLM&#xff09;取得了巨大的进展&#xff0c;能够基于图片与人类对话&#xff0c;展现出强大的识别甚至推理能力。然而&#xff0c;在某些…

游戏AI的创造思路-技术基础-蒙特卡洛树搜索(2)

接上一篇&#xff0c;让我们来看更多的例子 目录 7. 更多例子 7.1. 国际象棋实例 7.2. RTS类游戏实例 7.3. FPS类游戏实例 7. 更多例子 蒙特卡洛树搜索&#xff08;Monte Carlo Tree Search&#xff0c;MCTS&#xff09;在游戏AI中有着广泛的应用&#xff0c;尤其是在那些…