在树莓派集群上使用 Docker Swarm 或 Kubernetes 部署容器化应用
在小型集群中部署容器化应用的需求日益增长,而树莓派因其低廉的价格和强大的功能,成为了构建此类集群的理想选择。本文将探讨如何使用 Docker Swarm 和 Kubernetes 这两种流行的容器编排工具,在多个树莓派上部署和管理容器化应用。
为什么选择 Docker Swarm 或 Kubernetes?
- 资源管理: 将多个树莓派的资源池化,实现更高效的资源利用。
- 高可用性: 通过在多个节点上运行应用副本,提高应用的可用性和容错能力。
- 易于扩展: 可以根据需求动态地扩展集群规模,轻松应对流量增长。
- 简化部署: 容器化技术简化了应用的部署和管理流程,提高了开发效率。
准备工作
硬件准备:
- 至少 3 个树莓派(建议使用 Raspberry Pi 4B,性能更佳)。
- SD 卡(建议 32GB 或更大)。
- 电源适配器。
- 网络连接(有线或无线)。
操作系统:
- 在每个树莓派上安装 Raspberry Pi OS(原 Raspbian)。建议使用 Raspberry Pi OS Lite 版本,减少资源占用。
- 确保操作系统是最新的:
sudo apt update && sudo apt upgrade
Docker 安装:
在每个树莓派上安装 Docker:
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG docker pi newgrp docker- 验证 Docker 是否安装成功:
docker version
- 验证 Docker 是否安装成功:
使用 Docker Swarm 部署应用
初始化 Swarm:
选择一个树莓派作为 manager 节点,执行以下命令:
docker swarm init --advertise-addr <manager节点的IP地址>该命令会输出加入 worker 节点的命令,例如:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx <manager节点的IP地址>:2377
加入 Worker 节点:
- 在其他树莓派上执行上一步输出的
docker swarm join命令,将它们加入到 Swarm 集群中。
- 在其他树莓派上执行上一步输出的
部署应用:
创建一个
docker-compose.yml文件,定义你的应用服务。例如:version: "3.7" services: web: image: nginx:latest ports: - "80:80" deploy: replicas: 3 restart_policy: condition: on-failure- 这个例子部署了一个 Nginx 服务,运行 3 个副本,并在容器失败时自动重启。
使用
docker stack deploy命令部署应用:docker stack deploy -c docker-compose.yml myappmyapp是应用的名称,可以自定义。
管理应用:
- 查看应用状态:
docker stack ps myapp - 扩展应用副本数:
docker service scale myapp_web=5 - 更新应用:修改
docker-compose.yml文件,然后执行docker stack deploy命令。
- 查看应用状态:
使用 Kubernetes 部署应用
安装 Kubernetes:
可以使用
kubeadm工具在树莓派上安装 Kubernetes。由于资源限制,建议使用轻量级的 Kubernetes 发行版,例如 k3s 或 microk8s。安装 k3s:
curl -sfL https://get.k3s.io | sh - sudo kubectl config use-context default加入 Worker 节点:
在 manager 节点上执行
sudo cat /var/lib/rancher/k3s/server/node-token获取 token。在 worker 节点上执行:
curl -sfL https://get.k3s.io | K3S_URL="https://<manager节点的IP地址>:6443" K3S_TOKEN="<上一步获取的token>" sh -
部署应用:
创建一个 Deployment 和 Service 的 YAML 文件。例如:
# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80# service.yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer使用
kubectl apply命令部署应用:kubectl apply -f deployment.yaml kubectl apply -f service.yaml
管理应用:
- 查看应用状态:
kubectl get pods - 查看 Service:
kubectl get service - 扩展应用副本数:
kubectl scale deployment nginx-deployment --replicas=5 - 更新应用:修改 YAML 文件,然后执行
kubectl apply命令。
- 查看应用状态:
树莓派集群的注意事项
- 资源限制: 树莓派的 CPU 和内存资源有限,需要合理规划应用的资源需求。
- 网络性能: 集群的网络性能会影响应用的性能,建议使用有线连接。
- 存储: 可以使用 NFS 或其他网络存储方案,为集群提供共享存储。
- 监控: 建议安装监控工具,例如 Prometheus 和 Grafana,监控集群的资源使用情况和应用的健康状况。
总结
本文介绍了如何使用 Docker Swarm 和 Kubernetes 在树莓派集群上部署和管理容器化应用。选择哪种工具取决于你的需求和经验。Docker Swarm 易于上手,适合小型项目;Kubernetes 功能更强大,适合复杂的应用场景。希望本文能帮助你搭建自己的树莓派集群,并体验容器化技术的优势。