批量生成 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 <math xmlns="http://www.w3.org/1998/Math/MathML"> i ∗ ∗ , ' ∗ ∗ i**,`** </math>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 部署模板的简单方法。将这种方法应用到实际工作中可以大大提高效率,使得配置管理和应用部署变得更加灵活和可控。

相关推荐
荣光波比10 小时前
K8S(一)—— 云原生与Kubernetes(K8S)从入门到实践:基础概念与操作全解析
云原生·容器·kubernetes
伞啊伞10 小时前
K8s概念基础(一)
云原生·容器·kubernetes
hello_25012 小时前
k8s基础监控promql
云原生·容器·kubernetes
静谧之心14 小时前
在 K8s 上可靠运行 PD 分离推理:RBG 的设计与实现
云原生·容器·golang·kubernetes·开源·pd分离
1024find18 小时前
Spark on k8s部署
大数据·运维·容器·spark·kubernetes
能不能别报错1 天前
K8s学习笔记(十六) 探针(Probe)
笔记·学习·kubernetes
能不能别报错1 天前
K8s学习笔记(十四) DaemonSet
笔记·学习·kubernetes
火星MARK1 天前
k8s面试题
容器·面试·kubernetes
赵渝强老师1 天前
【赵渝强老师】Docker容器的资源管理机制
linux·docker·容器·kubernetes
能不能别报错2 天前
K8s学习笔记(十五) pause容器与init容器
笔记·学习·kubernetes