Nomad是另一款容器调度平台,不同于k8s,它的占用相当低,于是准备将它使用在自己的nas上进行容器管理,目前仅测试了简单的服务暴露,还未测试详细的应用情况,不得不说相比起k8s,它的生态是真的差很远,k8s光靠一个官方文档就足够玩到敢把kubernetes应用到生产环境,可这东西无论如何也不敢直接上生产,而且官方文档又不友好,不支持中文,需要直接啃英文,而且条理不清晰,但至少它是另一种选择。
Nomad部署
Nomad启动
[root@nomad ~]# nomad agent -config server.hcl
Nomad启动配置文件:
#nomad配置文件
datacenter="planet"
data_dir="/data/app/nomad/data"
server {
enabled=true
bootstrap_expect=1
}
client {
enabled=true
traefik配置清单:
job "traefik" {
datacenters = ["*"]
type = "service"
group "traefik" {
count = 1
network {
port "ingress"{
static = 65001
}
port "admin"{
static = 8080
}
}
service {
name = "traefik-ingress"
provider = "nomad"
port = "ingress"
}
task "server" {
driver = "docker"
config {
image = "traefik:v3.0"
ports = ["admin", "ingress"]
args = [
"--api.dashboard=true",
"--api.insecure=true", ### For Test only, please do not use that in production
"--entrypoints.web.address=:${NOMAD_PORT_ingress}",
"--entrypoints.traefik.address=:${NOMAD_PORT_admin}",
"--providers.nomad=true",
"--providers.nomad.endpoint.address=http://192.168.31.8:4646", ### IP to your nomad server
"--providers.nomad.refreshInterval=10s",
"--providers.nomad.exposedByDefault=false" #配置成了false,这样可以自行控制哪个服务去开启暴露
]
}
}
}
}
后端服务(用whoami代表后端服务)
job "whoami" {
datacenters = ["*"]
type = "service"
update {
max_parallel = 2
min_healthy_time = "10s"
healthy_deadline = "3m"
progress_deadline = "10m"
auto_revert = false
canary = 0
}
migrate {
max_parallel = 1
health_check = "checks"
min_healthy_time = "10s"
healthy_deadline = "5m"
}
group "whoami" {
count = 10
network {
port "web" {
to = 80
}
}
service {
name = "whoami"
tags = ["traefik.enable=true"] # 添加tags,让traefik开启代理,默认是7层代理
port = "web"
provider = "nomad"
}
restart {
attempts = 2
interval = "30m"
delay = "15s"
mode = "fail"
}
task "whoami" {
driver = "docker"
config {
image = "traefik/whoami:latest"
ports = ["web"]
auth_soft_fail = true
}
identity {
env = true
file = true
}
resources {
}
}
}
}
此时在traefik dashboard中可以看到会自动添加host名为whoami的7层代理
接下来使用nginx代理添加proxy_set_header的方式可以让你访问特定端口来走不同的七层路由(或者可以自己改host或者可以自己建dns解析都可以)
nginx添加header为例:
# server块配置
server {
listen 65001;
server_name whoami;
location / {
proxy_pass http://192.168.31.8:65000;
proxy_set_header Host whoami; #指定header
}
}
两次刷新可以看到负载被轮询
第一次:
第二次:
========================================
还可以直接让traefik代理tcp来实现相同的处理,具体看使用情形,只测试过在nomad的服务tags里按traefik的格式添加traefik配置即可被traefik自动识别配置,但目前还未深入研究。如此可以只走4层代理。