背景#
由于白嫖+购买了很多vps,管理起来有点困难,只能一个个ssh上去看,同时有的命令要反复敲好几遍,因此需要有一个集群管理的工具。
其次因为工作需要经常和k8s,docker等打交道,于是打算使用类似的工具来管理vps。
首先考虑的自然就是k8s,作为云原生的老大哥,相关的生态和文档自然是巨好,但是由于配置要求很高(内存8G以上,一般vps只有512M2G),因此只能放弃。其他的类k8s的框架,如k3s,minikube也需要12g内存,也不满足要求。
最后筛选下来只有docker swarm和nomad,前者只支持docker,但最为轻量,后者更全面,运行时内存也仅需要几十M,因此最终选择nomad。
NOMAD介绍#
下面是引用大佬的原话
Nomad: 一个简单而灵活的调度器和编排器,可在内部和云端大规模部署和管理容器和非容器化的应用程序
Nomad 使开发者能够使用声明式的基础设施即代码来部署应用程序。Nomad 使用 bin packing 来有效地安排工作并优化资源利用。
Nomad 凭借其 简单 性、灵活性 、 可扩展性 和高性能 与相关工具区分开来。Nomad 的协同作用和整合点 HashiCorp Terraform、Consul 和 Vault 使其特别适合轻松集成到 组织的现有工作流程,最大限度地减少关键计划的上市时间。
使用 Nomad 来安排更接近用户的边缘工作负载。用 Nomad 的本地服务发现连接边缘服务。无缝地处理不稳定的 Nomad 客户端节点连接。
总结,nomad的优点是:
轻量
灵活
高性能
缺点是:
不兼容k8s生态,文档少
管理功能少
部署过程#
需要先安装docker(如果vps的网络不好请百度国内服务安装docker的教程)
curl -sSL https://get.docker.com/ | sh && systemctl start docker
之后运行以下命令
sudo apt-get update &&
sudo apt-get install wget gpg coreutils lsb-release
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt-get update && sudo apt-get install nomad
export NOMAD_ADDR=http://localhost:4646
systemctl enable nomad && systemctl start nomad
之后nomad会自动生成配置文件,修改配置文件/etc/nomad.d/nomad.hcl
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: MPL-2.0
# Full configuration options can be found at https://www.nomadproject.io/docs/configuration
data_dir = "/opt/nomad/data"
bind_addr = "0.0.0.0"
server {
# license_path is required for Nomad Enterprise as of Nomad v1.1.1+
#license_path = "/etc/nomad.d/license.hclic"
enabled = "true"
bootstrap_expect = 1
}
client {
enabled = "true"
servers = ["localhost"]
}
然后重启服务
systemctl restart nomad
防火墙(如果有)放行4646端口,然后浏览器访问该端口(http://ip:4646/ui
),即可进入web ui界面(类似上图),在clients和servers中会各有一个机器(都是本机)。然后尝试运行一个job,点击jobs选项→Run job
从templates中选择hello world模板并运行
等待部署完成
之后在allocations中找到分配的ip和端口号
点击后可以得到如下内容
到此单机部署成功!