批量生成 Kubernetes 部署模板:从 1 到20顺序模板

前言:

在微服务架构下,我们常常需要部署多个服务实例来确保应用的高可用性和负载均衡。在使用 **Kubernetes **时,这通常意味着我们需要创建多个 YAML 文件来定义不同的资源配置。本文将指导您如何快速生成从 **pvp-game-1.yaml****pvp-game-20.yaml** 的 Kubernetes 部署与服务模板。

批量生成 Kubernetes 部署模板

1. 理解模板文件

在开始之前,让我们首先了解模板文件 pvp-game-1.tpl 的结构:

bash 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pvp-game-1
spec:
  replicas: 1
  strategy:
    rollingUpdate:
      maxSurge: 0
      maxUnavailable: 1
  selector:
    matchLabels:
      app: pvp-game-1
  template:
    metadata:
      labels:
        app: pvp-game-1
    spec:
      containers:
        - name: pvp-game-1
          image: swr.cn-north-4.myhuaweicloud.com/xxxx/pvp-game:{data}
          volumeMounts:
          - mountPath: /share_assets
            name: tmp
          - mountPath: /etc/kafka-certs   # 指定挂载点
            name: kafka-certs-volume
          env:
          - name: KAFKA_CA_LOCAL
            value: "/etc/kafka-certs/phy_ca.crt"
          - name: HOST_NAME
            value: pvp-game-1
          - name: __RUNTIME
            value: xxxx
          envFrom:
          - configMapRef:
              name: pvpgame1
          ports:
            - containerPort: 8955
              name: game-http
            - containerPort: 8970
              name: game1-http
            - containerPort: 28667
              name: nacos-tcp
          resources:
            requests:
              memory: "16384M"
              cpu: "8"
            limits:
              memory: "16384M"
              cpu: "8" 
          livenessProbe:
            httpGet:
              scheme: HTTP
              path: /keepalive
              port: 28667
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
          readinessProbe:
            httpGet:
              scheme: HTTP
              path: /keepalive
              port: 28667
            initialDelaySeconds: 20
            periodSeconds: 10
      volumes:
        - name: tmp
          emptyDir:
            medium: Memory
            sizeLimit: 500Mi
        - name: kafka-certs-volume
          configMap:
            name: kafka-certs
      imagePullSecrets:                                              
        - name: xxxx
---

apiVersion: v1
kind: Service
metadata:
  name: pvp-game-1
  labels:
    app: pvp-game-1
spec:
  ports:
  - port: 8955
    name: game-http
    targetPort: 8955
  - port: 8970
    name: game1-http
    targetPort: 8970
  - port: 28667
    name: nacos-tcp
    targetPort: 28667
  selector:
    app: pvp-game-1

模板定义了一个 **Deployment** 和一个 **Service** 的 Kubernetes 资源,用于部署一个名为 **pvp-game-1** 的游戏服务。重要的是注意资源名称标签、configMapRef 以及容器的环境变量等参数,因为这些都是我们批量生成时需要修改的部分。

2. 使用脚本进行批量修改

为了自动化生成其他名称的服务实例,我们可以编写脚本来修改模板中的关键字段。您可以选择使用如 Shell 脚本、Python 脚本或任何其他喜欢的脚本语言。下面,我将以简单的 Shell 脚本为例来展示如何进行这一过程。

创建一个名为 **generate_templates.sh** 的文件,并添加以下内容:

bash 复制代码
#!/bin/bash

# Define the name of the template file.
TEMPLATE_FILE="pvp-game-1.tpl"

# Check if the template file exists.
if [ ! -f "$TEMPLATE_FILE" ]; then
    echo "Template file $TEMPLATE_FILE does not exist."
    exit 1
fi

# Loop to create files from pvp-game-2 to pvp-game-20 based on the template.
for i in $(seq 2 20); do
    # Define the name of the new file.
    NEW_FILE="pvp-game-${i}.tpl"
    NEW_CONFIGMAP="pvpgame${i}"
    
    # Copy the template to the new file.
    cp $TEMPLATE_FILE $NEW_FILE
    
    # Use 'sed' to replace 'pvp-game-1' with 'pvp-game-N' and save inline (-i option).
    sed -i "s/pvp-game-1/pvp-game-${i}/g" $NEW_FILE

    # Additionally, replace 'pvpgame1' with 'pvpgameN' for configMapRef.
    sed -i "s/pvpgame1/${NEW_CONFIGMAP}/g" $NEW_FILE

    echo "Created file: $NEW_FILE"
done

echo "All files created successfully."

如您所见,我们使用 **for** 循环从** **2** 循环到 **20**,生成每个服务的配置文件。**sed** 命令用于替换文件内容中的 **pvp-game-1****pvp-game-$i**,并替换文件内容中 configMapRef 的name pvpgame1 为pvpgame i ∗ ∗ , ' ∗ ∗ i**,`** i∗∗,'∗∗i**` 是当前的迭代次数。

3. 执行脚本

在您的终端中运行 generate_templates.sh 脚本,如下所示:

shell 复制代码
chmod +x generate_templates.sh
./generate_templates.sh

请确保您有适当的权限来执行此脚本,并且模板文件 pvp-game-1.tpl 在同一目录下。

4. 验证输出

执行脚本后,您应该会看到 pvp-game-2.yamlpvp-game-20.yaml 文件出现在目录中。这些文件将具有与原始模板相同的结构,但所有实例相关的命名和标签都已相应更改。

5. 总结

通过上述方式,我们不仅节省了大量的重复劳动,还提高了配置管理的准确性。现在,您可以通过这些模板来创建相应的 Kubernetes 部署,并观察多个游戏服务实例的运行。

请注意,脚本只是一个示例,您可能需要根据实际的需求对其进行修改,例如如果存在更多的动态内容或特定的配置逻辑,您可能需要一些更加复杂的模板渲染工具,比如 Helm。

希望本文能帮助您高效地管理 Kubernetes 资源配置,并为您的部署自动化工作提供便利。 以上就是如何通过模板和脚本来批量生成 Kubernetes 部署模板的简单方法。将这种方法应用到实际工作中可以大大提高效率,使得配置管理和应用部署变得更加灵活和可控。

相关推荐
说了很好2 小时前
工业通用 PLC 分拣模板!传感器去抖 + 气缸互锁 + 状态机 + 超时报警全套
自动化运维
Gnix102971 天前
Copier 总报错?一篇讲透排查、升级、治理和团队落地
devops
运维开发故事1 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson3 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生3 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
Java之美4 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
SelectDB6 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
小林ixn6 天前
别再手写Prompt了!用AI Loop实现自动化自我迭代,效率提升10倍
人工智能·自动化运维