批量生成 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 部署模板的简单方法。将这种方法应用到实际工作中可以大大提高效率,使得配置管理和应用部署变得更加灵活和可控。

相关推荐
_.Switch8 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
心灵彼岸-诗和远方9 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
YCyjs11 小时前
K8S群集调度二
云原生·容器·kubernetes
Hoxy.R11 小时前
K8s小白入门
云原生·容器·kubernetes
心灵彼岸-诗和远方21 小时前
Devops业务价值流:软件研发最佳实践
运维·产品经理·devops
景天科技苑1 天前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
wclass-zhengge1 天前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇1 天前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
昌sit!1 天前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
A ?Charis1 天前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab