返回首页

🎮 游戏K8S集群初始化指南

从零到一构建流程

🔧 基础设施层

云平台资源准备与网络配置

腾讯云 TKE
VPC 网络
安全组
负载均衡

🚀 容器编排层

Kubernetes 集群与核心组件

K8S Master
Worker Nodes
CNI 网络
存储 CFS

⚙️ 中间件层

服务网格与工具组件

Higress 网关
Helm 包管理
Koordinator 调度
可观测套件

📦 应用管理层

CI/CD 与应用部署

ArgoCD
Git 仓库
Harbor 镜像
Kustomize

🎯 业务应用层

游戏服务与数据存储

游戏服务
MySQL 集群
Redis 缓存
日志收集

1️⃣ 集群购买与基础配置

创建资源组项目

在云账户中新建资源组项目,进入容器服务,点击"高级设置"选择对应项目以便“财务分账”。

创建集群配置

  • 测试集群:8核16GB配置(cpu太低ip和pod数受限)
  • 生产集群:8核16GB配置 x N (S6系列)
  • 取消勾选 prometheus 监控(避免额外费用)
  • 配置安全组规则

创建动态存储类

配置 CFS 文件存储,用于持久化数据存储需求。

🔧 安装 Helm 包管理器

根据网络环境选择合适的安装方式

国外环境直接安装:

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

国内环境手动安装:

wget https://get.helm.sh/helm-v3.16.4-linux-amd64.tar.gz
tar -xf helm-v3.16.4-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/
chmod 755 /usr/local/bin/helm
helm version

🌐 部署 Higress 网关

# 设置仓库信息
helm repo add higress.io https://higress.io/helm-charts
helm repo update

mkdir higress && cd higress
vim values.yaml

values.yaml 配置示例:

global:
  o11y:
    enabled: true  # 测试环境改为 false
    grafana:
      pvc:
        storageClassName: "cfs"
    prometheus:
      pvc:
        storageClassName: "cfs"
    loki:
      pvc:
        storageClassName: "cfs"
  pvc:
    rwxSupported: true

higress-console:
  ingress:
    enabled: true
    domain: <domain>
    annotations:
      higress.io/whitelist-source-range: "<IP1>,<IP2>"
  web:
    login:
      prompt: "<company>手游<project>-生产环境"

higress-core:
  gateway:
    replicas: 2  # 测试环境改为 1
    service:
      annotations:
        service.cloud.tencent.com/direct-access: "true"
        service.cloud.tencent.com/pass-to-target: "true"
# 部署命令
helm install higress -n higress-system higress.io/higress \
  --create-namespace --render-subchart-notes -f values.yaml

⚡ 安装 Koordinator 调度器

helm repo add koordinator-sh https://koordinator-sh.github.io/charts/
helm repo update

mkdir koordinator && cd koordinator
vim values.yaml
# koordinator values.yaml
manager:
  resources:
    limits:
      cpu: 1000m 
      memory: 2Gi
    requests:
      cpu: 100m 
      memory: 256Mi

scheduler:
  resources:
    limits:
      cpu: 1000m
      memory: 2Gi
    requests:
      cpu: 100m
      memory: 256Mi

koordlet:
  resources:
    limits:
      cpu: 1000m
      memory: 2Gi
    requests:
      cpu: 100m
      memory: 256Mi
# 部署 koordinator
helm install koordinator koordinator-sh/koordinator \
  -n koordinator-system --create-namespace -f values.yaml

# 应用 colocation 配置
kubectl apply -f colocation.yaml
使用 koordinator 调度器需要在 namespace 添加标签:koordinator.sh/enable-colocation: "true"

2️⃣ 集群初始化操作

🔑 配置永久 kubeconfig 文件

初始化后节点上的 kubeconfig 文件仅有效期 12 小时,需要替换为永久配置文件

获取集群 kubeconfig

进入腾讯云控制台 → 容器服务 → API 中心,调用接口获取集群 kubeconfig 内容

vi 1.json  # 粘贴从API获取的内容

使用 Python 脚本处理

# 创建处理脚本
vi 1.py

import json
with open('1.json') as j:
    print(json.load(j)['Response']['Kubeconfig'])

# 运行脚本
python3 1.py

修改配置文件

  • 将 server 地址修改为集群 NodePort 地址
  • 将证书信息替换为:insecure-skip-tls-verify: true
  • 更新 ~/.kube/config 文件
vim ~/.kube/config  # 粘贴修改后的内容
kubectl get svc     # 验证配置

🌐 优化网络配置

ip-masq-agent 插件通过配置 iptables 规则隐藏 Pod IP 地址,默认配置可能导致通信异常
# 配置内网 Harbor 地址节省流量
echo " " | sudo tee -a /etc/hosts

# 安装 kubectl 补全工具
yum install -y bash-completion
kubectl completion bash > /etc/bash_completion.d/kubectl
source /etc/bash_completion.d/kubectl

echo 'alias k=kubectl' >> ~/.bashrc
echo 'complete -o default -F __start_kubectl k' >> ~/.bashrc
source ~/.bashrc

🛠️ 安装 k9s 管理工具

wget https://mirror.ghproxy.com/https://github.com/derailed/k9s/releases/download/v0.27.4/k9s_Linux_amd64.tar.gz
tar -xvf k9s_Linux_amd64.tar.gz
sudo mv k9s /usr/local/bin/

3️⃣ 部署游戏相关程序

📚 新环境仓库建立

可视化构建工具p-init-View: - 内网:<private_ip>:8000,外网:<IP1>:8000

环境准备评估

  • 与服务端确认组件架构变化
  • 确认 SQL 初始化变更情况
  • 确认是否需要购买 MySQL 和 Redis
  • 准备账户、密码和 IP 信息

使用可视化仓库生成平台

  • 创建模板目录,修改系统配置,创建配置页面
  • 选择项目,填写配置,预览YAML,仓库推送
  • 🔗 配置 ArgoCD 集群访问

    # 在新集群执行
    kubectl config get-contexts -o name  # 获取上下文名称
    kubectl get svc                      # 获取服务列表
    kubectl edit svc kubernetes          # 修改为 NodePort 类型
    vim ~/.kube/config                   # 配置证书忽略
    # 在 ArgoCD 集群执行
    kubectl exec -it $(kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o jsonpath='{.items[0].metadata.name}') -n argocd -- /bin/bash
    
    # 在容器内执行
    cat > config << EOF
    # 修改完成后的新集群 kubeconfig 内容
    EOF
    
    argocd admin initial-password -n argocd
    argocd login --insecure 127.0.0.1:8080
    # 用户名:admin,密码:<password>
    
    # 添加集群
    argocd cluster add <cluster_name> --kubeconfig config --name <new_name>

    ⚙️ 配置 ArgoCD 应用

    添加仓库信息

    Settings → Repositories → VIA HTTPS,填写仓库地址

    创建应用

    • SOURCE:选择 Repository URL,Path 填写环境路径
    • DESTINATION:选择 Cluster URL,Namespace 填写对应命名空间

    数据库初始化

    # 生成初始化 SQL
    vi create_login_sql_smallServer.py
    python3 create_login_sql_smallServer.py
    
    # 生成路径:/root/clearDB/init_db_sql/init_login_<project>-<env>.sql

    🔄 部署同步顺序

    ArgoCD 发布顺序:先同步 namespace → 然后 mysql/redis → 最后等 cdkey 配置完成后更新 configmap

    创建清档接口

    搭建 p0x-clear-db 接口工具,调整环境配置参数

    vi <project>-clear-db.py
    # 添加对应环境配置:
    # Env_namespace: k8s命名空间
    # Env_node: k8s节点
    # env_git_subdir: git仓库
    # env_appname: argocd应用名称
    # env_cosdir: 腾讯云cos桶

    完善仓库配置

    • 完善 deploy-patch.yaml:增加 nodename、Redis、MySQL 配置
    • 删除不需要配置表组件的 COS 多余部分
    • 确保 recharge 和 game 的 COS 路径只有 hostPath

    安装数据库客户端

    yum install -y mysql  # 每个集群的 node1 安装 MySQL 客户端

    📊 日志收集配置

    # 配置 loki 日志收集
    vim log-all.yaml  # 新增对应环境配置
    kubectl apply -f log-all.yaml
    
    # 配置 Glog
    vim glog.py  # 修改对应环境
    python3 glog.py > glog-<project>-<env>.yaml
    kubectl apply -f glog-<project>-<env>.yaml

    4️⃣ 常见问题排查

    🚨 集群创建问题

    🔧 ArgoCD 同步问题

    💾 数据库连接问题

    防止首次发版无人提前验收半夜三更@all,部署完成后,可先手动调整镜像tag、配置表、replicas简单测试。自测完毕复原配置,尽快让研发走发版流程,然后业务方验收。

    🎯 部署完成检查清单

    ✅ 集群状态正常 ✅ 网关访问正常 ✅ 数据库连接成功 ✅ 日志收集配置 ✅ 监控告警设置