Bắt đầu với Ansible trong 5 phút


 Ansible là gì?

  • Opensource
  • Automation tool
  • Agentless

Ansible làm được gì?

  • Đứng từ 01 server để cấu hình cho hàng trăm server cùng lúc
  • Tương tự cho việc cài đặt gói hay thực hiện các lệnh shell bất kỳ
  • Backup cấu hình tập trung từ các server về 01 server
  • Triển khai các dịch vụ khác nhau lên các server với quy hoạch cho trước bằng 1 câu lệnh duy nhất
  • ....nhiều lắm....

Ý niệm đơn giản nhất về Ansible trong tôi

  • Thay vì SSH bằng tay tới các server cấu hình thì tôi dùng Ansible
  • Local machine: nơi cài đặt Ansible và thực hiện câu lệnh ở đó
  • Remote machine: nơi cần SSH đến và tác động

    Trong loạt bài về Ansible này, mình sẽ sử dụng Ubuntu 18.04, các bạn nếu cài đặt trên môi trường khác ví dụ CentOS thì vui lòng google từ khóa của bước đó +  trên CentOS

    Chuẩn bị

    • Một máy tính/máy ảo A cài đặt Ubuntu 18.04
    • Một máy tính/máy ảo B khác cài đặt 18.04
    • Chạy lệnh ssh để log in vào B từ A thành công

    Note

    • Với phần bắt đầu nhanh này, hãy copy và paste để có trải nghiệm sớm nhất với Ansible
    • Các khái niệm như group, inventory, playbook sẽ chưa giới thiệu cụ thể ở bài này

    01 phút cài đặt ansible

    $ sudo apt update
    $ sudo apt install software-properties-common
    $ sudo apt-add-repository --yes --update ppa:ansible/ansible
    $ sudo apt install ansible sshpass

    02 phút để chạy ansible đầu tiên

    • Tạo file inventory (cập nhật IP, port, login user và password)
    cat << EOF > inventory
    [group1]
    192.168.2.106 ansible_port=32768 ansible_user=root ansible_password=mypass
    EOF
    • Tạo file playbook
    cat << EOF > ls-la.yml
    ---
    - hosts: group1
      gather_facts: false
      tasks:
        - shell: ls -la
          register: output
        - debug:
            msg: "{{ output.stdout_lines }}"
    EOF
    • Thực hiện chạy playbook đầu tiên: ansible-playbook -i inventory ls-la.yml 
    $ ansible-playbook  -i inventory ls-la.yml 
     [WARNING] Ansible is in a world writable directory (/tmp), ignoring it as an ansible.cfg source.
    
    PLAY [group1] ****************************************************************************************************************************************
    
    TASK [shell] *****************************************************************************************************************************************
    changed: [192.168.2.106]
    
    TASK [debug] *****************************************************************************************************************************************
    ok: [192.168.2.106] => {
        "msg": [
            "total 28", 
            "drwx------ 1 root root 4096 Oct 17 16:40 .", 
            "drwxr-xr-x 1 root root 4096 Oct 17 16:25 ..", 
            "drwx------ 3 root root 4096 Oct 17 16:40 .ansible", 
            "-rw------- 1 root root    7 Oct 17 16:28 .bash_history", 
            "-rw-r--r-- 1 root root 3106 Feb 20  2014 .bashrc", 
            "-rw-r--r-- 1 root root  140 Feb 20  2014 .profile", 
            "drwxr-xr-x 2 root root 4096 May 20  2018 .ssh"
        ]
    }
    
    PLAY RECAP *******************************************************************************************************************************************
    192.168.2.106              : ok=2    changed=1    unreachable=0    failed=0   
    • Thực hiện tương tự với một câu lệnh khác mà bạn thích, ví dụ lệnh kiểm tra memory: free -m
    cat << EOF > free-m.yml
    ---
    - hosts: group1
      gather_facts: false
      tasks:
        - shell: free -m
          register: output
        - debug:
            msg: "{{ output.stdout_lines }}"
    EOF
    • Chạy lại và xem kết quả: ansible-playbook -i inventory free-m.yml 
    $ ansible-playbook  -i inventory free-m.yml 
     [WARNING] Ansible is in a world writable directory (/tmp), ignoring it as an ansible.cfg source.
    
    PLAY [group1] ****************************************************************************************************************************************
    
    TASK [shell] *****************************************************************************************************************************************
    changed: [192.168.2.106]
    
    TASK [debug] *****************************************************************************************************************************************
    ok: [192.168.2.106] => {
        "msg": [
            "             total       used       free     shared    buffers     cached", 
            "Mem:          5822       5242        580        308        234       2644", 
            "-/+ buffers/cache:       2363       3458", 
            "Swap:         3960          0       3960"
        ]
    }
    
    PLAY RECAP *******************************************************************************************************************************************
    192.168.2.106              : ok=2    changed=1    unreachable=0    failed=0   
    

    2 phút để sáng tạo và chạy các ansible playbook của riêng bạn

    Bây giờ bạn có thể làm gì tiếp?

    • Tip 01: Thoải mái chỉnh sửa các playbook dựa trên các câu lệnh của mình để quản lý hệ thống
    • Tip 02: Nếu bạn có thêm các server khác nữa cũng có thể SSH tới, hãy thực hiện tương tự: ssh thử tới các server đó và cập nhật vào inventory, ví dụ như sau:
    cat << EOF > inventory
    [group1]
    192.168.2.106 ansible_port=32768 ansible_user=root ansible_password=mypass
    192.168.2.107 ansible_port=22 ansible_user=root ansible_password=mypass
    EOF

    Tuyệt cú mèo! Bạn đã chạy thành công ansible!

    Trong các bài tiếp theo mình sẽ lần lượt giới thiệu các khái niệm trong Ansible và cách sử dụng chúng ^^

    Comments