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

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7月前
|
jenkins 持续交付 开发者
FLOW流水线YAML使用体验
在创建过程中,选择YAML模板方式有时不支持,而自由主机方式则正常。YAML编辑器提供详细提示和补全功能,具备错误定位和校验,有助于入门者。它适用于测试、执行、部署和编码等场景,相比Jenkins,配置更简单,引导更完善,降低了CI/CD的入门难度,尤其适合个人开发者进行定制化需求操作。
244 2
|
4月前
|
jenkins 持续交付
Jenkins Pipeline 流水线 - withCredentials 使用
Jenkins Pipeline 流水线 - withCredentials 使用
125 0
|
域名解析 Cloud Native jenkins
【Drone-初识篇】Drone借助GitLab构建CICD环境、以及编写 .drone.yaml 流水线
【Drone-初识篇】Drone借助GitLab构建CICD环境、以及编写 .drone.yaml 流水线
1003 0
|
Kubernetes jenkins Java
jenkins-CICD系列之-jenkins使用pipeline流水线k8s发布
jenkins使用pipeline流水线k8s一键发布
1116 1
|
jenkins Java 测试技术
基于 Rainbond 的 Pipeline(流水线)插件
Rainbond 本身具有基于源码构建组件的能力,可以将多种编程语言的代码编译成 Docker 镜像,但是在持续集成的过程中,往往会需要对提交的代码进行静态检查、构建打包以及单元测试。之前由于 Rainbond 并没有 Pipeline 这种可编排的机制,所以用户往往只能通过集成外部的 CI ,如 Jenkins、Gitlab CI 等。这给开发者的使用增加了门槛。
|
存储 Kubernetes Cloud Native
【 云原生 | kubernetes 】- tekton构建CI/CD流水线(一)
Tekton 是用于构建 CI/CD 管道的云原生解决方案。它由提供构建块的 Tekton Pipelines 和支持组件(例如 Tekton CLI 和 Tekton Catalog)组成,它们使 Tekton 成为一个完整的生态系统。
【 云原生 | kubernetes 】- tekton构建CI/CD流水线(一)
|
Ubuntu Shell 开发工具
gitlab 编排.gitlab-ci.yaml高级技巧
gitlab 编排.gitlab-ci.yaml高级技巧
gitlab 编排.gitlab-ci.yaml高级技巧
|
Kubernetes Cloud Native 开发工具
【 云原生 | kubernetes 】- tekton构建CI/CD流水线(二)
上一节我们是通过创建Pipelinerun来触发流水线来进行构建,实际生产中完全自动化的实现需要借助tekton中的triggers。本文是上篇的拓展请先了解这篇文章
【 云原生 | kubernetes 】- tekton构建CI/CD流水线(二)
|
存储 JSON Kubernetes
openshift Tekton pipeline 实践
openshift Tekton pipeline 实践
|
机器学习/深度学习 存储 Kubernetes
Argo Workflows-Kubernetes的工作流引擎(上)
Argo Workflows-Kubernetes的工作流引擎
Argo Workflows-Kubernetes的工作流引擎(上)