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.go

func (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: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: 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:
  - ../../base

patchesStrategicMerge:
  - 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-config
    literals:
      - key1=value1
      - key2=value2

secretGenerator:
  - name: my-secret
    literals:
      - 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: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx

base/service.yaml

apiVersion: v1
kind: Service
metadata:
  name: my-app
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

base/kustomization.yaml

resources:
  - deployment.yaml
  - service.yaml

configMapGenerator:
  - name: my-config
    literals:
      - 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:
  - ../../base

patchesStrategicMerge:
  - patch.yaml

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度分析:智算中心建设 - GPU选型

大模型加持AI技术赛道革新发展,“大模型热”愈演愈烈。2024年2月15日,OpenAI首个视频生成模型Sora发布,完美继承DALLE 3的画质和遵循指令能力,能生成长达1分钟全尺寸的高清视频。2024年5月14日,OpenAI发布GPT-4o&#…

comsol达西定律的小例子

comsol达西定律的小例子

clean code-代码整洁之道 阅读笔记(第十七章 终章)

大纲 第十七章 味道与启发 17.1 注释 C1:不恰当的信息 C2:废弃的注释 C3:冗余注释 C4:糟糕的注释 C5:注释掉的代码 17.2 环境 E1:需要多步才能实现的构建 E2:需要多步才能做到的测试 …

computed传参

目录 一、问题 二、解决方法 三、总结 tiips:如嫌繁琐,直接移步总结即可! 一、问题 computed可以依据其他变量动态计算出值,但是v-for渲染html时,需要根据html中 传入的不同变量,来分别做处理或者利用 html中的值该…

node+vue的仿网易云音乐网站-计算机毕业设计源码02905

摘要 本论文基于Node.js和Vue.js技术,以仿网易云音乐网站为目标,设计并实现了一个具有音乐播放、歌曲搜索、歌单推荐等功能的音乐网站。首先,论文介绍了网易云音乐网站的特点和功能,分析了其前端和后端技术栈,为后续设…

CTFShow的36D杯

神光 还是想了一下,但那个异或搞不出来,都是对dword_41A038操作,想起开头就给了 key ,还有反调试应该是要调试的 输出的应该就是 flag ,只是为什么是乱码呢? 放 od 再试试,直接就出 flag 了&am…

Docker搭建kafka+zookeeper以及Springboot集成kafka快速入门

参考文章 【Docker安装部署KafkaZookeeper详细教程】_linux arm docker安装kafka-CSDN博客 Docker搭建kafkazookeeper 打开我们的docker的镜像源配置 vim /etc/docker/daemon.json 配置 { "registry-mirrors": ["https://widlhm9p.mirror.aliyuncs.com"…

iPhone数据恢复篇:iPhone 数据恢复软件有哪些

问题:iPhone 15 最好的免费恢复软件是什么?我一直在寻找一个恢复程序来恢复从iPhone中意外删除的照片,联系人和消息,但是我有很多选择。 谷歌一下,你会发现许多付费或免费的iPhone数据恢复工具,声称它们可…

[C++]——同步异步日志系统(3)

同步异步日志系统 一、日志系统框架设计1.1模块划分1.1.1 日志等级模块1.1.2 日志消息模块1.1.3 日志消息格式化模块1.1.4 日志落地模块(日志落地的方向是工厂模式)1.1.5 日志器模块(日志器的生成是建造者模式)1.1.6 异步线程模块…

【HBZ分享】TCP连接完成后又是如何保证数据的可靠性传输

前提 发送发发送数据时,需要给出一个seq编号。第一个数据包的seq编号是一个随机数, 从第二个开始,seq编号就是【第一次的seq数据包大小】, 即接收方响应过来的期待数据包编号 ACK机制 接收方收到数据后,要给发送方回…

Html5前端基本知识整理与回顾下篇

今天我们继续结合发布的Html5基础知识点文档进行复习,希望对大家有所帮助。 目录 列表 无需列表 有序列表 自定义列表 样例 表格 基本属性 ​编辑 相关属性 Border Width Height ​编辑 表格标题 ​编辑 表格单元头 合并单元格 垂直单元格合并 水…

实践致知第12享:如何新建一个Word并设置格式

一、背景需求 小姑电话说:要新建一个Word文档,并将每段的首行设置空2格。 二、解决方案 1、在电脑桌面上空白地方,点击鼠标右键,在下拉的功能框中选择“DOC文档”或“DOCX文档”都可以,如下图所示。 之后&#xff0…

npm install失败,数据源过期

npm install时报错&#xff1a;“Unexpected token &#xff1c; in JSON at position 0 while parsing near ‘&#xff1c;!DOCTYPE html&#xff1e;” 执行Vue2项目安装时&#xff0c;出现报错了&#xff0c;显示ERROr: **npm ERR! Unexpected token < in JSON at posi…

58、基于径向基神经网络的曲线拟合(matlab)

1、基于径向基神经网络的曲线拟合简介及原理 1&#xff09;原理简介 基于径向基神经网络&#xff08;Radial Basis Function Neural Network, RBFNN&#xff09;的曲线拟合是一种常用的非线性拟合方法&#xff0c;通过在输入空间中使用径向基函数对数据进行处理&#xff0c;实…

cesium 雷达扫描

cesium 雷达扫描 (下面附有源码) 实现思路 1、通过改变圆型材质来实现效果, 2、用了模运算和步进函数(step)来创建一个重复的圆形图案 3、当纹理坐标st落在垂直或水平的中心线上时,该代码将改变透明度和颜色,以突出显示这些线 示例代码 <!DOCTYPE html> <ht…

完美解决windows开机时,系统提示此windows副本不是正版的正确解决方法,亲测有效!!!

完美解决windows开机时&#xff0c;系统提示此windows副本不是正版的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 亲测有效 完美解决windows开机时&#xff0c;系统提示此windows副本不是正版的正确解决方法&#xff0c;亲测有效&#xff01;&#…

二分查找3

1. 有序数组中的单一元素&#xff08;540&#xff09; 题目描述&#xff1a; 算法原理&#xff1a; 二分查找解题关键就在于去找到数组的二段性&#xff0c;这里数组的二段性是从单个数字a开始出现然后分隔出来的&#xff0c;如果mid落入左半部分那么当mid为偶数时nums[mid1]…

来聊聊Redis持久化AOF管道通信的设计

写在文章开头 最近遇到很多烦心事&#xff0c;希望通过技术来得以放松&#xff0c;今天这篇文章笔者希望会通过源码的方式分析一下AOF如何通过Linux父子进程管道通信的方式保证进行AOF异步重写时还能实时接收用户处理的指令生成的AOF字符串&#xff0c;从而保证尽可能的可靠性…

window 安装 openssl

文章目录 前言window 安装 openssl1. 下载2. 安装3. 配置环境变量4. 测试 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话…