202 lines
5.2 KiB
YAML
202 lines
5.2 KiB
YAML
---
|
|
- name: Add Warden Server as Nomad Client to Cluster
|
|
hosts: warden
|
|
become: yes
|
|
gather_facts: yes
|
|
|
|
vars:
|
|
nomad_plugin_dir: "/opt/nomad/plugins"
|
|
nomad_datacenter: "dc1"
|
|
nomad_region: "global"
|
|
nomad_servers:
|
|
- "100.117.106.136:4647"
|
|
- "100.116.80.94:4647"
|
|
- "100.97.62.111:4647"
|
|
- "100.116.112.45:4647"
|
|
- "100.84.197.26:4647"
|
|
|
|
tasks:
|
|
- name: 显示当前处理的节点
|
|
debug:
|
|
msg: "🔧 将 warden 服务器添加为 Nomad 客户端: {{ inventory_hostname }}"
|
|
|
|
- name: 检查 Nomad 是否已安装
|
|
shell: which nomad || echo "not_found"
|
|
register: nomad_check
|
|
changed_when: false
|
|
|
|
- name: 下载并安装 Nomad
|
|
block:
|
|
- name: 下载 Nomad 1.10.5
|
|
get_url:
|
|
url: "https://releases.hashicorp.com/nomad/1.10.5/nomad_1.10.5_linux_amd64.zip"
|
|
dest: "/tmp/nomad.zip"
|
|
mode: '0644'
|
|
|
|
- name: 解压并安装 Nomad
|
|
unarchive:
|
|
src: "/tmp/nomad.zip"
|
|
dest: "/usr/local/bin/"
|
|
remote_src: yes
|
|
owner: root
|
|
group: root
|
|
mode: '0755'
|
|
|
|
- name: 清理临时文件
|
|
file:
|
|
path: "/tmp/nomad.zip"
|
|
state: absent
|
|
when: nomad_check.stdout == "not_found"
|
|
|
|
- name: 验证 Nomad 安装
|
|
shell: nomad version
|
|
register: nomad_version_output
|
|
|
|
- name: 创建 Nomad 配置目录
|
|
file:
|
|
path: /etc/nomad.d
|
|
state: directory
|
|
owner: root
|
|
group: root
|
|
mode: '0755'
|
|
|
|
- name: 创建 Nomad 数据目录
|
|
file:
|
|
path: /opt/nomad/data
|
|
state: directory
|
|
owner: nomad
|
|
group: nomad
|
|
mode: '0755'
|
|
ignore_errors: yes
|
|
|
|
- name: 创建 Nomad 插件目录
|
|
file:
|
|
path: "{{ nomad_plugin_dir }}"
|
|
state: directory
|
|
owner: nomad
|
|
group: nomad
|
|
mode: '0755'
|
|
ignore_errors: yes
|
|
|
|
- name: 获取服务器 IP 地址
|
|
shell: |
|
|
ip route get 1.1.1.1 | grep -oP 'src \K\S+'
|
|
register: server_ip_result
|
|
changed_when: false
|
|
|
|
- name: 设置服务器 IP 变量
|
|
set_fact:
|
|
server_ip: "{{ server_ip_result.stdout }}"
|
|
|
|
- name: 停止 Nomad 服务(如果正在运行)
|
|
systemd:
|
|
name: nomad
|
|
state: stopped
|
|
ignore_errors: yes
|
|
|
|
- name: 创建 Nomad 客户端配置文件
|
|
copy:
|
|
content: |
|
|
# Nomad Client Configuration for warden
|
|
datacenter = "{{ nomad_datacenter }}"
|
|
data_dir = "/opt/nomad/data"
|
|
log_level = "INFO"
|
|
bind_addr = "{{ server_ip }}"
|
|
|
|
server {
|
|
enabled = false
|
|
}
|
|
|
|
client {
|
|
enabled = true
|
|
servers = [
|
|
{% for server in nomad_servers %}"{{ server }}"{% if not loop.last %}, {% endif %}{% endfor %}
|
|
]
|
|
}
|
|
|
|
plugin_dir = "{{ nomad_plugin_dir }}"
|
|
|
|
plugin "podman" {
|
|
config {
|
|
socket_path = "unix:///run/podman/podman.sock"
|
|
volumes {
|
|
enabled = true
|
|
}
|
|
}
|
|
}
|
|
|
|
consul {
|
|
address = "127.0.0.1:8500"
|
|
}
|
|
dest: /etc/nomad.d/nomad.hcl
|
|
owner: root
|
|
group: root
|
|
mode: '0644'
|
|
|
|
- name: 验证 Nomad 配置
|
|
shell: nomad config validate /etc/nomad.d/nomad.hcl
|
|
register: nomad_validate
|
|
failed_when: nomad_validate.rc != 0
|
|
|
|
- name: 创建 Nomad systemd 服务文件
|
|
copy:
|
|
content: |
|
|
[Unit]
|
|
Description=Nomad
|
|
Documentation=https://www.nomadproject.io/docs/
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
|
|
[Service]
|
|
Type=notify
|
|
User=root
|
|
Group=root
|
|
ExecStart=/usr/local/bin/nomad agent -config=/etc/nomad.d
|
|
ExecReload=/bin/kill -HUP $MAINPID
|
|
KillMode=process
|
|
KillSignal=SIGINT
|
|
TimeoutStopSec=5
|
|
LimitNOFILE=65536
|
|
LimitNPROC=32768
|
|
Restart=on-failure
|
|
RestartSec=2
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
dest: /etc/systemd/system/nomad.service
|
|
mode: '0644'
|
|
|
|
- name: 重新加载 systemd 配置
|
|
systemd:
|
|
daemon_reload: yes
|
|
|
|
- name: 启动并启用 Nomad 服务
|
|
systemd:
|
|
name: nomad
|
|
state: started
|
|
enabled: yes
|
|
|
|
- name: 等待 Nomad 服务启动
|
|
wait_for:
|
|
port: 4646
|
|
host: "{{ server_ip }}"
|
|
delay: 5
|
|
timeout: 60
|
|
|
|
- name: 检查 Nomad 客户端状态
|
|
shell: nomad node status -self
|
|
register: nomad_node_status
|
|
retries: 5
|
|
delay: 5
|
|
until: nomad_node_status.rc == 0
|
|
ignore_errors: yes
|
|
|
|
- name: 显示 Nomad 客户端配置结果
|
|
debug:
|
|
msg: |
|
|
✅ warden 服务器已成功配置为 Nomad 客户端
|
|
📦 Nomad 版本: {{ nomad_version_output.stdout.split('\n')[0] }}
|
|
🌐 服务器 IP: {{ server_ip }}
|
|
🏗️ 数据中心: {{ nomad_datacenter }}
|
|
📊 客户端状态: {{ 'SUCCESS' if nomad_node_status.rc == 0 else 'PENDING' }}
|
|
🚀 warden 现在是 Nomad 集群的一部分 |