2.4. [kustz] kustomize 流水线

简介: 2.4. [kustz] kustomize 流水线> 大家好, 我是老麦, 一个运维小学生。今天我们使用 kustomize 把所有资源整合起来

2.4. [kustz] kustomize 流水线

image.png

大家好, 我是老麦, 一个运维小学生。
今天我们使用 kustomize 把所有资源整合起来

代码还是在 Github, 文章中有不清楚的可以上去看看

https://github.com/tangx/kustz/tree/chapter/04-kustomize

前面已经简单的封装了 Deployment, Service, Ingress, 完成了零部件的创建。

今天就通过 Kustomization 进行组装, 实现流水线。

Kustomize

开始之前, 先来安装 kustomize 库。

$ go get sigs.k8s.io/kustomize/v3

这里补充一下, 访问 Github https://github.com/kubernetes-sigs/kustomize/

kustomize () 首页 README.md 并没有提到 go get 的包名。 通常 k8s 的代码在 github 上都是镜像。 这时候只需要进到 go.mod , 包名就一目了然。

// go.mod
module sigs.k8s.io/kustomize/v3

go 1.12

编码

先来看看 kustomization.yml 的定义, 非常的简单。

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: demo-demo
resources:
  - deployment.yml
  - service.yml
  - ingress.yml

今天的代码及其简单, 只需要 20 行搞定。
在 import 的时候, 可能自动补全不会自己带上 v3。 需要手工调整一下。

package kustz

import "sigs.k8s.io/kustomize/v3/pkg/types"

func (kz *Config) Kustomization() types.Kustomization {
    k := types.Kustomization{
        TypeMeta: types.TypeMeta{
            Kind:       types.KustomizationKind,
            APIVersion: types.KustomizationVersion,
        },
        Namespace: kz.Namespace,
        Resources: []string{
            "deployment.yml",
            "service.yml",
            "ingress.yml",
        },
    }

    return k
}

这里已经定了 kustomization 三个外部资源名字。

其它

kustomize 还是很贴心的, 在 types 把 version 和 kind 已经通过常量定义好了。

https://github.com/kubernetes-sigs/kustomize/blob/v3.3.1/pkg/types/kustomization.go

const (
    KustomizationVersion = "kustomize.config.k8s.io/v1beta1"
    KustomizationKind    = "Kustomization"
)

另外我们可以看到, 虽然 TypeMeta 定义相同, 但是直接从 apimachinery/pkg/apis/meta/v1.TypeMeta 复制过来的, 而不是通过引用。

// TypeMeta partially copies apimachinery/pkg/apis/meta/v1.TypeMeta
// No need for a direct dependence; the fields are stable.
type TypeMeta struct {
    Kind       string `json:"kind,omitempty" yaml:"kind,omitempty"`
    APIVersion string `json:"apiVersion,omitempty" yaml:"apiVersion,omitempty"`
}
之前看到一句话, 简单的拷贝比引用可能更节约资源, 因为引用是初始化一整个包

测试

执行命令, 检查结果是不是和自己期待的一样。

$ go test -timeout 30s -run ^Test_KustzKustomize$ ./pkg/kustz/ -v

如果不是, 就回去检查代码吧。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
对象存储 容器 Kubernetes
使用 Velero 进行集群备份与迁移
本文介绍了使用 Velero 来进行 k8s 集群资源进行备份和迁移。
6035 0
|
机器学习/深度学习 人工智能 数据可视化
数字化提升效能之道 瓴羊One Model构建全面绩效管理体系
数字化提升效能之道 瓴羊One Model构建全面绩效管理体系
391 0
|
存储 Kubernetes Linux
helm 简介及基本使用
helm 简介及基本使用
3392 0
helm 简介及基本使用
|
存储 Kubernetes 监控
一文带你玩转全新采集配置 CRD:AliyunPipelineConfig
相较于 AliyunLogConfig,AliyunPipelineConfig 在配置格式、行为逻辑上做了很大改进,主打灵活、简单、稳定。点击本文,手把手教你如何配置 AliyunPipelineConfig,欢迎大家使用~
37036 120
|
自然语言处理 机器人 Go
【飞书ChatGPT机器人】飞书接入ChatGPT,打造智能问答助手
【飞书ChatGPT机器人】飞书接入ChatGPT,打造智能问答助手
705 0
|
Kubernetes Go 持续交付
一个基于Go程序的持续集成/持续部署(CI/CD)
本教程通过一个简单的Go程序示例,展示了如何使用GitHub Actions实现从代码提交到Kubernetes部署的CI/CD流程。首先创建并版本控制Go项目,接着编写Dockerfile构建镜像,再配置CI/CD流程自动化构建、推送Docker镜像及部署应用。此流程基于GitHub仓库,适用于快速迭代开发。
244 3
|
机器学习/深度学习 缓存 算法
LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]
LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]
LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]
|
存储 Kubernetes 网络安全
[k8s]使用nfs挂载pod的应用日志文件
[k8s]使用nfs挂载pod的应用日志文件
400 1
|
Kubernetes 网络协议 调度
在K8S中,flannel可以固定节点IP和Pod的IP地址吗?
在K8S中,flannel可以固定节点IP和Pod的IP地址吗?