前言:
在微服务架构下,我们常常需要部署多个服务实例来确保应用的高可用性和负载均衡。在使用 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
在同一目录下。
4. 验证输出
执行脚本后,您应该会看到 pvp-game-2.yaml
到 pvp-game-20.yaml
文件出现在目录中。这些文件将具有与原始模板相同的结构,但所有实例相关的命名和标签都已相应更改。
5. 总结
通过上述方式,我们不仅节省了大量的重复劳动,还提高了配置管理的准确性。现在,您可以通过这些模板来创建相应的 Kubernetes 部署,并观察多个游戏服务实例的运行。
请注意,脚本只是一个示例,您可能需要根据实际的需求对其进行修改,例如如果存在更多的动态内容或特定的配置逻辑,您可能需要一些更加复杂的模板渲染工具,比如 Helm。
希望本文能帮助您高效地管理 Kubernetes 资源配置,并为您的部署自动化工作提供便利。
以上就是如何通过模板和脚本来批量生成 Kubernetes 部署模板的简单方法。将这种方法应用到实际工作中可以大大提高效率,使得配置管理和应用部署变得更加灵活和可控。
我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!