Nomad 代替 K8s 使用 Dapr

Dapr 終於發佈 1.0 版了!

官方介紹 Dapr 能用於本地開發環境、K8s 和公有云(例如 AWS、Azure 和 GCP)上,但是我們這些偶爾用一下 Docker,但是還沒上 K8s 和公有云的小型團隊怎麼使用呢?使用非 K8s 能上 Dapr 嗎?怎麼上?

爲了找到答案,我進行了一些試驗,看能不能找到不用 K8s 的使用方法。

Nomad 替代 K8s

公司規模小隻有幾臺服務器,並不需要上 K8s。於是找到了 Nomad 進行容器的編排工作。看看能不能在 Nomad 下運行 Dapr?

測試環境

2 臺樹莓派 3B,統一安裝 Ubuntu 20.4 arm64 。IP 分別爲192.168.10.3192.168.10.242

ubuntu、consul

樹莓派安裝 Ubuntu 後連上同一個 wifi,替換 apt 爲阿里雲源。

$ mv /etc/apt/sources.list /etc/apt/sources.list.bak
$ vim /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu-ports/ xenial main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu-ports/ xenial-security main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial-security main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial-updates main multiverse restricted universe
$ apt update
$ apt upgrade

前期準備工作,在192.168.10.242安裝並運行 Consul

$ wget https://releases.hashicorp.com/consul/1.9.3/consul_1.9.3_linux_arm64.zip
$ sudo unzip consul_1.9.3_linux_arm64.zip -d /usr/bin
$ sudo vi /lib/systemd/system/consul.service
[Unit]
Description=Consul
Wants=cni-dhcp.socket

[Service]
ExecStart=/usr/bin/consul agent -server -bootstrap-expect 1 -data-dir=/var/run/consul -node=n1 -bind=127.0.0.1 -client=0.0.0.0 -ui
TimeoutStopSec=15m
KillSignal=SIGINT

Restart=on-failure
LimitNOFILE=65536
PrivateTmp=false

[Install]
WantedBy=multi-user.target

$ systemctl enable consul
$ systemctl start consul

Nomad

Nomad 是一個集羣管理器和調度器,專爲微服務和批量處理工作流設計。

特性

與 K8s 對比

dXMHIe

安裝

2 臺樹莓派分別運行以下代碼安裝:
下載 Nomad1.0.3 並解壓

$ wget https://releases.hashicorp.com/nomad/1.0.3/nomad_1.0.3_linux_arm64.zip
$ sudo unzip nomad_1.0.3_linux_arm64.zip -d /usr/bin

創建 nomad.service 服務

$ sudo vi /lib/systemd/system/nomad.service

[Unit]
Description=Nomad
Documentation=https://nomadproject.io/docs/
After=network.target
After=consul.service
Wants=consul.service
Wants=cni-dhcp.socket

[Service]
Environment="DAEMON_ARGS=agent -config /etc/nomad"
EnvironmentFile=-/etc/default/%p

## https://github.com/hashicorp/nomad/issues/2560
ExecStartPre=-/bin/rm -vf /var/lib/nomad/client/state.db

ExecStart=/usr/bin/nomad $DAEMON_ARGS
ExecStartPost=-/bin/sh -c 'for _ in 9 8 7 6 5 4 3 2 1 0; do /usr/bin/nomad node drain -disable -self && break || sleep 1; done'
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=-/usr/bin/nomad node drain -enable -self -force -yes
TimeoutStopSec=15m
KillSignal=SIGINT
## !! Do not use "KillMode=process"; systemd should stop whatever Nomad left behind.
## https://github.com/hashicorp/nomad/pull/4305#issuecomment-412978568

Restart=on-failure
LimitNOFILE=65536

## PrivateTmp must be "false" to allow rkt's communication with "cni-dhcp.socket".
PrivateTmp=false

[Install]
WantedBy=multi-user.target

配置文件,記得修改 name 和 IP

$ mkdir /etc/nomad
$ cd /etc/nomad
$ vi nomad.hcl  ##nomad 配置
## IP地址根據實際修改
name = "242"
log_level = "INFO"
data_dir = "/var/run/nomad"
bind_addr = "192.168.10.242"
leave_on_terminate = true
region = "MY1"
datacenter = "DC2"
advertise {
  http = "192.168.10.242"
  rpc = "192.168.10.242"
  serf = "192.168.10.242"
}
ports{
  http = "4646"
  rpc = "4647"
  serf = "4648"
}
telemetry {
  publish_allocation_metrics = true
  publish_node_metrics       = true
}

$ vi server.hcl ##server 配置
server {
  enabled = true
  bootstrap_expect = 2
}

$ vi consul.hcl ##consul 配置

 consul {
  ## 填寫consul的安裝地址
  address = "192.168.10.242:8500"
  server_service_name = "nomad"
  server_auto_join = true
  client_service_name = "nomad-client"
  client_auto_join = true
  auto_advertise = true
  token   = "consul的token"
}

啓動 Nomad

$ sudo systemctl enable nomad
$ sudo systemctl start nomad

UI

Consul UI

訪問http://192.168.10.242:8500,可以看到名爲 nomad 的 service 註冊了 6 個實例,分別是兩臺樹莓派的 http、rpc、serf 通信地址。

Nomad UI

訪問http://192.168.10.242:4646,在 Servers 節點可以查看當前所有的 server 以及當前的 Leader。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Q28W5K83BMTgnG-8IinUcQ