Proxmox VE(PVE) 安裝相關紀錄

  • PVE 6
  • PVE 5
載入中 ...
  1. /etc/apt/sources.list
    deb http://ftp.tw.debian.org/debian buster main contrib
     
    deb http://ftp.tw.debian.org/debian buster-updates main contrib
     
    deb http://download.proxmox.com/debian/pve buster pve-no-subscription
     
    # security updates
    deb http://security.debian.org buster/updates main contrib
  2. /etc/apt/sources.list.d/pve-enterprise.list
    #deb https://enterprise.proxmox.com/debian/pve stretch pve-enterprise

  • apt update
    apt upgrade

  • 假設預計 Relay 的 SMTP Server - smtp.gmail.com:587 (STARTTLS) 認證帳號:username 密碼:password
  1. 安裝相關套件

    apt install libsasl2-modules -y

  2. 編輯 /etc/postfix/main.cf
    :
    # GMail Setting
    relayhost = [smtp.gmail.com]:587
    #  use tls
    smtp_use_tls=yes
    # use sasl when authenticating to foreign SMTP servers
    smtp_sasl_auth_enable = yes
    # path to password map file
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    # list of CAs to trust when verifying server certificate
    smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
    # eliminates default security options which are imcompatible with gmail
    smtp_sasl_security_options = noanonymous
    smtp_always_send_ehlo = yes
  3. 編輯 /etc/postfix/sasl_passwd
    [smtp.gmail.com]:587  username:password
  4. 更改檔案權限

    postmap /etc/postfix/sasl_passwd
    cd /etc/postfix
    chown postfix /etc/postfix/sasl_passwd*

  5. 讓 postfix 新設定生效

    /etc/init.d/postfix reload

    • 設定相同 IP 或 hostname 加入 Cluster 後, 因為之前的 ssh fingerprint / authorized_keys 在各節點都還有殘存, 所以需要在新增的節點上執行以下命令

      pvecm updatecerts

透過 Web 介面直接加入會比較簡單, 以下是針對無法呈現 Web 時透過命令列方式處理的程序

  • Exp. pve02 加入 cluster, 這 cluster 其中一個 node 是 192.168.11.250
  • 進入 pve02 主機內, 執行以下指令

    pvecm add 192.168.11.250

  • 會出現需要輸入 192.168.11.250 內的 root 密碼
  • 如果沒有異常訊息就完成加入 cluster
  • 無法加入通常會顯示出原因, Exp.

    • corosync 服務是啟動狀態
    • 認證 key 已經存在… 等等
  • 因為預設 cluster 的 quorum 要兩個才能運作, 所以如果兩台的 cluster 壞了一台, 一段時間後就會出現這樣的問題, 如果想讓還正常的主機啟動 vm / ct , 可以將 quorum 的限制改成 1 , 然後重起 clusrter 服務即可, 手動解決方式如下:

    pvecm expected 1
    service pve-cluster restart

  1. Web UI 更改 IP : System→Network→ 選定介面卡 → Edit
  2. 更改 /etc/hosts 內的 IP
  3. 關閉 cluster 服務

    service pve-cluster stop

  4. 修改 /etc/pve/corosync.conf 內 node ip 與 totem 內的 ip
  5. 重新開機
  • 當 PVE 系統安裝在 USB or HD 上時, 預設會將 Swap Memory 指定在其中的一個 Partition 上, 導致使用到 Swap Memory 效能會變很差
  • 先查看目前系統記憶體使用狀況

    free -m
    swapon -s

  • 假設 SSD 所在 /dev/sdc , 透過 fdisk 建立 16GB 的 Swap Memory Partition

    fdisk /dev/sdc

    1. 建立 16GB Partition

      Command (m for help): n
      Partition number (1-128, default 1): 1
      First sector (34-937703054, default 2048):
      Last sector, +sectors or +size{K,M,G,T,P} (2048-937703054, default 937703054): +16G

    2. 更改 type 為 Linux Swap

      Command (m for help): t
      Selected partition 1
      Hex code (type L to list all codes): 19
      Changed type of partition 'Linux swap' to 'Linux swap'.

    3. 檢視與寫入

      Command (m for help): p
      :
      /dev/sdc1   2048 33556479 33554432  16G Linux swap
      :
      Command (m for help): w
      :
      Syncing disks.

    4. 使用 mkswap 讓系統知道 /dev/sdc1 是 Swap Memory Partition

      mkswap /dev/sdc1

    5. 讓 /dev/sdc1 的 Swap Memory 立即生效

      swapon /dev/sdc1

    6. 使用 swapon -s 列出目前的 Swap Memory

      :
      /dev/zd0                                partition       8388604 434944  -2
      /dev/sdc1                               partition       16777212        0       -3

    7. 確認 /dev/sdc1 的 id

      blkid | grep swap
      /dev/sdc1: UUID="068ba285-5bb9-4b2f-b2e1-4dc599bd22e1" TYPE="swap" PARTUUID="1d334105-c76e-4ab2-baec-2b35fde71a02"
      /dev/zd0: UUID="a06df01d-bf15-4816-bc3e-f1d3c623ff20" TYPE="swap"

    8. 關閉原本 /dev/zd0 的 swap memory 設定, 修改
      /etc/fstab
      :
      #/dev/zvol/rpool/swap none swap sw 0 0
      UUID=068ba285-5bb9-4b2f-b2e1-4dc599bd22e1       none swap sw  0 0
      :
    9. 重新啟動 pve node

      sync;sync;sync;reboot

  • 假設 SSD 所在的 zfs pool 為 rpool
  1. 關閉所有swap:

    swapoff -a

  2. 建立 16GB ZFS swap:

    zfs create -V 16G -b $(getconf PAGESIZE) -o compression=zle \
          -o logbias=throughput -o sync=always \
          -o primarycache=metadata -o secondarycache=none \
          -o com.sun:auto-snapshot=false rpool/swap

  3. 格式化swap分區:

    mkswap -f /dev/zvol/rpool/swap

  4. 增加新的swap到 /etc/fstab :

    echo /dev/zvol/rpool/swap none swap defaults 0 0 >> /etc/fstab

  5. 啟用所有swap:

    swapon -av

  6. 調整Swap優先權:

    echo "vm.swappiness = 10" >> /etc/sysctl.conf
    sysctl -p

  • 移除 lvm 的方式 Exp. 以下所建立的 vg-ssd
    • pvcreate /dev/sdb1
    • vgcreate vg-ssd /dev/sdb1
    • vgdisplay vg-ssd

      vgremove vg-ssd
      pvremote /dev/sdb1

    1. 先確認實體硬碟的廠牌、型號與序號

      ls -l /dev/disk/by-id/ | grep ata-*

    2. 確認要加入的實體硬碟連結 Exp. ata-TOSHIBA_DT01ACA300_Z3MH9S1GS
    3. 加入 VM Exp. VM 編號 106

      qm set 106 -virtio2 /dev/disk/by-id/ata-TOSHIBA_DT01ACA300_Z3MH9S1GS

    4. 檢查是否 VM 106 的設定檔有出現實體硬碟設定

      cat /etc/pve/qemu-server/106.conf
      :
      virtio2: /dev/disk/by-id/ata-TOSHIBA_DT01ACA300_Z3MH9S1GS,size=2930266584K

    5. 關閉 VM , 再透過 PVE Web 介面重新啟動
  • 主要問題是在 pve 建立一個新的 VM 時, 預設並不會加入 serial 虛擬裝置, 造成原本的 CentOS6 VM Image 在開機過程中一直出現 press any key to continue 嘗試到最後才會跳過進入登入畫面
  • 解決方式 - messageimage_1532527631952.jpg
  • 主要問題是 vm 目前的主機端認為遷移目標主機有問題, 所以出現這樣的訊息..
  • 解決方式 - 連入遷移主機可以看到目標主機是離線狀態(實際上並沒有離線), 所以要重新啟動 pve-cluster corosync 服務

    systemctl restart pve-cluster corosync

  • 主要問題是 vm/ct 的硬碟檔名已出現在遷移目標的主機內, 所以出現這樣的訊息.. 可能之前遷移過程失敗沒有正確移除, 或是之前所建立的 vm/ct 移除時的硬碟沒有移除所造成硬碟檔名重複
  • 解決方式 - 連入遷移主機將檔案移除即可, 如果是 zfs 可以使用 zfs destroy 方式移除, Exp. local-zfs/subvol-109-disk-1 是出現重複的硬碟

    [email protected]:~# zfs list
    NAME                          USED  AVAIL     REFER  MOUNTPOINT
    local-zfs                    9.60G   889G      128K  /local-zfs
    local-zfs/subvol-103-disk-0   522M  7.49G      522M  /local-zfs/subvol-103-disk-0
    :
    local-zfs/subvol-109-disk-1  2.99G  5.01G     2.99G  /local-zfs/subvol-109-disk-1
    :
    local-zfs/subvol-131-disk-0  2.31G  13.7G     2.31G  /local-zfs/subvol-131-disk-0
    rpool                        1.32G   227G      104K  /rpool
    rpool/ROOT                   1.32G   227G       96K  /rpool/ROOT
    rpool/ROOT/pve-1             1.32G   227G     1.32G  /
    rpool/data                     96K   227G       96K  /rpool/data
    [email protected]:~# zfs destroy -r local-zfs/subvol-109-disk-1

  • 主要是 ssh 遠端免密碼登入認證檔出現異常問題.
  • 解決方式 - 依據錯誤訊息提示的命令語法重新執行一次 Exp. migration 出現的錯誤訊息
    2018-08-30 12:34:47 # /usr/bin/ssh -e none -o 'BatchMode=yes' -o 'HostKeyAlias=pve-45' [email protected] /bin/true
    2018-08-30 12:34:47 Host key verification failed.
    2018-08-30 12:34:47 ERROR: migration aborted (duration 00:00:00): Can't connect to destination address using public key
    TASK ERROR: migration aborted

    登入 PVE 主機執行以下語法

    [email protected]:/etc/pve/priv# /usr/bin/ssh -e none -o 'HostKeyAlias=pve-45' [email protected] /bin/true
    The authenticity of host 'pve-45 (192.168.1.45)' can't be established.
    ECDSA key fingerprint is SHA256:NtU1vxeu32E9nXdhI8rjjRIxxAisGZRo/pmpW630XGk.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'pve-45' (ECDSA) to the list of known hosts.
  • 如果是因為之前有移除與新增設定相同 IP 或 hostname 的節點, 因為之前的 ssh fingerprint / authorized_keys 在各節點都還有殘存, 所以需要在新增的節點上執行以下命令

    pvecm updatecerts

PVE 6.2 之後就完整支援 VM local Disk online migration 功能
已不須特別使用以下語法處理
  • PVE Cluster 內的 node 有相同名稱的 Local Storage Exp. ssd-zfs
  • VM 不能設定 Replication 設定
  • 在 VM 所在的節點 shell 下以下的命令
    qm migration <vmid> <目標節點名稱> --with-local-disks --online

    Exp. VM 原本在節點 TP-PVE-250 , vmid: 104 , 目標節點名稱: TP-PVE-249 , 在 TP-PVE-250 節點 shell 下以下命令

    [email protected]:~# qm migrate 104 TP-PVE-249 --with-local-disks --online
  • 會出現先將 VM Disk 複製過去目標節點, 之後會將記憶體資料同步過去目標節點, 才完成切換, 所以 VM Disk 如果愈大, 遷移時間就會愈久
  • 因為 migration 過程可能會需要使用大量頻寬, 所以指定走另外一個網卡介面應該會比較合適
  • Exp. 第二張網卡網路的 Subnet 是 192.168.100.0/24 , 所以直接修改

    vi /etc/pve/datacenter.cfg

    :
    migration: secure,network=192.168.100.0/24
  • 先確認已經有 iSCSI 的分享來源 Exp. FreeNAS IP: 192.168.11.246
  • 登入 PVE Node 掛載 iSCSI Volume
    1. 先確認 iSCSI 分享的 target

      iscsiadm -m discovery -t sendtargets -p 192.168.11.246
      
      192.168.11.246:3260,-1 iqn.2005-10.org.freenas.ctl:freenas

    2. 登錄 iSCSI target

      iscsiadm -m node -T iqn.2005-10.org.freenas.ctl:freenas -p 192.168.11.246 -l
      
      Logging in to [iface: default, target: iqn.2005-10.org.freenas.ctl:freenas, portal: 192.168.11.246,3260] (multiple)
      Login to [iface: default, target: iqn.2005-10.org.freenas.ctl:freenas, portal: 192.168.11.246,3260] successful.

    3. 設定開機可以自動登錄 iSCSI

      iscsiadm -m node -p 192.168.11.246 -o update -n node.startup -v automatic

    4. 如果有其他 PVE Node 每一台都執行以上兩個步驟
  • 將 iSCSI 的 Volume 建立成為 LVM partition
    1. 執行後可以使用 fdisk -l 看到 PVE Node 多出來一個 Disk Exp. /dev/sdg
      fdisk -l
      :
      Disk /dev/sdg: 500 GiB, 536870912000 bytes, 1048576000 sectors
      Units: sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 131072 bytes
      I/O size (minimum/optimal): 131072 bytes / 1048576 bytes
    2. 使用 fdisk /dev/sdg 建立 LVM partition

      fdisk /dev/sdg

      1. Command (m for help): g (建立GPT Partition Table)
      2. Command (m for help): n (建立新的 Partition )
      3. Command (m for help): t (更改 Type 為 31 Linux LVM)
      4. Command (m for help): p (列出新建立的 Partition 是否正確)
      5. Command (m for help): w (沒問題就 w 寫入)
    3. 使用 pvcreate 建立 LVM 的 Physical Volume(PV)

      pvcreate /dev/sdg1

    4. 使用 vgcreate 建立 LVM 的 Volume Group (VG)

      vgcreate vg-pve /dev/sdg1

    5. 在 PVE Web UI → Datacenter → Storage → Add → LVM
    6. 在彈出的 Add:LVM 視窗內
      1. 填入 ID Exp. freenas-lvm
      2. 選擇剛剛建立的 vg-pve
      3. 將 Shared 打勾
      4. 點下 Add
    7. Datacenter → Storage 內就可以看到增加 freenas-lvm 的項目
  1. 這問題主要是預設建立 CT 會是 UnPrivilegied 模式, 所以建立時必須要將 UnPrivilegied 打勾拿掉
  2. 建立之後還要將 Features 的 CIFS 打勾
  3. 這樣就可以將 cifs 掛載上去 Exp.

    cat /etc/fstab
    # UNCONFIGURED FSTAB FOR BASE SYSTEM
    //10.20.0.131/data/template/iso/ /omv-iso cifs username=isouser,password=xxxx,rw,users,dir_mode=0777,file_mode=0777 0 0

  • 正常只要透過 UI 的 Tasks→點開正在 Backup 的項目→Stop 即可中斷
  • 但有時無法順利中斷, 或是中斷後對 VM 進行操作時出現 TASK ERROR: VM is locked (backup) 的錯訊息
  • 可以在PVE主機端透過以下語法進行: Exp. VM id = 111

    vzdump -stop
    ps -ef | grep vzdump
    qm unlock 111

  • 參考網址 :
  • 設定每天自動備份, 結果某一天突然看到備份失敗, 紀錄出現類似以下的訊息
    :
    ERROR: Backup of VM 115 failed - CT is locked (snapshot-delete)
    :
  • 查看原因是前一天自動備份時出現異常, 導致目前這個 CT 155 是在 lock 狀態, 查看 Snapshots 也有一個 backup 的 snapshot, 無法手動刪除, 原因也是 snapshot-delete
  • 可以在 PVE 主機端透過以下語法解開 lock 狀態: Exp. CT id=115

    pct unlock 115

  • 完成後就可以刪除 CT 115 的 snapshot 以及進行 backup
  • 如果 unlock 之後, 還是因為 snapshot 持續造成異常 lock 且 snapshot-delete 也無法刪除
  • 可以手動修改 /etc/pve/qemu-server/ or /etc/pve/lxc 內的 <vm_id>.conf 內, 移除 [snapshot] 段落
  • 然後需要關閉 vm , 在透過 pve 啟動 vm 就可解決這問題
  • 設定 PVE Cluster 內使用 zfs 的 VM or CT 進行檔案定期(預設每 15 分鐘)複製至另外一台主機
  • 當出現其中一個 replication 程序無法完成, 其餘程序就會全部無法進行 Exp. 100 出現
    2019-11-24 01:30:00 100-0: start replication job
    2019-11-24 01:30:00 100-0: guest => CT 100, running => 1
    2019-11-24 01:30:00 100-0: volumes => local-zfs:subvol-100-disk-0
    2019-11-24 01:30:01 100-0: freeze guest filesystem

    之後的所有 Replication 程序就會因為這個程序卡住無法完成 參考PVE畫面

  • 解決方式
    1. 將備份時間錯開, Exp 原本設定 1:30 備份要改成 1:25 參考PVE畫面
    2. 中斷正在 freeze 的程序

      ps -ef | grep free
      kill <程序ID>
      
      [email protected]:~# ps -ef | grep free
      root     13352 11857  0 20:06 pts/8    00:00:00 grep free
      root     18221 18180  0 01:30 ?        00:00:07 /usr/bin/lxc-freeze -n 100
      root     20692     2  0 19:55 ?        00:00:00 [kworker/u16:3-events_freezable_power_]
      [email protected]:~# kill 18180 18221
      [email protected]:~# ps -ef | grep free
      root     15153 11857  0 20:07 pts/8    00:00:00 grep free
      root     20692     2  0 19:55 ?        00:00:00 [kworker/u16:3-events_freezable_power_]

    3. 可以看到下一個 Replication 程序就開始進行, 最後也會執行原本卡住的程序
  • 安裝與設定程序
    • 建立 ZFS 預計提供給 iSCSI target 的儲存空間
      • 透透過 PVE 1)建立 ZFS pool 或使用安裝時建立的 ZFS rpool
      • ZFS 參考語法:
        • zpool list : 查看有哪些 ZFS pool
        • zfs list : 查看有哪些 ZFS dataset
        • zfs destroy : 將不要的 ZFS dataset 刪除掉 Exp.

          zfs destroy -r rpool/data/subvol-105-disk-1

        • zfs create : 建立一個新的 ZFS dataset Exp. 建立 400G 命名 v400 的 dataset 執行語法:

          zfs create -V 400g rpool/v400

    • 安裝 iSCSI Target 服務

      apt-get install tgt

    • 設定 iSCSI Target Exp.
      • 儲存路徑 : 上面 zfs create 建立的 rpool/v400 對應路徑 - /dev/zvol/rpool/v400
      • 命名 iqn.2018-09.everplast.net:v400
      • 允許 iSCSI initiator(Client) 的 IP 範圍 : 10.168.0.0/24
      • 不特別設定密碼與加密
      • 編輯設定檔語法
        /etc/tgt/conf.d/ever_iscsi.conf
        <target iqn.2018-09.everplast.net:v400>
        # Provided device as an iSCSI target
        backing-store /dev/zvol/rpool/v400
        initiator-address 10.168.0.0/24
        #incominguser tecmint-iscsi-user password
        #outgoinguser debian-iscsi-target secretpass
        </target>
    • 啟動與設定 iSCSI Target 服務開機自動啟動

      service tgt start
      systemctl enable tgt

  • 參考網址 :
  • pve 5.2-8 之後開始可以由 WebUI 建立 ZFS
  • 測試透過外接 USB 兩顆 1TB 硬碟建立 Mirror ZFS 的 Storage
    1. 需要將兩棵 USB 現有的 Partation 刪除才會出現在 Create ZFS 的未使用清單內
    2. RAID Level 選 Mirror
    3. 完成建立後透過選這新增 usb-zfs 的 detail 可以看到狀態
    4. 之後就可以在 Datacenter 建立 usb-zfs 的 Storage 提供放置 VM Image
  • 測試將一顆 USB 硬碟拔掉, 跑在上面的 VM 確實不會受到影響
  • 將 USB 硬碟接回, 處理復原程序(必須在主機端下命令處理):
    • 透過 zpool status -x 了解目前的狀況
    • 透過 zpool replace 無法將接回的硬碟加回
    • 透過 zpool detach 將硬碟移出
    • 透過 zpool attach 將硬碟加回
    • 透過 WebUI 也可以了解目前的狀況
  • 安裝程序 :
    • CentOS VM

      yum install qemu-guest-agent

    • Debian VM

      apt install qemu-guest-agent

  • PVE 端設定 VM → Option → Qemu Agent → [v]Enabled
  • 要透過 PVE 重起 VM 才會生效
  • VM → Summary → IPs 可以看到 VM 內分配的 IP
  • Datacenter → ACME 內
    • 建立 Account : default 內容類似如下:

      之前測試建立 default 之外都無法成功
    • 建立 Challenge Plugins : Exp. ichiayi_com 這 Domain 因為是在 Cloudflare 代管, 所以可以透過 DNS 方式進行驗證 , 內容類似如下:
  • DNS 內建立每個 Node 的 domain name Exp. aac.ichiayi.com → 192.168.11.249
  • 每個 Node 的 System → Certificates 內
    • ACME 新增該 node 的 domain name 內容類似如下:
    • 新增完成後就點下 Order Certificate Now 就會自動進行申請 SSL 憑證與佈署到 PVE 的自動程序, 如果都沒問題就可完成
    • 接著在瀏覽器網只用 domain name 就不會出現憑證警告訊息
2021/08/16 14:58 Jonathan Tsai
2021/07/31 18:55 Jonathan Tsai
2021/07/31 18:37 Jonathan Tsai
2021/03/09 22:23 Jonathan Tsai
2021/01/16 23:52 Jonathan Tsai
2020/07/29 10:21 Jonathan Tsai
2020/07/21 11:22 Jonathan Tsai
2020/07/18 16:35 Jonathan Tsai
2020/07/15 17:11 Jonathan Tsai
2020/07/10 15:12 Jonathan Tsai
2020/07/03 17:19 Jonathan Tsai
2020/05/13 13:13 Jonathan Tsai
2019/11/03 12:31 Jonathan Tsai
2018/07/25 11:36 Jonathan Tsai
2018/06/22 21:28 Jonathan Tsai

1)
PVE 5.2-8 開始可以透過 UI 建立
  • tech/pvetips.txt
  • 上一次變更: 2021/07/01 08:00
  • jonathan