← 返回主页
案例 01
Kubernetes 生产集群从零搭建(kubeadm 高可用方案)

背景描述

某互联网创业公司计划将 12 个微服务迁移到 K8s,需在 10 台物理服务器上搭建高可用 K8s 集群(3 Master + 7 Worker),使用 containerd 作为容器运行时,Calico 作为网络插件。

解决方案

使用 kubeadm 搭建高可用集群,3 台 Master 通过 HAProxy + Keepalived 实现 API Server 负载均衡。提前编写 Ansible Playbook 完成所有节点的系统初始化(内核参数、containerd 安装、kubeadm 配置)。

技术要点

  • Master 高可用:HAProxy(端口 6443)+ Keepalived VIP 漂移
  • CRI 选型:containerd,替代 dockershim(K8s 1.24+ 已移除)
  • CNI 网络:Calico BGP 模式,跨子网路由,支持 NetworkPolicy
  • etcd 独立部署(3 节点),与 Master 节点分离以降低耦合
# containerd 安装与配置 yum install -y containerd.io containerd config default > /etc/containerd/config.toml # 修改 SystemdCgroup = true, sandbox_image 为国内镜像 sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml systemctl enable containerd --now # kubeadm 初始化第一个 Master kubeadm init --control-plane-endpoint "k8s-api.example.com:6443" \ --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 \ --upload-certs --cri-socket=unix:///run/containerd/containerd.sock # 其他 Master 加入 kubeadm join k8s-api.example.com:6443 --token \ --discovery-token-ca-cert-hash sha256: \ --control-plane --certificate-key # Calico 部署 kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml
案例 02
传统 Java 应用容器化改造与 CI/CD 集成

背景描述

某金融科技公司有一套运行了 3 年的 Spring Boot 单体应用,部署在 4 台虚拟机通过 Nginx 负载。每次发版需手动上传 JAR、逐个重启,耗时 2 小时且容易出错。客户希望容器化并接入 CI/CD。

解决方案

编写多阶段 Dockerfile 构建镜像,推送到私有 Harbor 仓库。部署至 K8s 集群使用 Deployment 管理,配合 ConfigMap/Secret 管理配置。Jenkins Pipeline 实现代码提交 → 自动构建 → 滚动更新。

技术要点

  • 多阶段构建:第一阶段 Maven 编译,第二阶段仅复制 JAR 运行,镜像体积从 600MB 压缩到 180MB
  • JVM 容器感知:-XX:+UseContainerSupport 正确识别容器内存限制
  • 滚动更新策略:maxUnavailable=1, maxSurge=1,保证更新期间服务不断
  • 健康检查:livenessProbe 检测 /actuator/health/liveness,readinessProbe 检测 /actuator/health/readiness
# 多阶段 Dockerfile FROM maven:3.8-openjdk-11 AS build WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY src ./src RUN mvn package -DskipTests FROM openjdk:11-jre-slim WORKDIR /app COPY --from=build /app/target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-XX:+UseContainerSupport", "-XX:MaxRAMPercentage=75.0", "-jar", "app.jar"] # K8s Deployment(关键配置) apiVersion: apps/v1 kind: Deployment metadata: name: app-service spec: replicas: 3 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 1 template: spec: containers: - name: app image: harbor.example.com/app:latest resources: requests: { memory: "512Mi", cpu: "250m" } limits: { memory: "2Gi", cpu: "1000m" } livenessProbe: httpGet: { path: /actuator/health/liveness, port: 8080 } initialDelaySeconds: 45 readinessProbe: httpGet: { path: /actuator/health/readiness, port: 8080 } initialDelaySeconds: 30
案例 03
K8s 集群资源紧张下的 Pod 驱逐故障处理

背景描述

某电商大促期间,K8s 集群突然出现大量 Pod 被驱逐(Evicted),核心交易服务中断。排查发现节点内存压力导致 kubelet 触发驱逐阈值,而 HPA 扩容的新 Pod 调度到已满载节点。

解决方案

紧急扩容 3 台 Worker 节点加入集群。调整 kubelet 驱逐阈值参数(--eviction-hard),为系统预留内存。配置 PodDisruptionBudget 防止批量驱逐。优化资源 Request/Limit 配置。

技术要点

  • kubelet 驱逐信号:memory.available < 100Mi(默认值)太激进,调整为 500Mi
  • 系统预留:--system-reserved=memory=2Gi,cpu=500m,防止系统进程争抢资源
  • PodDisruptionBudget:核心服务 minAvailable=2,防止批量驱逐
  • 调度策略:为关键服务配置 nodeAffinity + podAntiAffinity 分散部署
# kubelet 配置 /var/lib/kubelet/config.yaml evictionHard: memory.available: "500Mi" nodefs.available: "5%" imagefs.available: "10%" evictionSoft: memory.available: "1Gi" evictionSoftGracePeriod: memory.available: "2m" systemReserved: memory: "2Gi" cpu: "500m" # PodDisruptionBudget apiVersion: policy/v1 kind: PodDisruptionBudget metadata: name: core-service-pdb spec: minAvailable: 2 selector: matchLabels: app: core-service # 扩容节点加入集群 kubeadm token create --print-join-command # 在新 Worker 上执行输出的 join 命令
案例 04
Docker 私有镜像仓库 Harbor 搭建与镜像安全扫描

背景描述

某企业因合规要求,所有容器镜像必须存储在内部私有仓库,且需要对镜像进行 CVE 漏洞扫描。公网环境无法直接拉取 Docker Hub 镜像。

解决方案

部署 Harbor v2.9 私有仓库,配置 HTTPS + LDAP 认证。启用 Trivy 漏洞扫描器,设置阻止高危漏洞镜像拉取的策略。配置 Docker 代理缓存加速外部镜像拉取。

技术要点

  • Harbor 安装使用 docker-compose 一键部署,数据持久化到 NAS 存储
  • HTTPS 证书通过内部 CA 签发,Harbor 和 Docker 客户端双向配置
  • Trivy 扫描策略:高危漏洞禁止拉取,中危告警但允许拉取
  • 镜像代理缓存:配置 Docker Hub、gcr.io 等代理,内网拉取速度提升 10 倍
# Harbor 安装(docker-compose) wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-online-installer-v2.9.0.tgz tar xzf harbor-online-installer-v2.9.0.tgz cd harbor cp harbor.yml.tmpl harbor.yml # harbor.yml 关键配置 hostname: registry.internal.com https: port: 443 certificate: /etc/certs/registry.crt private_key: /etc/certs/registry.key harbor_admin_password: database: password: # 安装(含 Trivy 扫描器) ./install.sh --with-trivy # Docker 客户端配置 mkdir -p /etc/docker/certs.d/registry.internal.com cp registry.crt /etc/docker/certs.d/registry.internal.com/ docker login registry.internal.com