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 이미지의 압축을 풀고, 어떤 식으로든 조작한 다음, 컴퓨터 부팅 방법을 알려주는 내용을 그대로 유지하면서 다시 패키징해야 합니다.
다행히도 이 작업을 수행하는 방법에 대한 훌륭한 가이드 를 찾았습니다. 이 과정은 세 단계로 구성됩니다.
- 우분투 ISO 부팅 이미지의 압축을 풉니다.
- 콘텐츠를 조작합니다:
- Xorriso라는 애플리케이션을 사용하여 모든 것을 패키징합니다.
이 고대 공예의 마법사들에게 소리소는 마술 지팡이 역할을 합니다. 주문집과 비슷한 형태의 문서가 몇 페이지에 걸쳐 있습니다. 완전히 이해하려면 손을 더럽혀야겠지만, 현재 (그리고 아마도 잘못된) 이해는 부팅 파티션을 만들고, 복사한 MBR을 로드하고, 수정된 ISO 이미지를 만들기 위해 Cloud-init과 유사한 지침으로 무언가를 수행한다는 것입니다.
마무리 손질
더 이상의 입력 없이 PowerShell에서 우분투22 부팅에 성공한 것은 매우 만족스러웠지만 다음에 우분투가 새 버전을 출시할 때는 어떨까? 진정한 데브옵스에서는 프로세스를 ASCII가 아닌 필요할 때 실행할 수 있는 스크립트로 문서화해야 합니다. 저는 오후에 이 작업을 수행했다는 점에서 Ansible의 다재다능함을 보여주었습니다. 비결은 Ansible에 로컬 작업이라고 지시하는 것입니다. 즉, SSH를 사용하여 지시를 받을 머신을 대상으로 하지 말고 Ansible 컨트롤러도 학생입니다.
- hosts: localhost
connection: local
다음에 전체 플레이가 제공되며 위에서 설명한 내용을 다시 볼 수 있습니다.
# 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