使用nomad管理集群-1 单机部署

发布时间 2023-10-08 20:57:51作者: velor2012

背景

由于白嫖+购买了很多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 客户端节点连接。

123

总结,nomad的优点是:

  1. 轻量
  2. 灵活
  3. 高性能

缺点是:

  1. 不兼容k8s生态,文档少
  2. 管理功能少

部署过程

需要先安装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和端口号

点击后可以得到如下内容

到此单机部署成功!