애니블과 컨테이너 이전 예술

containerization이 이미지 仮想化을 위한 준비를 좀 더 쉽게 만들었음에도 불구하고, カスタム ISO 이미지를 만들어 CD에서 引导할 수 있는 예술로 보이던 것이었다. 이 이미지는 后来 仮想 머신을 引导할 때 사용되었다. 换句话说, ISO 이미지는 컨테이너 이미지의 始祖였다.

windows 도커 클라이언트와 unlucky 한 几个 적이 있었습니다. 컨테이너를 실행하고 있지 않은 것 마다, Windows 메모리 관리자는 가능한 많은 메모리를 보여주고 있어 나의 일을 느리게 만들었습니다. 따라서 Windows 도커 클라이언트를 내 기기에서 사용하지 않도록 정했습니다.

Error 를 请不要误会. 我不 Docker 를 하나는 그것의 Windows 클라이언트를 싫어요.

이 단계가 나를 과거로 돌린 것 같습니다. 그렇다면 저는 Windows Hyper-V에서 직접 仮想 머신을 실행하게 되었습니다. 그렇다면 Windows 上에 Kubernetes クラスタ를 形作るのは 私の DZone 에서 発表した 過去の投稿から 私の趣味として なさ sponsorship 되었습니다.Cobbler, Why Do You Go Barefoot?Hours を script virtual machines on Hyper-V Manager 를 따라서 virtual machines를 만들어 보았습니다. 나는 靴匠이 발을 ỏ章程하는 것과 유사하게 있습니다.: 私は DevOps パイプライン을 1時間あたり 作成하는 것에 专业化되어 있지만, 마우스 클릭을 기다리는 것에 시간을 浪費하는 것입니다.

도전 수락. 저는 덕질하다가 PowerShell을 사용하여 가상 머신을 만들 수 있다는 것을 읽었습니다. 여기에서 볼 수 있듯이 새로운 가상 머신을 생성하는 스크립트를 만드는 데 일주일이 걸리지 않았습니다. 자매 스크립트는 꺼져 있는 가상 머신을 시작할 수 있습니다.

옛 예술의 재발견

이것은 훌륭했지만 우분투를 설치할 때 여전히 마우스 클릭을 하고 있다는 것을 깨달았습니다. 이를 자동화하는 것은 더 어려운 문제처럼 보였습니다. ISO 이미지의 압축을 풀고, 어떤 식으로든 조작한 다음, 컴퓨터 부팅 방법을 알려주는 내용을 그대로 유지하면서 다시 패키징해야 합니다.

다행히도 이 작업을 수행하는 방법에 대한 훌륭한 가이드 를 찾았습니다. 이 과정은 세 단계로 구성됩니다.

  1. 우분투 ISO 부팅 이미지의 압축을 풉니다.
  2. 콘텐츠를 조작합니다:
    1. 마스터 부트 레코드(MBR)를 밖으로 이동합니다.
    2. 사용자가 일반적으로 GUI에서 수행하는 작업을 지정하고 설치 중에 설치 및 실행되는 항목을 사용자 지정합니다. 이 작업은 우분투의 Cloud-init 언어의 하위 집합을 사용하여 수행됩니다. 제가 만든 지침은 여기 를 참조하세요.
    3. 부트로더(이 경우 Grub)에 사용자 지정 부팅 지침을 찾을 위치를 지정하고 사용자 입력을 기다리지 않도록 지시합니다. 다음은 제가 설정한 그럽 구성입니다.
    4. .

  3. Xorriso라는 애플리케이션을 사용하여 모든 것을 패키징합니다.

이 고대 공예의 마법사들에게 소리소는 마술 지팡이 역할을 합니다. 주문집과 비슷한 형태의 문서가 몇 페이지에 걸쳐 있습니다. 완전히 이해하려면 손을 더럽혀야겠지만, 현재 (그리고 아마도 잘못된) 이해는 부팅 파티션을 만들고, 복사한 MBR을 로드하고, 수정된 ISO 이미지를 만들기 위해 Cloud-init과 유사한 지침으로 무언가를 수행한다는 것입니다.

마무리 손질

더 이상의 입력 없이 PowerShell에서 우분투22 부팅에 성공한 것은 매우 만족스러웠지만 다음에 우분투가 새 버전을 출시할 때는 어떨까? 진정한 데브옵스에서는 프로세스를 ASCII가 아닌 필요할 때 실행할 수 있는 스크립트로 문서화해야 합니다. 저는 오후에 이 작업을 수행했다는 점에서 Ansible의 다재다능함을 보여주었습니다. 비결은 Ansible에 로컬 작업이라고 지시하는 것입니다. 즉, SSH를 사용하여 지시를 받을 머신을 대상으로 하지 말고 Ansible 컨트롤러도 학생입니다.

YAML

 

- hosts: localhost
  connection: local

다음에 전체 플레이가 제공되며 위에서 설명한 내용을 다시 볼 수 있습니다.

YAML

 

# stamp_images.yml

- hosts: localhost
  connection: local
  become: true
  vars_prompt:
    - name: "base_iso_location"
      prompt: "Enter the path to the base image"
      private: no
      default: /tmp/ubuntu-22.04.4-live-server-amd64.iso

  tasks:
    - name: Install 7Zip
      ansible.builtin.apt:
        name: p7zip-full
        state: present

    - name: Install Xorriso
      ansible.builtin.apt:
        name: xorriso
        state: present

    - name: Unpack ISO
      ansible.builtin.command: 
        cmd: "7z -y x {{ base_iso_location }} -o/tmp/source-files"

    - name: Copy boot partitions
      ansible.builtin.copy:
        src: /tmp/source-files/[BOOT]/
        dest: /tmp/BOOT
  
    - name: Delete working boot partitions
      ansible.builtin.file:
        path:  /tmp/source-files/[BOOT]
        state: absent
  
    - name: Copy files for Ubuntu Bare
      ansible.builtin.copy:
        src: bare/source-files/bare_ubuntu
        dest: /tmp/source-files/

    - name: Copy boot config for Ubuntu bare
      ansible.builtin.copy:
        src: bare/source-files/boot/grub/grub.cfg
        dest: /tmp/source-files/boot/grub/grub.cfg

    - name: Stamp bare image
      ansible.builtin.command: 
        cmd: xorriso -as mkisofs -r   -V 'Ubuntu 22.04 LTS AUTO (EFIBIOS)'   -o ../ubuntu-22.04-wormhole-autoinstall-bare_V5_1.iso   --grub2-mbr ../BOOT/1-Boot-NoEmul.img -partition_offset 16   --mbr-force-bootable   -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b ../BOOT/2-Boot-NoEmul.img   -appended_part_as_gpt   -iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7   -c '/boot.catalog'   -b '/boot/grub/i386-pc/eltorito.img'     -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info   -eltorito-alt-boot   -e '--interval:appended_partition_2:::'   -no-emul-boot .
        chdir: /tmp/source-files

    - name: Copy files for Ubuntu Atomika
      ansible.builtin.copy:
        src: atomika/source-files/atomika_ubuntu
        dest: /tmp/source-files/

    - name: Copy boot config for Ubuntu Atomika
      ansible.builtin.copy:
        src: atomika/source-files/boot/grub/grub.cfg
        dest: /tmp/source-files/boot/grub/grub.cfg

    - name: Stamp Atomika image
      ansible.builtin.command:
        cmd: xorriso -as mkisofs -r   -V 'Ubuntu 22.04 LTS AUTO (EFIBIOS)'   -o ../ubuntu-22.04-wormhole-autoinstall-atomika_V5_1.iso   --grub2-mbr ../BOOT/1-Boot-NoEmul.img -partition_offset 16   --mbr-force-bootable -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b ../BOOT/2-Boot-NoEmul.img   -appended_part_as_gpt   -iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7   -c '/boot.catalog'   -b '/boot/grub/i386-pc/eltorito.img'     -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info   -eltorito-alt-boot   -e '--interval:appended_partition_2:::'   -no-emul-boot .
        chdir: /tmp/source-files        

여기에 사용된 Xorriso 명령의 마법으로 두 개의 이미지(하나는 Kubernetes를 지원하는 이미지, 다른 하나는 지원하지 않는 이미지)를 준비합니다.

단 한 가지 주의할 점은 이 플레이를 실행할 머신에 Ansible이 설치되어 있어야 한다는 것입니다. 위 플레이의 출력은 여기 에서 다운로드하여 최신 버전의 Ansible을 사전 설치할 수 있습니다.

결론

이 게시물은 복고풍으로 바뀌었지만, 왜 상황이 이렇게 되었는지 이해하기 위해 상황이 시작된 곳을 다시 살펴보는 것이 중요합니다. 게다가 윈도우와 컨테이너는 잘 어울리지 않으며, 개발자의 시대를 더 좋게 만드는 방법에 대한 조사는 환영받아야 합니다.

코드의 일부를 소개했지만, 전체 프로젝트는 GitHub에서 볼 수 있습니다.

Source:
https://dzone.com/articles/ansible-and-the-pre-container-arts