k8s record 20240708
web界面 资源利用查看。
一、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开发的
- Restful API 主要以路径来划分,通过http的方法来确定怎么操作资源
- k8s API 是我们和k8s 对话,告诉它我们想要什么。它就给我们什么
- CRD定义模板— CR传入值— apiserver找到对应的controller,收到后在通过apiserver传到etcd保存
Kubernetes Operator 是一种扩展 Kubernetes API 的方法,它允许开发者以声明式的方式管理和自动化复杂应用的生命周期。Operator 通常由自定义资源定义(Custom Resource Definitions,简称 CRD)和控制循环(Control Loop)组成。
operator = CRD + Control Loop. 控制器以CRD为模板控制实例
整个链条的流程:
- 用户通过 Kubernetes CLI 或 API 应用一个 CRD 清单,定义了期望的应用状态。
- Operator 的控制器检测到新的 CRD 实例,并开始控制循环。
- 控制器分析当前状态,确定需要哪些操作来达到期望状态。
- 控制器计划并执行必要的 Kubernetes 操作,如创建 Deployment、Service 等资源。
- 控制器持续监视资源状态,确保它们符合用户的期望。
- 如果集群状态发生变化,控制器将重新执行控制循环,以确保应用状态的一致性。
kubebuilder
一个脚手架工具
什么是 Kubebuilder?
Kubebuilder 是一个用于构建 Kubernetes API 的工具包,它简化了自定义控制器和自定义资源的开发。它为开发者提供了一个项目脚手架、代码生成工具以及一组常用的库,这些工具和库可以帮助开发者快速构建和部署 Kubernetes Operator。
Kubebuilder 与 Kubernetes Operator 的关系
Kubernetes Operator 是一种用于管理复杂应用程序的模式,它利用自定义控制器和自定义资源来实现应用的自动化管理。Kubebuilder 提供了一个框架,帮助开发者更容易地创建这些自定义控制器和自定义资源,从而构建 Kubernetes Operator。
Kubebuilder 的功能
- 项目脚手架:提供一个标准化的项目结构,使得开发、测试和部署自定义控制器和自定义资源更加方便。
- 代码生成:自动生成大量的样板代码,减少了手动编写的重复性工作。
- 验证和 Webhook 支持:提供了内置的验证和 Webhook 支持,帮助开发者确保自定义资源的有效性和一致性。
- 测试框架:提供了一个集成的测试框架,使得开发者可以方便地编写和运行测试。
使用 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 的核心概念
-
资源(Resources):
- 原始的 Kubernetes YAML 配置文件,如
deployment.yaml
、service.yaml
等。
- 原始的 Kubernetes YAML 配置文件,如
-
生成器(Generators):
- 用于动态生成 Kubernetes 配置的工具,如 ConfigMap 和 Secret。
-
修补程序(Patches):
- 用于修改现有资源的一小部分配置,如在 Deployment 中增加或修改环境变量。
-
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 文件,你可以在不修改原始资源文件的情况下进行资源配置的重用和变更,从而提高配置管理的灵活性和可维护性。
更多推荐
所有评论(0)