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 文件,你可以在不修改原始资源文件的情况下进行资源配置的重用和变更,从而提高配置管理的灵活性和可维护性。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值