导读
我们在管理k8s时,经常使用kubectl apply -f deploy.yaml。而且一个yaml中可以包含相关的多个yaml定义,比如ServiceAccount、ConfigMap、Service、Ingress等关联的资源。应用时非常方便,删除也方便,执行kubectl delete -f deploy.yaml即可。
当我们开始做自动化后,我们使用client-go可以非常灵活的定义一个deployment,而且使用代码可以根据不同需求来装配deployment对象。
但是如果要定义一些列的资源对象,比如配套的ServiceAccount、ConfigMap、Service、Ingress等关联的资源,那这可以就是一个力气活了。
那么本文提供一个基于kom的操作方式,让你可以使用代码进行操作的同时,依然可以方便的执行kubectl apply 命令。
基于 kom 执行 apply 、delete -f yaml文件的操作教程
1. 工具简介
kom 是一个用于管理 Kubernetes 集群的高效工具,支持多集群操作、自定义资源定义(CRD)、POD 文件操作等。通过链式调用和回调机制,kom 提供了简单易用的 Kubernetes 管理方式。
2. 安装和运行
2.1 集成 kom
在项目中引入 kom 依赖:
import (
_ "github.com/weibaohui/kom/callbacks" // 导入回调机制
"github.com/weibaohui/kom"
)
3. 执行
yaml := `apiVersion: v1
kind: ConfigMap
metadata:
name: example-config
namespace: default
data:
key: value
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
containers:
- name: example-container
image: nginx
`
// 第一次执行Apply为创建,返回每一条资源的执行结果
results := kom.DefaultCluster().Applier().Apply(yaml)
// 第二次执行Apply为更新,返回每一条资源的执行结果
results = kom.DefaultCluster().Applier().Apply(yaml)
// 删除,返回每一条资源的执行结果
results = kom.DefaultCluster().Applier().Delete(yaml)
4. 总结
通过 kom 的Apply()以及Delete()方法,可以非常方便的应用大段的yaml定义。