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

2023-12-18 17:38:45 浏览数 (2)

前言:

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

批量生成 Kubernetes 部署模板

1. 理解模板文件

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

代码语言:shell复制
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** 的文件,并添加以下内容:

代码语言:shell复制
#!/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-1pvp-game-$i`,并替换文件内容中configMapRef 的name pvpgame1 为pvpgame$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 部署模板的简单方法。将这种方法应用到实际工作中可以大大提高效率,使得配置管理和应用部署变得更加灵活和可控。

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

0 人点赞