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 集群的一部分           |