็†ฑ้–€ๅˆ†้กž
 ่ผ‰ๅ…ฅไธญ…
็›ฎ้Œ„

๐Ÿ› ️ Proxmox VE ่‡ชๅ‹•ๅŒ–:CLI + API + Ansible ๅฎŒๆ•ดๆŒ‡ๅ—(้€ฒ้šŽ็ฏ‡)

    ๐Ÿ› ️ Proxmox VE ่‡ชๅ‹•ๅŒ–:CLI + API + Ansible ๅฎŒๆ•ดๆŒ‡ๅ—(้€ฒ้šŽ็ฏ‡)

    Proxmox VE(PVE)ๆ˜ฏ็›ฎๅ‰ๆœ€ๆˆ็†Ÿ็š„้–‹ๆบ่™›ๆ“ฌๅŒ–ๅนณๅฐไน‹ไธ€,ๅ…งๅปบ KVM + LXC、ZFS、ๅข้›† HA、้ซ˜ๅฝˆๆ€ง API ่ˆ‡ๅฎŒๅ–„ CLI ๅทฅๅ…ท,ๅ› ๆญค้žๅธธ้ฉๅˆๅฐ‡ๆ—ฅๅธธ็ฎก็†ๆต็จ‹่‡ชๅ‹•ๅŒ–。ๆœฌ็ฏ‡ๅฐ‡ไปฅ้€ฒ้šŽๆŠ€่ก“่ง’ๅบฆ,ๆ•ดๅˆ:

    • ๐Ÿ”น PVE CLI ่‡ชๅ‹•ๅŒ–็ฎก็†
    • ๐Ÿ”น PVE REST API(Token ๆ–นๅผ็™ปๅ…ฅ)
    • ๐Ÿ”น Ansible ่‡ชๅ‹•ๅŒ–้ƒจ็ฝฒ PVE / VM / LXC
    • ๐Ÿ”น ๅฏฆ้š›่‡ชๅ‹•ๅŒ–ๆกˆไพ‹่ˆ‡่…ณๆœฌ็ฏ„ๆœฌ

    ่ฎ“ไฝ ๅพžๆ—ฅๅธธ็ฎก็†ๅˆฐๅคง่ฆๆจกไฝˆ็ฝฒ,้ƒฝ่ƒฝๆ›ดๅฟซ、ๆ›ดๆบ–็ขบ、ๆ›ดๆจ™ๆบ–ๅŒ–。


    ๐Ÿ“Œ ็ฌฌไธ€็ซ :Proxmox VE CLI ้€ฒ้šŽ่‡ชๅ‹•ๅŒ–

    PVE CLI(pvesh / qm / pct)ๆ˜ฏๆœ€ๅฟซ、ๆœ€็ฉฉๅฎš็š„่‡ชๅ‹•ๅŒ–ๅทฅๅ…ท,ไปฅไธ‹ๆ•ด็†ๆœ€ๅธธไฝฟ็”จ็š„ๅ‘ฝไปค่ˆ‡ๆกˆไพ‹。

    1.1 ๆชข่ฆ–่ˆ‡็ฎก็† VM

    # ๆŸฅ็œ‹ๆ‰€ๆœ‰ VM
    qm list
    
    # ๅ•Ÿๅ‹•่ˆ‡ๅœๆญข VM
    qm start 101
    qm shutdown 101
    
    # ๅปบ็ซ‹ VM(ๅฟซ้€Ÿ็ฏ„ๆœฌ)
    qm create 9000 --name ubuntu-tpl --memory 2048 --cores 2
    

    1.2 ๅŒฏๅ…ฅ OVF / VMDK

    # ๅŒฏๅ…ฅ OVF
    qm importovf 105 vm.ovf local-lvm
    
    # ๅŒฏๅ…ฅ VMDK(ๆœƒ่ฝ‰ๆˆ RAW ๆˆ– QCOW2)
    qm importdisk 105 disk.vmdk local-lvm
    qm set 105 --scsi0 local-lvm:105/vm-105-disk-0.raw
    

    1.3 LXC ๅฎนๅ™จ่‡ชๅ‹•ๅŒ–

    # ๅปบ็ซ‹ LXC
    pct create 300 local:vztmpl/ubuntu-22.04-standard.tar.gz \
      --hostname test-lxc --cores 2 --memory 2048
    
    # ๅ•Ÿๅ‹•
    pct start 300
    

    ๐Ÿ“Œ ็ฌฌไบŒ็ซ :Proxmox VE REST API(Token)

    PVE REST API ๅนพไนŽ่ฆ†่“‹ๆ‰€ๆœ‰ๅŠŸ่ƒฝ。ๆœฌ็ซ ็คบ็ฏ„ไปฅ Token ๆ–นๅผ็™ปๅ…ฅ(ๆ›ดๅฎ‰ๅ…จ、้ฉๅˆไฝœๆฅญ่‡ชๅ‹•ๅŒ–)。

    2.1 ๅปบ็ซ‹ API Token

    ไฝ็ฝฎ:Datacenter → Permissions → API Tokens → Add

    User: root@pam
    Token ID: ansible
    Privilege: Administrator(ๆˆ–ไพ้œ€ๆฑ‚)
    Expire:(ๅฏ้ธ)
    
    ๅฎŒๆˆๅพŒๆœƒๅ–ๅพ—: - Token ID - Secret(ๅชๆœƒ้กฏ็คบไธ€ๆฌก)

    2.2 ไฝฟ็”จ curl ๅ‘ผๅซ API

    API_URL="https://pve1:8006/api2/json"
    TOKEN="root@pam!ansible=yourtoken"
    SECRET="yoursecret"
    
    curl -k -H "Authorization: PVEAPIToken=$TOKEN=$SECRET" \
      "$API_URL/nodes/pve1/qemu"
    

    2.3 Python ๆ“ไฝœ API

    import requests
    
    url = "https://pve1:8006/api2/json/nodes/pve1/qemu"
    headers = {
        "Authorization": "PVEAPIToken=root@pam!ansible=YOURSECRET"
    }
    
    resp = requests.get(url, headers=headers, verify=False)
    print(resp.json())
    

    ๐Ÿ“Œ ็ฌฌไธ‰็ซ :ไฝฟ็”จ Ansible ่‡ชๅ‹•ๅŒ–็ฎก็† Proxmox

    Ansible ๆ˜ฏ็ฎก็† PVE ๅคง่ฆๆจก็’ฐๅขƒ็š„้ฆ–้ธ。ๆœฌ็ซ ๆไพ›ๅฎŒๆ•ด็›ฎ้Œ„็ตๆง‹、inventory、ไปฅๅŠ playbook ็ฏ„ไพ‹。

    3.1 Inventory ็ฏ„ไพ‹

    [pve]
    pve1 ansible_host=192.168.10.11
    pve2 ansible_host=192.168.10.12
    
    [pve:vars]
    ansible_user=root
    ansible_ssh_private_key_file=~/.ssh/id_rsa
    

    3.2 ไฝฟ็”จ Ansible ๅปบ็ซ‹ VM

    - name: Create VM
      hosts: pve
      tasks:
        - name: Create VM via API
          uri:
            url: "https://{{ inventory_hostname }}:8006/api2/json/nodes/{{ inventory_hostname }}/qemu"
            method: POST
            validate_certs: no
            headers:
              Authorization: "PVEAPIToken={{ pve_token }}"
            body_format: json
            body:
              vmid: 200
              name: ansible-vm
              memory: 2048
    

    3.3 ไฝฟ็”จ Ansible ๅปบ็ซ‹ LXC ๅฎนๅ™จ

    - name: Create LXC container
      hosts: pve
      tasks:
        - uri:
            url: "https://{{ inventory_hostname }}:8006/api2/json/nodes/{{ inventory_hostname }}/lxc"
            method: POST
            validate_certs: no
            headers:
              Authorization: "PVEAPIToken={{ pve_token }}"
            body_format: json
            body:
              vmid: 310
              hostname: web01
              ostemplate: "local:vztmpl/ubuntu-22.04.tar.gz"
              cores: 2
              memory: 2048
    

    ๐Ÿ“Œ ็ฌฌๅ››็ซ :ๅธธ่ฆ‹่‡ชๅ‹•ๅŒ–ๅ ดๆ™ฏ่ˆ‡ๆœ€ไฝณๅฏฆๅ‹™

    4.1 ๅปบ็ซ‹ๆจ™ๆบ–ๅŒ– VM ๆจกๆฟๅบซ

    • VM ๆจ™ๆบ–ๅŒ–:CPU/Memory/็ถฒๅกๆจกๅž‹/็ฃ็ขŸ้กžๅž‹
    • ๅฎ‰่ฃ cloud-init ๆ”ฏๆด
    • ๅปบ็ซ‹ golden image(Ubuntu / Rocky / Debian)

    4.2 ่‡ชๅ‹•ๅ‚™ไปฝ่ˆ‡่ผชๆ›ฟ

    # ๆฏๅคฉ 02:00 ๅ‚™ไปฝๆ‰€ๆœ‰ VM
    pvesh create /nodes/pve1/vzdump --all 1 --mode snapshot --compress zstd
    

    4.3 ็ฏ€้ปžๅฅๅบทๆชขๆŸฅ(ไปฅ่…ณๆœฌๆ›ฟไปฃ GUI)

    pvesh get /nodes/pve1/status
    pvesh get /cluster/resources
    

    ๐Ÿ“Œ ็ฌฌไบ”็ซ :ๅฎŒๆ•ด่‡ชๅ‹•ๅŒ–ๅฐˆๆกˆ็ฏ„ไพ‹

    ๐Ÿ“ ๅฐˆๆกˆ็ตๆง‹:

    proxmox-automation/
     ├── ansible/
     │   ├── inventory
     │   ├── pve-create-vm.yml
     │   ├── pve-create-lxc.yml
     │   └── pve-health-check.yml
     ├── scripts/
     │   ├── backup-all.sh
     │   ├── import-ovf.sh
     │   └── template-build.sh
     └── api/
         └── python-demo.py
    

    ้€™้กžๅฐˆๆกˆๅฏ็›ดๆŽฅไธŠ GitHub,่ฎ“ๅคšไบบๅ”ไฝœ PVE ็ฎก็†。


    ๐Ÿ“Œ ็ต่ชž

    Proxmox VE ๅทฒ็ถ“ไธๅชๆ˜ฏ่™›ๆ“ฌๅŒ–ๅนณๅฐ,ๆ›ดๆ˜ฏ่ƒฝ่ˆ‡ DevOps、CI/CD、้…็ฝฎ็ฎก็†็ณป็ตฑๆ•ดๅˆ็š„ๅฎŒๆ•ด็”Ÿๆ…‹。้€้Ž CLI、REST API ่ˆ‡ Ansible,ไฝ ๅฏไปฅๅฐ‡ๆ•ดๅ€‹็’ฐๅขƒ่‡ชๅ‹•ๅŒ–、ๆจ™ๆบ–ๅŒ–、ๆจก็ต„ๅŒ–,ๅคงๅน…้™ไฝŽไบบๅทฅๆ“ไฝœ้Œฏ่ชค,ไธฆๆๅ‡้ƒจ็ฝฒ้€Ÿๅบฆ。

    ๆœชไพ†ไนŸๆœƒๆŽจๅ‡บ「Proxmox VE ๅคง่ฆๆจกไฝˆ็ฝฒ่ˆ‡้ซ˜ๅฏ็”จๆžถๆง‹(Enterprise ็‰ˆ)」ไฝœ็‚บๆœฌ็ฏ‡็š„ๅปถไผธๅ…งๅฎน。


    ๐Ÿ”— ๅˆ†ไบซ้€™็ฏ‡ LINE Facebook X

    ๆฒ’ๆœ‰็•™่จ€:

    ๅผต่ฒผ็•™่จ€

    ๅญ—็ดš