{"id":170,"date":"2021-04-23T13:15:00","date_gmt":"2021-04-23T13:15:00","guid":{"rendered":"http:\/\/szatan.it\/?p=170"},"modified":"2023-01-09T11:33:42","modified_gmt":"2023-01-09T11:33:42","slug":"mini-automatyzacja-mini-klastra-vsan","status":"publish","type":"post","link":"https:\/\/szatan.it\/index.php\/2021\/04\/23\/mini-automatyzacja-mini-klastra-vsan\/","title":{"rendered":"MINI AUTOMATYZACJA MINI KLASTRA VSAN"},"content":{"rendered":"\n<h5 class=\"wp-block-heading\">Automatyzacja jest wszechobecna, jak okiem si\u0119gn\u0105\u0107. Chcemy sobie u\u0142atwi\u0107 \u017cycie, aby nie wykonywa\u0107 jak ma\u0142pa powtarzalnych dla nas czynno\u015bci. Ca\u0142y czas m\u00f3wimy tutaj o automatyzacji w IT, rzecz jasna. Pozosta\u0142e elementy, takie jak jedzenie czy spanie mo\u017cemy ju\u017c wykonywa\u0107 sami, poniewa\u017c nale\u017c\u0105 do bardziej przyjemnych czynno\u015bci, kt\u00f3re si\u0119 powtarzaj\u0105. Przynajmniej, je\u017celi chodzi o mnie. Wracaj\u0105c do IT i wszechobecnej automatyzacji\u2026 Podj\u0105\u0142em si\u0119 automatyzacji klastra VMware vSAN. Czemu, w jakim celu i co z tego wynik\u0142o? Przeczytajcie.<\/h5>\n\n\n\n<p>Wiemy, dlaczego automatyzujemy, chocia\u017c czasem nie wiemy \u201eczym\u201d automatyzowa\u0107. Mamy tak du\u017co mo\u017cliwo\u015bci, \u017ce czujemy si\u0119 zagubieni. Chyba najcz\u0119stsze rozterki to te, czy wybra\u0107 p\u0142atne czy darmowe rozwi\u0105zania. Zainwestowa\u0107 czas, czy te\u017c pieni\u0105dze i niech kto\u015b inny si\u0119 martwi, aby wszystko dzia\u0142a\u0142o. Oba rozwi\u0105zania s\u0105 dobre, wszystko zale\u017cy od naszych mo\u017cliwo\u015bci. Czasem niestety gotowe rozwi\u0105zania nie daj\u0105 nam mo\u017cliwo\u015bci wykonania automatyzacji w taki spos\u00f3b, jak tego oczekujemy. W takiej sytuacji musimy szy\u0107 sobie na miar\u0119 rozwi\u0105zanie, kt\u00f3re nas b\u0119dzie satysfakcjonowa\u0142o.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Automatyzuj\u0105c uruchomienie klastr\u00f3w VMware vSAN, napotka\u0142em w\u0142a\u015bnie na kilka rzeczy, kt\u00f3rych nie mog\u0142em przeskoczy\u0107 gotowymi skryptami czy rozwi\u0105zaniami.<\/p>\n<\/blockquote>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/inleo.pl\/wp-content\/uploads\/2021\/04\/VM_blog_1_graf_2_schemat_2000x1500px_v2-1024x768.jpg\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\">Dlatego postanowi\u0142em wzi\u0105\u0107 sprawy we w\u0142asne r\u0119ce i napisa\u0107 w\u0142asny skrypt.<\/h3>\n\n\n\n<p>Tak\u2026 ja i skrypt\u2026 to dwa s\u0142owa, kt\u00f3re nie wyst\u0119puj\u0105 w jednym zdaniu czy sformu\u0142owaniu. Pewnie dlatego, \u017ce uwa\u017cam, i\u017c producent oprogramowania powinien przewidzie\u0107 r\u00f3\u017cne zastosowania danego produktu, a nie tylko jeden czy dwa scenariusze, kt\u00f3re od siebie r\u00f3\u017cni\u0105 si\u0119 ilo\u015bci\u0105 dysk\u00f3w twardych. Ta naturalna potrzeba wynika z r\u00f3\u017cnorodno\u015bci naszych \u015brodowisk i to jest oczywiste. Ale jak wspomnia\u0142em wcze\u015bniej \u2013 nie wszystko jest takie r\u00f3\u017cowe.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Pewnie kto\u015b mo\u017ce zapyta\u0107 po co ta automatyzacja przy vSAN? Przecie\u017c mo\u017cna to wszystko \u201eprzeklika\u0107\u201d.<\/p>\n<\/blockquote>\n\n\n\n<p>W pe\u0142ni si\u0119 zgodz\u0119, ale gdy mamy do uruchomienia 40 ma\u0142ych klastr\u00f3w vSAN to ustawienie wszystkiego mo\u017ce by\u0107 wyzwaniem. Dodatkowo mog\u0105 pojawi\u0107 si\u0119 b\u0142\u0119dy podczas konfiguracji wynikaj\u0105ce z czynnika ludzkiego. Wyzwaniem te\u017c staje si\u0119 taka konfiguracja, gdy inny dzia\u0142 w firmie odpowiada za wdro\u017cenie serwer\u00f3w. W takiej sytuacji nale\u017cy przygotowa\u0107 odpowiednio d\u0142ug\u0105 instrukcj\u0119, aby inne osoby by\u0142y w stanie to zrobi\u0107.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Krok 1. Przygotowanie host\u00f3w ESXi.<\/h3>\n\n\n\n<p>Do tego mo\u017cemy wykorzysta\u0107 instalacje nienadzorowan\u0105. Mo\u017cna to zrobi\u0107 co najmniej na dwa sposoby, czyli przez uruchomienie odpowiedniego zasobu, gdzie b\u0119dzie znajdowa\u0142 si\u0119 plik Kickstart i podczas wystartowania serwera z ISO podania mu \u015bcie\u017cki do niego. Drugi to zmodyfikowanie pliku startowego w samym obrazie ISO. Wad\u0105 tego rozwi\u0105zania jest to, \u017ce przy 40 klastrach, gdzie s\u0105 po 2 hosty musimy utworzy\u0107 sporo obraz\u00f3w ISO.<\/p>\n\n\n\n<p>Poni\u017cej przedstawiam przyk\u0142adowy plik, kt\u00f3ry dzia\u0142a z ESXi 7.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Sample scripted installation file<br>#<br># Accept the VMware End User License Agreement<br>vmaccepteula<br># Set the root password for the DCUI and Tech Support Mode<br>rootpw Haslo@123<br># Install on the first local disk available on machine<br>install --firstdisk=usb<br># Set the network to static on the first network adapter<br>network --bootproto=static --device=vmnic0 --ip=192.168.1.10 --netmask=255.255.255.0 --gateway=192.168.1.1 --nameserver=192.168.1.51 --hostname=esxi-1.lab.inleo.pl<br>reboot --noeject<br>%firstboot --interpreter=busybox<br>esxcli network ip dns search add --domain=lab.inleo.pl<br>esxcli network vswitch standard uplink add --uplink-name=vmnic1 --vswitch-name=vSwitch0<br>esxcli network vswitch standard portgroup remove --portgroup-name=\"VM Network\" --vswitch-name=vSwitch0<br>esxcli network ip set --ipv6-enabled=false<br>esxcli system module parameters set -m tcpip4 -p ipv6=0<br>echo \"server 192.168.1.51\" &gt;&gt; \/etc\/ntp.conf;<br>esxcfg-firewall -e ntpClient<br>\/sbin\/chkconfig ntpd on;<br>esxcli system settings advanced set -o \/UserVars\/HostClientCEIPOptIn -i 2<br>esxcli system maintenanceMode set -e false<br>esxcli system shutdown reboot -d 15 -r \"rebooting after ESXi host configuration\"<\/code><\/pre>\n\n\n\n<p>Przygotowanie tego pliku jest, jak wida\u0107 proste, a konfiguracja czytelna. Oczywi\u015bcie na tym etapie mo\u017cemy doda\u0107 odpowiednie grupy na potrzeby maszyn wirtualnych czy konfiguracji fizycznych port\u00f3w np. jak poni\u017cej.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>esxcli network vswitch standard add --vswitch-name=vSwitch1 --ports=24<br>esxcli network vswitch standard uplink add --uplink-name=vmnic4 --vswitch-name=vSwitch1<br>esxcli network vswitch standard uplink add --uplink-name=vmnic5 --vswitch-name=vSwitch1<br>esxcli network vswitch standard portgroup add --portgroup-name=ADMIN --vswitch-name=vSwitch1<br>esxcli network vswitch standard portgroup set -p ADMIN --vlan-id 213<br>esxcli network vswitch standard policy failover set --active-uplinks=vmnic4 --standby-uplinks=vmnic5 --vswitch-name=vSwitch1<\/code><\/pre>\n\n\n\n<p>Tutaj te\u017c konfiguracja jest bardzo prosta i intuicyjna.&nbsp;<strong>Plusem<\/strong>&nbsp;takiej konfiguracji host\u00f3w jest to, \u017ce po instalacji host jest gotowy do pod\u0142\u0105czenia do vCenter, konfiguracja jest powtarzalna.&nbsp;<strong>Minusem<\/strong>&nbsp;jest pomy\u0142ka. Je\u017celi pomylimy si\u0119 w jednym miejscu, to pomylimy si\u0119 w konfiguracji na ka\u017cdym z przygotowanych tak host\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Krok 2. VMware \u2013 vCenter Server.<\/h3>\n\n\n\n<p>Maj\u0105c tak przygotowane hosty potrzebujemy jeszcze jednego rozwi\u0105zania VMware, jakim jest&nbsp;<strong>vCenter Server<\/strong>. Ten produkt te\u017c posiada plik, gdzie mo\u017cemy wprowadzi\u0107 konfiguracje i jednym poleceniem uruchomi\u0107 instalacje. Przyk\u0142ad poni\u017cej:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{<br>&nbsp;&nbsp;&nbsp; \"__version\": \"2.13.0\",<br>&nbsp;&nbsp;&nbsp; \"__comments\": \"Sample template to deploy a vCenter Server Appliance with an embedded Platform Services Controller on an ESXi host.\",<br>&nbsp;&nbsp;&nbsp; \"new_vcsa\": {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"esxi\": {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"hostname\": \"esxi-1.lab.inleo.pl\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"username\": \"root\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"password\": \"Haslo@123\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"deployment_network\": \"ADMIN\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"datastore\": \"esxi-1-datastore1 \"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"appliance\": {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"__comments\": &#91;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"You must provide the 'deployment_option' key with a value, which will affect the VCSA's configuration parameters, such as the VCSA's number of vCPUs, the memory size, the storage size, and the maximum numbers of ESXi hosts and VMs which can be managed. For a list of acceptable values, run the supported deployment sizes help, i.e. vcsa-deploy --supported-deployment-sizes\"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"thin_disk_mode\": true,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"deployment_option\": \"medium\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"name\": \"vCenter Server\"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"network\": {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"ip_family\": \"ipv4\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"mode\": \"static\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"system_name\": \"vcsa.lab.inleo.pl\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"ip\": \"192.168.1.20\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"prefix\": \"24\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"gateway\": \"192.168.1.1\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"dns_servers\": &#91;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"192.168.1.51\"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"os\": {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"password\": \"Haslo@123\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"ntp_servers\": \"192.168.1.51\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"ssh_enable\": false<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"sso\": {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"password\": \"Password@123\",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \"domain_name\": \"vsphere.local\"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<\/code><\/pre>\n\n\n\n<p>Oczywi\u015bcie wszystkie inne elementy, takie jak konfiguracja DNS i NTP powinny zosta\u0107 przygotowane wcze\u015bniej. Tutaj si\u0119 nic nie zmienia \ud83d\ude09, a vcsa-deploy.exe znajduje si\u0119 w ISO vCenter Server. Poni\u017cej przyk\u0142ad wykorzystania.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Uruchamiamy i idziemy na kaw\u0119.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>vcsa-deploy.exe install --accept-eula&nbsp;--acknowledge-ceip&nbsp;--no-esx-ssl-verify C:\\embedded_vCSA_on_ESXi-config.json&nbsp;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Krok 3. Gw\u00f3\u017ad\u017a programu, czyli konfiguracja sieci i vSAN.<\/h3>\n\n\n\n<p>W bardzo uproszczonej wersji przygotowa\u0142em skrypt w PowerShellu. Oczywi\u015bcie nieuniknione by\u0142o wykorzystanie PowerCLI. Funkcjonalnie podzieli\u0142em skrypt na 3 bloki. Pierwszy blok to oczywi\u015bcie cz\u0119\u015b\u0107 ze zmiennymi oraz pod\u0142\u0105czeniem host\u00f3w do vCenter i konfiguracji klastr\u00f3w. Drugi blok to konfiguracja sieci i ostatni to konfiguracja samego vSANu.<br><br>Pierwszy blok m\u00f3g\u0142by wygl\u0105da\u0107 jak poni\u017cej. Deklaracja zmiennych, utworzenie data center czy klastra to jedna linia. Dodanie jednej prostej p\u0119tli mo\u017ce zmniejszy\u0107 obj\u0119to\u015b\u0107 skryptu i upro\u015bci\u0107 go. &nbsp;Mo\u017cna pokusi\u0107 si\u0119 r\u00f3wnie\u017c o pobieranie zmiennych z pliku csv lub o to, aby wszystko wpisywa\u0107 z palca. Mo\u017cliwo\u015bci jest sporo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$VCNode = ''<br>$host1 = ''<br>$host2 = ''<br>$wintess = ''<br>&nbsp;<br>$VCUserName = 'administrator@vsphere.local'<br>$ESXiUserName = 'root'<br>$VCPassword = ''<br>$ESXPassword = 'Haslo@123'<br>$DCName = 'INLEO-LAB'<br>$CluName = 'PODMIEJSKA'<br>$VDSName = 'PODMIEJSKA-NODE-vDS'<br>$pgname_vmotion = 'PODMIEJSKA-Node-vMotion'<br>$pgname_vSAN = 'PODMIEJSKA-Node-vSAN-Traffic'<br>$pgname_vmadmin = 'PODMIEJSKA-Node-ADMIN'<br>$pgname_vmdmz = 'PODMIEJSKA-Node-DMZ'<br>$pgname_vmbackup = 'PODMIEJSKA-Node-BACKUP'<br>$pgname_vmdb = 'PODMIEJSKA-Node-DB'<br>&nbsp;<br>.<br>.<br>.<br>.<br>&nbsp;<br>&nbsp;<br>Connect-VIServer $VCNode -User $VCUserName -Password $VCPassword -WarningAction SilentlyContinue<br>&nbsp;<br>$DC = New-Datacenter -Name $DCName -Location (Get-Folder Datacenters)<br>&nbsp;<br>$CLU = New-Cluster -Name $CluName -Location ($DC)<br>&nbsp;<br>&nbsp;<br>Add-VMHost -Name $host1 -Location $CLU -User $ESXiUserName -Password $ESXPassword -Force | Out-Null<br>Add-VMHost -Name $host2 -Location $CLU -User $ESXiUserName -Password $ESXPassword -Force | Out-Null<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Krok 4. Konfiguracja sieci.<\/h3>\n\n\n\n<p>Tutaj te\u017c mo\u017cna pokusi\u0107 si\u0119 o kilka p\u0119tli dla u\u0142atwienia sprawy.&nbsp;<strong>Ten etap jest, wed\u0142ug mnie najbardziej skomplikowany<\/strong>. Du\u017ca ilo\u015b\u0107 zmiennych i sporo linii kodu mo\u017ce troch\u0119 przera\u017ca\u0107, ale zawsze mo\u017cna skorzysta\u0107 z funkcji nagrywania w vCenter. Chocia\u017c to u\u0142atwienie mo\u017ce wprowadzi\u0107 sporo zamieszania, bo kod z \u201enagrania\u201d jest ju\u017c mniej zrozumia\u0142y. Przynajmniej dla bardziej pocz\u0105tkuj\u0105cych. Cz\u0119\u015b\u0107 odpowiedzialna za konfiguracj\u0119 sieci mog\u0142aby wygl\u0105da\u0107 jak poni\u017cej:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>New-VDSwitch -Name $VDSName -Location $DCName -NumUplinkPorts 6 -Version 7.0.0 -Mtu 9000<br>&nbsp;<br>New-VDPortgroup -VDSwitch $VDSname -Name $pgname_vmotion -NumPorts 2 -PortBinding Static<br>New-VDPortgroup -VDSwitch $VDSname -Name $pgname_vSAN -NumPorts 2 -PortBinding Static<br>New-VDPortgroup -VDSwitch $VDSname -Name $pgname_vmdmz -NumPorts 2 -PortBinding Static -VlanId 5<br>New-VDPortgroup -VDSwitch $VDSname -Name $pgname_vmadmin -NumPorts 2 -PortBinding Static -VlanId 2<br>New-VDPortgroup -VDSwitch $VDSname -Name $pgname_vmbackend -NumPorts 2 -PortBinding Static -VlanId 4<br>New-VDPortgroup -VDSwitch $VDSname -Name $pgname_vmbackup -NumPorts 2 -PortBinding Static -VlanId 6<br>Add-VDSwitchVMHost -VDSwitch $VDSName -VMHost $host1, $host2<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>$vhost = Get-VMHost $host1<br>$uplinks = $vhost | Get-VDSwitch | Get-VDPort -Uplink | where {$_.ProxyHost -like $vhost.Name}<br>$vds = Get-VDSwitch $VDSName<br>$_this.QueryNetworkHint($null)<br>$config = New-Object VMware.Vim.HostNetworkConfig<br>$config.proxySwitch = New-Object VMware.Vim.HostProxySwitchConfig&#91;] (1)<br>$config.proxySwitch&#91;0] = New-Object VMware.Vim.HostProxySwitchConfig<br>$config.proxySwitch&#91;0].changeOperation = \"edit\"<br>$config.proxySwitch&#91;0].uuid = $vds.Key<br>$config.ProxySwitch&#91;0].Spec = New-Object VMware.Vim.HostProxySwitchSpec<br>$config.ProxySwitch&#91;0].Spec.Backing = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicBacking<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicSpec&#91;] (6)<br>&nbsp;<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;0] = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicSpec<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;0].PnicDevice = 'vmnic4'<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;0].UplinkPortKey = ($uplinks | where {$_.Name -eq \"dvUplink1\"}).key<br>&nbsp;<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;1] = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicSpec<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;1].PnicDevice = 'vmnic5'<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;1].UplinkPortKey = ($uplinks | where {$_.Name -eq \"dvUplink2\"}).key<br>&nbsp;<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;2] = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicSpec<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;2].PnicDevice = 'vmnic6'<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;2].UplinkPortKey = ($uplinks | where {$_.Name -eq \"dvUplink3\"}).key<br>&nbsp;<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;3] = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicSpec<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;3].PnicDevice = 'vmnic7'<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;3].UplinkPortKey = ($uplinks | where {$_.Name -eq \"dvUplink4\"}).key<br>&nbsp;<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;4] = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicSpec<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;4].PnicDevice = 'vmnic2'<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;4].UplinkPortKey = ($uplinks | where {$_.Name -eq \"dvUplink5\"}).key<br>&nbsp;<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;5] = New-Object VMware.Vim.DistributedVirtualSwitchHostMemberPnicSpec<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;5].PnicDevice = 'vmnic3'<br>$config.ProxySwitch&#91;0].Spec.Backing.PnicSpec&#91;5].UplinkPortKey = ($uplinks | where {$_.Name -eq \"dvUplink6\"}).key<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Krok 5 i ostatni<strong>. Wisienka na torcie, czyli Konfiguracja klastra VMware vSAN<\/strong>.<\/h3>\n\n\n\n<p>Element konfiguracyjny jest niezwykle prost\u0105 spraw\u0105. Istotne jest, aby sprawdzi\u0107 dyski twarde i ich identyfikatory, aby odpowiednio by\u0142y przydzielone do grup. Widzimy to idealnie na poni\u017cszym przyk\u0142adzie:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set-Cluster -Cluster $CluName -VsanEnabled:$true&nbsp; -DrsEnabled:$true -DrsAutomationLevel FullyAutomated -HAEnabled:$true -Confirm:$false<br>&nbsp;<br>New-VsanFaultDomain -Name FD1 -VMHost $host1<br>New-VsanFaultDomain -Name FD2 -VMHost $host2<br>New-VsanFaultDomain -Name FD3 -VMHost $host3<br>&nbsp;<br>New-VsanDiskGroup -DataDiskCanonicalName mpx.vmhba0:C0:T65:L0, mpx.vmhba0:C0:T66:L0, mpx.vmhba0:C0:T67:L0, mpx.vmhba0:C0:T68:L0 -SsdCanonicalName mpx.vmhba0:C0:T64:L0 -Confirm:$false -VMHost $host1<br>New-VsanDiskGroup -DataDiskCanonicalName mpx.vmhba0:C0:T65:L0, mpx.vmhba0:C0:T66:L0, mpx.vmhba0:C0:T67:L0, mpx.vmhba0:C0:T68:L0 -SsdCanonicalName mpx.vmhba0:C0:T64:L0 -Confirm:$false -VMHost $host2<br>New-VsanDiskGroup -DataDiskCanonicalName mpx.vmhba0:C0:T65:L0, mpx.vmhba0:C0:T66:L0, mpx.vmhba0:C0:T67:L0, mpx.vmhba0:C0:T68:L0 -SsdCanonicalName mpx.vmhba0:C0:T64:L0 -Confirm:$false -VMHost $host3<br>&nbsp;<br>&nbsp;<br>Get-Datastore -Name 'vsanDatastore' | Set-Datastore -Name $CluName<br>Get-VsanClusterConfiguration -Cluster $CluName | Set-VsanClusterConfiguration -PerformanceServiceEnabled $true<br>Disconnect-VIServer -Server $session -Confirm:$false<\/code><\/pre>\n\n\n\n<p>Zak\u0142adaj\u0105c, \u017ce skrypt dzia\u0142a poprawnie, konfiguracja klastra wykonuje si\u0119 w ci\u0105gu 20-30 sekund. Mo\u017cna to oczywi\u015bcie zrobi\u0107 szybciej, kwestia dopracowania skryptu. Na pewno sporo os\u00f3b powie, \u017ce zrobienie takiego skryptu jest bardzo czasoch\u0142onne. Nic bardziej mylnego!<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Jako osoba, kt\u00f3ra nie zajmuje si\u0119 na co dzie\u0144 tego typu skryptami i automatyzacj\u0105, przygotowanie skryptu zaj\u0119\u0142o mi niewiele czasu.<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Oczywi\u015bcie mo\u017cna wykorzysta\u0107 ju\u017c istniej\u0105ce, ale przegl\u0105daj\u0105c internet w poszukiwaniu czego\u015b uszytego na miar\u0119, napotka\u0142em na sporo problem\u00f3w.<\/li>\n\n\n\n<li>Modyfikacja skrypt\u00f3w innych os\u00f3b te\u017c nie jest \u0142atwa, bo zdarza si\u0119, \u017ce natrafimy na elementy, gdzie zastanawiamy si\u0119 co autor mia\u0142 na my\u015bli. Zajmuje to nasz cenny czas, a cz\u0119sto nie przynosi oczekiwanych efekt\u00f3w.<\/li>\n\n\n\n<li>Cz\u0119\u015bci skrypt\u00f3w, kt\u00f3re przedstawi\u0142em s\u0105 do\u015b\u0107 \u201ekrn\u0105brne\u201d. Brakuje funkcji, przejrzysto\u015bci i wielu innych rzeczy, ale najwa\u017cniejsze, \u017ce dzia\u0142a! Przyspiesza moj\u0105 prac\u0119 i mo\u017ce przyspieszy\u0107 Wasz\u0105.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Epilog.<\/h3>\n\n\n\n<p>Dodatkowo chcia\u0142bym Was zainspirowa\u0107 do dzia\u0142ania i opracowywania w\u0142asnej prostej lub bardziej zaawansowanej automatyzacji, dzi\u0119ki kt\u00f3rej \u015bwiat IT b\u0119dzie prosty i przyjemny. Doskonale wiemy, \u017ce taki nie jest, albo nie jest we wszystkich jego aspektach.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-text-align-center\">\u201e<em>Artyku\u0142 zosta\u0142 opublikowany na \u0142amach bloga evoila Poland<\/em>.\u201d<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Automatyzacja jest wszechobecna, jak okiem si\u0119gn\u0105\u0107. Chcemy sobie u\u0142atwi\u0107 \u017cycie, aby nie wykonywa\u0107 jak ma\u0142pa powtarzalnych dla nas czynno\u015bci. Ca\u0142y czas m\u00f3wimy tutaj o automatyzacji w IT, rzecz jasna. Pozosta\u0142e elementy, takie jak jedzenie czy spanie mo\u017cemy ju\u017c wykonywa\u0107 sami, poniewa\u017c nale\u017c\u0105 do bardziej przyjemnych czynno\u015bci, kt\u00f3re si\u0119 powtarzaj\u0105. Przynajmniej, je\u017celi chodzi o mnie. Wracaj\u0105c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":171,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[48,35,39,41],"tags":[],"class_list":["post-170","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-storage","category-vmware","category-vsan","category-vsphere"],"_links":{"self":[{"href":"https:\/\/szatan.it\/index.php\/wp-json\/wp\/v2\/posts\/170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/szatan.it\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/szatan.it\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/szatan.it\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/szatan.it\/index.php\/wp-json\/wp\/v2\/comments?post=170"}],"version-history":[{"count":2,"href":"https:\/\/szatan.it\/index.php\/wp-json\/wp\/v2\/posts\/170\/revisions"}],"predecessor-version":[{"id":232,"href":"https:\/\/szatan.it\/index.php\/wp-json\/wp\/v2\/posts\/170\/revisions\/232"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/szatan.it\/index.php\/wp-json\/wp\/v2\/media\/171"}],"wp:attachment":[{"href":"https:\/\/szatan.it\/index.php\/wp-json\/wp\/v2\/media?parent=170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/szatan.it\/index.php\/wp-json\/wp\/v2\/categories?post=170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/szatan.it\/index.php\/wp-json\/wp\/v2\/tags?post=170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}