動態

詳情 返回 返回

批量生成 Kubernetes 部署模板:從 1 到20順序模板 - 動態 詳情

前言:

在微服務架構下,我們常常需要部署多個服務實例來確保應用的高可用性和負載均衡。在使用 Kubernetes 時,這通常意味着我們需要創建多個 YAML 文件來定義不同的資源配置。本文將指導您如何快速生成從 **pvp-game-1.yaml****pvp-game-20.yaml** 的 Kubernetes 部署與服務模板。

批量生成 Kubernetes 部署模板

1. 理解模板文件

在開始之前,讓我們首先了解模板文件 pvp-game-1.tpl 的結構:

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** 的文件,並添加以下內容:

#!/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** 是當前的迭代次數。

3. 執行腳本

在您的終端中運行 generate_templates.sh 腳本,如下所示:

chmod +x generate_templates.sh
./generate_templates.sh

請確保您有適當的權限來執行此腳本,並且模板文件 pvp-game-1.tpl 在同一目錄下。
image.png

4. 驗證輸出

執行腳本後,您應該會看到 pvp-game-2.yamlpvp-game-20.yaml 文件出現在目錄中。這些文件將具有與原始模板相同的結構,但所有實例相關的命名和標籤都已相應更改。

5. 總結

通過上述方式,我們不僅節省了大量的重複勞動,還提高了配置管理的準確性。現在,您可以通過這些模板來創建相應的 Kubernetes 部署,並觀察多個遊戲服務實例的運行。

請注意,腳本只是一個示例,您可能需要根據實際的需求對其進行修改,例如如果存在更多的動態內容或特定的配置邏輯,您可能需要一些更加複雜的模板渲染工具,比如 Helm。

希望本文能幫助您高效地管理 Kubernetes 資源配置,併為您的部署自動化工作提供便利。
以上就是如何通過模板和腳本來批量生成 Kubernetes 部署模板的簡單方法。將這種方法應用到實際工作中可以大大提高效率,使得配置管理和應用部署變得更加靈活和可控。

user avatar caisekongbai 頭像 guoxiaoyu 頭像 u_11537046 頭像 dlonng 頭像 vivo_tech 頭像 mzqqqqq 頭像 2018 頭像 sealio 頭像 hppyvyv6 頭像 vipstone 頭像 fanudekaixinguo 頭像 dns1 頭像
點贊 24 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.