Ansible:Enders 게임


구성 관리


구성 관리의 목적은 시스템을 필요한 상태로 유지하는 것이다.그 목적은 가능한 한 설정 표류를 없애는 것이다.
임시 설정 변경과 업데이트로 인해 개발, 테스트, 배치 환경이 일치하지 않을 때 설정 표류가 발생합니다.엄격한 규정 준수 기준을 충족해야 하는 애플리케이션과 서비스를 개발하면 배포 문제, 보안 취약점 및 위험이 발생할 수 있습니다.
구성 관리는 직원이나 업무량을 늘릴 염려 없이 인프라 확장을 가능하게 합니다.이는 모든 인프라의 일관성을 확보하고 자동화 수준을 높이며 인위적인 오류를 감소시킵니다.

Ansible 회사


Ansible은 매우 강력하고 유행하는 구성 관리 도구입니다.다음은 Ansible에 관심을 가지게 하는 몇 가지 빠른 사실입니다.
  • 'ansible'라는 단어는 처음에 초광속 통신을 할 수 있는 허구 기술을 가리켰다.그것은 어떤 거리나 장애물에서도 지체 없이 해당 장치에 메시지를 보내고 수신할 수 있다.
  • 그 이름은 공상 과학 영화(예를 들어 엔더스 게임)와 소설에 쓰인다
    우술라.
  • Enders 게임에서 이야기는 ansible to Central에 달려 있다
    거대하고 복잡한 원양 함대를 통제하다.이게 뭐야?
    Ansible Automatic Software 설립자가 다음 용어를 선택했음을 알립니다.
    그들의 제품 이름.
  • Michael DeHaan이 개발한 그는 Cobbler and Func의 창시자이다.
  • Ansible is an agentless push-based configuration tool that
    functions by connecting via SSH to its managed nodes. It doesn’t need
    a special agent on the node and operates by pushing modules to the
    clients. The modules are then executed locally on the node, and the
    output is pushed back to the controller or host.


    표류는 동기화 버전과 다르게 호스트에서 변경하는 과정입니다.

    데모 노드:

  • 포털에서 Ubuntu Linux 가상 머신 3개를 시작합니다.새파랗다com
  • 사용자 = 에이전트, 암호 =password@101.
  • 3개의 VM에 대한 IP 주소 복제
  • Ssh는 우리의 제어 노드가 될 노드로 변환되고 다음 절차에 따라 진행됩니다.

    Ansible 설치:


    1단계: 패키지 업데이트
       sudo apt update
    
    2단계: 소프트웨어 속성 공통 패키지 설치
     sudo apt install software-properties-common
    
    3단계: ansible 개인 패키지 아카이브 추가
    sudo apt-add-repository ppa:ansible/ansible
    
    4단계: ansible 설치
     sudo apt install ansible
    
    설치를 테스트하려면 다음과 같이 하십시오.
    ansible --version
    

    Ansible 즉석 명령:


    이것은 Ansible가 하나 이상의 서버에서 특정 명령을 실행하는 데 가장 간단한 방법 중 하나입니다.임시 명령은 버전에 의해 제어되지 않지만 필요한 서버와 상호작용하는 빠른 방식을 나타낸다.
    ansible -m ping localhost 
    
    -m==> 모듈
    Ping==> 모듈 이름
    로컬 호스트 ==> 대상 노드
    ansible -m copy -a 'src=./file1.txt dest=~/file.txt' localhost 
    
    일부 변경 사항이 실행되는지 확인하려면 시험적으로 실행하십시오.명령에 "-check"을 추가합니다.구현할 변경 사항을 보려면 "-diff"를 추가하십시오.변경 사항을 지적한 후,diff 로고는 단독으로 변경됩니다.

    멱등성:


    This is an IaC property that ensures a defined infrastructure
    deployment sets the target environment to the desired state, every
    time it is run, regardless of its starting state. The IaC provider
    will decide what needs to be stood-up, torn down or reconfigure to
    match your described target state.


    Ansible 시나리오


    ansibleplaybook은 ansible를 사용하여 임무를 수행하는 더욱 읽을 수 있고 버전화되기 쉬운 방식이다.즉석 명령에 비해 대본은 복잡한 장면에 사용되기 때문에 더욱 높은 유연성과 능력을 제공한다.대본은 YAML 형식을 사용하기 때문에 문법이 많이 필요하지 않지만 들여쓰기 규칙이 엄격하다.Ansible 시나리오는 종종 프로그래밍 언어가 아니라 설정 언어와 같다.

    Like its name, a playbook is a collection of plays. A play is a set of
    orchestration instructions.


        ---
          #ansible -m copy -a “src=./file1.txt dest=~/file1.txt” localhost
        - name: Play name
        hosts: localhost
          tasks:
          - name: Copy a file
            copy:
              src: ./file1.txt
              dest: ~/file1.txt
    
  • ansible 대본은 3개의 대시로 시작한다.
  • '#'은 주석 행을 나타냅니다.
  • - name은 설명에 사용할 실행되지 않은 이름을 나타냅니다.
    의도
  • 호스트에서 대상 노드 장치 또는 그룹을 지정합니다.
  • 작업은 동작과 파라미터로 구성된다.
  • 작업에서 모듈과 매개변수를 지정할 수 있습니다.
  • If the action you desire requires root/sudo, use the ‘Become’ keyword
    for privilege escalation.


    변동 재고


    Ansible은 관리되는 호스트를 식별하기 위해 리소스 팜플렛을 사용합니다.기본 호스트 파일은 다음과 같습니다.
    /etc/ansible/hosts 
    
    여기서 노드, 노드 별명, 노드 그룹과 변수를 정의할 수 있습니다.사용자가 만든 가상 시스템의 IP 주소를 사용하여 그룹을 만듭니다.
    [master]
    host1 ansible_host=192.168.100.2 ansible_user=agent ansible_password=password@101
    [agents]
    node1 ansible_host=192.168.100.3 ansible_user=agent ansible_password=password@101
    node2 ansible_host=192.168.100.4 ansible_user=agent ansible_password=password@101
    
    "ansible inventory"명령은 위탁 관리 노드를 처리하는 데 사용됩니다.
    모든 노드의 전체 목록을 보려면 다음을 입력합니다.
    ansible-inventory --list
    
    보다 그래픽화된 레이아웃을 얻으려면 다음을 사용합니다.
    ansible-inventory --graph
    

  • @localhost 현재/제어 노드

  • @all 모든 노드

  • @group_name 은 그룹 내의 모든 노드를 대상으로 합니다.
  • 호스트 파일을 단순화하려면 [all:vars] 그룹의 모든 변수를 정의하십시오.
    [all:vars]
    ansible_user=agent
    ansible_password=password@101
    
    [master]
    host1 ansible_host=192.168.100.2 
    
    [agents]
    node1 ansible_host=192.168.100.3 
    node2 ansible_host=192.168.100.4 
    
    참고: Ansible는 암호를 사용하여 이 시스템과 SSH 연결을 설정하기 때문에 "sshpass"를 설치해야 합니다.
    sudo apt install sshpass -y
    
    ping 명령을 사용하여 호스트를 테스트해 보겠습니다.
    ansible -m ping all
    
    우리에게 잘못을 하나 주었다.ansible 설정을 수정해야 합니다.

    Ansible CFG


    Ansible 구성 파일이 원하는 것입니다.위치:
    /etc/ansible/ansible.cfg
    
    우리는 그것을 열고 설정을 수정해야 한다.파일을 열고 메모를 취소하려면: host_key_checking = false그것을 입력하든지.
    이제 ping 명령을 실행할 수 있습니다.
    ansible -m ping all
    

    대본을 쓰다


    파일을 만들려면 다음과 같이 하십시오.
    touch playbook.yml
    
    다음 항목을 열고 추가합니다.
        ---
        - name: play one - install vim from custom inventory
          hosts: agents
          become: true
          tasks:
          - name: apt 
            apt:
              name: vim
              state: latest
    
          - name: zsh install
            apt:
              name: zsh
              state: latest
    
          - name: vagrant install
            apt:
              name: vagrant
              state: latest
    
          - name: nodejs install
            apt:
              name: nodejs
              state: latest
    
        - name: play two server config
          become: true
          hosts: master
          tasks:
            - name: ensure Nginx is at latest
              apt:
                name: nginx
                state: latest
            - name: start server
              service:
                name: nginx
                state: started
    
    저장합니다.

    극본을 집행하다


    우리가 방금 쓴 대본을 실행하기 위해서, 우리는 "ansible playbook"명령을 사용합니다.입력:
    ansible-playbook playbook.yml -v
    
    지루하다v가 클수록 출력의 디테일이 많아진다.
    우리는 사용자 정의 재고 파일에서 시나리오를 실행할 수도 있다.
    사용자 정의 인벤토리 파일을 만듭니다.
    touch inventory
    
    노드를 추가합니다.
    Ping은 다음과 같은 방법으로 테스트합니다.
    ansible -I inventory -m ping all
    
    다음 내용으로 시나리오를 작성합니다.
    ansible-playbook -I inventory playbook.yml
    

    VM 종료


    이제 마지막 프레젠테이션으로 추가 비용을 피하기 위해 가상 머신을 종료합니다.ansible가 여러 가지 일을 할 수 있다는 것을 알았으니, 우리는 그것으로 이 시범을 보일 것이다.
    당신은 이 때문에 YAML 스크립트를 작성할 수 있습니까?일단 해봐.이것은 매우 간단하다.
        ---
        - name: shut down all my agent VMs
          hosts: all
          become: true
          tasks:
            - name: run shutdown command
              command: shutdown
    
    저장 및 실행:
    ansible-playbook shutdownVMs.yml -vv
    

    Azure Cloudshell의 Ansible


    Azure Cloudshell은 Ansible 즉석 명령과 시나리오를 실행하는 데 필요한 모든 것을 갖추고 있습니다.다음은 Azure Cloudshell의 기본 리소스를 사용하여 VM을 만듭니다.
    액세스HTTP://portal.azure.com 및 Cloudshell을 엽니다.Bash를 선택하고 다음 내용을 입력하여 포함된 VS 코드 편집기를 엽니다.
    code .
    
    편집기에서 azvmplaybook을 만듭니다.yml 및 내부에 다음을 붙여넣습니다.
    
    - name: Create Azure VM
      hosts: localhost
      connection: local
      tasks:
      - name: Create resource group
        azure_rm_resourcegroup:
          name: myResourceGroup
          location: eastus
    
    
      - name: Create virtual network
        azure_rm_virtualnetwork:
          resource_group: myResourceGroup
          name: myVnet
          address_prefixes: "10.0.0.0/16"
    
    
      - name: Add subnet
        azure_rm_subnet:
          resource_group: myResourceGroup
          name: mySubnet
          address_prefix: "10.0.1.0/24"
          virtual_network: myVnet
    
    
      - name: Create public IP address
        azure_rm_publicipaddress:
          resource_group: myResourceGroup
          allocation_method: Static
          name: myPublicIP
        register: output_ip_address
    
      - name: Dump public IP for VM which will be created
        debug:
          msg: "The public IP is {{ output_ip_address.state.ip_address }}."
    
    
      - name: Create Network Security Group that allows SSH
        azure_rm_securitygroup:
          resource_group: myResourceGroup
          name: myNetworkSecurityGroup
          rules:
            - name: SSH
              protocol: Tcp
              destination_port_range: 22
              access: Allow
              priority: 1001
              direction: Inbound
    
    
      - name: Create virtual network interface card
        azure_rm_networkinterface:
          resource_group: myResourceGroup
          name: myNIC
          virtual_network: myVnet
          subnet: mySubnet
          public_ip_name: myPublicIP
          security_group: myNetworkSecurityGroup
    
    
      - name: Create VM
        azure_rm_virtualmachine:
          resource_group: myResourceGroup
          name: myVM
          vm_size: Standard_DS1_v2
          admin_username: agent
          admin_password: password@101
          network_interfaces: myNIC
          image:
            offer: UbuntuServer
            publisher: Canonical
            sku: '18.04-LTS'
            version: latest
    
    
    공을 스크롤하려면 Cloudshell에서 다음을 수행합니다.
    ansible-playbook azvmplaybook.yml
    
    잠깐만...
    완료되면 리소스 그룹으로 이동하여 확인하십시오.생성된 VM에 SSH를 연결할 수도 있습니다.놀고 난 후에 우리는 우리의 궤적을 정리해야 한다.편리한 것은 우리의 자원 그룹을 삭제하기만 하면 창설된 모든 자원을 가져갈 수 있다는 것이다.우리 이렇게 합시다.rmrgplaybook을 만듭니다.yml:
    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group
          azure_rm_resourcegroup:
            name: myResourceGroup
            state: absent
            force_delete_nonempty: yes
    
    
    여기에서 force\u delete\u nonempty 로고를 yes로 설정하여 모든 하위 자원을 삭제할 수 있도록 합니다.
    이제 구현:
    ansible-playbook rmrgplaybook.yml
    
    Thanks for your time!

    좋은 웹페이지 즐겨찾기