====== vSAN Lab HW & SW ====== ===== Neuzugang ESXi ARM Fling ===== Endlich ist mein Raspi 4 mit 8GB RAM und einem 4" Display fertig und bootet mit dem ESXi für ARM Fling. Zwei schnelle Samsung USB Sticks (128GB & 256GB) dienen als SSD Ersatz. Dank Advanced Parameter kann man diese auch für vSAN verwenden. Somit habe ich jetzt eine Witness für den NUC Cluster :-) {{ :vmware:vsan:esxi-arm-witness.jpg?400 |}} /etc/init.d/usbarbitrator stop chkconfig usbarbitrator off esxcli system settings advanced set -o /VSAN/AllowUsbDisks -i 1 esxcli system settings advanced set -o /Disk/AllowUsbClaimedAsSSD -i 1 [root@witness-arm:~] vdq -q [ { "Name" : "mpx.vmhba33:C0:T0:L0", "VSANUUID" : "", "State" : "Eligible for use by VSAN", "Reason" : "USB disk", "IsSSD" : "0", "IsCapacityFlash": "0", "IsPDL" : "0", "Size(MB)" : "122376", "FormatType" : "512n", }, { "Name" : "mpx.vmhba32:C0:T0:L0", "VSANUUID" : "", "State" : "Ineligible for use by VSAN", "Reason" : "Has partitions", "IsSSD" : "0", "IsCapacityFlash": "0", "IsPDL" : "0", "Size(MB)" : "15296", "FormatType" : "512n", }, { "Name" : "mpx.vmhba34:C0:T0:L0", "VSANUUID" : "", "State" : "Eligible for use by VSAN", "Reason" : "USB disk", "IsSSD" : "0", "IsCapacityFlash": "0", "IsPDL" : "0", "Size(MB)" : "244752", "FormatType" : "512n", }, ] [root@witness-arm:~] esxcli storage nmp satp rule list --satp=VMW_SATP_LOCAL Name Device Vendor Model Driver Transport Options Rule Group Claim Options Default PSP PSP Options Description -------------- -------------------- ------ ----- ------ --------- ---------- ---------- ------------- ----------- ----------- ----------- VMW_SATP_LOCAL usb system USB Devices VMW_SATP_LOCAL ide system IDE Devices VMW_SATP_LOCAL block system RAID Block Devices VMW_SATP_LOCAL parallel system Parallel SCSI Devices VMW_SATP_LOCAL sas system Serial Attached SCSI Devices VMW_SATP_LOCAL sata system Serial ATA Devices VMW_SATP_LOCAL pcie system PCIe Devices VMW_SATP_LOCAL unknown system Unknown Devices VMW_SATP_LOCAL mpx.vmhba33:C0:T0:L0 enable_ssd user VMW_SATP_LOCAL mpx.vmhba34:C0:T0:L0 enable_ssd user [root@witness-arm:~] vdq -q [ { "Name" : "mpx.vmhba33:C0:T0:L0", "VSANUUID" : "", "State" : "Eligible for use by VSAN", "Reason" : "USB disk", "IsSSD" : "1", "IsCapacityFlash": "0", "IsPDL" : "0", "Size(MB)" : "122376", "FormatType" : "512n", }, { "Name" : "mpx.vmhba32:C0:T0:L0", "VSANUUID" : "", "State" : "Ineligible for use by VSAN", "Reason" : "Has partitions", "IsSSD" : "0", "IsCapacityFlash": "0", "IsPDL" : "0", "Size(MB)" : "15296", "FormatType" : "512n", }, { "Name" : "mpx.vmhba34:C0:T0:L0", "VSANUUID" : "", "State" : "Eligible for use by VSAN", "Reason" : "USB disk", "IsSSD" : "1", "IsCapacityFlash": "0", "IsPDL" : "0", "Size(MB)" : "244752", "FormatType" : "512n", }, ] ==== PowerShell zur Vorbereitung von ESXi Lab ==== Einige Einstellungen zur Vorbereitung des Labs Connect-VIServer esx-arm-2.schubi.local Set-VMHostAdvancedConfiguration -Name "VSAN.AllowUsbDisks" -Value "1" Set-VMHostAdvancedConfiguration -Name "Disk.AllowUsbClaimedAsSSD" -Value "1" Set-VMHostAdvancedConfiguration -Name "VSAN.SwapThickProvisionDisabled" -Value "1" ===== NUC Lab ===== {{:vmware:vsan:img_0459.jpg?nolink&400 |}} Beispiel vom Lab mit ein paar 3D-Drucker Komponenten tragbar gemacht... Es sind 4 NUCs, kombiniert mit einem 10 Port Switch. Wer viel Geld übrig hat, nimmt einen 10GB Switch. Bei mir hat es nur für 1GB gereicht... Um in der gesamten Infrastruktur DNS, DHCP u.s.w. zu haben, wird ein RaspberryPi mit Raspian https://www.raspberrypi.org/downloads/raspbian/ eingesetzt. Der ist gleichzeitig WLAN Accesspoint, damit man einfach auf die Hosts etc. kommt. Gleichzeitig ist der RasPi auch WLAN Client, damit man einfach Pakete aus dem Internet laden kann. Der RasPi dient gleichzeitig als PowerShell/PowerCLI Host. Damit erreiche ich auch, dass vCenter und andere Appliances automatisch durch den RasPi gestartet werden. PowerShell ist mir sympatischer als Perl :-) Folgende HW habe ich genutzt: ^**Anz**^**Bezeichnung**^**Bemerkung**^ |**4**|Intel NUC8i7HNK| | |**2**|Samsung 32 GB 260 pin DDR4-2666, SO-DIMM 4er Pack | Bzw. 8 Einzelmodule| |**4**|Samsung SSD 970 EVO Plus Series NVMe 1 TB V-NAND MLC - M.2 2280| | | | |**4**|Samsung SSD 970 EVO Plus Series NVMe 1 TB M.2|kleinere reicht auch. z.B. //Gigabyte NVMe SSD 128 GB NVMe 1.3 M.2 2280// für 30€ | | | | |**8**|SanDisk 32GB Ulta Fit USB 3.1 schwarz|4 für ESXi Boot, 4 für lokal VMFS (Log Store….)| |**1**|0,5m CAT.7 Gigabit Patchkabel| 10er Pack| |**1**|Cisco SG350-10 10-Port Gigabit Managed Switch| | | | |**1**|RaspberryPi| | |**1**|EDIMAX EW-7811UN Wireless USB Adapter, 150 Mbit/s, IEEE802.11b/g/n| Wenn RasPi WLAN Access und Client in einem sein soll| |**1**|Raspi Netzteil| | |**1**|RPI DS1307 RTC| z.B. AMAZON "MakerHawk RPI DS1307 RTC Modul Himbeer pi Echtzeituhrmodul mit Münzbatterie"| Gehäuseteile als STL und OpenSCAD: {{ :vmware:vsan:vsan_stls.zip |}} ===== Raspi als WLAN Access Point und DHCP/DNS Server ===== Für einen "Spiel Cluster" wird ein DNS/DHCP Server gebraucht. Dieser sollte neben Ethernet auch gleichzeitig ein WLAN Access Point und ein WLAN Client sein. Hier eine Config von mir. eth0 und wlan0 sind die DNS/DHCP Netze. wlan0 ist Accesspoint. wlan1 (Edimax mini) ist WLAN Client. Hostname und ssh Key ändern raspi-config reboot #/etc/hosts 127.0.0.1 localhost 192.168.10.1 rasp-dns.schubi.local rasp-dns # rm /etc/ssh/ssh_host_* dpkg-reconfigure openssh-server service ssh restart #/etc/ssh/sshd_config PermitRootLogin yes PasswordAuthentication yes # touch /boot/ssh Wir brauchen einige Pakete.... apt-get update apt-get upgrade apt-get install hostapd apt-get install dnsmasq apt-get install bridge-utils apt-get install iptables-persistent DNS in der ///etc/hosts// klar machen... 127.0.0.1 localhost 192.168.10.1 rasp-dns.schubi.local rasp-dns 192.168.10.10 vcsa.schubi.local vcsa 192.168.10.11 esx-1.schubi.local esx-1 192.168.10.12 esx-2.schubi.local esx-2 192.168.10.13 esx-3.schubi.local esx-3 192.168.10.14 esx-4.schubi.local esx-4 In der ///etc/dhcpcd.conf// den DHCP Server konfigurieren. Domain Server ist der Raspi selber, alles andere regelt Google... static routers=192.168.10.1 static domain_name_servers=192.168.10.1 8.8.8.8 In der ///etc/resolvconf.conf// den DNSMasq DNS Server konfigurieren. name-servers="127.0.0.1" In der ///var/run/dnsmasq/resolv.conf// den DNSMasq DNS Server konfigurieren. nameserver 192.168.10.1 In der ///etc/dnsmasq.conf// wird die Domain festgelegt. Zwischen wlan0 und eth0 wird eine Bridge gebaut. Die Bridge ist das Device für DHCP. Damit bekommt man eine DHCP Adresse, egal ob über WLAN Accesspoint oder Ethernet... expand-hosts domain=schubi.local interface=br0 listen-address=127.0.0.1 listen-address=192.168.10.1 bind-interfaces server=192.168.10.1 dhcp-range=192.168.10.50,192.168.10.128,255.255.255.0,24h In der ///etc/hostapd/hostapd.conf// wird wlan0 als Accesspoint konfiguriert interface=wlan0 bridge=br0 hw_mode=g channel=7 wmm_enabled=1 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP ssid=vSAN_Schubi wpa_passphrase=VMware1! Falls hostapd.service nicht startet (//hostapd.service is masked//) systemctl unmask hostapd systemctl enable hostapd systemctl start hostapd In der bash Shell wird die Bridge gebaut brctl addbr br0 brctl addif br0 eth0 brctl show In der ///etc/network/interfaces// konfigurieren wir eth0 und br0 und definieren dauerhaft die Bridge Ports. wlan1 wird WLan Client (in meinem Fall tether ich über das Telefon) source-directory /etc/network/interfaces.d auto eth0 allow-hotplug eth0 iface eth0 inet dhcp auto br0 iface br0 inet static address 192.168.10.1 netmask 255.255.255.0 network 192.168.10.0 dns-nameserver 192.168.10.1 dns-search schubi.local bridge_ports eth0 wlan0 auto wlan1 allow-hotplug wlan1 iface wlan1 inet dhcp wpa-ssid "iPhone von Schubi" wpa-psk "XXXXXXX" wireless-power off ###check mit iw wlan1 get power_save post-up iw dev wlan0 set power_save off post-up iw dev wlan1 set power_save off In der Bash wird nun noch das IP Masquerading auf wlan1 konfiguriert. Durch das //iptables-persistent// Paket wird dies sofort persistent. sysctl -w net.ipv4.ip_forward=1 sysctl -w net.ipv4.conf.all.rp_filter=0 sysctl -p iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE iptables -t nat -L -v -n iptables-save > /etc/iptables/rules.v4 Zeit für einen Reboot... hilfreiche Links: * https://www.elektronik-kompendium.de/sites/raspberry-pi/2002161.htm * https://pimylifeup.com/raspberry-pi-wifi-bridge/ * https://thepi.io/how-to-use-your-raspberry-pi-as-a-wireless-access-point/ * https://www.randombrick.de/raspberry-pi-als-wlan-access-point-nutzen/ ===== PowerShell/PowerCLI auf dem Raspi ===== apt-get install libunwind8 wget https://github.com/PowerShell/PowerShell/releases/download/v6.2.3/powershell-6.2.3-linux-arm32.tar.gz mkdir ~/powershell tar -xvf ./powershell-6.2.3-linux-arm32.tar.gz -C ~/powershell #Start der Shell mit ~/powershell/pwsh #...oder Alias alias powershell='~/powershell/pwsh' $PSVersionTable Install-Module -Name VMware.PowerCLI -Scope CurrentUser Set-PowerCLIConfiguration -InvalidCertificateAction:Ignore Get-PowerCLIVersion Get-PowerCLIConfiguration Die Powershell loggt wie Blöde in /var/log/messages. Dazu gibt es zwei Workarounds. Dokumentiert unter https://github.com/PowerShell/PowerShell/issues/6324 ''Added a cron job to find/delete those files and added the following file (/etc/rsyslog.d/40-powershell.conf) to stop logging which seems to work okay. :syslogtag, contains, "powershell[" stop'' bzw. ''Lowering the log level from Powershell by doing the following fixes the verbose logging: Find out where $PSHOME is. My $PSHOME pointed to /opt/microsoft/powershell/6/. Take note that $PSHOME is a variable in PWSH, not in any other shell. Create a file in $PSHOME named powershell.config.json. Add the following JSON to the file: { "LogLevel": "error" } Other log levels are found here: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_logging_non-windows?view=powershell-6#configuring-logging-on-non-windows-system'' ===== Raspi mit VLANs ===== apt-get install vlan In der ///etc/modules// 8021q In der ///etc/network/interfaces// die virtuellen VLAN Nics configurieren #Vlan3 vMotion auto eth0.3 iface eth0.3 inet static address 192.168.3.1 netmask 255.255.255.0 network 192.168.3.0 vlan_raw_device eth0 dns-nameserver 192.168.10.1 dns-search schubi.local #Vlan10 CLASS B auto eth0.10 iface eth0.10 inet static address 172.16.0.1 netmask 255.255.0.0 network 172.16.0.0 vlan_raw_device eth0 dns-nameserver 192.168.10.1 dns-search schubi.local #Vlan100 CLASS A auto eth0.100 iface eth0.100 inet static address 10.0.0.1 netmask 255.0.0.0 network 10.0.0.0 vlan_raw_device eth0 dns-nameserver 192.168.10.1 dns-search schubi.local In der /etc/dnsmasq.conf interface=eth0.3 listen-address=127.0.0.1 listen-address=192.168.3.1 bind-interfaces server=192.168.10.1 dhcp-range=192.168.3.10,192.168.3.250,24h interface=eth0.10 listen-address=127.0.0.1 listen-address=172.16.0.1 bind-interfaces server=192.168.10.1 dhcp-range=172.16.0.10,172.16.255.250,24h interface=eth0.100 listen-address=127.0.0.1 listen-address=10.0.0.1 bind-interfaces server=192.168.10.1 dhcp-range=10.0.0.10,10.255.0.250,24h ===== Guarcamole ===== apt-get install libcairo2-dev apt-get install libjpeg62-turbo-dev apt-get install libpng12-dev apt-get install libossp-uuid-dev #optional apt-get install libavcodec-dev apt-get install libavutil-dev apt-get install libswscale-dev apt-get install libpango1.0-dev apt-get install libssh2-1-dev apt-get install libtelnet-dev apt-get install libvncserver-dev apt-get install libpulse-dev apt-get install libssl-dev apt-get install libvorbis-dev apt-get install libwebp-dev apt-get install libfreerdp2-2 # wget http://sourceforge.net/projects/guacamole/files/current/source/guacamole-server-0.9.14.tar.gz wget http://sourceforge.net/projects/guacamole/files/current/source/guacamole-client-0.9.14.tar.gz # tar xzf guacamole-server-0.9.14.tar.gz cd guacamole-server-0.9.14 ./configure --with-init-dir=/etc/init.d make TBD... ===== HW Clock ===== https://wiki.52pi.com/index.php/DS1307_RTC_Module_with_BAT_for_Raspberry_Pi_SKU%3A_EP-0059 https://www.amazon.de/gp/product/B071HYN28Z/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1 raspi-config # in den "Interfacing Options" "P5 I2C" wählen und im folgenden Auswahlmenü # die Frage "Would you like the ARM I2C interface to be enabled?" mit "Yes" beantworten apt-get install ntpdate crontab -e # @reboot ntpdate -s 0.de.pool.ntp.org # 0 */6 * * * ntpdate -s 0.de.pool.ntp.org apt-get -y remove fake-hwclock update-rc.d -f fake-hwclock remove Im File ///lib/udev/hwclock-set// die Zeilen kommentieren, um hw-clock system zu starten. #if [ -e /run/systemd/system ] ; then # exit 0 #fi In ///boot/config.txt// folgende Zeilen einfügen dtparam=i2c_arm=on device_tree=bcm2710-rpi-3-b.dtb dtoverlay=i2c-rtc,ds1307 check mit shutdown -r now root@rasp-dns:~# dmesg | grep rtc [ 6.044146] rtc-ds1307 1-0068: registered as rtc0 hwclock -w ===== Lighttpd als Info Server ===== Nur für die Lab Umgebung eine kurze Info Seite. apt-get install lighttpd vi /etc/lighttpd/lighttpd.conf -> server.modules = ( "mod_indexfile", "mod_access", "mod_alias", "mod_fastcgi", "mod_redirect", ) server.document-root = "/var/www/html" server.upload-dirs = ( "/var/cache/lighttpd/uploads" ) server.errorlog = "/var/log/lighttpd/error.log" server.pid-file = "/var/run/lighttpd.pid" server.username = "www-data" server.groupname = "www-data" server.port = 11111 .... fastcgi.server = ( ".php" => (( "bin-path" => "/usr/bin/php-cgi", "socket" => "/tmp/php.sock" ))) <- service lightttpd start service lighttpd status apt-get install php php-cgi ===== Samba einrichten ===== apt-get install samba mv /etc/samba/smb.conf /etc/samba/smb.orig vi /etc/samba/smb.conf -> [global] workgroup = workgroup security = user map to guest = Bad Password [homes] comment = Home Directories browsable = no read only = no create mode = 0750 [public] path = /var/www/html public = yes writable = yes comment = www share printable = no guest ok = yes <- systemctl restart smbd.service systemctl status smbd.service net use W: \\rasp-dns\public ===== XRDP ===== apt-get install xrdp