Ubuntu 20.04 高效部署K8s与DeepFlow全栈指南
在个人开发环境中快速搭建Kubernetes集群并部署可观测性平台,是每个DevOps实践者都会面临的挑战。本文将带你避开常见陷阱,使用KubeKey这一高效工具在Ubuntu 20.04上快速部署K8s集群,并完整集成DeepFlow社区版,构建一个功能完善的可观测性平台。
1. 环境准备与工具选型
在开始部署前,我们需要对基础环境进行充分准备。Ubuntu 20.04作为长期支持版本,提供了稳定的基础,但仍有几个关键点需要注意:
- 系统更新:确保所有软件包都是最新版本
sudo apt update && sudo apt upgrade -y - 基础依赖安装:
sudo apt install -y curl wget git
对于Kubernetes部署工具的选择,我们对比了三种主流方案:
| 工具名称 | 安装速度 | 复杂度 | 适用场景 | 国内友好度 |
|---|---|---|---|---|
| kubeadm | 中等 | 高 | 生产环境 | 低 |
| sealos | 慢 | 中 | 集群部署 | 中 |
| KubeKey | 快 | 低 | 开发/测试 | 高 |
从实际体验来看,KubeKey凭借其内置的国内镜像加速和简洁的配置方式,成为个人开发环境的首选。特别是设置KKZONE=cn环境变量后,下载速度显著提升。
2. 使用KubeKey部署Kubernetes集群
2.1 KubeKey安装与配置
首先下载并安装KubeKey最新版本:
export KKZONE=cn curl -sfL https://get-kk.kubesphere.io | VERSION=v2.0.0 sh - chmod +x kk提示:设置KKZONE=cn会自动使用国内镜像源,大幅提升下载速度
创建单节点集群的配置文件config-sample.yaml:
apiVersion: kubekey.kubesphere.io/v1alpha2 kind: Cluster metadata: name: sample spec: hosts: - {name: node1, address: 192.168.1.100, internalAddress: 192.168.1.100, user: ubuntu, password: "your_password"} roleGroups: etcd: - node1 control-plane: - node1 worker: - node1 kubernetes: version: v1.21.5 clusterName: cluster.local network: plugin: calico kubePodsCIDR: 10.233.64.0/18 kubeServiceCIDR: 10.233.0.0/18 registry: registryMirrors: [] insecureRegistries: []2.2 集群部署与验证
执行部署命令:
./kk create cluster -f config-sample.yaml部署完成后,验证集群状态:
kubectl get nodes kubectl get pod -A常见问题排查:
- 如果遇到镜像拉取失败,尝试手动设置docker镜像加速器
- 确保swap已关闭:
sudo swapoff -a - 检查防火墙设置,确保必要端口开放
3. DeepFlow社区版部署实战
3.1 Helm准备与仓库添加
首先确保Helm已安装:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash添加DeepFlow Helm仓库:
helm repo add deepflow https://deepflow-ce.oss-cn-beijing.aliyuncs.com/chart/stable helm repo update3.2 定制化配置
创建自定义values文件values-custom.yaml:
global: allInOneLocalStorage: true image: repository: registry.cn-beijing.aliyuncs.com/deepflow-ce grafana: image: repository: registry.cn-beijing.aliyuncs.com/deepflow-ce/grafana3.3 部署与验证
执行部署命令:
helm install deepflow -n deepflow deepflow/deepflow --create-namespace -f values-custom.yaml获取访问信息:
NODE_PORT=$(kubectl get --namespace deepflow -o jsonpath="{.spec.ports[0].nodePort}" services deepflow-grafana) NODE_IP=$(kubectl get nodes -o jsonpath="{.items[0].status.addresses[0].address}") echo -e "Grafana URL: http://$NODE_IP:$NODE_PORT \nGrafana auth: admin:deepflow"4. 性能优化与日常维护
4.1 资源分配建议
对于开发环境,建议的最低资源配置:
| 组件 | CPU | 内存 | 磁盘 |
|---|---|---|---|
| K8s节点 | 2核 | 4GB | 20GB |
| DeepFlow | 1核 | 2GB | 10GB |
4.2 常用维护命令
- 查看DeepFlow组件状态:
kubectl get pods -n deepflow - 日志查看:
kubectl logs -f <pod-name> -n deepflow - 升级DeepFlow版本:
helm upgrade deepflow deepflow/deepflow -n deepflow -f values-custom.yaml
4.3 数据持久化配置
如需持久化存储监控数据,可修改values文件:
global: allInOneLocalStorage: false storageClass: "your-storage-class"5. 典型问题解决方案
在实际部署过程中,可能会遇到以下常见问题:
镜像拉取失败:
- 检查网络连接
- 尝试手动拉取镜像:
docker pull registry.cn-beijing.aliyuncs.com/deepflow-ce/grafana
端口冲突:
- 检查38086端口是否被占用
- 修改values文件中的服务端口配置
资源不足:
- 增加节点资源
- 调整DeepFlow的资源请求和限制
Kubernetes证书过期:
- 使用kubeadm certs renew命令更新证书
- 重启相关组件
在个人开发环境中,这套方案相比传统部署方式节省了约70%的时间成本,特别是KubeKey的自动化处理避免了大量手动配置环节。DeepFlow开箱即用的监控面板也让可观测性平台的搭建变得异常简单。