k8s使用kustomize来部署应用

k8s使用kustomize来部署应用

本文主要是讲述kustomzie的基本用法。首先,我们说一下部署文件的目录结构。

./
├── base
│   ├── deployment.yaml
│   ├── kustomization.yaml
│   └── service.yaml
└── overlays
    └── dev
        ├── kustomization.yaml
        └── patch-dev.yaml

这是一个标准的kustomize项目的目录结构,base存放这deployment和service相关,overlay存放着不同环境定制化的一下信息,这里只有一个dev的环境。我们逐一看看每个文件里面的内容吧。

1. base/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-helloworld # 部署的名称
  # namespace: dev-api # 部署到哪个命名空间, 使用kustomize的话这里不能出现,需要在overlays/dev/kustomization.yaml 指定
spec:
  replicas: 2  # 设置副本数量为2
  selector:
    matchLabels:
      app: api-helloworld # 用于选择匹配的Pod标签
  template:
    metadata:
      labels:
        app: api-helloworld # Pod的标签
    spec:
      containers:
      - name: api-helloworld-c # 容器名称
        # image: docker.io/library/restfulapi:latest # For image in container, use ctr -n k8s.io images import restfulapi.tar to import images
        image: restfulapi:1  # For image in docker
        imagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地没有就拉取
        ports:
        - containerPort: 80 # 容器内部监听的端口

2. base/service.yaml

apiVersion: v1
kind: Service
metadata:
  name: api-helloworld-service # 服务的名称
spec:
  externalTrafficPolicy: Cluster # 外部流量策略设置为集群
  selector:
    app: api-helloworld # 用于选择匹配的Pod标签
  ports:
  - protocol: TCP # 使用TCP协议
    port: 5000 # 服务暴露的端口
    targetPort: 5000 # Pod中容器的端口
    nodePort: 30500 # 在每个Node上分配的端口,用于外部访问
  type: NodePort # 服务类型,使用NodePort

3. base/kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml

4. overlay/dev/patch-dev.yaml

apiVersion: apps/v1  
kind: Deployment  
metadata:  
  name: api-helloworld
spec:  
  replicas: 3

5. overlay/dev/kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
namespace: dev-api
images:
- name: restfulapi
  newTag: latest
patches:
- path: patch-dev.yaml

部署命令

如果需要查看kustomize合成结果,可以运行下面命令:

cd overlay/dev
kubectl kustomize

输出合成后的结果,重点关注replica和image,已经换成我们在overlay/dev下面定制的参数。

apiVersion: v1
kind: Service
metadata:
  name: api-helloworld-service
  namespace: dev-api
spec:
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 30500
    port: 5000
    protocol: TCP
    targetPort: 5000
  selector:
    app: api-helloworld
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-helloworld
  namespace: dev-api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api-helloworld
  template:
    metadata:
      labels:
        app: api-helloworld
    spec:
      containers:
      - image: restfulapi:latest
        imagePullPolicy: IfNotPresent
        name: api-helloworld-c
        ports:
        - containerPort: 80

直接运行下面命令apply到集群:

kubectl kustomize | kubectl apply -f -

结果如下:
在这里插入图片描述
成功访问:
在这里插入图片描述
好了以上是本期分享的全部内容了,如果你觉得对你还有帮助,建议点赞分享并收藏哦。如果大家想对我表示肯定,扫描下面的二维码即可哦,原创不易,一分钱也是爱哦。
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值