k8s

kustomize使用

介绍

一般应用都会在多套环境中部署,比如生产环境,预发环境,测试环境等。不同环境间的差异可能只是镜像的tag,应用的labels等,而这些不同环境下的yaml文件可能经常会因为人为疏忽导致配置错误。这时就可以使用kustomize来管理这些yaml文件。

Base

是包含kustomization.yaml文件的一个目录,其中包含一组资源及其相关的定制。可以是本地目录或者来自远程仓库的目录,只要其中存在 kustomization.yaml 文件即可。
file

Overlays

也是一个目录,包含指定了Base目录的kustomization.yaml文件和定制资源文件。Base不了解Overlays的存在,且可被多个Overlays所使用。
file

特点

  • 有一个统一的Base模板可以管理项目的Kubernetes部署结构。
  • 通过Overlays方式管理不同环境之间的差异。
  • 管理的都是Kubernetes原生yaml文件,没有额外的学习成本。

使用

GitHub地址:https://github.com/kubernetes-sigs/kustomize
官方文档:https://kubernetes.io/zh-cn/docs/tasks/manage-kubernetes-objects/kustomization/
在kubernetes 1.14版本以上,已经集成到kubectl中了,我的环境是1.22,使用的版本是v4.5.5。

安装

可以直接采用shell安装:

curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"  | bash

也可以下载安装包:

wget https://github.91chi.fun//https://github.com//kubernetes-sigs/kustomize/releases/download/kustomize%2Fv4.5.5/kustomize_v4.5.5_linux_amd64.tar.gz
tar xvf kustomize_v4.5.5_linux_amd64.tar.gz
cp kustomize /usr/local/bin/

实例

创建Base基础模版

  1. 创建base目录
    mkdir base
  2. 创建/base/deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: nginx
    spec:
    replicas: 2
    selector:
    matchLabels:
      app: nginx
    template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:latest
        imagePullPolicy: Never
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP
  3. 创建 base/service.yaml
    apiVersion: v1
    kind: Service
    metadata:
    name: nginx
    spec:
    ports:
    - port: 80
    protocol: TCP
    targetPort: 80
    selector:
    app: nginx
    type: ClusterIP
  4. 创建 base/kustomization.yaml
    resources:
    - deployment.yaml
    - service.yaml

    这样基础模板就创建好了,我们可以使用如下命令将所有文件连在一起。

    kustomize build ../base

    file
    创建应用可以使用以下方式:

    # 直接使用kubectl apply -k (集群版本要高于1.14)
    kubectl apply -k ../base/
    # 还可以通过kustomize命令
    kustomize build ../base | kubectl apply -f -

    file
    删除应用的话:

    kubectl delete -k ../base/
    kustomize build ../base | kubectl delete -f -

    file

创建不同环境的Overlays

  1. 创建overlays目录
    mkdir -p overlays/{dev,prod,stag}
  2. 在dev目录下配置自定义需求
    cat replica_count.yaml
    apiVersion: v1
    kind: Deployment
    metadata:
    name: nginx
    spec:
    replicas: 3
    cat svc.yaml
    apiVersion: v1
    kind: Service
    metadata:
    name: nginx
    spec:
    ports:
    - port: 80
    protocol: TCP
    targetPort: 80
    selector:
    app: nginx
    type: NodePort
  3. 创建kustomization.yaml
    namePrefix: dev-
    commonLabels:
      variant: dev
    commonAnnotations:
      note: Hello, This is dev!
    patches:
    - replica_count.yaml
    - svc.yaml
    resources:
    - ../../base
    namespace: dev

    stag预发环境和prod生产环境大同小异。

  4. 发布应用
    kustomize build overlays/dev/ | kubectl apply -f -

    file

  5. 查看应用
    file

修改镜像/namespace

使用下面的命令实现:

kustomize edit set

file

比如修改dev环境下的镜像地址为nginx:v2

cd overlays/dev
kustomize edit set image new-nginx:latest=nginx:v2
cat kustomization.yaml

file

查看区别

kubectl diff -k ./

file

修改namespace为prod

kustomize edit set namespace prod

file

分类: k8s
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
3
0
希望看到您的想法,请您发表评论x