Thursday, November 21, 2024

Tạo máy ao và template Ubuntu tự động trên vSphere sử dụng Packer và Terraform

-

1. Tổng quan.

Bài viết này tập trung vào việc tạo máy ảo Ubuntu và chuyển chúng thành template trên nền tảng vSphere sử dụng các công cụ Packer và Terraform.

Hãy xem xét những điểm chính được thảo luận trong bài viết hôm nay.

  • Giới thiệu:
    • Packer và Terraform đều là các công cụ được tạo bởi công ty HashiCorp.
    • Cả hai công cụ này đều nhằm mục đích cung cấp khả năng tự động hóa.
    • Packer dùng để tạo ra các Image máy ảo cho nhiều nền tảng khác nhau như AWS (Amazon Web Services) hoặc VMware.
    • Mục tiêu chính là tự động hóa quá trình tạo ra một Image đồng nhất có thể được sử dụng trên một nền tảng cụ thể, chẳng hạn như AWS hoặc các sản phẩm VMware như vSphere.
    • Terraform tập trung vào Infra là chính. Dựa trên file cấu hình được cung cấp, Terraform sẽ xây dựng Infra và cho phép cập nhật Infra đang chạy.
  • Mục tiêu:
    • Trong bài viết này sẽ là một ví dụ ngắn sẽ được cung cấp về việc sử dụng Packer và Terraform cùng nhau.
    • Mục tiêu là tạo một template Ubuntu từ file ISO trên hệ thống vSphere bằng Packer.
    • Sau đó, khởi chạy một phiên bản tùy chỉnh của template đó và cài đặt Apache trên hệ thống.
  • Packer:
    • Để bắt đầu, chúng ta cần có cloudinit Ubuntu, bạn yên tâm là chức năng này đã được tích hợp sẵn vào Ubuntu.
    • Một file cấu hình Preseed sẽ được chúng ta define, cung cấp các tham số này cho Ubuntu để nó tự khởi động và chạy các tác vụ.
  • Danh sách file cấu hình:
    • ubuntu-18.json: Đây là file cấu hình chính của Packer.
    • vars.json: File chứa các biến và giá trị của chúng, được sử dụng bởi ubuntu-18.json.
    • preseed.cfg: File cấu hình Preseed Ubuntu sẽ sử dụng cho quá trình cài đặt tự động.
    • scripts/update.sh: Cập nhật hệ thống.
    • scripts/install_perl.sh: Cài đặt các module Perl, điều này cần thiết để tùy chỉnh máy ảo bằng Terraform sau này.
    • scripts/user_no_password_sudo.sh: Cho phép người dùng sử dụng sudo mà không cần mật khẩu.

2. Ubuntu Preseed File.

Dưới đây là nội dung của file cấu hình Preseed cho Ubuntu (preseed.cfg).

### Base system installation
d-i base-installer/kernel/override-image string linux-server    # Specifies to install the Kernel.

### Account setup
d-i passwd/user-fullname string user                            # Full name of the user to create.
d-i passwd/username string user                                 # Username of the user to create.
d-i passwd/user-password password qwe123                        # Password of the user to create.
d-i passwd/user-password-again password qwe123                  # Repeat password, for the installer.
d-i user-setup/allow-password-weak boolean true                 # Allow weak passwords, this is a test box.
d-i user-setup/encrypt-home boolean false                       # Do not encrypt the users home folder.

### Clock and time zone setup
d-i clock-setup/utc boolean true                                # Set the hardware clock to UTC.                         
d-i time/zone string UTC                                        # Set the timezone to UTC.

### Partitioning
d-i partman-auto/method string lvm                              # Use LVM as partitioning method.
d-i partman-lvm/confirm_nooverwrite boolean true                # Makes partman automatically write to disk without user confirmation.       
d-i partman-auto-lvm/guided_size string max                     # Use all of the volume group for the logical volumes created.
d-i partman/choose_partition select finish                      # Makes partman automatically write to disk without user confirmation.
d-i partman/confirm_nooverwrite boolean true                    # Makes partman automatically write to disk without user confirmation.

### Mirror settings
#d-i mirror/country string US
d-i mirror/http/proxy string                                    # Optional proxy setting, here it is empty.

### Package selection
tasksel tasksel/first multiselect standard                      # Install the standard set of packages.
d-i pkgsel/update-policy select none                            # Do not perform any updates or upgrades.
d-i pkgsel/include string openssh-server open-vm-tools cloud-init # Install some required packages for our template.
d-i pkgsel/install-language-support boolean false                # Don't need any language support.

### Boot loader installation
d-i grub-installer/only_debian boolean true                      # Makes GRUB install to MBR if no other OS is detected.

### Finishing up the installation
d-i finish-install/reboot_in_progress note                      # Prevent the message that install has been completed at the end.

File cấu hình Preseed này được sử dụng để cấu hình quá trình cài đặt tự động của Ubuntu. Nó xác định các thông số như tên người dùng, mật khẩu, múi giờ, phân vùng, gói phần mềm cần cài đặt và nhiều thông số khác để đảm bảo quá trình cài đặt diễn ra một cách tự động và không cần sự can thiệp của người dùng. Với cách tiếp cận này, bạn có thể tự động cài đặt Ubuntu bằng cách sử dụng Packer để tạo máy ảo và thực thi các tham số khởi động để sử dụng file cấu hình Preseed từ một nguồn ở xa ví dụ như Git.

Dưới đây là giải thích các tham số khởi động như sau:

  • Tham số khởi động:
    • auto=trueauto-install/enable=true: Cho phép quá trình cài đặt sẽ tự động diễn ra và sử dụng file cấu hình Preseed.
    • preseed/url=http://mywebsite.com/mypressed.cfg: Gắn URL của file cấu hình Preseed, đó chính là nơi Ubuntu sẽ lấy cấu hình.
    • vga=788: Điều chỉnh cài đặt màn hình với độ phân giải 788×788.
    • initrd=/install/initrd.gz: Xác định initrd (initial ramdisk) để sử dụng trong quá trình khởi động.
    • fb=false: Tắt framebuffer, điều này có thể cải thiện khả năng hiển thị của giao diện cài đặt.
    • debconf/frontend=noninteractive: Đặt giao diện không tương tác để tránh việc cài đặt yêu cầu sự can thiệp của người dùng.
    • Các thông số khác như cài đặt ngôn ngữ, keyboard và cấu hình hệ thống.
  • Sử dụng Packer:
    • Packer được sử dụng để tạo máy ảo, khởi động máy ảo và thực thi các tham số khởi động như đã mô tả trong file Preseed để hoàn tất quá trình cài đặt Ubuntu một cách tự động. Điều này loại bỏ sự cần thiết cho việc nhập các tham số khởi động thủ công.
  • Vấn đề về file cấu hình Preseed:
    • Mình đã đề cập đến việc file cấu hình Preseed được lấy từ một vị trí ở đâu đó ví dụ như Git. (http://mywebsite.com/mypressed.cfg). Điều này đòi hỏi máy chủ cần có khả năng truy cập Internet để tải file cấu hình này trong quá trình cài đặt.
    • Điều đáng chú ý là một số hệ điều hành Linux khác như CentOS 7 cho phép file cấu hình Preseed được đính kèm vào ổ đĩa mềm ảo của máy ảo, giúp truyền file cấu hình một cách dễ dàng khi sử dụng Packer. Tuy nhiên, Ubuntu không còn hỗ trợ ổ đĩa mềm ảo này do đó việc truyền file cấu hình qua mạng là cách duy nhất để sử dụng file cấu hình Preseed.

Required Variables.

Dưới đây là một file JSON chứa các biến mô tả các thông số cấu hình cần thiết cho việc sử dụng Packer để tạo máy ảo trên vSphere và thực hiện quá trình cài đặt tự động.

{
    "vcenter_server":"vcenter.example.com",   # vCenter domain.
    "username":"administrator@example.com",   # Username and SSO domain for vSphere.
    "password":"VMware1!",                    # Password for vSphere.
    "datastore":"Example-Datastore-Name",     # Datastore to store the template on.
    "folder": "",                             # Target path in datastore where template will be created, optional vale.
    "host":"esxi02.example.com",              # ESXi host to use as compute resource.
    "cluster": "Example Lab Cluster",         # The cluster to run the virtual machine in.
    "network": "VM Network",                  # Portgroup to attack to the virtual machine.
    "ssh_username": "user",                   # Username to use for SSH connection.
    "ssh_password": "qwe123",                 # Password to use for SSH connection.
    "seed_file_domain": "192.168.55.163",     # Location of Seedfile configuration.
    "seed_filename": "preseed.cfg",           # Filename of the configuration file.
    "cpu_number": "2",                        # Number of virtual CPU's to use on virtual machine.
    "ram_amount": "2048",                     # Amount of RAM to use on virtual machine.
    "disk_size": "8024",                      # Amount of hard disk space to use for virtual machine (thin provisioned).
    "template_name": "template_ubuntu18"      # Name of the template to be created.
}

Các biến này cung cấp thông tin cần thiết để Packer có thể tạo máy ảo, thực hiện cài đặt tự động và chuyển đổi máy ảo thành một template. Bằng cách tách chúng ra thành một file vars.json, bạn có thể quản lý dễ dàng các thông số cấu hình mà không cần sửa đổi file chính của Packer. Dưới đây là mô tả của các biến trong file vars.json:

  • "vcenter_server": Địa chỉ hoặc tên miền của máy chủ vCenter.
  • "username": Tên người dùng vSphere và miền Single Sign-On (SSO).
  • "password": Mật khẩu tương ứng với tên người dùng vSphere.
  • "datastore": Tên của Datastore trên vSphere. Đây là nơi lưu trữ máy ảo và template sau khi chúng được tạo.
  • "folder": Đường dẫn trong Datastore nơi template sẽ được tạo ra (tuỳ chọn).
  • "host": Tên máy chủ ESXi mà bạn muốn sử dụng để chạy máy ảo.
  • "cluster": Tên của cluster trong vSphere mà máy ảo sẽ được chạy.
  • "network": Tên của Portgroup mạng (network) mà máy ảo sẽ kết nối đến.
  • "ssh_username": Tên người dùng được sử dụng để kết nối SSH đến máy ảo sau khi nó được tạo.
  • "ssh_password": Mật khẩu được sử dụng để kết nối SSH đến máy ảo.
  • "seed_file_domain": Địa chỉ hoặc tên miền nơi file cấu hình Preseed (preseed.cfg) được lưu trữ. Điều này dùng để truy cập file cấu hình từ xa.
  • "seed_filename": Tên file cấu hình Preseed.
  • "cpu_number": Số lượng CPU ảo sẽ được cấp cho máy ảo.
  • "ram_amount": Số lượng RAM ảo (MB) sẽ được cấp cho máy ảo.
  • "disk_size": Kích thước ổ cứng ảo (MB) mà máy ảo sẽ sử dụng. Thường được sử dụng với kiểu “thin provisioned” để tiết kiệm không gian.
  • "template_name": Tên của template Ubuntu sẽ được tạo.

Packer Configuration.

Tiếp theo chúng ta sẽ đề cập đến cấu hình Packer cho việc tạo máy ảo và template trên vSphere. Cấu hình Packer thường được chia thành ba phần chính: builders, boot_command, và provisioners. Dưới đây, mình sẽ giải thích phần đầu tiên của cấu hình Packer, đó là phần builders:

Builders.

"builders": [
      {
        "type": "vsphere-iso",                                # Provider to use, in this case vSphere.
  
        "vcenter_server":      "{{user `vcenter_server`}}",   # vCenter domain.
        "username":            "{{user `username`}}",         # Username and SSO domain for vSphere.
        "password":            "{{user `password`}}",         # Password for vSphere.
        "insecure_connection": "true",                        # Allow invalid TLS certificates, such as self signed.
  
        "vm_name": "{{user `template_name`}}",                # Name of the template to be created.
        "datastore": "{{user `datastore`}}",                  # Datastore to store the template on.
        "folder": "{{user `folder`}}",                        # Target path in datastore where template will be created, optional vale.
        "host":     "{{user `host`}}",                        # ESXi host to use as compute resource.
        "convert_to_template": "true",                        # Convert the virtual machine to a template at the end.
        "cluster": "{{user `cluster`}}",                      # The cluster to run the virtual machine in.
        "network": "{{user `network`}}",                      # Portgroup to attack to the virtual machine.
        "boot_wait": "1s",                                    # Wait 1 second before running boot command.
        "boot_order": "disk,cdrom",                           # Set the boot order, dist and then CDROM.
  
        "guest_os_type": "ubuntu64Guest",                     # Set the guest OS type.
  
        "ssh_username": "{{user `ssh_username`}}",            # Username to use for SSH connection.
        "ssh_password": "{{user `ssh_password`}}",            # Password to use for SSH connection.
  
        "CPUs":             "{{user `cpu_number`}}",          # Number of virtual CPU's to use on virtual machine.
        "RAM":              "{{user `ram_amount`}}",          # Amount of RAM to use on virtual machine.
        "RAM_reserve_all": false,                             # Do not reserve all the RAM.
  
        "disk_controller_type":  "pvscsi",                    # Set the disk controller type.
        "disk_size":        "{{user `disk_size`}}",           # Amount of hard disk space to use for virtual machine.
        "disk_thin_provisioned": true,                        # Set virtual disk to thin provisioned.
  
        "network_card": "vmxnet3",                            # Use a VMXNET3 network adapter.
  
        "iso_urls": "http://cdimage.ubuntu.com/ubuntu/releases/bionic/release/ubuntu-18.04.4-server-amd64.iso",   # ISO source URL.
        "iso_checksum": "e2ecdace33c939527cbc9e8d23576381c493b071107207d2040af72595f8990b",                       # Checksum of ISO.
        "iso_checksum_type": "sha256",                                                                            # Hash function for checksum.

Trong phần builders, bạn xác định các tham số cần thiết để tạo máy ảo và template. Chúng được cấu hình dựa trên các biến bạn đã xác định trong file vars.json. Sau đây là một số thông tin quan trọng trong phần builders:

  • “type”: Loại builder, trong trường hợp này, là "vsphere-iso" để xác định bạn đang sử dụng VMware vSphere và máy ảo ISO.
  • “vcenter_server”, “username”, “password”: Các thông tin xác thực để kết nối với máy chủ vCenter.
  • “datastore”, “folder”, “host”, “cluster”, “network”: Các cài đặt liên quan đến vị trí và tài nguyên của máy ảo.
  • “ssh_username”, “ssh_password”: Thông tin đăng nhập SSH sẽ được sử dụng sau khi máy ảo được tạo để thực hiện các cấu hình cuối cùng.
  • “iso_url”: Đây là URL của file ISO Ubuntu, trong trường hợp này, bạn lấy file ISO từ một nguồn từ xa.

Các thông số trong phần builders giúp Packer kết nối và tạo máy ảo trên vSphere, sử dụng file ISO để thực hiện quá trình cài đặt tự động. Phần boot_command chứa hướng dẫn để thực hiện quá trình cài đặt tự động và phần provisioners sẽ được sử dụng sau khi máy ảo đã được tạo để thực hiện các cấu hình cuối cùng trước khi chuyển máy ảo thành template.

Boot Command.

Phần boot_command trong cấu hình Packer là nơi bạn định nghĩa các lệnh khởi động, tức là giống như macro phím để bắt đầu quá trình cài đặt tự động. Điều này đặc biệt hữu ích khi bạn muốn tùy chỉnh cách Ubuntu bắt đầu quá trình cài đặt.

Dưới đây là mô tả về cách phần boot_command hoạt động:

  • "boot_command": Đây là một chuỗi chứa các lệnh được sử dụng để khởi động quá trình cài đặt Ubuntu. Trong ví dụ này chúng ta sẽ bắt đầu bằng lệnh "console=ttyS0,115200n8" để mở giao diện console. Sau đó, bạn xóa mọi thứ đã tồn tại trước đó với "ctrl+a", "ctrl+u", "ctrl+a", "ctrl+u". Cuối cùng, bạn viết các lệnh tùy chỉnh mà bạn muốn sử dụng cho quá trình cài đặt tự động. Điều này có thể bao gồm đường dẫn đến file cấu hình Preseed, các tham số khởi động và tùy chỉnh cụ thể khác.

Phần boot_command cho phép bạn tùy chỉnh quá trình khởi động và cài đặt tự động của Ubuntu theo cách bạn muốn. Bằng cách xác định chính xác các lệnh cần thiết, bạn có thể điều chỉnh cách Ubuntu bắt đầu và thực hiện cài đặt.

        "boot_command": [
          "<wait><esc><wait><f6><wait><esc><wait>",              # Sequence to enter the boot command terminal.
          "<bs><bs><bs><bs><bs><bs><bs><bs><bs><bs><bs><bs>",    # Backspaces.
          "<bs><bs><bs><bs><bs><bs><bs><bs><bs><bs><bs><bs>",    # Backspaces.
          "<bs><bs><bs><bs><bs><bs><bs><bs><bs><bs><bs><bs>",    # Backspaces.
          "<bs><bs><bs><bs><bs><bs><bs><bs><bs><bs><bs><bs>",    # Backspaces.
          "<bs><bs><bs><bs><bs><bs><bs><bs><bs><bs><bs><bs>",    # Backspaces.
          "<bs><bs><bs><bs><bs><bs><bs><bs><bs><bs><bs><bs>",    # Backspaces.
          "<bs><bs><bs><bs><bs><bs><bs><bs><bs><bs><bs>",        # Backspaces.
          "auto=true",                                           # An alias for auto-install/enable, see next line. Just here to be safe.
          " auto-install/enable=true",                           # Delays the locale and keyboard questions until after there has been a chance to preseed them.
          " preseed/url=http://{{user `seed_file_domain`}}/{{user `seed_filename`}}", # URL of preseed configuration file.
          " vga=788",                                                                 # Set screen resolution, was a default parameter.
          " initrd=/install/initrd.gz",                                               # Location of initrd.
          " fb=false debconf/frontend=noninteractive",                                # Sets frontend to non interactive.
          " hostname=UbuntuTemplate",                                                 # Hostname of machine.
          " debian-installer=en_US auto locale=en_US kbd-chooser/method=us",          # Sets locale.
          " keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=USA", # Sets keyboard settings.
          " keyboard-configuration/variant=USA console-setup/ask_detect=false",       # Sets other keyboard settings.
          " ---<enter>"                                                               # Add ending '---' string and press enter.
        ]
      }
    ],

Provisioners.

Phần provisioners trong cấu hình Packer chứa các hướng dẫn và các lệnh mà bạn muốn thực hiện cuối cùng trước khi tắt máy ảo và chuyển nó thành một template. Các hướng dẫn này có thể bao gồm việc cài đặt phần mềm bổ sung, cấu hình hệ thống, hoặc các tác vụ tùy chỉnh khác mà bạn muốn thực hiện sau khi quá trình cài đặt đã hoàn tất.

Một phần quan trọng cần chú ý trong mô tả của bạn là phần execute_command. Điều này là một định nghĩa để giúp với việc sử dụng sudo trong các lệnh. Vấn đề với sudo là nó có thể yêu cầu mật khẩu tương tác. Để giải quyết vấn đề này, bạn đang chuyển mật khẩu thông qua STDIN, cho phép các tác vụ chạy với sudo mà không yêu cầu sự can thiệp của người dùng.

Cụ thể, phần execute_command cho phép bạn cấu hình cách các tác vụ trong phần provisioners sử dụng sudo mà không cần nhập mật khẩu tương tác, điều này quan trọng để đảm bảo rằng tất cả các bước trong tác vụ provisioner có thể thực hiện một cách tự động và không cần can thiệp của người dùng.

"provisioners": [
      {
        "type": "shell",
        "execute_command": "echo '{{user `ssh_password`}}'|{{.Vars}} sudo -E -S bash '{{.Path}}'",  # How to run all commands, or shell scripts in this case.
        "scripts": [
          "scripts/update.sh",              
          "scripts/install_perl.sh",
          "scripts/user_no_password_sudo.sh"
        ]
      }
    ]

Đoạn boot_command sẽ define chuỗi các lệnh hoặc thao tác tự động mà Packer sẽ thực hiện để điều khiển quá trình khởi động và cài đặt tự động của hệ điều hành Ubuntu trong quá trình tạo máy ảo.

  • "<wait><esc><wait><f6><wait><esc><wait>": Đây là một chuỗi lệnh để bắt đầu vào môi trường cài đặt tự động. Nó thực hiện các thao tác sau:
    • <wait>: Tạo một khoảng thời gian ngắn để đảm bảo rằng máy ảo đã sẵn sàng.
    • <esc>: Bấm phím Esc để hiển thị menu khởi động.
    • <f6>: Bấm phím F6 để tạo một prompt để nhập lệnh khởi động.
  • "<bs><bs><bs><bs><bs><bs><bs><bs><bs><bs><bs><bs>": Đây là chuỗi các lệnh “<bs>” để thực hiện backspace, nghĩa là xóa các ký tự trước đó trong dòng lệnh. Điều này đảm bảo rằng bất kỳ lệnh nào được tạo trước đó trong dòng lệnh khởi động sẽ bị xóa trước khi Packer đưa vào các lệnh tùy chỉnh.
  • "auto=true": Đây là một alias cho auto-install/enable=true và được sử dụng để bật chế độ cài đặt tự động.
  • "preseed/url=http://{{user seed_file_domain}}/{{user seed_filename}}": Đây là URL của file cấu hình Preseed. Nó chỉ định nơi file cấu hình Preseed được lưu trữ và sử dụng trong quá trình cài đặt tự động.
  • "vga=788": Thiết lập độ phân giải màn hình.
  • "initrd=/install/initrd.gz": Xác định vị trí của file initrd.
  • "fb=false debconf/frontend=noninteractive": Thiết lập các cài đặt liên quan đến giao diện người dùng cài đặt. Nó đặt frontend thành non-interactive để cài đặt tự động không yêu cầu sự can thiệp người dùng.
  • "hostname=UbuntuTemplate": Xác định tên hostname cho máy ảo.
  • "debian-installer=en_US auto locale=en_US kbd-chooser/method=us": Các cài đặt liên quan đến ngôn ngữ và bàn phím.
  • "keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=USA": Cài đặt bàn phím và layout cho bàn phím.
  • "keyboard-configuration/variant=USA console-setup/ask_detect=false": Thiết lập các cài đặt khác của bàn phím.
  • "---<enter>": Kết thúc chuỗi lệnh bằng việc thêm một chuỗi ‘—‘ và nhấn Enter để kết thúc quá trình cài đặt tự động.

Những lệnh này định nghĩa một chuỗi tương tác tự động để thiết lập quá trình cài đặt Ubuntu mà không cần can thiệp thủ công. Packer sẽ thực hiện chuỗi lệnh này để bắt đầu quá trình cài đặt tự động của máy ảo.

Bạn không nhất thiết phải cài đặt thủ công trước khi cài đặt tự động, nhưng việc hiểu rõ quá trình cài đặt bằng cách cài đặt thủ công có thể giúp bạn dễ dàng cấu hình cài đặt tự động hơn. Việc này có thể đặc biệt hữu ích khi bạn cần tùy chỉnh cài đặt Ubuntu hoặc xác định cụ thể các lựa chọn cài đặt.

Nếu bạn không muốn cài đặt thủ công trước, bạn vẫn có thể tạo một cài đặt tự động mà không cần thực hiện cài đặt thủ công đầu tiên. Điều quan trọng là tìm hiểu tài liệu cài đặt Ubuntu và các tùy chọn cấu hình cài đặt tự động.

Cài đặt tự động thông qua file Preseed và các tùy chọn cấu hình có thể mạnh mẽ và đáng tin cậy khi bạn đã hiểu rõ cách sử dụng chúng. Việc tập thử và điều chỉnh là cần thiết để đảm bảo rằng quá trình cài đặt tự động đáp ứng đúng mục tiêu của bạn và hoạt động như mong đợi.

Extra Scripts.

Extra Scripts là các tác vụ cụ thể mà bạn muốn thực hiện sau khi cài đặt Ubuntu.

  • Update Script (update.sh): Đây là một file script đơn giản để cập nhật hệ thống Ubuntu. Nó sử dụng các lệnh apt-get để thực hiện các bước cập nhật như sau:
    • sudo apt-get update: Cập nhật danh sách gói và phiên bản của các gói.
    • sudo apt-get upgrade -y: Cài đặt các bản cập nhật của các gói đã cài đặt.
    • sudo apt-get dist-upgrade -y: Cập nhật các gói có thay đổi phụ thuộc.
    • sudo apt-get autoremove -y: Xóa các gói không còn sử dụng.
    • sudo apt-get autoclean -y: Xóa các file cài đặt tải về đã cũ.
  • Perl Installation (install_perl.sh): Đây là một file script để cài đặt các gói Perl cần thiết. Gói Perl được cài đặt để hỗ trợ Terraform khi sử dụng VMware Tools với thành phần deployPKG để tùy chỉnh máy ảo. Các lệnh trong file script gồm:
    • sudo apt-get install perl perl-modules perl-cross-config perl-depends -y: Cài đặt các gói Perl cần thiết.
  • Sudo no password script (user_no_password_sudo.sh): Đây là một file script để cho phép người dùng mới (user) chạy các lệnh sử dụng sudo mà không cần nhập mật khẩu tương tác. File thêm một dòng vào file /etc/sudoers để cấu hình việc sử dụng sudo mà không yêu cầu mật khẩu cho người dùng user.

Sau khi quá trình cài đặt Ubuntu và thực hiện các tác vụ cơ bản, như cập nhật hệ thống và cài đặt Perl, các file này đảm bảo rằng máy ảo đã được tùy chỉnh và sẵn sàng để chuyển thành một template.

Ngoài ra, chúng ta cũng đã đề cập đến quá trình Packer, trong đó Packer đợi đến khi máy ảo có địa chỉ IP sau khi Ubuntu cài đặt và khởi động lại. Điều này được thực hiện để đảm bảo rằng máy ảo đã hoàn thành quá trình cài đặt trước khi tiếp tục thực hiện các tác vụ sau cài đặt thông qua Packer.

Kết luận.

Bài viết đã trình bày cách tạo máy ảo Ubuntu và chuyển chúng thành template trên nền tảng vSphere bằng cách sử dụng Packer và Terraform. Điều này giúp tự động hóa quy trình tạo máy ảo và chuẩn bị chúng để sử dụng trên nền tảng vSphere.

Bài viết cũng giới thiệu một số file cấu hình quan trọng, bao gồm file Preseed và các file mã lệnh để tùy chỉnh máy ảo.

Cuối cùng, bài viết cung cấp một cái nhìn tổng quan về cách Packer làm việc trong quá trình tạo máy ảo và tận dụng VMware Tools để xác định khi máy ảo đã sẵn sàng.

Bài viết này đưa ra hướng dẫn chi tiết và cụ thể về cách sử dụng Packer và Terraform để tạo và tùy chỉnh máy ảo trên nền tảng vSphere, mở ra khả năng tự động hóa quản lý cơ sở hạ tầng cho các ứng dụng và dự án của bạn.

Tham khảo nguồn https://blog.thinkbox.dev/posts/0015-iac-vsphere-webserver-example/.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories