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搭建和管理企业级网站应用
相关文章
|
Kubernetes 持续交付 开发工具
使用Drone搭建CICD服务
Drone是Go语言编写的,基于容器技术的CI/CD系统。它具有以下几个关键特性。 1、Everything is a Docker Container 2、One Server, Multiple Agents 3、Configuration as a code 4、丰富的插件
2219 1
|
域名解析 Cloud Native jenkins
【Drone+Gitlab】一条龙服务,直接起飞 — 从介绍->部署->配置->写.drone.yml流水线+常见的报错解决
gitlab+drone部署安装,编写.drone.yml流水线 drone是一个持续集成化工具,gitlab是一个代码仓库,.drone.yml流水线编写 fatal: unable to access,could not resolve host 克隆地址连接不上(修改默认clone克隆),没有Trusted选项,启动drone-server时添加(--env=DRONE_USER_CREATE=username:root,admin:true) .drone.yml文件中sed命令报错
2109 0
【Drone+Gitlab】一条龙服务,直接起飞 — 从介绍->部署->配置->写.drone.yml流水线+常见的报错解决
|
8月前
|
jenkins 持续交付 开发者
FLOW流水线YAML使用体验
在创建过程中,选择YAML模板方式有时不支持,而自由主机方式则正常。YAML编辑器提供详细提示和补全功能,具备错误定位和校验,有助于入门者。它适用于测试、执行、部署和编码等场景,相比Jenkins,配置更简单,引导更完善,降低了CI/CD的入门难度,尤其适合个人开发者进行定制化需求操作。
253 2
6-14|gitlab的runner的流水线怎么看
6-14|gitlab的runner的流水线怎么看
|
小程序 IDE JavaScript
小程序结合Jenkins实现CICD
小程序结合Jenkins实现CICD
710 0
|
域名解析 Cloud Native jenkins
【Drone-初识篇】Drone借助GitLab构建CICD环境、以及编写 .drone.yaml 流水线
【Drone-初识篇】Drone借助GitLab构建CICD环境、以及编写 .drone.yaml 流水线
1037 0
|
Kubernetes jenkins Java
jenkins-CICD系列之-jenkins使用pipeline流水线k8s发布
jenkins使用pipeline流水线k8s一键发布
1129 1
|
Ubuntu Shell 开发工具
gitlab 编排.gitlab-ci.yaml高级技巧
gitlab 编排.gitlab-ci.yaml高级技巧
gitlab 编排.gitlab-ci.yaml高级技巧
|
Kubernetes Docker 容器
|
存储 运维 Kubernetes
在k8s安装CICD-devtron
在k8s安装CICD-devtron
247 0

热门文章

最新文章