Files
arcticnewone/deploy/README.md
T

3.3 KiB
Raw Blame History

Arcticnewone 生产部署配置

本目录存放 Arcticnewone 个人网站的 Kubernetes 生产部署配置(华为云 SWR 镜像 + Traefik Ingress)。所有资源统一部署在 arcticnewone 命名空间中。

文件说明

文件 说明
namespace.yaml Namespace:项目专属命名空间 arcticnewone
deployment.yaml Deployment:SWR 镜像、副本数 1、私有镜像拉取 secrets
service.yaml ServiceClusterIP80 端口转发到容器 3000 端口
ingress.yaml Ingress:域名 personal.virtheart.comTraefik + cert-manager 自动签发证书

namespace.yaml 负责创建 arcticnewone 命名空间;deployment/service/ingress 三个 YAML 的 metadata 均已指定 namespace: arcticnewone

镜像构建与推送

镜像由项目根目录的 build-and-push.sh 构建并推送到华为云 SWR(多架构 linux/amd64,linux/arm64tag 统一为 latest):

# 1. 设置环境变量(凭据绝不写入仓库)
export SWR_REGISTRY="swr.cn-north-4.myhuaweicloud.com"
export SWR_NAMESPACE="virtheart"
export SWR_USERNAME="<用户名>"
export SWR_PASSWORD="<密码>"

# 2. 执行构建与推送
./build-and-push.sh

推送完成后镜像地址:swr.cn-north-4.myhuaweicloud.com/virtheart/arcticnewone:latest

说明:SWR 不支持 buildx 多架构一步推送产生的 OCI manifest 格式。脚本改为分架构推送(latest-amd64 / latest-arm64),再用 docker manifest create + docker manifest push 合并为标准的 Docker manifest listlatest),并禁用 provenance--provenance=false),保证 SWR 可正常解析。

部署前置条件

  1. 镜像已构建并推送到华为云 SWR(通过项目根目录 ./build-and-push.sh 执行,见上方「镜像构建与推送」)

  2. 集群已安装 Traefik Ingress 与 cert-managerClusterIssuer 名称为 lets-encrypt

  3. 域名 personal.virtheart.com 的 DNS 已解析到集群入口

  4. 创建私有镜像拉取 Secret(凭据从环境变量读取,绝不写入仓库;命名空间由 namespace.yaml 创建):

    kubectl create secret docker-registry huawei-swr-secret -n arcticnewone \
      --docker-server="$SWR_REGISTRY" \
      --docker-username="$SWR_USERNAME" \
      --docker-password="$SWR_PASSWORD" \
      --dry-run=client -o yaml | kubectl apply -f -
    

部署步骤

kubectl apply -f deploy/namespace.yaml
kubectl apply -f deploy/deployment.yaml
kubectl apply -f deploy/service.yaml
kubectl apply -f deploy/ingress.yaml

namespace.yaml 需最先应用;其余三个 YAML 自带 namespace: arcticnewonekubectl apply 时无需额外指定。

部署后验证:

kubectl get deploy,svc,ingress -n arcticnewone
kubectl rollout status deployment/arcticnewone -n arcticnewone
curl -I https://personal.virtheart.com

回滚方案

镜像 tag 固定为 latest,回滚前先确认 SWR 上 latest 对应可回滚的版本(或先推送目标版本镜像),再执行:

# 回滚到上一版本镜像
kubectl rollout undo deployment/arcticnewone -n arcticnewone

# 或整体移除本次部署的资源
kubectl delete -f deploy/ingress.yaml -n arcticnewone
kubectl delete -f deploy/service.yaml -n arcticnewone
kubectl delete -f deploy/deployment.yaml -n arcticnewone