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