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