2. 环境准备:搭建 Kubernetes 集群(Minikube/K3s)与安装 Jenkins

本章是整门课程的基石。你将完成两套核心环境的搭建:一个轻量级 Kubernetes 集群(提供容器编排与蓝绿发布的目标运行环境)以及一套 Jenkins 持续集成/持续部署系统(负责流水线调度与 Secret 注入)。我们提供 Minikube 与 K3s 两种方案,你可根据本地资源灵活选择。

2.1 环境概览与选型对比

在动手之前,先明确各组件的角色与推荐配置。下表对比了两种 Kubernetes 发行版的核心差异:

特性MinikubeK3s
定位本地开发与测试边缘计算 / 轻量生产 / CI 环境
架构单节点(支持多节点实验)单节点或高可用集群
资源占用约 2 GB RAM + 2 CPU约 512 MB RAM + 1 CPU
安装复杂度低(依赖 Docker/虚拟机驱动)极低(单二进制文件)
CNI 插件默认 Calico / Flannel内置 Flannel(Traefik 可选)
持久化存储动态 Provisioner 默认可用需手动配置 Local Path 或 Longhorn
推荐场景Windows/macOS 桌面开发者Linux 服务器 / 资源受限环境
选型建议: 如果你的宿主机内存 ≥ 8 GB,推荐使用 Minikube 以获得更完整的 Kubernetes 体验;若宿主机内存 ≤ 4 GB 或运行在云服务器上,优先选择 K3s。

2.2 搭建 Kubernetes 集群

2.2.1 方案 A:使用 Minikube

Minikube 通过驱动管理本地虚拟机或容器来运行单节点集群。以下步骤基于 Linux/macOS,Windows 用户请将 minikube start 驱动切换为 docker 或 hyperv。

  1. 安装 Minikube 与 kubectl
# 下载 Minikube 二进制
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 安装 kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install kubectl /usr/local/bin/kubectl
  1. 启动集群(指定驱动与资源)
minikube start --driver=docker --cpus=2 --memory=4096 --kubernetes-version=v1.28.3
  1. 验证集群状态
kubectl cluster-info
kubectl get nodes -o wide
关键检查点: 确保 kubectl cluster-info 返回的 Master 与 CoreDNS 状态均为 Running。若 Minikube 启动失败,请执行 minikube delete 后检查 Docker 服务状态再重试。

2.2.2 方案 B:使用 K3s

K3s 是 Rancher 出品的轻量级 Kubernetes 发行版,安装过程仅需一条命令:

curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644

安装完成后,K3s 会自动配置 kubectl 并启动所有核心组件。验证方式与 Minikube 一致:

kubectl get nodes
kubectl get pods -A
注意: K3s 默认使用 containerd 作为容器运行时,且内置了 Traefik Ingress Controller。如果你后续需要部署 Jenkins 并暴露 Service,请确保 Ingress 或 NodePort 网络可达。

2.3 安装与配置 Jenkins

我们将 Jenkins 以容器方式部署在 Kubernetes 集群内,便于后续流水线直接调用集群 API 进行蓝绿发布与 Secret 管理。

2.3.1 创建命名空间与持久卷

kubectl create namespace jenkins

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-home
  namespace: jenkins
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
EOF

2.3.2 部署 Jenkins Master

使用官方 Helm Chart 或直接编写 Deployment。以下为 Deployment + Service 的简化示例:

cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
  namespace: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      containers:
      - name: jenkins
        image: jenkins/jenkins:lts-jdk11
        ports:
        - containerPort: 8080
        - containerPort: 50000
        volumeMounts:
        - name: jenkins-home
          mountPath: /var/jenkins_home
      volumes:
      - name: jenkins-home
        persistentVolumeClaim:
          claimName: jenkins-home
---
apiVersion: v1
kind: Service
metadata:
  name: jenkins-svc
  namespace: jenkins
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 30080
  - port: 50000
    targetPort: 50000
    nodePort: 30050
  selector:
    app: jenkins
EOF

2.3.3 获取初始管理员密码

kubectl logs -n jenkins deployment/jenkins | grep "Please use the following password"
# 或直接查看 Pod 日志中的密码行
kubectl exec -n jenkins deploy/jenkins -- cat /var/jenkins_home/secrets/initialAdminPassword
访问 Jenkins: 使用 http://<集群节点IP>:30080 打开 Jenkins Web 界面。首次登录后,安装“推荐插件”并创建管理员用户。

2.4 环境集成验证

完成上述步骤后,你需要确认 Jenkins 能够与 Kubernetes 集群正常通信。下图展示了本章搭建的完整环境拓扑:

环境集成拓扑图 开发者工作站 kubectl / git / IDE Jenkins Master 流水线调度 / Secret 注入 K8s API Server 集群控制面 提交代码 / 触发流水线 kubectl apply / 创建 Pod Kubernetes Worker 节点 Jenkins Agent 执行流水线任务 蓝绿发布 Pod v1 / v2 版本 Secret Store 环境变量 / Volume 调度 Pod 说明: Jenkins Master 通过 ServiceAccount 与 K8s API 通信,动态创建 Agent Pod 执行构建与部署。 蓝绿发布与 Secret 配置将在后续章节基于此环境实现。

2.5 环境检查清单

在进入下一章之前,请逐项确认以下状态:

检查项验证命令预期结果
K8s 节点就绪kubectl get nodes节点状态为 Ready
CoreDNS 运行kubectl get pods -n kube-system | grep corednsPod 状态为 Running
Jenkins Pod 运行kubectl get pods -n jenkinsPod 状态为 Running
Jenkins 可访问浏览器访问 http://<节点IP>:30080显示 Jenkins 登录页
kubectl 权限kubectl auth can-i create pods -n jenkins返回 yes
环境就绪标志: 当 Jenkins 能够通过 kubectl 在 K8s 集群中创建 Pod 并获取日志时,你的环境已完全满足后续蓝绿发布与 Secret 配置实验的要求。