2.4. [kustz] kustomize 流水线

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 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

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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
jenkins 持续交付 开发者
FLOW流水线YAML使用体验
在创建过程中,选择YAML模板方式有时不支持,而自由主机方式则正常。YAML编辑器提供详细提示和补全功能,具备错误定位和校验,有助于入门者。它适用于测试、执行、部署和编码等场景,相比Jenkins,配置更简单,引导更完善,降低了CI/CD的入门难度,尤其适合个人开发者进行定制化需求操作。
201 2
|
2月前
|
jenkins 持续交付
Jenkins构建简单流水线
Jenkins构建简单流水线
26 0
|
2月前
|
存储 jenkins Shell
Jenkins Pipeline 流水线任务 补充篇
Jenkins Pipeline 流水线任务 补充篇
127 1
|
域名解析 Cloud Native jenkins
【Drone-初识篇】Drone借助GitLab构建CICD环境、以及编写 .drone.yaml 流水线
【Drone-初识篇】Drone借助GitLab构建CICD环境、以及编写 .drone.yaml 流水线
712 0
|
jenkins Java 测试技术
基于 Rainbond 的 Pipeline(流水线)插件
Rainbond 本身具有基于源码构建组件的能力,可以将多种编程语言的代码编译成 Docker 镜像,但是在持续集成的过程中,往往会需要对提交的代码进行静态检查、构建打包以及单元测试。之前由于 Rainbond 并没有 Pipeline 这种可编排的机制,所以用户往往只能通过集成外部的 CI ,如 Jenkins、Gitlab CI 等。这给开发者的使用增加了门槛。
|
存储 JSON Kubernetes
Tekton 组件介绍
Tekton 组件介绍
|
Kubernetes jenkins Java
jenkins-CICD系列之-jenkins使用pipeline流水线k8s发布
jenkins使用pipeline流水线k8s一键发布
1028 1
|
Kubernetes API 数据安全/隐私保护
|
Ubuntu Shell 开发工具
gitlab 编排.gitlab-ci.yaml高级技巧
gitlab 编排.gitlab-ci.yaml高级技巧
gitlab 编排.gitlab-ci.yaml高级技巧
|
Kubernetes 数据可视化 Cloud Native
可视化 Tekton 组件 Tekton Dashboard
Tekton Dashboard 使用指南。
4142 0