Install Ansible (vm)

 


              ก่อนอื่น Ansible มันเอาไว้ใช้ควบคุมเครื่องลูกหลายเครื่องให้ทำงานเหมือนๆ กัน ซึ่งผมจะนำมาใช้ในการติดตั้งโปรแกรมนะครับ โดยจะลองสร้างระบบเทสบน vm 2 เครื่อง โดยเครื่องเรา (host) ที่ไม่ใช่ vm เป็น Mint 20.3 เอาไว้ใช้ remote control (หลังจากนี้จะเรียกว่าเครื่อง control) และอีก 2 เครื่อง (vm) เป็น worker node เพื่อใช้แทนเซิฟเวอร์ หรือเครื่อง desktop นะครับ โดย vm จะเป็น lubuntu 18.04 กับ Mint 20.03นะครับ เหตุผลก็ไม่มีอะไรมาก ลองทดสอบควบคุมต่างเวอร์ชั่น และทั้งคู่มันใช้ทรัพยากรน้อยนั้นแค่เองครับ (ใช้คำสั่ง lsb_release -d เช็คเวอร์ชั่นได้นะครับ)

  1. ก่อนอื่นผมจะลง os ใน vm ตั้งชื่อ user ให้เหมือนกันนะครับ แล้ว clone (แนะนำไว้เผื่อทำไรพลาด แต่ข้ามส่วนติดตั้งไปเลยละกัน หาได้ง่ายๆ ตาม youtube แล้วก็อย่าลืมเปลี่ยนชื่อเครื่องกันด้วยนะครับ) โดยในส่วน Settings --> Network --> Adapter1 จะตั้งค่าให้ Attached to: Bridged Adapter และ Advanced --> Adapter Type: PCnet-FAST III(Am79C973) แล้วกด ok นะครับ
  2. Start vm ทั้งคู่ แล้วไป Edit Network Connect ตั้งค่า ip ของ vm ทั้ง 2 เครื่องเป็น 192.168.1.31 กับ 192.168.1.32 ส่วนเครื่อง host เป็น 192.168.1.30 นะครับ (หรือจะใช้ ip ที่มันใช้ DHCP จ่ายมาให้เลยก็ได้ แต่ต้องจำเอาเองนะครับ ดูได้จากคำสั่ง ip addr ว่าเครื่องไหน ip อะไร)
  3. sudo apt update อัพเดต repo ทั้ง 3 เครื่องนะครับ (รู้สึกยุ่งยากมะ นี่แค่ 3 เครื่อง เมื่อก่อนก็เขียนใส่ bash script แล้วก็อปเอา แต่ถ้ามีตั้งแต่ 5 เครื่องขึ้นไปก็มีเหตุผลให้เราเอา ansible มาใช้ละ)
  4. sudo apt install openssh-server -y ทั้ง 3 เครื่องนะครับ เพราะว่า ansible ต้องใช้ทำงาน
  5. ssh USER@192.168.1.n ลองใช้ ssh ข้ามไปทุกเครื่องดูว่าใช้งานได้ปกติ หรือจะใช้ sudo systemctl status sshd กับ ping 192.168.1.n ก็ได้ครับ ถ้ามันทำงานปกติก็ควรจะได้นะ แค่ ssh ชัวร์กว่า
  6. sudo apt install -y ansible ติดตั้งโปรแกรมที่เครื่อง control หรือจะหาเอาใน software manager ก็ได้
  7. ansible --version เพื่อดูเวอร์ชั่นว่าติดตั้งเสร็จสมบูรณ์ ปัจจุบันเวอร์ชั่น 2.9.6
  8. ssh-keygen ในเครื่อง control แล้วกด Enter ข้ามๆไปนะครับ
  9. ssh-copy-id USER@192.168.1.n -f ส่ง key ไปให้เครื่อง vm ทั้ง 2 เครื่อง โดย USER คือชื่อ user ที่เราสร้างไว้ใน vm นะครับ แล้วมันจะถาม pass ของเครื่อง vm ทำให้หลังจากนี้จะ ssh เข้าได้โดยไม่ต้องล็อคอินนะครับ (ต้องเป็น user ที่มีสิทธิ์ sudo นะครับ และส่ง key ให้ 127.0.0.1 เครื่องเราเองก็ได้ ถ้าอยากจะลงในเครื่องตัวเองด้วย กรณีที่มีปัญหา Host key verification failed... ให้ใช้คำสั่ง ssh-keygen -R 192.168.1.n เครื่องที่มีปัญหาแล้วส่งไปใหม่นะครับ)
  10. cd /etc/ansible/ ไปที่โฟลเดอร์ของโปรแกรม ansible
  11. sudo mv hosts hosts.bg เปลี่ยนชื่อไฟล์เดิมที่เก็บค่า config ของ ansible ไว้สำรอง
  12. sudo nano hosts สร้างไฟล์ hosts เพื่อใช้เป็นค่า config อันใหม่
  13. ข้างในใส่ค่าไว้  ซึ่งจริงๆ มันแบ่งได้หลายกลุ่มนะครับ แต่ของเราทำแค่กลุ่มบนก่อน
        
        [Group1]
        USER@192.168.1.31
        
    USER@192.168.1.32

        
        [Group_n]
        
    USER@192.168.1.n
        
    USER@192.168.1.n

        
        [Self]
        
    USER@127.0.0.1 #สำหรับคนที่อยากลงในเครื่องตัวเองด้วย

        
  14. ansible -m ping all ทดสอบดูว่าเรา ping ได้ถึงทุกเครื่องผ่าน ansible นะครับ
  15. ansible -m shell all -a 'systemctl status sshd' ทดลองส่งคำสั่งไปเพื่อดูสเตตัสของ ssh นะครับ
  16. เพิ่มเติมของไฟล์ hosts การแบ่งหลายกลุ่มนะครับ อย่างแบบจะทำให้เราเรียกใช้ได้ทั้ง  Group_all และแบบกลุ่มย่อย Group1 หรือจะเรียกแค่ worker1 ก็ได้นะครับ เช่น ansible -m ping Group_all หรือแทนด้วย Group1 หรือ worker1 (ใช้ # ทำ comment ได้เหมือนไพธอนนะครับ เพราะข้างหลังมันคือไพธอนแหละ แล้วการเรียกทั้งหมดใช้ all ใส่ใน host ของ playbook ได้นะครับ)
        
        [Group_all:children]
        Group1
        
    Group_n

        
        [Group1]
        worker1 ansible_ssh_host=USER@192.168.1.31
        
    worker2 ansible_ssh_host=USER@192.168.1.32
        
        [Group_n]
        #
    worker_n ansible_ssh_host=USER@192.168.1.n
        #
    worker_n ansible_ssh_host=USER@192.168.1.n
        
  17. ลองสร้าง playbook ของ ansible กันครับ ให้ใช้คำสั่ง nano ansible_playbook_1.yml แล้วใส่คำสั่งดังนี้
        
    - name: test install #แค่ชื่อ
      hosts: Group1 #กลุ่มที่จะสั่งงาน
      become: yes #สิทธิ์ sudo
      tasks: #บอกให้รู้ว่างานอยู่ในนี้
       - name: Install Docker #แค่ชื่อ
         apt: name=docker.io #งาน

  18. ansible-playbook ansible_playbook_1.yml -K สั่งให้มันทำงานนะครับ  -K จะให้เราใส่พาสของ vm เพื่อใช้สิทธิ์ sudo ได้ (ดังนั้นต้องใช้ user ที่มีเหมือนกันทุกเครื่อง และมีสิทธิ์ sudo) 
  19. ansible Group1 -m shell -a "docker -v" ลองเช็ค version ของ docker ของ Group1 ดูนะครับ
  20. ansible Group1 -m shell -a "usermod -aG docker USER" -b -K เอา USER ของเราเข้ากลุ่ม docker (เพิ่ม -b เพื่อใช้สิทธิ์ sudo แต่ไม่ซัพพอร์ตการใช้ apt ผ่าน command นะ ต้องใช้ผ่าน playbook)
  21. ทีนี้มาสร้าง playbook เพื่อลบ docker ให้ใช้คำสั่ง nano ansible_playbook_2.yml แล้วใส่คำสั่งดังนี้
        
    - name: test remove 
      hosts: Group_all
      become: yes
      tasks:
       - name: Remove Docker
         apt: name=docker.io state=absent

  22. ทีนี้มาลอง copy ไฟล์ bash script จากเครื่อง control ไปยังเครื่องอื่นๆ แล้วก็รัน เซฟในชื่อ ansible_playbook_3.yml
        
    - name: test copy and run bash script
      hosts: Group_all
      become: yes
      tasks:
       - name: Copy File
         copy: 
           src: ~/testCopy.sh
           dest: /home/USER/testCopy.sh
           owner: USER
           group: USER
           mode: 0777
       - name: Run Bash Script
         command: "sh testCopy.sh"
        
  23. ซึ่งเรายังไม่ได้สร้างไฟล์ testCopy.sh ก็ให้สร้างไว้ใน home นะครับ ข้างในเขียนเทสแค่ 
        
    #!/bin/bash

    echo "test copy success , test bash script success" > CopyAndRun.txt
        
  24. ลองรัน ansible-playbook ansible_playbook_3.yml -K แน่นอนถ้าสำเร็จจะมีไฟล์ในเครื่อง vm เพิ่มขึ้นมาครับ
  25. อันนี้เห็นว่าของรุ่นก่อนๆ นี้ต้องเปิดพอร์ต firewall ให้มันด้วยนะครับ ถ้าติดขัดลองเช็คที่ firewall ดูหน่อยละกัน คำสั่งในการเปิดพอร์คก็ sudo ufw allow 2376/tcp && sudo ufw allow 7946/udp && sudo ufw allow 7946/tcp && sudo ufw allow 80/tcp && sudo ufw allow 2377/tcp && sudo ufw allow 4789/udp แล้วก็รีโหลด firewall ใหม่ sudo ufw reload && sudo ufw enable หลังจากนั้นก็รีสตาร์ท docker ด้วย sudo systemctl restart docker แต่ส่วนตัวผมไม่เจอปัญหาพวกนี้นะครับ

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

โปรโมชั่นเน็ต TOT

โน๊ตบุ๊ค acer switch sa5-271 แบตบวม T^T

Blog นี้สร้างเพื่อ?