選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
5 分鐘閱讀時間 (942 個字)

台電令人向上

Screenshot-from-2021-05-27-08-32-45 Ansible Architecture

前不久台電的一項光榮事蹟,讓數百萬用戶興起了一股學習風潮:

  • 看懂你的電費帳單,每個英文字母都可能意義重大。
  • 「瓩」這個字怎麼唸?怎麼打?
  • 「備轉容量」怎麼算?我們不缺電,只是電網沒拉好,機組要修理。在不修理的條件下我們的電還很多...

除了這些大眾議題之外,管理少少幾部伺服器的筆者,也額外學到了一些教訓:

  • 每部伺服器在 UPS 嗶嗶叫的時候,要一部一部 SSH 或遠端進去,打帳密、關服務、關機,還真不是一般地緊張。
  • 每次來電了,不要傻傻地一部一部去開機開服務,因為搞不好一輪下去沒幾分鐘又要準備關了,這一切都在五十分鐘之內發生。
  • 不要期待一部夠力的 UPS 能幫我們撐過去,就算是第一個五十分鐘勉強過關,五十分鐘的充電時間是絕對不足以再撐過第二個五十分鐘的。

每次的痛苦總會讓我們想做些什麼,除了叫人下台之外,剛好最近有同事在大推 Ansible,我們就看看 Ansible 是不是能幫上什麼,不再手忙腳亂?這可以分兩個階段來看:

  1. 準備階段:
    1. 各被控端(眾伺服器)統一開好一個新帳號,並加入具有管理權限的群組,未來準備給 Ansible 用。
    2. 各被控端安裝並啟動 SSH 服務:
      • Linux / Mac 應該都是內建就有,請設成開機後自動啟動,並將新帳號加在 visudo 設成免密碼認證。
      • 較新的 Windows Server 2019 / Windows 10 無需向外尋找下載安裝,只要在系統啟用這個選擇性功能。
      • 較舊的 Windows 必須符合 PowerShell 3、.NET Framework 4 的條件,檢查很容易(如附圖)。如果通過的話,可以從這裡下載安裝 https://github.com/powershell/Win32-OpenSSH。
    3. 各被控端防火牆允許 TCP/22 進入。
    4. 挑一個被控端兼任,或另選一個主控端安裝 Ansible。
    5. 在主控端備妥金鑰對,將公鑰發佈到各被控端:
      • 如果被控端是 Linux / Mac,只要逐一下指令 ssh-copy-id <統一帳號>@<被控端> 就可以完成發佈。
      • 如果被控端是 Windows,請把公鑰檔內容複製到被控端的 <ProgramData>\ssh\administrators_authorized_keys 檔案內。
  2. 實施階段:
    1. 準備被控端清單,在主控端編輯 /etc/ansible/hosts 檔案,內容範例如下(幾個 IP 位址請依實際狀況修改):
      • [Linux]
      • 192.168.1.1
      • 192.168.1.2
      • [Mac]
      • 192.168.1.3
      • [Windows]
      • 192.168.1.4
      • [Mac:vars]
      • ansible_python_interpreter=/usr/bin/python
      • [Windows:vars]
      • ansible_shell_type=cmd
    2. 準備腳本,以關機為例,在主控端任一目錄編輯 shutdown.yml 檔案,內容如下:
      • - hosts: all
      •   tasks:
        • - name: Shutdown Linux / Mac
        •   command: shutdown -h now
        •   become: true
        •   ignore_errors: true
        •   when: ansible_facts['os_family']!="Windows"
        • - name: Shutdown Windows
        •   win_command: shutdown /s /t 0
        •   when: ansible_facts['os_family']=="Windows"
    3. 在主控端執行,指令:
      • ansible-playbook shutdown.yml
    4. 如此即可由 Ansible 一次向五部伺服器同時執行登入、關機的工作,直到清單做完為止。

綜合以上,相信大家可以看得出來,在準備階段完成後,我們隨時可以對被控端的部份或全部下指令,而不需要一部一部登入或遠端、執行、登出。而且各式各樣的腳本用得次數愈多,就千錘百煉更有價值,不再會緊張打錯字。

謹以此文獻給我帳單九五折優待的台電!

Ansible #12 - Ad-Hoc 指令[5]
[安裝程式] NSIS - 基礎使用教學

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/05/02, 週四

Captcha 圖像