3. 环境准备:基础操作系统配置、Docker 与 Docker Compose 安装、Kubernetes 集群搭建
本章聚焦于搭建分布式追踪环境所需的底层基础设施。所有后续的 Jaeger、Zipkin、OpenTelemetry Collector 等组件都将运行在此基础环境之上。环境配置遵循“最小依赖、可复现、可移植”原则,确保学员能在本地开发机、公司内网或云环境中一致地完成部署。
3.1 基础操作系统配置
推荐使用 Ubuntu 22.04 LTS 作为宿主机操作系统。以下配置已在 x86_64 和 ARM64 架构上验证通过。
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| CPU | ≥ 4 核 | 满足 Kubernetes 控制平面 + 工作负载最低要求 |
| 内存 | ≥ 8 GB | 分布式追踪组件(Jaeger、ES)内存开销较大 |
| 磁盘 | ≥ 50 GB SSD | 容器镜像、持久卷、日志存储 |
| 内核参数 | net.bridge.bridge-nf-call-iptables = 1 | Kubernetes 网络插件(CNI)依赖桥接过滤 |
| Swap | 关闭 | kubelet 强制要求 swap 关闭,否则节点无法注册 |
关键步骤: 执行以下命令完成基础调优。
# 更新系统并安装必要工具
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y curl wget vim net-tools
# 关闭 swap(临时 + 永久)
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 加载内核模块并设置 sysctl
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
3.2 Docker 与 Docker Compose 安装
Docker 作为容器运行时,是分布式追踪组件本地快速验证的首选。Docker Compose 用于编排多容器追踪栈(如 Jaeger + Elasticsearch + Kafka)。
3.2.1 Docker Engine 安装
使用官方脚本安装,确保版本 ≥ 24.0。
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt-get install -y ca-certificates curl gnupg
# 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin
# 验证
sudo docker run hello-world
3.2.2 Docker Compose 安装
Docker Compose v2 已集成到 Docker CLI 中,但建议单独安装最新版以确保兼容性。
# 下载最新稳定版
DOCKER_COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep tag_name | cut -d '"' -f 4)
sudo curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证
docker-compose --version
移植适配提示: 在内网离线环境中,可提前下载 Docker 和 Compose 的 deb 包或二进制文件,通过 scp 或 U 盘导入。Docker 镜像可使用
docker save / docker load 迁移。
3.3 Kubernetes 集群搭建
使用 kubeadm 搭建单控制平面集群,适合学习与开发环境。生产环境建议使用 kOps、Kubespray 或云厂商托管集群。
3.3.1 安装 kubeadm、kubelet、kubectl
# 添加 Kubernetes 官方仓库
sudo curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 安装指定版本(锁定版本防止意外升级)
sudo apt-get update
sudo apt-get install -y kubelet=1.28.2-1.1 kubeadm=1.28.2-1.1 kubectl=1.28.2-1.1
sudo apt-mark hold kubelet kubeadm kubectl
3.3.2 初始化控制平面节点
# 初始化(替换 --apiserver-advertise-address 为实际 IP)
sudo kubeadm init \
--apiserver-advertise-address=192.168.1.100 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12
# 配置 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 安装 Flannel CNI 网络插件
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
3.3.3 工作节点加入集群
在控制平面初始化成功后,会输出 kubeadm join 命令。复制该命令到每个工作节点执行。
# 示例(实际 和 hash 以初始化输出为准)
sudo kubeadm join 192.168.1.100:6443 -- abcdef.1234567890abcdef \
--discovery--ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
3.3.4 验证集群状态
kubectl get nodes
kubectl get pods -n kube-system
预期输出:所有节点状态为 Ready,核心组件(coredns、kube-proxy、flannel)处于 Running 状态。
常见问题: 如果节点状态为
NotReady,请检查 CNI 插件是否安装、容器运行时(containerd)是否正常运行、节点间网络是否互通。使用 kubectl describe node <node-name> 查看具体原因。
3.4 环境验证与移植适配检查清单
完成上述安装后,执行以下检查项,确保环境可用于后续分布式追踪组件部署。
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| Docker 运行正常 | docker info |
Server Version ≥ 24.0 |
| Docker Compose 可用 | docker-compose version |
版本 ≥ 2.20 |
| Kubernetes 节点就绪 | kubectl get nodes |
所有节点 Ready |
| CoreDNS 运行 | kubectl get pods -n kube-system -l k8s-app=kube-dns |
Pod 状态 Running |
| Pod 网络通信 | kubectl run test --image=busybox -- sleep 3600 然后 kubectl exec test -- ping 10.244.0.1 |
ping 成功 |
3.5 移植适配要点
在将环境从开发机迁移到客户现场或内网环境时,需重点关注以下适配项:
- 操作系统差异: 若目标环境为 CentOS 7/8,需将
apt-get替换为yum,并调整内核参数配置路径(/etc/sysctl.d/通用)。 - 容器运行时替换: 部分环境可能使用 containerd 直接作为 Kubernetes 运行时,此时可跳过 Docker 安装,但需确保
crictl可用。 - 镜像仓库代理: 在内网环境中,提前将 gcr.io、docker.io 等镜像推送到私有 Harbor 或 Nexus 仓库,修改部署 YAML 中的 image 字段。
- 网络插件选择: Flannel 适合简单环境;若需网络策略(NetworkPolicy),建议改用 Calico。