google云部署 k3s 集群

google云部署 k3s 集群

背景与核心痛点:对于需要在海外云厂商部署轻量化微服务与 CI/CD 流水线的开发者而言,标准版 Kubernetes 动辄占用数 GB 内存且组件繁杂。在 Google Cloud Platform (GCP) 实例上部署轻量级 K3s(内存开销仅为原生 K8s 的一半、单二进制文件全内置),结合 cert-manager 自动申请 Let's Encrypt 证书及自托管 GitLab Runner,是兼具极低成本与生产级可用性的经典云原生集群方案。

目录

K3s 轻量级架构与适用场景

K3s 是经 CNCF 一致性认证的高可用轻量化 Kubernetes 发行版:

  • 极致轻量:单个二进制文件小于 100MB,内存占用仅需传统 K8s 的 50%。
  • 核心组件内置:默认集成 Flannel CNI、CoreDNS、Traefik Ingress Controller、Kine 与 SQLite/嵌入式 etcd。
  • 理想场景:边缘计算节点、CI/CD 动态构建器、中小型团队独立出海业务集群。

GCP 计算实例准备与内核网络调优

在 GCP Compute Engine 中创建 1 台 Master 实例与多台 Agent 实例(建议至少 2vCPU / 4GB 内存):

1. 规范节点主机名

在各节点分别设置专属主机名:

# Server 控制节点
hostnamectl set-hostname k3s-master

# Agent 工作节点
hostnamectl set-hostname k3s-node1

2. 开启内核 IPv4 转发

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf
sysctl -p

部署 K3s Server 核心控制节点

在 Master 节点上执行快速部署脚本:

curl -sfL https://get.k3s.io | sh -s -   --write-kubeconfig ~/.kube/config   --write-kubeconfig-mode 600

获取集群加入凭据

读取 Worker 节点加入集群所必需的 Token:

sudo cat /var/lib/rancher/k3s/server/node-token

添加 K3s Agent 工作节点

在各个 Worker 节点执行加入脚本,传入 Server 节点内网/公网 IP 与 Token:

curl -sfL https://get.k3s.io |   K3S_URL=https://<MASTER_IP>:6443   K3S_TOKEN=<NODE_TOKEN>   sh -

在 Master 节点执行 kubectl get nodes,所有节点全部呈 Ready 状态即表示集群组网成功。

部署 cert-manager 与 ACME 生产级证书签发

使用 Helm 在集群中部署 cert-manager 实现 HTTPS 证书自动化:

helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager   --namespace cert-manager   --create-namespace   --version v1.14.4   --set installCRDs=true

创建 Let's Encrypt ClusterIssuer

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: admin@yourdomain.com
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
      - http01:
          ingress:
            ingressClassName: traefik

集成 GitLab Runner 实现云原生自动化交付

  1. 安装二进制包:下载匹配架构的 gitlab-runner 并注册为系统服务。
  2. 集群权限授权:将 gitlab-runner 用户加入集群访问用户组,允许其读取 k3s.yaml 并执行 Helm 发布。
  3. 镜像仓库凭证注入:配置 Docker auths 允许 Runner 容器拉取私有 Registry 镜像。
  4. CI/CD 流水线联动:在 .gitlab-ci.yml 中直接调用 helm upgrade --install 将新镜像自动滚动发布至 K3s 集群。