前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >批量生成 Kubernetes 部署模板:从 1 到20顺序模板

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

原创
作者头像
对你无可奈何
修改2023-12-18 17:38:45
2671
修改2023-12-18 17:38:45
举报
文章被收录于专栏:运维专栏运维专栏

前言:

在微服务架构下,我们常常需要部署多个服务实例来确保应用的高可用性和负载均衡。在使用 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腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 批量生成 Kubernetes 部署模板
    • 1. 理解模板文件
      • 2. 使用脚本进行批量修改
        • 3. 执行脚本
          • 4. 验证输出
            • 5. 总结
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
            http://www.vxiaotou.com