2. 环境准备:搭建 Kubernetes 集群(Minikube/K3s)与安装 Jenkins
本章是整门课程的基石。你将完成两套核心环境的搭建:一个轻量级 Kubernetes 集群(提供容器编排与蓝绿发布的目标运行环境)以及一套 Jenkins 持续集成/持续部署系统(负责流水线调度与 Secret 注入)。我们提供 Minikube 与 K3s 两种方案,你可根据本地资源灵活选择。
2.1 环境概览与选型对比
在动手之前,先明确各组件的角色与推荐配置。下表对比了两种 Kubernetes 发行版的核心差异:
| 特性 | Minikube | K3s |
|---|---|---|
| 定位 | 本地开发与测试 | 边缘计算 / 轻量生产 / 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。
- 安装 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
- 启动集群(指定驱动与资源)
minikube start --driver=docker --cpus=2 --memory=4096 --kubernetes-version=v1.28.3
- 验证集群状态
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 集群正常通信。下图展示了本章搭建的完整环境拓扑:
2.5 环境检查清单
在进入下一章之前,请逐项确认以下状态:
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| K8s 节点就绪 | kubectl get nodes | 节点状态为 Ready |
| CoreDNS 运行 | kubectl get pods -n kube-system | grep coredns | Pod 状态为 Running |
| Jenkins Pod 运行 | kubectl get pods -n jenkins | Pod 状态为 Running |
| Jenkins 可访问 | 浏览器访问 http://<节点IP>:30080 | 显示 Jenkins 登录页 |
| kubectl 权限 | kubectl auth can-i create pods -n jenkins | 返回 yes |
环境就绪标志: 当 Jenkins 能够通过
kubectl 在 K8s 集群中创建 Pod 并获取日志时,你的环境已完全满足后续蓝绿发布与 Secret 配置实验的要求。