通过Kustomize进行清单管理

使用的背景

我认为现在在应用程序开发中,要对Pod进行更改时,很多人会使用kubectl apply等方法。

那里潜藏着各种人为错误的原因,如更改错误、选择manifest错误等。

因此,在这里使用的是kustomize。
通过使用它,Kubernetes能帮助防止上述情况。

准备好了

创建一个用于验证的目录。

# mkdir kustomize-manifest

在这下面创建两个目录,一个名为base,另一个名为production。

在base文件夹下创建以下三个文件。

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: ClusterIP
  ports:
    - name: "http-port"
      protocol: "TCP"
      port: 80
      targetPort: 80
  selector:
    app: nginx
resources:
- nginx-deployment.yml
- nginx-service.yml
images:
- name: nginx
  newTag: "1.17.0"

接下来,在production下创建以下两个项。

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: LoadBalancer
  ports:
    - name: "http-port"
      protocol: "TCP"
      port: 80
      targetPort: 80
bases:
- ../base
namespace: "production"
patchesStrategicMerge:
- production-nginx-service.yml

kustomize 命令

那么,让我们回到kustomize-manifest目录下,并尝试输入以下命令。

# kubectl kustomize base
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  ports:
  - name: http-port
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.17.0
        name: nginx
        ports:
        - containerPort: 80

我们可以看到将deployment.yml和svc.yml合并后的文件被显示出来。

接下来,我们将执行以下命令。

# kubectl kustomize production
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: production
spec:
  ports:
  - name: http-port
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: production
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.17.0
        name: nginx
        ports:
        - containerPort: 80

当合并后的yml文件显示出来时,您可以看到svc的类型已经变成了LoadBalancer。

这在 production 的 kustomize.yml 中。

bases:
- ../base

作为一个选项,我们可以指定一个基本的清单文件。

patchesStrategicMerge:
- production-nginx-service.yml

通过这样写,就可以在production-nginx-service.yml文件中更改svc。通过这种方式,我们成功地为production配置了LoadBalancer。

通过Kustomize创建并部署的。

可以用以下命令部署由Kustomize创建的内容。

# kubectl kustomize base | kubectl apply -f -
service/nginx-service created
deployment.apps/nginx-deployment created
广告
将在 10 秒后关闭
bannerAds