<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ESX/ESXi &#8211; Blog of Kliment Andreev &#8211; A place so I won&#039;t forget things</title>
	<atom:link href="https://blog.andreev.it/category/esxesxi/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.andreev.it</link>
	<description></description>
	<lastBuildDate>Fri, 22 Dec 2023 21:10:17 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Install ESXi 8 on Intel NUC 13</title>
		<link>https://blog.andreev.it/2023/12/install-esxi-8-on-intel-nuc-13/</link>
					<comments>https://blog.andreev.it/2023/12/install-esxi-8-on-intel-nuc-13/#respond</comments>
		
		<dc:creator><![CDATA[Kliment Andreev]]></dc:creator>
		<pubDate>Mon, 18 Dec 2023 14:42:16 +0000</pubDate>
				<category><![CDATA[ESX/ESXi]]></category>
		<category><![CDATA[ESXi]]></category>
		<category><![CDATA[home lab]]></category>
		<category><![CDATA[Intel]]></category>
		<category><![CDATA[NUC]]></category>
		<category><![CDATA[vCenter]]></category>
		<category><![CDATA[VMware]]></category>
		<guid isPermaLink="false">https://blog.andreev.it/?p=9639</guid>

					<description><![CDATA[Recently I was playing with Kubernetes and racked a substantial bill in AWS and&#8230;]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>Recently I was playing with Kubernetes and racked a substantial bill in AWS and Azure so I decided to bring the lab home. I needed a small but powerful PC that can run multiple test VMs and Kubernetes clusters. Kubernetes on a bare metal is different than EKS or AKS, especially when it comes to handling load balancers, ingress, IAM roles etc. Some of these things don&#8217;t exist on a bare metal machine.<br />
I bought a <a href="https://www.amazon.com/dp/B0C1SHV6RS?psc=1&#038;ref=ppx_yo2ov_dt_b_product_details" rel="noopener" target="_blank">NUC 13 small factor PC</a> from Amazon and added <a href="https://www.amazon.com/gp/product/B08RK2SR23/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&#038;psc=1" rel="noopener" target="_blank">Samsung NVMe 2TB SSD</a> and <a href="https://www.amazon.com/gp/product/B07ZLCVKPV/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&#038;psc=1" rel="noopener" target="_blank">Crucial 64GB RAM</a>. After 2 months (these things are expensive!!!), I bought a <a href="https://www.amazon.com/gp/product/B0BRN9J1JN/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&#038;psc=1" rel="noopener" target="_blank">Synology NAS </a>with <a href="https://www.amazon.com/dp/B084ZV4DXB?psc=1&#038;ref=ppx_yo2ov_dt_b_product_details" rel="noopener" target="_blank">2 x 8GB SATA disks</a>. Next, is to upgrade the NAS with SSD that will act as cache, but I am not in a rush. Nevertheless&#8230;</p>
<h1>Initial SSD, RAM setup</h1>
<p>First thing you need to do is to CAREFULLY open the PC and make sure you don&#8217;t pull too hard and break the ribbon. Good thing is that the screws are not coming off and there is a spring mechanism so it&#8217;s super easy to open and close the bottom.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-01-scaled.jpg"><img fetchpriority="high" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-01-1024x768.jpg" alt="" width="1024" height="768" class="aligncenter size-large wp-image-9645" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-01-1024x768.jpg 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-01-300x225.jpg 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-01-768x576.jpg 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-01-1536x1152.jpg 1536w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-01-2048x1536.jpg 2048w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-01-1200x900.jpg 1200w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-01-1920x1440.jpg 1920w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-01-1170x878.jpg 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-01-585x439.jpg 585w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Add the NVMe SSD on the left side, but remove the screw first, bottom left. You&#8217;ll use it to tighten the SSD after.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-02-scaled.jpg"><img decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-02-1024x768.jpg" alt="" width="1024" height="768" class="aligncenter size-large wp-image-9646" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-02-1024x768.jpg 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-02-300x225.jpg 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-02-768x576.jpg 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-02-1536x1152.jpg 1536w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-02-2048x1536.jpg 2048w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-02-1200x900.jpg 1200w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-02-1920x1440.jpg 1920w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-02-1170x878.jpg 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-02-585x439.jpg 585w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Add the memory on the right side, you can add up to 64GB RAM hence 2 x 32GB modules. If you boot the PC even with a bootable USB stick, you&#8217;ll get an error saying <strong>&#8220;A bootable device has not been detected&#8221;</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-03.png"><img decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-03-1024x242.png" alt="" width="1024" height="242" class="aligncenter size-large wp-image-9648" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-03-1024x242.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-03-300x71.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-03-768x182.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-03-1170x277.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-03-585x138.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-03.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Hit <strong>CTRL-ALT-DEL </strong>and then <strong>F2</strong> to enter BIOS. From there, go to <strong>Boot</strong> menu, then <strong>Boot Priority</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-04.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-04-1024x762.png" alt="" width="1024" height="762" class="aligncenter size-large wp-image-9650" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-04-1024x762.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-04-300x223.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-04-768x571.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-04-1170x871.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-04-585x435.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-04.png 1266w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Check <strong>Boot USB Devices First</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-05.jpeg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-05-768x1024.jpeg" alt="" width="768" height="1024" class="aligncenter size-large wp-image-9652" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-05-768x1024.jpeg 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-05-225x300.jpeg 225w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-05-1152x1536.jpeg 1152w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-05-1536x2048.jpeg 1536w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-05-1170x1560.jpeg 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-05-585x780.jpeg 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-05.jpeg 1645w" sizes="(max-width: 768px) 100vw, 768px" /></a><br />
If you boot from ESXi 8 ISO now, most likely you&#8217;ll get an <strong>Fatal CPU mismatch on feature</strong> PSOD error. So, while still in the BIOS, go to <strong>Power, Performance and Cooling </strong>tab. Expand the first item <strong>External Ambient Temperature Tolerance</strong> and change the temperature setting to <strong>User Defined.</strong><br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-06.jpeg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-06-768x1024.jpeg" alt="" width="768" height="1024" class="aligncenter size-large wp-image-9653" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-06-768x1024.jpeg 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-06-225x300.jpeg 225w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-06-1152x1536.jpeg 1152w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-06-1536x2048.jpeg 1536w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-06-1170x1560.jpeg 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-06-585x780.jpeg 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-06.jpeg 1645w" sizes="(max-width: 768px) 100vw, 768px" /></a><br />
Now, you can enter the <strong>Performance</strong> menu which was grayed if the setting is not <strong>User Defined</strong> for the <strong>External Ambient Temperature Tolerance</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-07-scaled.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-07-768x1024.jpg" alt="" width="768" height="1024" class="aligncenter size-large wp-image-9654" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-07-768x1024.jpg 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-07-225x300.jpg 225w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-07-1152x1536.jpg 1152w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-07-1536x2048.jpg 1536w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-07-scaled.jpg 1920w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-07-1170x1560.jpg 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-07-585x780.jpg 585w" sizes="(max-width: 768px) 100vw, 768px" /></a><br />
Once there, go to <strong>Processor</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-08-scaled.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-08-768x1024.jpg" alt="" width="768" height="1024" class="aligncenter size-large wp-image-9655" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-08-768x1024.jpg 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-08-225x300.jpg 225w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-08-1152x1536.jpg 1152w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-08-1536x2048.jpg 1536w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-08-scaled.jpg 1920w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-08-1170x1560.jpg 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-08-585x780.jpg 585w" sizes="(max-width: 768px) 100vw, 768px" /></a><br />
Once there, change the number of <strong>Active Efficient Cores</strong> to 0.<br />
In addition, when you install ESXi 8 and when you access the GUI, you&#8217;ll see a nagging warning that TPM cannot be contacted or something similar. No matter how many times you acknowledge this warning it keeps coming back. So, while you in the BIOS, go to <strong>Security </strong>tab, then <strong>Security Features</strong> and uncheck <strong>Intel Platform Trust Technology</strong>.<br />
Save the settings with <strong>F10</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-09-scaled.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-09-768x1024.jpg" alt="" width="768" height="1024" class="aligncenter size-large wp-image-9656" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-09-768x1024.jpg 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-09-225x300.jpg 225w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-09-1152x1536.jpg 1152w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-09-1536x2048.jpg 1536w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-09-scaled.jpg 1920w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-09-1170x1560.jpg 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-09-585x780.jpg 585w" sizes="(max-width: 768px) 100vw, 768px" /></a></p>
<h1>Install ESXi 8</h1>
<p>At this point, reboot and boot from ESXi ISO USB. Check this guy for more info (<a href="https://williamlam.com/2023/03/esxi-on-intel-nuc-13-pro-arena-canyon.html" rel="noopener" target="_blank">link</a> and <a href="https://williamlam.com/2023/03/how-to-disable-the-efficiency-cores-e-cores-on-an-intel-nuc.html" rel="noopener" target="_blank">link</a>).<br />
I have a <a href="https://www.vmug.com/membership/vmug-advantage-membership/" rel="noopener" target="_blank">VMUG Advantage</a> subscription so I can freely download all VMWare software from <a href="https://vmugadvantage.onthehub.com/WebStore/Security/Signin.aspx?rurl=%2fWebStore%2fProductsByMajorVersionList.aspx" rel="noopener" target="_blank">here</a>. As long as you pay the yearly fee, you can have the licenses and software indefinitely.<br />
Choose where to install the ESXi (Samsung SSD).<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-10.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-10-1024x447.png" alt="" width="1024" height="447" class="aligncenter size-large wp-image-9657" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-10-1024x447.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-10-300x131.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-10-768x335.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-10-1536x671.png 1536w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-10-2048x895.png 2048w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-10-1920x839.png 1920w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-10-1170x511.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-10-585x256.png 585w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Choose a root password.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-11.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-11-1024x345.png" alt="" width="1024" height="345" class="aligncenter size-large wp-image-9658" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-11-1024x345.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-11-300x101.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-11-768x258.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-11-1536x517.png 1536w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-11-1170x394.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-11-585x197.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-11.png 1896w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Remove the USB stick and reboot when the installation is over and you&#8217;ll see this screen after.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-12.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-12-1024x559.png" alt="" width="1024" height="559" class="aligncenter size-large wp-image-9659" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-12-1024x559.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-12-300x164.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-12-768x419.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-12-1536x838.png 1536w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-12-1170x639.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-12-585x319.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-12.png 1810w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
This is my DHCP assigned address, so just change it to a static IP providing DNS and the default gateway. Then, change your FQDN as well. In my case I named my box as esxi1.homelab.local.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-13.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-13-1024x447.png" alt="" width="1024" height="447" class="aligncenter size-large wp-image-9660" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-13-1024x447.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-13-300x131.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-13-768x335.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-13-1536x670.png 1536w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-13-1170x511.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-13-585x255.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-13.png 1700w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
At this point you have a functioning ESXi server. Open up a browser, go to the ESXi IP and log with root and the password you specified.<br />
If you have a license, add it now by going to <strong>Manage</strong> (upper left corner), then <strong>Licensing</strong> tab and click <strong>Assign license</strong> or skip this part and use the evaluation mode.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-14.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-14-1024x471.png" alt="" width="1024" height="471" class="aligncenter size-large wp-image-9662" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-14-1024x471.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-14-300x138.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-14-768x353.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-14-1170x538.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-14-585x269.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-14.png 1440w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
<em>Optional</em>: Click on <strong>Storage</strong> then <strong>datastore1</strong>, <strong>Actions</strong> from the menu and rename the datastore. In my case I&#8217;ll use <strong>ESX1-LOCAL</strong>.</p>
<h1>Install vCenter 8.0 appliance</h1>
<p>Now, we can install vCenter. Mount the vCenter ISO image, go to <strong>vcsa-ui-installer</strong> folder and choose the OS (win32, mac, lin64). Run the installer and click <strong>Install </strong>icon.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-15.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-15-1024x707.png" alt="" width="1024" height="707" class="aligncenter size-large wp-image-9665" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-15-1024x707.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-15-300x207.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-15-768x530.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-15-1170x808.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-15-585x404.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-15.png 1525w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Click <strong>Next </strong>and <strong>Accept </strong>the legal terms. Then enter the IP address or FQDN if you have your DNS configured for the ESXi server you just installed. Specify the root password too.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-16.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-16-1024x528.png" alt="" width="1024" height="528" class="aligncenter size-large wp-image-9666" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-16-1024x528.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-16-300x155.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-16-768x396.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-16-1170x603.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-16-585x302.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-16.png 1492w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Name the vCenter and specify the vCenter root password. This is not the password that you will use to log to vCenter. This is a password for the appliance itself. You&#8217;ll need this only if you have to troubleshoot the appliance or enable/disable SSH on the appliance.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-17.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-17-1024x398.png" alt="" width="1024" height="398" class="aligncenter size-large wp-image-9667" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-17-1024x398.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-17-300x117.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-17-768x299.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-17-1170x455.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-17-585x228.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-17.png 1483w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Choose deployment size, for me the smallest size is acceptable. After all, I plan to use this primarily for Kubernetes.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-18.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-18-1024x658.png" alt="" width="1024" height="658" class="aligncenter size-large wp-image-9668" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-18-1024x658.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-18-300x193.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-18-768x493.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-18-1170x752.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-18-585x376.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-18.png 1510w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Choose the datastore.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-19.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-19-1024x682.png" alt="" width="1024" height="682" class="aligncenter size-large wp-image-9669" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-19-1024x682.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-19-300x200.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-19-768x511.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-19-1170x779.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-19-585x389.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-19-263x175.png 263w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-19.png 1528w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Configure network settings, IP, gateway, DNS, FQDN&#8230;<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-20.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-20-1024x809.png" alt="" width="1024" height="809" class="aligncenter size-large wp-image-9670" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-20-1024x809.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-20-300x237.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-20-768x607.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-20-1170x924.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-20-585x462.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-20.png 1513w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Confirm and click <strong>Finish</strong>. After some time, you&#8217;ll get a prompt to configure vCenter. I chose to use NTP and sync with some public NTP servers. Use whatever is closest to you.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-21.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-21-1024x480.png" alt="" width="1024" height="480" class="aligncenter size-large wp-image-9674" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-21-1024x480.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-21-300x141.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-21-768x360.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-21-1536x721.png 1536w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-21-1170x549.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-21-585x274.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-21.png 1543w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
I&#8217;ll create a new SSO domain and I&#8217;ll use the defaults. I just have to provide a password.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-23.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-23-1024x733.png" alt="" width="1024" height="733" class="aligncenter size-large wp-image-9675" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-23-1024x733.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-23-300x215.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-23-768x550.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-23-1536x1100.png 1536w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-23-1170x838.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-23-585x419.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-23.png 1543w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Once vCenter is deployed go to the FQDN or the IP from a browser. Your username is no longer root, it&#8217;s <strong>administrator@vspehere.local</strong> and your password is the one you specified when you installed vCenter SSO in the previous step. Enter the license by going to <strong>Administration | Licenses </strong>from the left.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-24.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-24-1024x467.png" alt="" width="1024" height="467" class="aligncenter size-large wp-image-9679" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-24-1024x467.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-24-300x137.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-24-768x350.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-24-1170x534.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-24-585x267.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-24.png 1311w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Once you enter the license from the <strong>Licenses </strong>tab, go to <strong>Assets </strong>tab and click <strong>Assign License</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-25.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-25-1024x625.png" alt="" width="1024" height="625" class="aligncenter size-large wp-image-9680" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-25-1024x625.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-25-300x183.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-25-768x468.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-25-1170x714.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-25-585x357.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-25.png 1441w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Go to <strong>Inventory </strong>from the hamburger menu on the left, right-click the vCenter IP or FQDN and choose <strong>New Datacenter</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-26.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-26.png" alt="" width="640" height="742" class="aligncenter size-full wp-image-9681" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-26.png 640w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-26-259x300.png 259w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-26-585x678.png 585w" sizes="(max-width: 640px) 100vw, 640px" /></a><br />
Then right-click on the newly created datacenter and choose <strong>New Cluster</strong>.<br />
Same thing again, right-click the cluster and choose <strong>Add Hosts</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-27.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-27.png" alt="" width="829" height="516" class="aligncenter size-full wp-image-9682" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-27.png 829w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-27-300x187.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-27-768x478.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-27-585x364.png 585w" sizes="(max-width: 829px) 100vw, 829px" /></a><br />
Specify the IP or FQDN and the root password when you installed ESXi initially.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-28.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-28-1024x285.png" alt="" width="1024" height="285" class="aligncenter size-large wp-image-9683" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-28-1024x285.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-28-300x84.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-28-768x214.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-28-1536x428.png 1536w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-28-1170x326.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-28-585x163.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-28.png 1749w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<h1>Optional: iSCSI</h1>
<p>Click on the ESXi hosts, then <strong>Configure </strong>tab, click <strong>Add Software Adapter</strong> and then <strong>Add iSCSI adapter</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-29.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-29-1024x391.png" alt="" width="1024" height="391" class="aligncenter size-large wp-image-9685" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-29-1024x391.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-29-300x115.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-29-768x294.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-29-1170x447.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-29-585x224.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-29.png 1444w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
In my case, I have to use <strong>static discovery</strong> so click on that tab and then <strong>Add</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-30.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-30-1024x493.png" alt="" width="1024" height="493" class="aligncenter size-large wp-image-9686" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-30-1024x493.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-30-300x144.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-30-768x370.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-30-1170x563.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-30-585x282.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-30.png 1230w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
Enter the iSCSI IP and the target name.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-31.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-31.png" alt="" width="862" height="601" class="aligncenter size-full wp-image-9687" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-31.png 862w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-31-300x209.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-31-768x535.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-31-585x408.png 585w" sizes="(max-width: 862px) 100vw, 862px" /></a><br />
Finally, click on <strong>Rescan storage</strong>in the menu above. If you need to provide your initiator, this is where you can find it under iSCSI Name (iqn.1998&#8212;_.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/12/P168-32.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/12/P168-32-1024x789.png" alt="" width="1024" height="789" class="aligncenter size-large wp-image-9688" srcset="https://blog.andreev.it/wp-content/uploads/2023/12/P168-32-1024x789.png 1024w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-32-300x231.png 300w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-32-768x592.png 768w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-32-1170x901.png 1170w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-32-585x451.png 585w, https://blog.andreev.it/wp-content/uploads/2023/12/P168-32.png 1189w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><br />
To learn how you can install Kubernetes on your NUC and how to use k8s Load Balancing see the links from my blog <a href="https://blog.andreev.it/2023/10/install-kubernetes-with-cri-o-and-cilium-on-rocky-linux-9/" rel="noopener" target="_blank">here </a>and <a href="https://blog.andreev.it/2023/10/install-metallb-on-kubernetes-cluster-running-on-vmware-vms-or-bare-metal-server/" rel="noopener" target="_blank">here</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.andreev.it/2023/12/install-esxi-8-on-intel-nuc-13/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Install MetalLB on Kubernetes cluster running on VMWare VMs or bare metal server and nginx ingress</title>
		<link>https://blog.andreev.it/2023/10/install-metallb-on-kubernetes-cluster-running-on-vmware-vms-or-bare-metal-server/</link>
					<comments>https://blog.andreev.it/2023/10/install-metallb-on-kubernetes-cluster-running-on-vmware-vms-or-bare-metal-server/#respond</comments>
		
		<dc:creator><![CDATA[Kliment Andreev]]></dc:creator>
		<pubDate>Sat, 21 Oct 2023 23:05:18 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[ESX/ESXi]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[bare metal]]></category>
		<category><![CDATA[certificate]]></category>
		<category><![CDATA[ESXi]]></category>
		<category><![CDATA[ingress]]></category>
		<category><![CDATA[load balancer]]></category>
		<category><![CDATA[MetalLB]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[TLS]]></category>
		<category><![CDATA[VMware]]></category>
		<guid isPermaLink="false">https://blog.andreev.it/?p=9551</guid>

					<description><![CDATA[In this post I&#8217;ll explain how to install MetalLB which is a load balancer&#8230;]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>In this post I&#8217;ll explain how to install <a href="https://metallb.universe.tf/" rel="noopener" target="_blank">MetalLB </a>which is a load balancer for bare metal/VM Kubernetes servers. If you have your own home lab to play with Kubernetes and you are not using AKS, EKS or GKE, then this post is for you.<br />
The prerequisite is to have a running Kubernetes cluster. In my earlier <a href="https://blog.andreev.it/2023/10/install-kubernetes-with-cri-o-and-cilium-on-rocky-linux-9/" rel="noopener" target="_blank">post</a>, I&#8217;ve described how to install Kubernetes with CRI-O and Cilium as a CNI, so you can follow that post or feel free to have your own install. Mind that if you use other CNIs such as Calico or Weave, there are some things you have to check first and see if it applies to you. Look at this <a href="https://metallb.universe.tf/configuration/" rel="noopener" target="_blank">link</a>.<br />
We&#8217;ll install MetalLB now. You probably have your k8s master and the nodes ready.</p>
<h1>Install MetalLB</h1>
<p>Do this first on the master.</p>
<pre class="brush: bash; title: ; notranslate">
kubectl edit configmap -n kube-system kube-proxy
</pre>
<p>&#8230;and change <strong>strictARP </strong>to true.</p>
<pre class="brush: bash; title: ; notranslate">
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: &quot;ipvs&quot;
ipvs:
  strictARP: true
</pre>
<p>Deploy MetalLB.</p>
<pre class="brush: bash; title: ; notranslate">
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.11/config/manifests/metallb-native.yaml
</pre>
<p>You&#8217;ll see the pods running in metallb-system namespace.</p>
<pre class="brush: bash; highlight: [1]; title: ; notranslate">
kubectl get pods -n metallb-system
NAME                          READY   STATUS    RESTARTS   AGE
controller-7d56b4f464-gkfrq   1/1     Running   0          55s
speaker-l5954                 1/1     Running   0          55s
speaker-xrswp                 1/1     Running   0          55s
speaker-z8vdt                 1/1     Running   0          55s
</pre>
<p>Let&#8217;s configure our load balancer to give IPs in this 192.168.1.50-192.168.1.60 range. Change to your needs accordingly in line 8.<br />
Save it as a <strong>lb-config.yaml</strong> file.</p>
<pre class="brush: bash; highlight: [8]; title: ; notranslate">
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.1.50-192.168.1.60
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: example
  namespace: metallb-system
</pre>
<p>Deploy the config.</p>
<pre class="brush: bash; title: ; notranslate">
kubectl apply -f lb-config.yaml
</pre>
<p>Now, we can deploy a simple app and a load balancer. Save the file as <strong>demo.yaml</strong>.<br />
This is an app that I made in Node.js that listens on port 3000 to display the IP of the pod that the load balancer hits.<br />
You can use it for any type of a load balancer, not just MetalLB. It&#8217;s a super simple app that prints the IP of the pod where it&#8217;s running.</p>
<pre class="brush: bash; title: ; notranslate">
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
spec:
  replicas: 6
  selector:
    matchLabels:
      run: demo
  template:
    metadata:
      labels:
        run: demo
    spec:
      containers:
      - name: demo
        image: klimenta/serverip
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: loadbalancer
spec:
  ports:
    - port: 80
      targetPort: 3000
      protocol: TCP
  type: LoadBalancer
  selector:
    run: demo
</pre>
<p>Deploy the app.</p>
<pre class="brush: bash; title: ; notranslate">
kubectl apply -f demo.yaml
</pre>
<p>Check the load balancer service.</p>
<pre class="brush: bash; highlight: [1]; title: ; notranslate">
kubectl get svc
NAME           TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
kubernetes     ClusterIP      10.96.0.1      &lt;none&gt;         443/TCP        33m
loadbalancer   LoadBalancer   10.106.36.58   192.168.1.50   80:30770/TCP   4m33s
</pre>
<p>&#8230;and if you go to that IP (192.168.1.50) in your browser, you&#8217;ll see the IP of the pods that the load balancer hits.</p>
<h1>Install nginx ingress reverse proxy</h1>
<p>The problem with the scenario above is that for every service you need to expose, you need a different IP from the IP pool that we&#8217;ve assigned to MetalLB (.50-.60).<br />
A better solution is to install an nginx ingress that will act as a reverse proxy, but for this you&#8217;ll need a working DNS server as the services will share the same IP, but different FQDN.<br />
So, in practice it looks like this.<br />
Install nginx ingress first.</p>
<pre class="brush: bash; title: ; notranslate">
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml
kubectl get pods -n ingress-nginx
kubectl get service ingress-nginx-controller -n=ingress-nginx
</pre>
<p>Don&#8217;t worry if the two nginx ports are not running and it says &#8211; &#8220;completed&#8221;.<br />
You&#8217;ll see the external IP that&#8217;s assigned to nginx from MetalLB.<br />
For some reason, nginx ingress won&#8217;t work without this line. Many people have this problem in a bare-metal environment and this is the workaround.</p>
<pre class="brush: bash; title: ; notranslate">
kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
</pre>
<p>Now, let&#8217;s create an nginx web server. This has nothing to do with nginx ingress, it&#8217;s completely separate.<br />
I am exposing the nginx deploymenty and creating a rule that will hit the deployment on port 80 with nginx.homelab.local as FQDN.<br />
NOTE: If your browser can&#8217;t resolve this URL, it won&#8217;t work. So, make sure you have a DNS or /etc/hosts file or some type of name resolution.</p>
<pre class="brush: bash; title: ; notranslate">
kubectl create deployment nginx --image=nginx --port=80
kubectl expose deployment nginx
kubectl create ingress nginx --class=nginx --rule nginx.homelab.local/=nginx:80
</pre>
<p>Then, let&#8217;s install Apache server that runs on the same IP and same port 80.</p>
<pre class="brush: bash; title: ; notranslate">
kubectl create deployment httpd --image=httpd --port=80
kubectl expose deployment httpd
kubectl create ingress httpd --class=nginx --rule httpd.homelab.local/=httpd:80
</pre>
<p>If everything is OK, you&#8217;ll be able to access both web servers using their URLs.<br />
If you want to put Grafana and/or KubeCost behind nginx ingress, read these short posts <a href="https://blog.andreev.it/2023/04/general-tips-tricks-and-one-liners-part-iv/#Install_Kube_Prometheus_stack_on_NFS" rel="noopener" target="_blank">here </a>and <a href="https://blog.andreev.it/2023/04/general-tips-tricks-and-one-liners-part-iv/#Install_KubeCost_on_NFS" rel="noopener" target="_blank">here</a>.<br />
If you want to use yaml for deployment, here is an example of that. It creates 6 replicas of a pod that prints the IP where the pod is running. The service runs on port 3000. Then it creates a ClusterIP on the same port and puts the ClusterIP behind the ingress. Change the hostname at line 39.</p>
<pre class="brush: xml; title: ; notranslate">
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
spec:
  replicas: 6
  selector:
    matchLabels:
      run: demo
  template:
    metadata:
      labels:
        run: demo
    spec:
      containers:
      - name: demo
        image: klimenta/getmyip
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: demo
spec:
  type: ClusterIP
  ports:
  - port: 3000
    targetPort: 3000
  selector:
    run: demo
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-demo
spec:
  rules:
  - host: demo.homelab.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: demo
            port:
              number: 3000
  ingressClassName: nginx
</pre>
<h1>SSL certificates</h1>
<p>The examples above allow you to run multiple websites behind a reverse proxy on port 80, but in reality you want everything on port 443 and with SSL certificates. I&#8217;ll describe two scenarios: with a valid cert and self-signed certificate.Fortunately, nginx ingress listens on port 443 and does automatic redirect from http->https so you don&#8217;t have to worry about any changes.</p>
<h2>Valid SSL certificate</h2>
<p>You will need a valid SSL certificate for this. And you will need the private key, the certificate, the CA root certificate and the intermediate certificate. You can get these from the vendor where you purchased the certificate. In my case, I&#8217;ll have the private key saved as domain.key, the certificate as domain.pem, the root CA certificate as domain.ca and the intermediate certificate as domain.inter.<br />
<strong>IMPORTANT</strong>: nginx expects the certificate chain in exact order: PEM -> INTERMEDIATE -> ROOT CA. If you have just the private key and the certificate (without inter and root CA), it might work, but you might get some errors when using curl, such as that the certificate authority cannot be recognized.<br />
So, create a file called domain.full.pem or whatever that has all 3 certificates in that order, e.g. <em>cat domain.pem domain.inter domain.ca > domain.full.pem.</em><br />
If you received a bundle file from the certificate vendor, create a chain from two files: domain.pem plus the bundle file. The bundle file contains the intermediate and the root certificate.<br />
Now that you have these files, you need to create a TLS secret in Kubernetes where you&#8217;ll store your certificate. You can do that with kubectl or with a YAML file.</p>
<pre class="brush: bash; title: ; notranslate">
kubectl create secret tls demo-tls --key domain.key --cert domain.full.pem
</pre>
<p>Keep the secret, ingress and the deployment in the same namespace.<br />
If you use YAML, which most likely you&#8217;ll do if you use automation, you&#8217;ll have to encode the certificates.<br />
This is the template YAML file. Name it as <em>tls.yaml</em>.</p>
<pre class="brush: bash; title: ; notranslate">
apiVersion: v1
kind: Secret
metadata:
  name: demo-tls
type: kubernetes.io/tls
data:
  tls.crt: |
    &lt;insert_base64_string&gt;
  tls.key: |
    &lt;insert_base64_string&gt;
</pre>
<p>Don&#8217;t change data keys tls.crt and tls.key. You have to use them, not something like key.crt or something.crt. Use exactly tls.crt and tls.key.<br />
Encode the certificate with base64.</p>
<pre class="brush: bash; title: ; notranslate">
base64 -w0 domain.full.pem
</pre>
<p>Encode the key with base64.</p>
<pre class="brush: bash; title: ; notranslate">
base64 -w0 domain.key
</pre>
<p>You&#8217;ll get two long strings that start with LS0&#8230;Copy &#038; paste these strings into YAML and make sure they are properly indented.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2023/10/P166-01.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2023/10/P166-01.png" alt="" width="811" height="520" class="aligncenter size-full wp-image-9697" srcset="https://blog.andreev.it/wp-content/uploads/2023/10/P166-01.png 811w, https://blog.andreev.it/wp-content/uploads/2023/10/P166-01-300x192.png 300w, https://blog.andreev.it/wp-content/uploads/2023/10/P166-01-768x492.png 768w, https://blog.andreev.it/wp-content/uploads/2023/10/P166-01-585x375.png 585w" sizes="(max-width: 811px) 100vw, 811px" /></a><br />
Now, you can create the secret.</p>
<pre class="brush: bash; title: ; notranslate">
kubectl apply -f tls.yaml
</pre>
<p>All yopu have to do now is to reference the TLS secret that we created. Compare the highlighted lines in this YAML with the previous one.</p>
<pre class="brush: bash; highlight: [6,7,8,9,10,11]; title: ; notranslate">
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-demo
spec:
  tls:
  - hosts:
    - demo.iandreev.com
    secretName: demo-tls
  rules:
  - host: demo.iandreev.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: demo
            port:
              number: 3000
  ingressClassName: nginx
</pre>
<p>Change the hostname in line 11 and 14 to match your cert and you can deploy the app. </p>
<h2>Self-signed certificates</h2>
<p>First, we have to create a Certificate Authority (CA). I&#8217;ll use <em>homelab.local</em> as my domain.</p>
<pre class="brush: bash; title: ; notranslate">
openssl req -x509 -nodes -sha512 -days 365 -newkey rsa:4096 \
 -keyout rootCA.key -out rootCA.crt -subj &quot;/C=US/CN=HomeLab Certificate Authority&quot;
</pre>
<p>You&#8217;ll get two files, rootCA.key (the private key) and rootCA.crt.<br />
Create a private key for the wildcard homelab.local domain and a certificate signing request file.<br />
You&#8217;ll get two files, star.homelab.local.key (the private key for the domain) and star.homelab.local.csr (the certificate signing request).</p>
<pre class="brush: bash; title: ; notranslate">
openssl req -new -nodes -sha512 -days 365 -newkey rsa:4096 \
 -keyout star.homelab.local.key -out star.homelab.local.csr -subj &quot;/C=US/ST=NJ/L=Trenton/O=HomeLab Org/CN=*.homelab.local&quot;
</pre>
<p>Create this file where you&#8217;ll specify your domain name and eventually your IP, but the IP is not necessary.</p>
<pre class="brush: bash; title: ; notranslate">
cat &lt;&lt; EOF &gt; v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
&#x5B;alt_names]
DNS.1 = *.homelab.local
IP.1 = 192.168.1.50
EOF
</pre>
<p>Sign the certificate signing request and create the certificate file. You&#8217;ll get one certificate file star.homelab.local.crt.</p>
<pre class="brush: bash; title: ; notranslate">
openssl x509 -req -sha512 -days 365 -in star.homelab.local.csr -CA rootCA.crt -CAkey rootCA.key \
 -CAcreateserial -out star.homelab.local.crt  -extfile v3.ext
</pre>
<p>Combine the certificate and the CA certificate in a single file.</p>
<pre class="brush: bash; title: ; notranslate">
cat star.homelab.local.crt rootCA.crt &gt; star.homelab.local.chain.crt
</pre>
<p>Create this tls.yaml template file.</p>
<pre class="brush: bash; title: ; notranslate">
apiVersion: v1
kind: Secret
metadata:
  name: demo-tls
type: kubernetes.io/tls
data:
  tls.crt: |
    &lt;insert_base64_string&gt;
  tls.key: |
    &lt;insert_base64_string&gt;
</pre>
<p>Encode both the domain certificate chain file and the domain private key file.</p>
<pre class="brush: bash; title: ; notranslate">
base64 -w0 star.homelab.local.chain.crt
base64 -w0 star.homelab.local.key
</pre>
<p>You&#8217;ll get two very long single lines. Add these two lines to the tls.yaml template file but make sure they are properly indented (see the screenshot in the previous section).<br />
Now, you can create the secret.</p>
<pre class="brush: bash; title: ; notranslate">
kubectl apply -f tls.yaml
</pre>
<p>You can also use kubectl to create the secret, see the previous section.<br />
Save this file as <em>demo-local.yaml</em> and deploy it using <strong>kubectl apply -f demo-local.yaml</strong>.</p>
<pre class="brush: bash; collapse: true; light: false; title: ; toolbar: true; notranslate">
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
spec:
  replicas: 6
  selector:
    matchLabels:
      run: demo
  template:
    metadata:
      labels:
        run: demo
    spec:
      containers:
      - name: demo
        image: klimenta/getmyip
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: demo
spec:
  type: ClusterIP
  ports:
  - port: 3000
    targetPort: 3000
  selector:
    run: demo
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-demo
spec:
  tls:
  - hosts:
    - demo.homelab.local
    secretName: demo-tls
  rules:
  - host: demo.homelab.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: demo
            port:
              number: 3000
  ingressClassName: nginx
</pre>
<p>You&#8217;ll be able to go to your browser and check demo.homelab.local and see the page after the SSL warning.<br />
But if you double-click the rootCA.crt file on your local machine, you can import the certificate in the Trusted Root Certificates store and you won&#8217;t get that warning anymore.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.andreev.it/2023/10/install-metallb-on-kubernetes-cluster-running-on-vmware-vms-or-bare-metal-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Install Kubernetes with CRI-O and Cilium on Rocky Linux 9 / VMware / Bare Metal</title>
		<link>https://blog.andreev.it/2023/10/install-kubernetes-with-cri-o-and-cilium-on-rocky-linux-9/</link>
					<comments>https://blog.andreev.it/2023/10/install-kubernetes-with-cri-o-and-cilium-on-rocky-linux-9/#respond</comments>
		
		<dc:creator><![CDATA[Kliment Andreev]]></dc:creator>
		<pubDate>Mon, 09 Oct 2023 16:18:16 +0000</pubDate>
				<category><![CDATA[Containers]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[ESX/ESXi]]></category>
		<category><![CDATA[Rocky Linux]]></category>
		<category><![CDATA[Cilium]]></category>
		<category><![CDATA[CRI-O]]></category>
		<category><![CDATA[ESXi]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[MetalLB]]></category>
		<category><![CDATA[rocky linux]]></category>
		<category><![CDATA[VMware]]></category>
		<guid isPermaLink="false">https://blog.andreev.it/?p=9532</guid>

					<description><![CDATA[In this post, I&#8217;ll build a Kubernetes cluster with one master and two nodes&#8230;]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>In this post, I&#8217;ll build a Kubernetes cluster with one master and two nodes using CRI-O and Cilium. I have DNS in my environment but you can use the hosts files if needed.<br />
The OS will be Rocky Linux 9 running on ESXi 8.x but this should work on any other bare metal server too. The config for the nodes is:</p>
<p>&#8211; Master: 2 CPUs, 4GB RAM<br />
&#8211; Workers: 2 CPUs, 8GB RAM.</p>
<p>First, we&#8217;ll have to disable swap and put SELinux in permissive mode.<br />
<strong>Do this on all nodes (master + workers).</strong></p>
<pre class="brush: bash; title: ; notranslate">
sudo swapoff -a
sudo sed -i &#039;/ swap / s/^\(.*\)$/#\1/g&#039; /etc/fstab
sudo setenforce 0
sudo sed -i &#039;s/^SELINUX=enforcing$/SELINUX=permissive/&#039; /etc/selinux/config
</pre>
<p>Now, we have to open some firewall ports for Kubernetes..<br />
<strong>Do this on the master node only.</strong></p>
<pre class="brush: bash; title: ; notranslate">
sudo firewall-cmd --permanent --add-port=6443/tcp
sudo firewall-cmd --permanent --add-port=2379-2380/tcp
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=10259/tcp
sudo firewall-cmd --permanent --add-port=10257/tcp
sudo firewall-cmd --reload
</pre>
<p><strong>Do this on the workers only.</strong></p>
<pre class="brush: bash; title: ; notranslate">
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=30000-32767/tcp   
sudo firewall-cmd --reload
</pre>
<p>In addition, we&#8217;ll have to open the firewall ports for Cilium.<br />
<strong>Do this on all nodes</strong>.</p>
<pre class="brush: bash; title: ; notranslate">
sudo firewall-cmd --permanent --add-port=4240/tcp 
sudo firewall-cmd --permanent --add-port=8472/udp 
sudo firewall-cmd --reload
</pre>
<p>Now, we have to make some changes that are also required. Some necessary modules and IPtables change.<br />
<strong>Do this on all nodes.</strong></p>
<pre class="brush: bash; title: ; notranslate">
cat &lt;&lt;EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# sysctl params required by setup, params persist across reboots
cat &lt;&lt;EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# Apply sysctl params without reboot
sudo sysctl --system
</pre>
<p>We have to install CRI-O container runtime.<br />
<strong>Do this on all nodes.</strong></p>
<pre class="brush: bash; title: ; notranslate">
VERSION=1.22
sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/CentOS_8/devel:kubic:libcontainers:stable.repo
sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:${VERSION}.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:${VERSION}/CentOS_8/devel:kubic:libcontainers:stable:cri-o:${VERSION}.repo
sudo dnf -y install cri-o cri-tools
sudo systemctl enable --now crio
sudo systemctl status crio
</pre>
<p>Then, we have to install Kubernetes.<br />
<strong>Do this on all nodes.</strong></p>
<pre class="brush: bash; title: ; notranslate">
cat &lt;&lt;EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
&#x5B;kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
sudo dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
</pre>
<p><strong>On the master node only</strong>, initialize the cluster. Replace <strong>master.homelab.com</strong> with your master IP if you don&#8217;t use DNS.</p>
<pre class="brush: bash; title: ; notranslate">
sudo kubeadm init --control-plane-endpoint master.homelab.local:6443
</pre>
<p>You&#8217;ll get an output that says how to join the nodes, something like kubeadm join master&#8230; + a token<br />
<strong>On the master node</strong>, add these lines.</p>
<pre class="brush: bash; title: ; notranslate">
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
</pre>
<p>Join the nodes to the cluster.<br />
<strong>Do this on workers only.</strong></p>
<pre class="brush: bash; title: ; notranslate">
sudo kubeadm join master.homelab.local:6443 --token t2yir0.7n49rn6r57msy4j4 \
        --discovery-token-ca-cert-hash sha256:563360fcf60c49be91cdcf6486a4954c579a80c54503127ee0682ab8f86ec840
</pre>
<p>Check the nodes.<br />
<strong>Do this on the master node.</strong></p>
<pre class="brush: bash; highlight: [1]; title: ; notranslate">
kubectl get nodes
NAME                   STATUS   ROLES           AGE    VERSION
master.homelab.local   Ready    control-plane   116s   v1.28.2
node1.homelab.local    Ready    &lt;none&gt;          89s    v1.28.2
node2.homelab.local    Ready    &lt;none&gt;          85s    v1.28.2
</pre>
<p>&#8230;then check all the pods.<br />
<strong>Do this on the master node.</strong></p>
<pre class="brush: bash; highlight: [1]; title: ; notranslate">
kubectl get pods --all-namespaces
NAMESPACE     NAME                                           READY   STATUS    RESTARTS   AGE
kube-system   coredns-5dd5756b68-5ljgg                       1/1     Running   0          2m
kube-system   coredns-5dd5756b68-jp8tq                       1/1     Running   0          2m
kube-system   etcd-master.homelab.local                      1/1     Running   0          2m6s
kube-system   kube-apiserver-master.homelab.local            1/1     Running   0          2m6s
kube-system   kube-controller-manager-master.homelab.local   1/1     Running   0          2m6s
kube-system   kube-proxy-2z64r                               1/1     Running   0          2m
kube-system   kube-proxy-mrwjv                               1/1     Running   0          96s
kube-system   kube-proxy-nj5q4                               1/1     Running   0          100s
kube-system   kube-scheduler-master.homelab.local            1/1     Running   0          2m6s
</pre>
<p>Install Cilium<strong> on the master node only.</strong></p>
<pre class="brush: bash; title: ; notranslate">
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=amd64
if &#x5B; &quot;$(uname -m)&quot; = &quot;aarch64&quot; ]; then CLI_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
cilium install --version 1.14.2
</pre>
<p>Check the status.</p>
<pre class="brush: bash; title: ; notranslate">
cilium status --wait
</pre>
<p>You should see something like this. </p>
<pre class="brush: bash; title: ; notranslate">
    /¯¯\
 /¯¯\__/¯¯\    Cilium:             OK
 \__/¯¯\__/    Operator:           OK
 /¯¯\__/¯¯\    Envoy DaemonSet:    disabled (using embedded mode)
 \__/¯¯\__/    Hubble Relay:       disabled
    \__/       ClusterMesh:        disabled

DaemonSet              cilium             Desired: 3, Ready: 3/3, Available: 3/3
Deployment             cilium-operator    Desired: 1, Ready: 1/1, Available: 1/1
Containers:            cilium             Running: 3
                       cilium-operator    Running: 1
Cluster Pods:          2/2 managed by Cilium
Helm chart version:    1.14.2
Image versions         cilium             quay.io/cilium/cilium:v1.14.2@sha256:6263f3a3d5d63b267b538298dbeb5ae87da3efacf09a2c620446c873ba807d35: 3
                       cilium-operator    quay.io/cilium/operator-generic:v1.14.2@sha256:52f70250dea22e506959439a7c4ea31b10fe8375db62f5c27ab746e3a2af866d: 1
</pre>
<p>Then you can run the connectivity test. Some of the egress test will fail because we don&#8217;t have a public IP on the cluster.</p>
<pre class="brush: bash; title: ; notranslate">
cilium connectivity test
</pre>
<p>You should be able to run your deployments now. If you need to access the pods using URL use something like NodePort or port-forwarding. It&#8217;s very cumbersome and inefficient, but you can use a load balancer with MetalLB. Read <a href="https://blog.andreev.it/2023/10/install-metallb-on-kubernetes-cluster-running-on-vmware-vms-or-bare-metal-server/" rel="noopener" target="_blank">this</a> post to see how to do that. It&#8217;s separated from this post, because it&#8217;s a separate topic than just k8s, container runtime and CNI.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.andreev.it/2023/10/install-kubernetes-with-cri-o-and-cilium-on-rocky-linux-9/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Rocky Linux: Install the pre-release on VMware and WordPress</title>
		<link>https://blog.andreev.it/2021/05/rocky-linux-install-the-pre-release-on-vmware-and-wordpress/</link>
					<comments>https://blog.andreev.it/2021/05/rocky-linux-install-the-pre-release-on-vmware-and-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[Kliment Andreev]]></dc:creator>
		<pubDate>Sat, 01 May 2021 17:05:50 +0000</pubDate>
				<category><![CDATA[ESX/ESXi]]></category>
		<category><![CDATA[Rocky Linux]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[rocky linux]]></category>
		<guid isPermaLink="false">https://blog.andreev.it/?p=8861</guid>

					<description><![CDATA[Rocky Linux was finally release today (5/1/2021) and I&#8217;ve decided to try it in&#8230;]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>Rocky Linux was finally release today (5/1/2021) and I&#8217;ve decided to try it in my lab. I&#8217;ve downloaded the minimal ISO (Rocky-8.3-x86_64-minimal) and installed it under my vCenter version 6.x.<br />
I chose CentOS 8 as a base OS and after I mounted the ISO, I got an error saying <strong>ERROR Verification failed: (0x1A) Security Violation</strong>. If this is the case, shut down the guest, go to <strong>Settings | VM Options</strong> and if you expand <strong>Boot Options</strong>, change the <strong>Firmware</strong> from <strong>EFI </strong>to <strong>BIOS</strong>. This should do the trick.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2021/05/P154-01.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2021/05/P154-01.png" alt="" width="865" height="472" class="aligncenter size-full wp-image-8864" srcset="https://blog.andreev.it/wp-content/uploads/2021/05/P154-01.png 865w, https://blog.andreev.it/wp-content/uploads/2021/05/P154-01-300x164.png 300w, https://blog.andreev.it/wp-content/uploads/2021/05/P154-01-768x419.png 768w, https://blog.andreev.it/wp-content/uploads/2021/05/P154-01-585x319.png 585w" sizes="(max-width: 865px) 100vw, 865px" /></a><br />
What you&#8217;ll see next is pretty much the same as any other CentOS 7/8 installation.</p>
<p><a href="https://blog.andreev.it/wp-content/uploads/2021/05/P154-02.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2021/05/P154-02.png" alt="" width="792" height="592" class="aligncenter size-full wp-image-8866" srcset="https://blog.andreev.it/wp-content/uploads/2021/05/P154-02.png 792w, https://blog.andreev.it/wp-content/uploads/2021/05/P154-02-300x224.png 300w, https://blog.andreev.it/wp-content/uploads/2021/05/P154-02-768x574.png 768w, https://blog.andreev.it/wp-content/uploads/2021/05/P154-02-585x437.png 585w" sizes="(max-width: 792px) 100vw, 792px" /></a><br />
<strong>NOTE: The current version is not considered for production.</strong><br />
Do the same as you do with any other CentOS install. Partition the hard drive, change the root password, configure the network and add a user.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2021/05/P154-03.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2021/05/P154-03.png" alt="" width="786" height="590" class="aligncenter size-full wp-image-8867" srcset="https://blog.andreev.it/wp-content/uploads/2021/05/P154-03.png 786w, https://blog.andreev.it/wp-content/uploads/2021/05/P154-03-300x225.png 300w, https://blog.andreev.it/wp-content/uploads/2021/05/P154-03-768x576.png 768w, https://blog.andreev.it/wp-content/uploads/2021/05/P154-03-585x439.png 585w" sizes="(max-width: 786px) 100vw, 786px" /></a><br />
Once the server is up, you&#8217;ll see the login prompt.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2021/05/P154-04.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2021/05/P154-04.png" alt="" width="673" height="451" class="aligncenter size-full wp-image-8868" srcset="https://blog.andreev.it/wp-content/uploads/2021/05/P154-04.png 673w, https://blog.andreev.it/wp-content/uploads/2021/05/P154-04-300x201.png 300w, https://blog.andreev.it/wp-content/uploads/2021/05/P154-04-585x392.png 585w, https://blog.andreev.it/wp-content/uploads/2021/05/P154-04-263x175.png 263w" sizes="(max-width: 673px) 100vw, 673px" /></a><br />
Check the kernel version and the release.</p>
<pre class="brush: bash; highlight: [1,3]; title: ; notranslate">
uname -a
Linux rocky.andreev.local 4.18.0-240.22.1.el8.x86_64 #1 SMP Mon Apr 12 04:29:16 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
cat /etc/redhat-release
Rocky Linux release 8.3
</pre>
<p>By default, both the firewall and SELinux are enabled. </p>
<pre class="brush: bash; title: ; notranslate">
systemctl status firewalld
sestatus
</pre>
<p>You can use <strong>dnf</strong>, <strong>yum </strong>or <strong>rpm </strong>to manage the packages. If you need to change the network settings, use <strong>nmtui</strong>.<br />
Let&#8217;s install WordPress now. As root or using sudo, install Apache, PHP and MariaDB.</p>
<pre class="brush: bash; title: ; notranslate">
dnf install httpd php php-mysqlnd mariadb-server wget php-json
</pre>
<p>Start the Apache and MariaDB and enable them on both to start on reboot.</p>
<pre class="brush: bash; title: ; notranslate">
systemctl enable httpd --now
systemctl enable mariadb --now
</pre>
<p>Open port 80 on the firewall for the Apache. </p>
<pre class="brush: bash; title: ; notranslate">
firewall-cmd --permanent --zone=public --add-service=http --permanent
firewall-cmd --reload
</pre>
<p>Do the initian MariaDB configuration and specify the new root password for the SQL server.</p>
<pre class="brush: bash; title: ; notranslate">
mysql_secure_installation
</pre>
<p>Log as the SQL root user to MariaDB.</p>
<pre class="brush: bash; title: ; notranslate">
mysql -u root -p
</pre>
<p>Create the database and the WordPress user.</p>
<pre class="brush: sql; title: ; notranslate">
CREATE DATABASE wordpress;
GRANT ALL ON wordpress.* TO 'wpadmin'@'localhost' IDENTIFIED BY 'supersecret';
FLUSH PRIVILEGES;
</pre>
<p>Get the latest WordPress release under /tmp, unzip it and copy it where it belongs (root Apache data directory).</p>
<pre class="brush: bash; title: ; notranslate">
cd /tmp
wget https://www.wordpress.org/latest.zip
unzip latest.zip
mv wordpress/* /var/www/html/
chown -R apache:apache /var/www/html
</pre>
<p>Change the SELinux context for the root Apache data directory. </p>
<pre class="brush: bash; title: ; notranslate">
chcon -t httpd_sys_rw_content_t /var/www/html -R
</pre>
<p>At this point, you can access your WordPress install at http://your_IP_or_hostname.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.andreev.it/2021/05/rocky-linux-install-the-pre-release-on-vmware-and-wordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure: Migrate VMware VMs and physical servers using Azure Migrate: Server Assessment and Server Migration</title>
		<link>https://blog.andreev.it/2019/09/azure-migrate-vmware-vms-and-physical-servers-using-azure-migrate-server-assessment-and-server-migration/</link>
					<comments>https://blog.andreev.it/2019/09/azure-migrate-vmware-vms-and-physical-servers-using-azure-migrate-server-assessment-and-server-migration/#comments</comments>
		
		<dc:creator><![CDATA[Kliment Andreev]]></dc:creator>
		<pubDate>Tue, 24 Sep 2019 18:38:45 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Editor's Pick]]></category>
		<category><![CDATA[ESX/ESXi]]></category>
		<category><![CDATA[ASR]]></category>
		<category><![CDATA[Migrate]]></category>
		<category><![CDATA[VMware]]></category>
		<guid isPermaLink="false">https://blog.andreev.it/?p=5617</guid>

					<description><![CDATA[If you have some on-prem workloads (either virtual or physical servers) and you want&#8230;]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>If you have some on-prem workloads (either virtual or physical servers) and you want to migrate them to Azure, this post might be for you. I&#8217;ll describe how to migrate these servers in Azure using Azure Migrate and Azure Site Recovery. These tools (actual VMs) will have to be installed in your on-prem environment and they&#8217;ll do the heavy lifting for you. Before I begin, there are some pre-requisites. You&#8217;ll need a valid Azure subscription, supported VMware vCenter (v5.5 and above) and resources to install two VMs. On my ESXi host, using thin provisioned storage, I needed 8 CPUs, 32GB RAM and 20GB-80GB thin provisioned storage for <strong>Azure Migrate: Server Assessment</strong> and 8CPUs, 32GB RAM and 40GB disk for <strong>Azure Migrate: Server Migration</strong> tool. It will take much more space if you have a lots of VMs. I have about 15. You&#8217;ll also need a VNET(s) and subnet(s) where you&#8217;ll migrate the VMs.<br />
I&#8217;ll configure that first. I&#8217;ll give you an example of how to migrate a two-tier Windows application (web server + MS SQL server) and a WordPress server running on two CentOS 7 servers.</p>
<h1>Azure VNET/subnet</h1>
<p>Log to your Azure subscription and create a resource group for the migration. I&#8217;ll name mine <strong>rgMigration</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-01.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-01.jpg" alt="" width="732" height="374" class="aligncenter size-full wp-image-8700" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-01.jpg 732w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-01-300x153.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-01-585x299.jpg 585w" sizes="(max-width: 732px) 100vw, 732px" /></a><br />
Then create a new VNET and a subnet where you&#8217;ll migrate your VMs. You can use the same subnets as on-prem but only if you don&#8217;t have a ExpressRoute or VPN between on-prem and Azure. In my case, I have a <a href="https://blog.andreev.it/?p=3250" rel="noopener noreferrer" target="_blank">VPN between my home-lab and Azure</a>, so I have to choose a different subnet. I named my VNET <strong>vnetMigration</strong> and the subnet <strong>subServers</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-02.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-02.jpg" alt="" width="298" height="535" class="aligncenter size-full wp-image-8701" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-02.jpg 298w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-02-167x300.jpg 167w" sizes="(max-width: 298px) 100vw, 298px" /></a></p>
<h1>Azure Migrate</h1>
<p>Once completed, in the Azure portal in the middle upper search field, start typing <strong>migrate </strong>and select <strong>Azure Migrate</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-03.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-03.jpg" alt="" width="590" height="110" class="aligncenter size-full wp-image-8702" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-03.jpg 590w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-03-300x56.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-03-585x110.jpg 585w" sizes="(max-width: 590px) 100vw, 590px" /></a><br />
You&#8217;ll be presented with different options to migrate data, SQL, servers etc. Choose this one that says <strong>migrate servers</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-04.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-04.jpg" alt="" width="347" height="341" class="aligncenter size-full wp-image-8703" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-04.jpg 347w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-04-300x295.jpg 300w" sizes="(max-width: 347px) 100vw, 347px" /></a><br />
Click on <strong>Add tool(s)</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-05.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-05.jpg" alt="" width="335" height="326" class="aligncenter size-full wp-image-8704" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-05.jpg 335w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-05-300x292.jpg 300w" sizes="(max-width: 335px) 100vw, 335px" /></a><br />
You&#8217;ll be prompted to choose the subscription, the resource group, name the project and choose the region. Use whatever suits your needs and click <strong>Next</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-06.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-06.jpg" alt="" width="818" height="530" class="aligncenter size-full wp-image-8705" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-06.jpg 818w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-06-300x194.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-06-768x498.jpg 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-06-585x379.jpg 585w" sizes="(max-width: 818px) 100vw, 818px" /></a><br />
There are several tools there, we&#8217;ll use the <strong>Microsoft Migrate: Server Assessment</strong>. Click on it to highlight and click <strong>Next</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-07.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-07.jpg" alt="" width="1025" height="120" class="aligncenter size-full wp-image-8706" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-07.jpg 1025w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-07-300x35.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-07-768x90.jpg 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-07-585x68.jpg 585w" sizes="(max-width: 1025px) 100vw, 1025px" /></a><br />
For the migration tool, we&#8217;ll choose Azure Migrate: Server Migration. Select, click <strong>Next </strong>and finally click <strong>Add tool(s)</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-08.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-08.jpg" alt="" width="996" height="119" class="aligncenter size-full wp-image-8707" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-08.jpg 996w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-08-300x36.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-08-768x92.jpg 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-08-585x70.jpg 585w" sizes="(max-width: 996px) 100vw, 996px" /></a><br />
It takes about a minute to provision the tools. You&#8217;ll see two tiles on your screen, one for the Assessment tool and the other for the migration.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-09.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-09.jpg" alt="" width="511" height="549" class="aligncenter size-full wp-image-8708" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-09.jpg 511w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-09-279x300.jpg 279w" sizes="(max-width: 511px) 100vw, 511px" /></a><br />
We&#8217;ll use the first tool to assess the on-prem servers. This tool will tell us if we have servers that can be actually moved to Azure cloud and it will recommend the size of those servers. </p>
<h2>Server Assessment</h2>
<p>Click on <strong>Discover </strong>first. You&#8217;ll see another screen where you can download an OVA file for your vCenter. Download the file and deploy the OVA file (v2.19.07.30). I won&#8217;t go into details how to do this, it&#8217;s super easy. Once you have your VM from the OVA file up and running, open the console for that VM, accept the EULA, change the admin password and log in as Administrator with the password that you just specified. You might also want to change the IP from DHCP to static before proceeding. In addition, disable the <strong>IE Enhanced Security Configuration</strong> from the <strong>Server Manager</strong> or you&#8217;ll get bombarded with annoying popups from IE.<br />
On the desktop, there should be two files, one text file with the appliance version and a shortcut to <strong>Microsoft Azure Appliance Configuration Manager</strong>. Accept the license terms for the appliance.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-10.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-10.jpg" alt="" width="558" height="243" class="aligncenter size-full wp-image-8709" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-10.jpg 558w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-10-300x131.jpg 300w" sizes="(max-width: 558px) 100vw, 558px" /></a><br />
Wait for the appliance to do the pre-flight checks and then install <strong>VMware vSphere Virtual Disk Development Kit</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-11.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-11.jpg" alt="" width="522" height="468" class="aligncenter size-full wp-image-8710" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-11.jpg 522w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-11-300x269.jpg 300w" sizes="(max-width: 522px) 100vw, 522px" /></a><br />
Pretty much, you&#8217;ll have to download a ZIP file from VMware site, extract the ZIP and put it under C:\Program Files\VMWare\VMWare Virtual Disk Development Kit.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-12.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-12.jpg" alt="" width="408" height="221" class="aligncenter size-full wp-image-8711" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-12.jpg 408w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-12-300x163.jpg 300w" sizes="(max-width: 408px) 100vw, 408px" /></a><br />
Click <strong>Verify and Install</strong> and <strong>Continue</strong>. Then, login to Azure portal from the appliance to register it.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-13.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-13.jpg" alt="" width="537" height="288" class="aligncenter size-full wp-image-8712" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-13.jpg 537w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-13-300x161.jpg 300w" sizes="(max-width: 537px) 100vw, 537px" /></a><br />
Fill out the subscription, specify the migration project and enter a name for this appliance. Click <strong>Register</strong> and once successfully registered click <strong>Continue</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-14.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-14.jpg" alt="" width="571" height="539" class="aligncenter size-full wp-image-8713" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-14.jpg 571w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-14-300x283.jpg 300w" sizes="(max-width: 571px) 100vw, 571px" /></a><br />
Specify the vCenter where your VMs reside, enter the username and password and click to <strong>Validate Connection</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-15.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-15.jpg" alt="" width="568" height="481" class="aligncenter size-full wp-image-8714" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-15.jpg 568w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-15-300x254.jpg 300w" sizes="(max-width: 568px) 100vw, 568px" /></a><br />
Finally if everything is OK, click on <strong>Save and start discovery</strong>.<br />
<em>NOTE from the appliance: You will be able to review the discovered machines on the Azure portal and create as-on-premises assessments within 15 minutes. Collection of performance data will be initiated and it is recommended that you create performance-based assessments after 24-hours.</em><br />
It&#8217;s important to leave the appliance running for some time so it can properly determine the usage and size the destination VM for you. If you already know what size your VM will be in Azure, you don&#8217;t have to worry about this.<br />
Now, go back to Azure portal and find the <strong>Azure Migrate</strong> service. Click on <strong>Servers </strong>and then on <strong>Discovered servers</strong> under <strong>Assessment tools</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-16.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-16.jpg" alt="" width="673" height="358" class="aligncenter size-full wp-image-8715" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-16.jpg 673w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-16-300x160.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-16-585x311.jpg 585w" sizes="(max-width: 673px) 100vw, 673px" /></a><br />
You&#8217;ll see a list of all servers in your vCenter and their specs. We&#8217;ll create a new assessment group for two Linux servers that I have (apache and mysql) and that are part of my local WordPress installation.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-17.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-17.jpg" alt="" width="998" height="535" class="aligncenter size-full wp-image-8716" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-17.jpg 998w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-17-300x161.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-17-768x412.jpg 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-17-585x314.jpg 585w" sizes="(max-width: 998px) 100vw, 998px" /></a><br />
Then, create an assessment for that same group from the top menu.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-18.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-18.jpg" alt="" width="495" height="162" class="aligncenter size-full wp-image-8717" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-18.jpg 495w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-18-300x98.jpg 300w" sizes="(max-width: 495px) 100vw, 495px" /></a><br />
Make sure you change the assessment properties. That&#8217;s where you specify the region. Just click on <strong>View all</strong> and change the settings there.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-19.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-19.jpg" alt="" width="890" height="533" class="aligncenter size-full wp-image-8718" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-19.jpg 890w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-19-300x180.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-19-768x460.jpg 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-19-585x350.jpg 585w" sizes="(max-width: 890px) 100vw, 890px" /></a><br />
Now if you go back to the Azure Migrate, you&#8217;ll see that you have one group and one assessment.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-20.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-20.jpg" alt="" width="437" height="392" class="aligncenter size-full wp-image-8719" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-20.jpg 437w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-20-300x269.jpg 300w" sizes="(max-width: 437px) 100vw, 437px" /></a><br />
Click on the Groups and then on the actual group. You&#8217;ll see something like this.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-21.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-21.jpg" alt="" width="462" height="205" class="aligncenter size-full wp-image-8720" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-21.jpg 462w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-21-300x133.jpg 300w" sizes="(max-width: 462px) 100vw, 462px" /></a><br />
If you want to see what your server is doing in terms of connections to others servers over TCP/UDP, you have to install the agent. It&#8217;s not necessary, but you&#8217;ll see the dependencies. It&#8217;s useful when you migrate some servers as a group and then you realize that you need to migrate another server because there is a dependency.</p>
<h3>Dependencies agent</h3>
<p>Click on the link <strong>Requires agent installation</strong> and you&#8217;ll see this page. Pretty much you have to install two agents on each server and configure them. But, first you have to configure the <strong>OMS Workspace</strong> that gathers metadata from the VMs.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-22.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-22.jpg" alt="" width="1095" height="527" class="aligncenter size-full wp-image-8721" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-22.jpg 1095w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-22-300x144.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-22-1024x493.jpg 1024w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-22-768x370.jpg 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-22-585x282.jpg 585w" sizes="(max-width: 1095px) 100vw, 1095px" /></a><br />
Click on <strong>Configure OMS workspace</strong> first. Type a name a region and click <strong>Configure </strong>at the bottom.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-23.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-23.jpg" alt="" width="300" height="243" class="aligncenter size-full wp-image-8722" /></a></p>
<h4>Linux</h4>
<p>Download both files. You&#8217;ll get redirected to github for the first agent. Download <strong>omsagent-1.11.0-9.universal.x64.sh</strong> for a 64-bit Linux OS or whatever is the latest version. This is a bash script file with an embedded tar binary file. Transfer it to the Linux box, make sure it&#8217;s executable and run the script. Check this <a href="https://docs.microsoft.com/en-us/system-center/scom/manage-install-crossplat-agent-cmdline?view=sc-om-1807" rel="noopener noreferrer" target="_blank">link </a>for your version of Linux/Unix. Make sure you specify the Workspace ID and the Workspace Key, which you can get at the bottom of the page from the <strong>Dependencies </strong>screenshot (see the previous screenshot above).</p>
<pre class="brush: bash; title: ; notranslate">
wget https://github.com/microsoft/OMS-Agent-for-Linux/releases/download/OMSAgent_v1.11.0-9/omsagent-1.11.0-9.universal.x64.sh
chmod +x omsagent-1.11.0-9.universal.x64.sh
./omsagent-1.11.0-9.universal.x64.sh --install --enable-opsmgr -w &lt;workspaceID&gt; -s &lt;workspaceKey&gt;
</pre>
<p>You should see a message saying <strong>Shell bundle exiting with code 0</strong>.<br />
For the second agent, download it from the Microsoft site, change the permission to execute and run.</p>
<pre class="brush: bash; title: ; notranslate">
wget http://aka.ms/dependencyagentlinux -O InstallDependencyAgent-Linux64.bin
chmod +x InstallDependencyAgent-Linux64.bin
./InstallDependencyAgent-Linux64.bin
</pre>
<p>Type <strong>YES </strong>when prompted and you should be good.</p>
<h4>Windows</h4>
<p>Download both files (<strong>MMASetup-AMD64.exe</strong> and <strong>InstallDependencyAgent-Windows.exe</strong>). Install on each server. For the MMA agent, check to connect the agent to <strong>Azure Log Analytics (OMS)</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-24.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-24.jpg" alt="" width="510" height="392" class="aligncenter size-full wp-image-8723" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-24.jpg 510w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-24-300x231.jpg 300w" sizes="(max-width: 510px) 100vw, 510px" /></a><br />
Enter the Workspace ID and the key and choose Azure Commericial.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-25.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-25.jpg" alt="" width="511" height="395" class="aligncenter size-full wp-image-8724" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-25.jpg 511w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-25-300x232.jpg 300w" sizes="(max-width: 511px) 100vw, 511px" /></a><br />
Installing the dependency agent is even easier, just double-click the EXE and accept the agreement. From the <strong>Discovered servers</strong> list, click on the server where it says <strong>View dependencies</strong> and you&#8217;ll something like this.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-26.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-26.png" alt="" width="661" height="469" class="aligncenter size-full wp-image-8725" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-26.png 661w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-26-300x213.png 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-26-585x415.png 585w" sizes="(max-width: 661px) 100vw, 661px" /></a><br />
Click on each block to see more details.</p>
<h2>Server Migration</h2>
<p>Once we have all the pre-requisites in place and we are all confident in the assessment based on the confidence rating, we can proceed with the migration.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-27.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-27.jpg" alt="" width="847" height="223" class="aligncenter size-full wp-image-8726" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-27.jpg 847w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-27-300x79.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-27-768x202.jpg 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-27-585x154.jpg 585w" sizes="(max-width: 847px) 100vw, 847px" /></a><br />
Now, you can do the migration within <strong>Azure Migrate: Server Assessment</strong> tool. Just click on <strong>Discovered Servers</strong> under the tool and click <strong>Replicate </strong>from the menu.<br />
Specify the type of the hypervisor and the on-prem appliance.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-28.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-28.jpg" alt="" width="444" height="290" class="aligncenter size-full wp-image-8727" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-28.jpg 444w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-28-300x196.jpg 300w" sizes="(max-width: 444px) 100vw, 444px" /></a><br />
As you can see from the appliance suffix, the migration option of the assessment tool is in preview. You can proceed further. In the screenshot below, I&#8217;ll be migrating my Linux servers.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-29.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-29.png" alt="" width="819" height="587" class="aligncenter size-full wp-image-8728" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-29.png 819w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-29-300x215.png 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-29-768x550.png 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-29-585x419.png 585w" sizes="(max-width: 819px) 100vw, 819px" /></a><br />
You just have to specify where you want your servers migrated.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-30.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-30.jpg" alt="" width="831" height="468" class="aligncenter size-full wp-image-8729" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-30.jpg 831w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-30-300x169.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-30-768x433.jpg 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-30-585x329.jpg 585w" sizes="(max-width: 831px) 100vw, 831px" /></a><br />
Choose the size of the servers, the disk size and you can proceed.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-31.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-31.jpg" alt="" width="684" height="108" class="aligncenter size-full wp-image-8730" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-31.jpg 684w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-31-300x47.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-31-585x92.jpg 585w" sizes="(max-width: 684px) 100vw, 684px" /></a><br />
This is probably the way to go, but because it&#8217;s in preview, I&#8217;ll explain the old way too.<br />
Under the migration tool, click <strong>Discover</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-32.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-32.jpg" alt="" width="435" height="385" class="aligncenter size-full wp-image-8731" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-32.jpg 435w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-32-300x266.jpg 300w" sizes="(max-width: 435px) 100vw, 435px" /></a><br />
Specify where do you want your VMs migrated. This is an important step. Click on <strong>Create resources</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-33.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-33.jpg" alt="" width="502" height="400" class="aligncenter size-full wp-image-8732" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-33.jpg 502w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-33-300x239.jpg 300w" sizes="(max-width: 502px) 100vw, 502px" /></a><br />
Finish step 1. Download the OVA and install it in your vCenter. Same as with the previous OVA, log to the console, and change the IP to static. First, you&#8217;ll be prompted to name the appliance.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-34.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-34.jpg" alt="" width="635" height="179" class="aligncenter size-full wp-image-8733" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-34.jpg 635w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-34-300x85.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-34-585x165.jpg 585w" sizes="(max-width: 635px) 100vw, 635px" /></a><br />
Then log in to Azure portal.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-35.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-35.jpg" alt="" width="443" height="318" class="aligncenter size-full wp-image-8734" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-35.jpg 443w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-35-300x215.jpg 300w" sizes="(max-width: 443px) 100vw, 443px" /></a><br />
Configure the appliance using the Site Recovery icon on the desktop. It&#8217;s gonna ask you to log (again) to Azure and provide the subscription, resource group and the vault. Make sure you choose the vault that&#8217;s provided in the same dialog box where you downloaded the OVA. If you fail to provide the proper vault, you&#8217;ll have to deal with deleting hidden resources etc&#8230;<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-36.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-36.jpg" alt="" width="473" height="463" class="aligncenter size-full wp-image-8735" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-36.jpg 473w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-36-300x294.jpg 300w" sizes="(max-width: 473px) 100vw, 473px" /></a><br />
Next step is to agree to install MySQL server on the appliance and specify the vCenter.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-37.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-37.jpg" alt="" width="735" height="502" class="aligncenter size-full wp-image-8736" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-37.jpg 735w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-37-300x205.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-37-585x400.jpg 585w" sizes="(max-width: 735px) 100vw, 735px" /></a><br />
You should also add the credentials for Windows and Linux servers. For example, my username has full access to all Windows VMs and root has access to all Linux servers.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-38.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-38.jpg" alt="" width="788" height="428" class="aligncenter size-full wp-image-8737" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-38.jpg 788w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-38-300x163.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-38-768x417.jpg 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-38-585x318.jpg 585w" sizes="(max-width: 788px) 100vw, 788px" /></a><br />
Once completed, you can go to the Azure Portal and if you click on <strong>Replicate</strong>, you&#8217;ll see that our new appliance showed up.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-39.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-39.jpg" alt="" width="434" height="354" class="aligncenter size-full wp-image-8738" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-39.jpg 434w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-39-300x245.jpg 300w" sizes="(max-width: 434px) 100vw, 434px" /></a><br />
If you are having problems finding out where to register the new appliance, go to the <strong>Replicate </strong>menu. Fill out the pre-requisites and you&#8217;ll get a warning that your appliance is not registered. Click <strong>Finalize registration</strong> from here.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-40.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-40.jpg" alt="" width="912" height="569" class="aligncenter size-full wp-image-8739" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-40.jpg 912w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-40-300x187.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-40-768x479.jpg 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-40-585x365.jpg 585w" sizes="(max-width: 912px) 100vw, 912px" /></a><br />
As you can see, with this tool, migrate is grayed. First, we&#8217;ll have to replicate the servers.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-41.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-41.png" alt="" width="429" height="379" class="aligncenter size-full wp-image-8740" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-41.png 429w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-41-300x265.png 300w" sizes="(max-width: 429px) 100vw, 429px" /></a><br />
Fill out the settings and proceed. Make sure you choose the right credentials. I&#8217;ll be replicating Linux instances, so I chose Linux-CREDS. These were defined when we configured the appliance.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-42.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-42.png" alt="" width="806" height="494" class="aligncenter size-full wp-image-8741" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-42.png 806w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-42-300x184.png 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-42-768x471.png 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-42-585x359.png 585w" sizes="(max-width: 806px) 100vw, 806px" /></a><br />
Choose the VMs.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-43.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-43.png" alt="" width="821" height="643" class="aligncenter size-full wp-image-8742" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-43.png 821w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-43-300x235.png 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-43-768x601.png 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-43-585x458.png 585w" sizes="(max-width: 821px) 100vw, 821px" /></a><br />
Choose the VNET, subnet etc&#8230;<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-44.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-44.png" alt="" width="809" height="508" class="aligncenter size-full wp-image-8743" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-44.png 809w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-44-300x188.png 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-44-768x482.png 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-44-585x367.png 585w" sizes="(max-width: 809px) 100vw, 809px" /></a><br />
Choose the rest of the requirements (disk etc&#8230;) and click on <strong>Replicate</strong>.<br />
You can check the status from the tool. Click on <strong>Overview</strong>, then <strong>Replicating machines</strong>, then click the <strong>Other</strong> tab.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-45.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-45.png" alt="" width="1540" height="421" class="aligncenter size-full wp-image-8744" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-45.png 1540w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-45-300x82.png 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-45-1024x280.png 1024w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-45-768x210.png 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-45-1536x420.png 1536w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-45-1170x320.png 1170w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-45-585x160.png 585w" sizes="(max-width: 1540px) 100vw, 1540px" /></a><br />
Once the replication is completed, you can do a <strong>Test migration</strong> or <strong>full migration</strong>. Click on the menu (three dots) on the right of each VM and do a Test migration first. If you a confident, you can do full migration as well.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-46.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-46.jpg" alt="" width="298" height="292" class="aligncenter size-full wp-image-8745" /></a><br />
For a test migration, you have to specify a VNET. When you do a test migration, the original VM stays up and the new VM in Azure has a <strong>-test</strong> suffix. Here I have my apache server test-migrated in Azure.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-47.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-47.jpg" alt="" width="697" height="394" class="aligncenter size-full wp-image-8746" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-47.jpg 697w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-47-300x170.jpg 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-47-585x331.jpg 585w" sizes="(max-width: 697px) 100vw, 697px" /></a><br />
And I can access it over my VPN.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-48.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-48.jpg" alt="" width="377" height="195" class="aligncenter size-full wp-image-8747" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-48.jpg 377w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-48-300x155.jpg 300w" sizes="(max-width: 377px) 100vw, 377px" /></a><br />
When you a done, you can <strong>clean up the test migration</strong> from the same menu above and you&#8217;ll get an option to delete the test VM. Finally, once everything is OK, you can do a full migration. Click <strong>Migrate </strong>and you&#8217;ll be all set.<br />
NOTE: If you can&#8217;t RDP to your VM in Azure, it&#8217;s because RDP port was disabled. You can re-enable it from the console. Go to the VM menu and all the way down, click on <strong>Reset password</strong>. Do <strong>Reset configuration only</strong> and after a minute or so, you&#8217;ll be able to RDP.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-49.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-49.jpg" alt="" width="260" height="183" class="aligncenter size-full wp-image-8748" /></a><br />
And if you get this error, The remote computer requires Network Level Authentication&#8230;blah, blah, domain controller.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-50.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-50.jpg" alt="" width="554" height="163" class="aligncenter size-full wp-image-8749" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-50.jpg 554w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-50-300x88.jpg 300w" sizes="(max-width: 554px) 100vw, 554px" /></a><br />
&#8230;then log as local administrator and check the DNS settings. Most likely the DNS settings were messed up when migrating. Here is an example of what I got from my VM in Azure.</p>
<pre class="brush: bash; title: ; notranslate">
  Default Gateway . . . . . . . . . : 192.168.10.1
  DHCP Server . . . . . . . . . . . : 168.63.129.16
  DHCPv6 IAID . . . . . . . . . . . : 352324922
  DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-25-0F-72-AF-00-50-56-B9-F7-0F
  DNS Servers . . . . . . . . . . . : 168.63.129.16
</pre>
<p>Azure assigned a DNS in Azure. Change it to your DNS and you should be OK.</p>
<h3>Migrating a physical server</h3>
<p>In order to migrate a physical server, you&#8217;ll have to follow <a href="https://docs.microsoft.com/en-us/azure/migrate/tutorial-migrate-physical-virtual-machines" rel="noopener noreferrer" target="_blank">these </a>steps. In essence, you&#8217;ll have to log to the Azure Site recovery VM and go to this folder (<strong>C:\ProgramData\ASR\home\svsystems\pushinstallsvc\repository</strong>). Transfer the ASR file to each physical instance. While logged in the appliance, get your key.</p>
<pre class="brush: powershell; title: ; notranslate">
C:\ProgramData\ASR\home\svsystems\bin\genpassphrase.exe -v
</pre>
<p>Don&#8217;t run the EXE on the VM yet. You&#8217;ll have to do it from a command prompt. Open up a command prompt (with admin rights) and execute these lines.</p>
<pre class="brush: powershell; title: ; notranslate">
mkdir c:\temp
cd c:\&lt;path_to_EXE&gt;
ren Mi&lt;hit_TAB_for_autocompletion&gt; MobilityServiceInstaller.exe 
move MobilityServiceInstaller.exe c:\temp
cd c:\temp
MobilityServiceInstaller.exe /q /x:C:\Temp\
UnifiedAgent.exe /Role &quot;MS&quot; /Silent
</pre>
<p>The last command will open a new terminal window and install the agent. Wait to finish and you can exit. Then in the GUI go to <strong>c:\program files (x86)\Microsoft Azure Site Recovery\agent</strong> folder. Double-click the <strong>UnifiedAgentConfigurator.exe</strong> file and enter the IP of your <strong>Site Recovery</strong> appliance and the passphrase that you got from the command above.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-51.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-51.png" alt="" width="910" height="571" class="aligncenter size-full wp-image-8750" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-51.png 910w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-51-300x188.png 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-51-768x482.png 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-51-585x367.png 585w" sizes="(max-width: 910px) 100vw, 910px" /></a><br />
After 10 seconds you should have everything ready.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-52.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-52.png" alt="" width="511" height="190" class="aligncenter size-full wp-image-8751" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-52.png 511w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-52-300x112.png 300w" sizes="(max-width: 511px) 100vw, 511px" /></a><br />
Go back to the portal and in the <strong>Azure Migrate: Server Migration</strong> tool, click on <strong>Replicate</strong>. Under the <strong>Source settings</strong> tab, select that your machines are <strong>NOT</strong> virtualized. Choose the Site Recovery appliance and specify the credentials that will be used to access the physical server.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-53.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-53.png" alt="" width="779" height="431" class="aligncenter size-full wp-image-8752" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-53.png 779w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-53-300x166.png 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-53-768x425.png 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-53-585x324.png 585w" sizes="(max-width: 779px) 100vw, 779px" /></a><br />
You don&#8217;t have an assessment for the physical server, so choose to specify the migrations settings manually. My physical server is called W2012R2.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-54.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-54.png" alt="" width="654" height="456" class="aligncenter size-full wp-image-8753" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-54.png 654w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-54-300x209.png 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-54-585x408.png 585w" sizes="(max-width: 654px) 100vw, 654px" /></a><br />
Choose the subscription, VNET, subnet under <strong>Target settings</strong>. Choose automatic or specify the compute type of your instance under <strong>Compute </strong>tab and do the same for the disks under the next tab.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-55.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-55.png" alt="" width="810" height="184" class="aligncenter size-full wp-image-8754" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-55.png 810w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-55-300x68.png 300w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-55-768x174.png 768w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-55-585x133.png 585w" sizes="(max-width: 810px) 100vw, 810px" /></a><br />
Click <strong>Replicate </strong>when ready. After a minute or so, you can check the status  under <strong>Replicating servers</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2019/09/P136-56.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2019/09/P136-56.png" alt="" width="392" height="315" class="aligncenter size-full wp-image-8755" srcset="https://blog.andreev.it/wp-content/uploads/2019/09/P136-56.png 392w, https://blog.andreev.it/wp-content/uploads/2019/09/P136-56-300x241.png 300w" sizes="(max-width: 392px) 100vw, 392px" /></a><br />
&#8230;and same with the other VMs that were replicated, you can do a test migration and full migration. Once you power up the replicated server, make sure you uninstall any HW related software for the arrays, WMI management etc&#8230; And pretty much that&#8217;s it!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.andreev.it/2019/09/azure-migrate-vmware-vms-and-physical-servers-using-azure-migrate-server-assessment-and-server-migration/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>ESX/ESXi, AWS: Backup VMs in vCenter to AWS S3</title>
		<link>https://blog.andreev.it/2018/06/129-vcenter-aws-backup-vms-in-vcenter-to-aws-s3/</link>
					<comments>https://blog.andreev.it/2018/06/129-vcenter-aws-backup-vms-in-vcenter-to-aws-s3/#respond</comments>
		
		<dc:creator><![CDATA[Kliment Andreev]]></dc:creator>
		<pubDate>Sat, 30 Jun 2018 19:16:18 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[ESX/ESXi]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[vCenter]]></category>
		<guid isPermaLink="false">http://blog.iandreev.com/?p=3866</guid>

					<description><![CDATA[In my home lab, I run vCenter 6.7 with several ESXi hosts and since&#8230;]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>In my home lab, I run vCenter 6.7 with several ESXi hosts and since I built the lab I never did any backups.<br />
Now that my VMs are not test VMs and they became fairly important, I&#8217;ve decided to take care of the backups.<br />
Initially, I was thinking of using the Veeam Free Backup, but this program can&#8217;t do any schedules in the free version. Then I decided to play with OVF Tool, but I was having multiple issues with this tool and logging with a domain account. So, finally, I used PowerCLI and AWS CLI.<br />
The idea is to create a OVA export of each VM and then upload it to an S3 bucket. The source is well commented, so you shouldn&#8217;t have any issues in the script&#8217;s logic.</p>
<pre class="brush: bash; title: ; notranslate">
######################################################################################################
# vCenter2AWS v0.1
# K.Andreev - 06/30/2018
# Description:  Creates an OVA backup of all or selected vCenter VMs 
#				and uploads them to a bucket in AWS (optional)
# Prerequisites: PowerCLI, AWS CLI (configured)
# NOTE: The VM being backed up will be shut down and powered up when the OVA file is complete
# 		If using PowerCLI 10.x execute this line once
# 			Set-PowerCLIConfiguration -InvalidCertificateAction Ignore
######################################################################################################
# Function for logging
Function LogWrite {
   Param (&#x5B;string]$logstring)
   Add-content $LogFile -value ((Get-Date -format &quot;&#x5B;dd/MMM/yyyy:HH:mm:ss] &quot;).ToString() + $logstring)
}
######################################################################################################
########## IMPORTANT PARAMETERS. DO NOT IGNORE. MODIFY TO SUIT YOUR NEEDS. ###########################
######################################################################################################
# vCenter hostname
$VCenter = &quot;vcenter.domain.local&quot;
# vCenter username
$Username = &quot;myusername@domain.local&quot;
# vCenter password
$Password = &quot;SecretPassword&quot;
# Destination for the OVA backup files, make sure you have trailing \ at the end of this string
$Destination = &quot;D:\VMs\&quot;
# Exclude the following VMs from backups
$Exclude = @(&quot;VMware vCenter Server Appliance&quot;)
# Name of the S3 bucket (make sure it exists, lower case only, starts with s3://)
$S3Bucket = &quot;s3://vspherebackups&quot;
# Do you want to upload to S3
$Upload = $true
# Specify if the OVA file contains a time stamp 
# e.g. vmname.YYYYMMDDHHmm.ova ($true) or vmname.ova ($fasle)
$TimeStamp = $true
# Do you want the OVA files to be deleted after upload to S3
$DeleteOVA = $true
# Log file path and name
$LogFile = &quot;D:\VMs\vcenter2aws.log&quot;
######################################################################################################
################### EXPORT VMs AS OVA FILES ##########################################################
######################################################################################################
# Connect to vCenter
$Server = Connect-VIServer $VCenter -User $Username -Password $Password
LogWrite (&quot;Connected to &quot; + $Server)
# Get all VMs
$VMs = Get-VM
# Loop through each of the VMs
Foreach ($VM in $VMs) {
# Get the name of each VMs	
$Name = $VM.Name
    # Skip the backup for the VMs that are in the array variable defined above
    if ($Exclude.Contains($Name)) {
        LogWrite (&quot;Backup skipped for &quot;+ $Name)
        Continue
    }
    # Stop the VM in order to take a backup
    Stop-VM -VM $Name -Confirm:$false
    LogWrite (&quot;Stopping VM &quot; + $Name)
    # Calculates the time stamp that will become part of the name
    if ($TimeStamp) {
        $TimeStampName = Get-Date -UFormat &quot;%Y%m%d%H%M&quot;
        $TimeStampName = &quot;.&quot; + $TimeStampName
    } else
    # otherwise the time stamp will be blank
    {
        $TimeStampName = &quot;&quot;
    }
    LogWrite (&quot;Backup starts for &quot; + $Name)
    # Exports the VM as OVA file, overwrites if there is a same file at the destination
	Get-VM -Name $Name | Export-VApp -Destination ($Destination + $Name + $TimeStampName + &quot;.ova&quot;) -Format Ova -Force:$true
    LogWrite (&quot;Backup ends for &quot; + $Name)
    # Once the export completes, power up the VM
	Start-VM -VM $Name -RunAsync
    LogWrite (&quot;Starting VM &quot; + $Name)
}
# Disconnect from vCenter
Disconnect-VIServer -Server $Server -Confirm:$false
LogWrite (&quot;Disconnected from &quot; + $Server)
######################################################################################################
################################ UPLOAD TO AWS #######################################################
######################################################################################################
# Exit if upload is not needed
if (!$Upload) {
    LogWrite &quot;Upload to S3 skipped, exiting...&quot;
    exit
}
LogWrite (&quot;Upload to S3 bucket &quot; + $S3Bucket + &quot; starts&quot;)
# Use AWS CLI command to sync the destination folder and S3. 
aws s3 sync $Destination $S3Bucket
LogWrite (&quot;Upload to S3 bucket &quot; + $S3Bucket + &quot; ends&quot;)
######################################################################################################
################################ DELETE THE OVA FILES ################################################
######################################################################################################
# Exit if delete is not needed
if (!$DeleteOVA) {
    LogWrite &quot;Deleting OVA files skipped, exiting...&quot;
    exit
}
Get-ChildItem $Destination -Include *.ova -Recurse | Foreach ($_) {Remove-Item $_.Fullname}
LogWrite (&quot;Deleting OVA files from &quot; + $Destination)
LogWrite &quot;Script completed...Have a nice day!&quot;
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.andreev.it/2018/06/129-vcenter-aws-backup-vms-in-vcenter-to-aws-s3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AWS: Migrate VMs from VMware vCenter to Amazon AWS using AWS Connector</title>
		<link>https://blog.andreev.it/2017/09/111-aws-migrate-vms-vmware-vcenter-amazon-aws-using-aws-connector/</link>
					<comments>https://blog.andreev.it/2017/09/111-aws-migrate-vms-vmware-vcenter-amazon-aws-using-aws-connector/#respond</comments>
		
		<dc:creator><![CDATA[Kliment Andreev]]></dc:creator>
		<pubDate>Mon, 11 Sep 2017 00:10:55 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[ESX/ESXi]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[vCenter]]></category>
		<guid isPermaLink="false">http://blog.iandreev.com/?p=3140</guid>

					<description><![CDATA[Recently, I wrote a blog post about migrating VMs from VMware vCenter to AWS&#8230;]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>Recently, I wrote a <a href="https://blog.andreev.it/?p=3065" target="_blank" rel="noopener noreferrer">blog post</a> about migrating VMs from VMware vCenter to AWS using basic export OVA/OVF files. Amazon made a connector that ties your vCenter to AWS so the export is kind of simplified, but the configuration is not. While using the export as OVA/OVF requires you to change the NIC from vmxnet* to e1000 and changing the static IP of your server to DHCP, with AWS Connector you can leave everything as is. Also, the export as OVA/OVF requires your VM to be powered off, while with AWS Connector you can migrate your VMs while they are powered on (using snaps). I also found that AWS Connector is slower than plain export as OVA/OVF. In this post I&#8217;ll show you how to configure the AWS Connector. </p>
<div style="border:1px solid red; padding:16px;">
<p style="text-align:center;"><strong><span style="color:#800000;">IMPORTANT</span> </strong></p>
<p style="text-align:center;"><b>At time of this writing (mid-September 2017), vCenter 6.5 and 7.0 are not supported.</b></p>
<p style="text-align:center;"><b>Make sure you have RDP/SSH enabled on your servers before the migration.</b></p>
</div>
<p>AWS Connector is not just about VM migrations. It has some other useful functions. Check this <a href="https://aws.amazon.com/ec2/vcenter-portal/" target="_blank" rel="noopener noreferrer">web page</a> for more information and this <a href="http://docs.aws.amazon.com/amp/latest/userguide/amp-ug.pdf" target="_blank" rel="noopener noreferrer">PDF </a>for the install/user guide. So, head to <a href="https://aws.amazon.com/ec2/vcenter-portal/" target="_blank" rel="noopener noreferrer">this </a>page first and scroll all the way down to the bottom.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-01.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-01.png" alt="" width="372" height="378" class="aligncenter size-full wp-image-7669" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-01.png 372w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-01-295x300.png 295w" sizes="(max-width: 372px) 100vw, 372px" /></a><br />
Step 1, Download the AWS Connector. Step 2, click on Setup AWS Management Portal for vCenter. Log in with your AWS account. Click on <strong>Get Started Now</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-02.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-02.png" alt="" width="907" height="305" class="aligncenter size-full wp-image-7670" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-02.png 907w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-02-300x101.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-02-768x258.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-02-585x197.png 585w" sizes="(max-width: 907px) 100vw, 907px" /></a><br />
I will use the first option and most likely you&#8217;ll do. Option 2 is if you have a SSO (Single Sign-On) to AWS.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-03.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-03.png" alt="" width="1241" height="387" class="aligncenter size-full wp-image-7671" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-03.png 1241w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-03-300x94.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-03-1024x319.png 1024w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-03-768x239.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-03-1170x365.png 1170w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-03-585x182.png 585w" sizes="(max-width: 1241px) 100vw, 1241px" /></a><br />
Make sure you have some IAM users defined, otherwise you&#8217;ll receive this error. As a matter of fact, you&#8217;ll want a separate IAM user for this. This user acts as a proxy between AWS and your vCenter.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-04.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-04.png" alt="" width="473" height="44" class="aligncenter size-full wp-image-7672" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-04.png 473w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-04-300x28.png 300w" sizes="(max-width: 473px) 100vw, 473px" /></a><br />
In my case, I&#8217;ve created a new IAM user called <strong>vCenter</strong>. Check <strong>Programmatic Access</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-05.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-05.png" alt="" width="1000" height="435" class="aligncenter size-full wp-image-7673" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-05.png 1000w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-05-300x131.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-05-768x334.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-05-585x254.png 585w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><br />
On the next screen, click on the <strong>Attach existing policies directly</strong> and in the <strong>Filter: Policy type</strong>, start typing <strong>AWSConnector</strong>. This is an AWS managed policy. Click on the check mark and proceed.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-06.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-06.png" alt="" width="1141" height="533" class="aligncenter size-full wp-image-7674" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-06.png 1141w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-06-300x140.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-06-1024x478.png 1024w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-06-768x359.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-06-585x273.png 585w" sizes="(max-width: 1141px) 100vw, 1141px" /></a><br />
Make sure you download your credentials for this IAM user. They&#8217;ll be saved as <strong>credentials.csv</strong> file on your computer.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-07.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-07.png" alt="" width="1139" height="348" class="aligncenter size-full wp-image-7675" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-07.png 1139w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-07-300x92.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-07-1024x313.png 1024w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-07-768x235.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-07-585x179.png 585w" sizes="(max-width: 1139px) 100vw, 1139px" /></a><br />
Go back to your first tab (or the initial URL) and hit refresh. Type the username vCenter and click on the check mark that you agree.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-08.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-08.png" alt="" width="1018" height="451" class="aligncenter size-full wp-image-7676" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-08.png 1018w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-08-300x133.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-08-768x340.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-08-585x259.png 585w" sizes="(max-width: 1018px) 100vw, 1018px" /></a><br />
The next step tells you to add the admins for AWS Management Portal. Make sure that these accounts are admins in vCenter. In my case, my vCenter is joined to the domain and I am using my own domain account to manage vCenter. You can create a separate user for this, but make sure it&#8217;s a vCenter admin.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-09.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-09.png" alt="" width="1039" height="546" class="aligncenter size-full wp-image-7677" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-09.png 1039w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-09-300x158.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-09-1024x538.png 1024w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-09-768x404.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-09-585x307.png 585w" sizes="(max-width: 1039px) 100vw, 1039px" /></a><br />
Now, this part is very important. I&#8217;ve spent hours troubleshooting this. It was right in front of my eyes, but I didn&#8217;t pay attention.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-10.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-10.png" alt="" width="525" height="142" class="aligncenter size-full wp-image-7678" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-10.png 525w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-10-300x81.png 300w" sizes="(max-width: 525px) 100vw, 525px" /></a><br />
The easiest way is to open a command prompt from your desktop and type:</p>
<pre class="brush: bash; title: ; notranslate">
set | find &quot;USERDOMAIN&quot;
</pre>
<p>My domain is not andreev. It is actually ANDREEV, so I had to correct the entry.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-11.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-11.png" alt="" width="506" height="335" class="aligncenter size-full wp-image-7679" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-11.png 506w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-11-300x199.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-11-263x175.png 263w" sizes="(max-width: 506px) 100vw, 506px" /></a><br />
The last entry will ask you to create an AMP-Connector Key. Just type some name.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-12.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-12.png" alt="" width="1021" height="282" class="aligncenter size-full wp-image-7680" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-12.png 1021w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-12-300x83.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-12-768x212.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-12-585x162.png 585w" sizes="(max-width: 1021px) 100vw, 1021px" /></a><br />
At the end, you&#8217;ll have to download the configuration file. It&#8217;s a text file with some key text in it.<br />
So, you have two files now, one with the credentials for the proxy user and one with the configuration key. After you are done with this, you&#8217;ll land up on this page. You can expand the settings and make sure everything looks OK. You can ignore the <strong>Configure Instance Export</strong> menu. That&#8217;s for S3 exports.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-13.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-13.png" alt="" width="830" height="456" class="aligncenter size-full wp-image-7681" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-13.png 830w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-13-300x165.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-13-768x422.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-13-585x321.png 585w" sizes="(max-width: 830px) 100vw, 830px" /></a><br />
Now, you will need another proxy user, but this time on the vCenter side. It can be a local vCenter user or in my case, I prefer to have an AD account. So, I&#8217;ve created an AD account called <strong>awsconnector</strong>. No special rights needed and don&#8217;t add this account to vCenter. Just create a plain AD account as a <strong>Domain User</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-14.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-14.png" alt="" width="443" height="379" class="aligncenter size-full wp-image-7682" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-14.png 443w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-14-300x257.png 300w" sizes="(max-width: 443px) 100vw, 443px" /></a><br />
At this point, you should be OK on the AWS side. Head back to your vCenter and deploy the OVA file that you&#8217;ve downloaded.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-15.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-15.png" alt="" width="418" height="178" class="aligncenter size-full wp-image-7683" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-15.png 418w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-15-300x128.png 300w" sizes="(max-width: 418px) 100vw, 418px" /></a><br />
Once the appliance is provisioned, power it up. If you have a DHCP on your network and you are fine with the DHCP assigned IP on this VM, you don&#8217;t have to do anything. But, I prefer to have a static IP so open the console of this VM and log as <strong>ec2-user</strong> with <strong>ec2pass </strong>as a password. Type <strong>sudo setup.rb</strong>. Type <strong>ec2pass </strong>for password. You should see this menu. Choose <strong>option 2</strong> to assign a static IP if you need. If you are OK with a DHCP, it&#8217;s fine. It&#8217;s up to you.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-16.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-16.png" alt="" width="869" height="328" class="aligncenter size-full wp-image-7684" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-16.png 869w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-16-300x113.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-16-768x290.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-16-585x221.png 585w" sizes="(max-width: 869px) 100vw, 869px" /></a><br />
Once you have the AWS Connector on the network go to <strong>https://aws_connector_IP</strong> address. Make sure to use https. Use your vCenter admin to log in.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-17.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-17.png" alt="" width="485" height="343" class="aligncenter size-full wp-image-7685" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-17.png 485w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-17-300x212.png 300w" sizes="(max-width: 485px) 100vw, 485px" /></a><br />
Click <strong>Trust </strong>when you get a certificate warning.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-18.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-18.png" alt="" width="494" height="504" class="aligncenter size-full wp-image-7686" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-18.png 494w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-18-294x300.png 294w" sizes="(max-width: 494px) 100vw, 494px" /></a><br />
You&#8217;ll be prompted to change the web front-end password. There is no user name for this next time you log to your AWS Connector.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-19.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-19.png" alt="" width="419" height="368" class="aligncenter size-full wp-image-7687" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-19.png 419w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-19-300x263.png 300w" sizes="(max-width: 419px) 100vw, 419px" /></a><br />
Once you log in, this will pop up.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-20.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-20.png" alt="" width="763" height="531" class="aligncenter size-full wp-image-7688" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-20.png 763w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-20-300x209.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-20-585x407.png 585w" sizes="(max-width: 763px) 100vw, 763px" /></a><br />
Click <strong>Upload the configuration file</strong>, select the file that you&#8217;ve downloaded from AWS. It&#8217;s called <strong>AMP_Setup_Configuration.txt</strong> and click <strong>Next</strong>. Again, log with your vCenter admin account.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-21.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-21.png" alt="" width="770" height="534" class="aligncenter size-full wp-image-7689" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-21.png 770w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-21-300x208.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-21-768x533.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-21-585x406.png 585w" sizes="(max-width: 770px) 100vw, 770px" /></a><br />
Click <strong>Trust</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-22.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-22.png" alt="" width="506" height="501" class="aligncenter size-full wp-image-7690" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-22.png 506w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-22-300x297.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-22-150x150.png 150w" sizes="(max-width: 506px) 100vw, 506px" /></a><br />
Now, enter that AD account that you&#8217;ve just created.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-23.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-23.png" alt="" width="771" height="544" class="aligncenter size-full wp-image-7691" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-23.png 771w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-23-300x212.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-23-768x542.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-23-585x413.png 585w" sizes="(max-width: 771px) 100vw, 771px" /></a><br />
Use the credentials from <strong>credentials.csv</strong> file to enter the username and password. The <strong>Trust Role ARN</strong> field should be automatically populated.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-24.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-24.png" alt="" width="786" height="530" class="aligncenter size-full wp-image-7692" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-24.png 786w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-24-300x202.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-24-768x518.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-24-585x394.png 585w" sizes="(max-width: 786px) 100vw, 786px" /></a><br />
Click on <strong>I agree to install the vCenter SSL certificates</strong>&#8230; otherwise you won&#8217;t be able to proceed and click <strong>Register</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-25.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-25.png" alt="" width="772" height="545" class="aligncenter size-full wp-image-7693" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-25.png 772w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-25-300x212.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-25-768x542.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-25-585x413.png 585w" sizes="(max-width: 772px) 100vw, 772px" /></a><br />
You should get this pop-up which means you are good.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-26.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-26.png" alt="" width="518" height="158" class="aligncenter size-full wp-image-7694" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-26.png 518w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-26-300x92.png 300w" sizes="(max-width: 518px) 100vw, 518px" /></a><br />
Open the vCenter client and from the <strong>Plug-ins</strong> menu click <strong>Manage Plug-ins</strong>&#8230;The AWS Connector should be enabled.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-27.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-27.png" alt="" width="758" height="162" class="aligncenter size-full wp-image-7695" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-27.png 758w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-27-300x64.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-27-585x125.png 585w" sizes="(max-width: 758px) 100vw, 758px" /></a><br />
In the web client it should look like this.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-28.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-28.png" alt="" width="530" height="366" class="aligncenter size-full wp-image-7696" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-28.png 530w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-28-300x207.png 300w" sizes="(max-width: 530px) 100vw, 530px" /></a><br />
Now, it&#8217;s time to get some action. Pick a VM that you want to migrate to AWS. Did I say that you need RDP/SSH enabled?<br />
Right-click on this VM and choose <strong>Migrate to EC2</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-29.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-29.png" alt="" width="325" height="404" class="aligncenter size-full wp-image-7697" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-29.png 325w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-29-241x300.png 241w" sizes="(max-width: 325px) 100vw, 325px" /></a><br />
You&#8217;ll get this error. AWS Connector is not yet configured.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-30.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-30.png" alt="" width="840" height="125" class="aligncenter size-full wp-image-7698" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-30.png 840w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-30-300x45.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-30-768x114.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-30-585x87.png 585w" sizes="(max-width: 840px) 100vw, 840px" /></a><br />
All right, so go to <strong>Home -> AWS Management Portal</strong> in vCenter and add the preferred region.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-31.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-31.png" alt="" width="403" height="452" class="aligncenter size-full wp-image-7699" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-31.png 403w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-31-267x300.png 267w" sizes="(max-width: 403px) 100vw, 403px" /></a><br />
Click on <strong>Create an environment</strong>.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-32.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-32.png" alt="" width="494" height="479" class="aligncenter size-full wp-image-7700" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-32.png 494w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-32-300x291.png 300w" sizes="(max-width: 494px) 100vw, 494px" /></a><br />
Select your VPC and choose all subnets.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-33.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-33.png" alt="" width="724" height="538" class="aligncenter size-full wp-image-7701" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-33.png 724w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-33-300x223.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-33-585x435.png 585w" sizes="(max-width: 724px) 100vw, 724px" /></a><br />
Go back to your VM and try to migrate it to EC2.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-34.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-34.png" alt="" width="713" height="607" class="aligncenter size-full wp-image-7702" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-34.png 713w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-34-300x255.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-34-585x498.png 585w" sizes="(max-width: 713px) 100vw, 713px" /></a><br />
Oh, snap!<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-35.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-35.png" alt="" width="544" height="183" class="aligncenter size-full wp-image-7703" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-35.png 544w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-35-300x101.png 300w" sizes="(max-width: 544px) 100vw, 544px" /></a><br />
Go to vCenter roles, and follow up the instructions from above.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-36.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-36.png" alt="" width="669" height="677" class="aligncenter size-full wp-image-7704" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-36.png 669w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-36-296x300.png 296w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-36-585x592.png 585w" sizes="(max-width: 669px) 100vw, 669px" /></a><br />
Then again, go back to your VM, right-click and choose <strong>Migrate to EC2</strong>. You&#8217;ll get this warning. It pretty much tells you that while migrating the VM will be slow.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-37.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-37.png" alt="" width="475" height="129" class="aligncenter size-full wp-image-7705" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-37.png 475w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-37-300x81.png 300w" sizes="(max-width: 475px) 100vw, 475px" /></a><br />
Once the migration starts you&#8217;ll see this.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-38.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-38.png" alt="" width="678" height="249" class="aligncenter size-full wp-image-7706" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-38.png 678w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-38-300x110.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-38-585x215.png 585w" sizes="(max-width: 678px) 100vw, 678px" /></a><br />
Do that. Go to <strong>Home -> AWS Management Portal -> Dashboard</strong> in vCenter. You&#8217;ll see the progress. If you scroll to the right you can actually see how much is uploaded. AWS is uploading the snap, so my VM has a 30GB disk (thick provisioned), but it was a plain vanilla OS with nothing installed except a text file on the desktop. So the actual size for upload is 4GB.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-39.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-39.png" alt="" width="1149" height="826" class="aligncenter size-full wp-image-7707" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-39.png 1149w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-39-300x216.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-39-1024x736.png 1024w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-39-768x552.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-39-585x421.png 585w" sizes="(max-width: 1149px) 100vw, 1149px" /></a><br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-40.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-40.png" alt="" width="909" height="40" class="aligncenter size-full wp-image-7708" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-40.png 909w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-40-300x13.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-40-768x34.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-40-585x26.png 585w" sizes="(max-width: 909px) 100vw, 909px" /></a><br />
Once your migration completes, you can find your instance/VM under <strong>IMAGES | AMIs</strong> in AWS console.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-41.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-41.png" alt="" width="594" height="34" class="aligncenter size-full wp-image-7709" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-41.png 594w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-41-300x17.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-41-585x34.png 585w" sizes="(max-width: 594px) 100vw, 594px" /></a><br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-42.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-42.png" alt="" width="578" height="211" class="aligncenter size-full wp-image-7710" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-42.png 578w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-42-300x110.png 300w" sizes="(max-width: 578px) 100vw, 578px" /></a><br />
Right-click on the AMI, choose <strong>Launch</strong>, follow the prompts and you should be all set. You&#8217;ll have to specify a key, but you can use your local admin credentials to log in.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/09/P089-43.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/09/P089-43.png" alt="" width="1231" height="233" class="aligncenter size-full wp-image-7711" srcset="https://blog.andreev.it/wp-content/uploads/2017/09/P089-43.png 1231w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-43-300x57.png 300w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-43-1024x194.png 1024w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-43-768x145.png 768w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-43-1170x221.png 1170w, https://blog.andreev.it/wp-content/uploads/2017/09/P089-43-585x111.png 585w" sizes="(max-width: 1231px) 100vw, 1231px" /></a></p>
<div style="border:1px solid red; padding:16px;">
<p style="text-align:center;"><strong><span style="color:#800000;">IMPORTANT</span> </strong></p>
<p style="text-align:center;"><b>Make sure you have all your licensing in place. If your on-prem VM uses KMS for licensing, the migrated instance in AWS will need access to your KMS server.</b></p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.andreev.it/2017/09/111-aws-migrate-vms-vmware-vcenter-amazon-aws-using-aws-connector/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AWS: Migrate VMs from VMware vCenter to Amazon AWS</title>
		<link>https://blog.andreev.it/2017/07/108-aws-migrate-vms-vmware-vcenter-amazon-aws/</link>
					<comments>https://blog.andreev.it/2017/07/108-aws-migrate-vms-vmware-vcenter-amazon-aws/#respond</comments>
		
		<dc:creator><![CDATA[Kliment Andreev]]></dc:creator>
		<pubDate>Sat, 15 Jul 2017 22:07:43 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[ESX/ESXi]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[vCenter]]></category>
		<guid isPermaLink="false">http://blog.iandreev.com/?p=3065</guid>

					<description><![CDATA[I needed to move some VMs from my home lab (vCenter 5.5) to my&#8230;]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>I needed to move some VMs from my home lab (vCenter 5.5) to my Amazon AWS cloud account. This is what I did.<br />
First, you have to prepare the VM. If you have any vmxnet* network card, you have to delete it from the properties of the VM in vCenter. Second, make sure that you have RDP or SSH enabled on the VM and third, uninstall the VMware tools. Shut down the VM, add an E1000 NIC and power it up again. Make sure that the TCP/IP and DNS settings for the new NIC are set for DHCP. Verify that all these requirements apply and then shut down the VM again.<br />
In vCenter, select the VM for export, click on <strong>File | Export</strong> and then <strong>Export OVF</strong> template. Choose Single file (OVA).<br />
<a href="https://blog.andreev.it/wp-content/uploads/2017/07/P086-01.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2017/07/P086-01.png" alt="" width="606" height="439" class="aligncenter size-full wp-image-7647" srcset="https://blog.andreev.it/wp-content/uploads/2017/07/P086-01.png 606w, https://blog.andreev.it/wp-content/uploads/2017/07/P086-01-300x217.png 300w, https://blog.andreev.it/wp-content/uploads/2017/07/P086-01-585x424.png 585w" sizes="(max-width: 606px) 100vw, 606px" /></a><br />
Once the export is completed, you have to upload the OVA file to a S3 bucket. I created a new bucket for this, called <strong>uploadvmstuff </strong>with the default settings. You&#8217;ll have to pick a unique name for the bucket, but you probably know that. Upload your OVA file to S3. It might take a while depending how big the file is. </p>
<p>I am using my admin account in AWS to import the VM, but I still have to assign some policies. So, when the upload is complete, go to the command prompt or PowerShell on your desktop. Make sure you have AWS CLI installed. You can check my <a href="https://blog.andreev.it/?p=1905" target="_blank" rel="noopener noreferrer">other </a>blog post on how to do this. Very simple. </p>
<p>Create these three files in Notepad and save them on the desktop. The first file is called <strong>trust-policy.json</strong>. See this <a href="http://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#w2ab1b9c15b7" target="_blank" rel="noopener noreferrer">link </a>for more info. </p>
<pre class="brush: xml; title: ; notranslate">
{
   &quot;Version&quot;: &quot;2012-10-17&quot;,
   &quot;Statement&quot;: &#x5B;
      {
         &quot;Effect&quot;: &quot;Allow&quot;,
         &quot;Principal&quot;: { &quot;Service&quot;: &quot;vmie.amazonaws.com&quot; },
         &quot;Action&quot;: &quot;sts:AssumeRole&quot;,
         &quot;Condition&quot;: {
            &quot;StringEquals&quot;:{
               &quot;sts:Externalid&quot;: &quot;vmimport&quot;
            }
         }
      }
   ]
}
</pre>
<p>Execute this command from the command prompt. Make sure that you are in the same folder in the command prompt where you saved your files, e.g. <strong>cd c:\users\whatever\desktop</strong>. </p>
<pre class="brush: bash; title: ; notranslate">
aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json
</pre>
<p>Create the 2nd file called <strong>role-policy.json</strong> so it looks like this. Replace the two occurrences of <strong>disk-image-file-bucket</strong> with your bucket name, in my case it was <strong>uploadvmstuff</strong>.</p>
<pre class="brush: xml; title: ; notranslate">
{
   &quot;Version&quot;: &quot;2012-10-17&quot;,
   &quot;Statement&quot;: &#x5B;
      {
         &quot;Effect&quot;: &quot;Allow&quot;,
         &quot;Action&quot;: &#x5B;
            &quot;s3:ListBucket&quot;,
            &quot;s3:GetBucketLocation&quot;
         ],
         &quot;Resource&quot;: &#x5B;
            &quot;arn:aws:s3:::disk-image-file-bucket&quot;
         ]
      },
      {
         &quot;Effect&quot;: &quot;Allow&quot;,
         &quot;Action&quot;: &#x5B;
            &quot;s3:GetObject&quot;
         ],
         &quot;Resource&quot;: &#x5B;
            &quot;arn:aws:s3:::disk-image-file-bucket/*&quot;
         ]
      },
      {
         &quot;Effect&quot;: &quot;Allow&quot;,
         &quot;Action&quot;:&#x5B;
            &quot;ec2:ModifySnapshotAttribute&quot;,
            &quot;ec2:CopySnapshot&quot;,
            &quot;ec2:RegisterImage&quot;,
            &quot;ec2:Describe*&quot;
         ],
         &quot;Resource&quot;: &quot;*&quot;
      }
   ]
}
</pre>
<p>Execute this command from the command prompt.</p>
<pre class="brush: bash; title: ; notranslate">
aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json
</pre>
<p>The third file is called <strong>containers.json</strong> and it looks like this. Change the lines so it matches your settings. For <strong>Description </strong>use whatever you want, change the <strong>S3Bucket </strong>line and the <strong>S3Key</strong>. The <strong>S3Key </strong>is the name of the ova file that you&#8217;ve exported from vCenter. </p>
<pre class="brush: xml; title: ; notranslate">
&#x5B;
  {
    &quot;Description&quot;: &quot;Windows 2008R2 Import&quot;,
    &quot;Format&quot;: &quot;ova&quot;,
    &quot;UserBucket&quot;: {
        &quot;S3Bucket&quot;: &quot;uploadvmstuff&quot;,
        &quot;S3Key&quot;: &quot;nvm.ova&quot;
    }
}]
</pre>
<p>Now, you are ready to import the file from S3 to EC2. Execute this line from the command prompt.</p>
<pre class="brush: bash; title: ; notranslate">
aws ec2 import-image --description &quot;Windows 2008R2 VMDKs&quot; --license-type BYOL --disk-containers file://containers.json
</pre>
<p>You should get your prompt back after 2-3 seconds. But, this means that the import started, not that it finished. To check the status, execute this line.</p>
<pre class="brush: bash; title: ; notranslate">
aws ec2 describe-import-image-tasks
</pre>
<p>It takes some time, for my OVA file that was created from a 40GB disk and 3.7GB OVA file it took about 20-25 mins. You will see the <strong>Status </strong>change to completed once everything is OK. Make sure that your AWS CLI is configured to do the output in JSON so it&#8217;s easy to see. </p>
<p>Once completed, you will see your import in the AMI section of EC2. Go to EC2 section, click Launch New Instance and choose the AMI that you just created. Follow the standard prompts for the type of the instance, security groups, volumes, etc&#8230; and once your instance is launched you can RDP to it. You will use the same admin password as before to RDP.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.andreev.it/2017/07/108-aws-migrate-vms-vmware-vcenter-amazon-aws/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PowerShell: CommVault report from vCenter</title>
		<link>https://blog.andreev.it/2016/06/90-windowspowershell-commvault-report-in-vcenter/</link>
					<comments>https://blog.andreev.it/2016/06/90-windowspowershell-commvault-report-in-vcenter/#respond</comments>
		
		<dc:creator><![CDATA[Kliment Andreev]]></dc:creator>
		<pubDate>Thu, 30 Jun 2016 15:34:58 +0000</pubDate>
				<category><![CDATA[ESX/ESXi]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[CommVault]]></category>
		<category><![CDATA[vCenter]]></category>
		<guid isPermaLink="false">http://blog.iandreev.com/?p=2603</guid>

					<description><![CDATA[Recently, we moved to CommVault for backing up VMs. We use a CommVault solution&#8230;]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>Recently, we moved to CommVault for backing up VMs. We use a CommVault solution that interacts with NetApp for taking snaps. Once the backup runs, it time-stamps the VM with the last backup taken. If you don&#8217;t need an e-mail in HTML format with the report, remove the lines from 103 to 113. Finally, remove the comment line # from line 57 if you want the report on the screen.</p>
<p><a href="https://blog.andreev.it/wp-content/uploads/2016/06/P069-01.jpg"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2016/06/P069-01.jpg" alt="" width="360" height="170" class="aligncenter size-full wp-image-7488" srcset="https://blog.andreev.it/wp-content/uploads/2016/06/P069-01.jpg 360w, https://blog.andreev.it/wp-content/uploads/2016/06/P069-01-300x142.jpg 300w" sizes="(max-width: 360px) 100vw, 360px" /></a><br />
Based on this info, I made a script that loops through all clusters and VMs and dumps the report in a mail. You can remove lines 5 to 14 if you don&#8217;t want the script scheduled. </p>
<pre class="brush: powershell; title: ; notranslate">
# PowerCLI script that lists all VMs under clusters that start with USCORPROD*
# and prints the Last Backup attribute from CommVault
# If the difference between the run time of the script and the last backup is
# more than $HoursDifference, write the output with red color
Add-PSSnapin VMware.VimAutomation.Core
Add-PSSnapin VMware.VimAutomation.Vds
if(get-item HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellSnapIns\VMware.VimAutomation.Core){
	. ((get-item HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellSnapIns\VMware.VimAutomation.Core).GetValue(&quot;ApplicationBase&quot;)+&quot;\Scripts\Initialize-PowerCLIEnvironment.ps1&quot;)
}
else
{
	write-warning &quot;PowerCLI Path not found in registry, please set path to Initialize-PowerCLIEnvironment.ps1 manually. Is PowerCli aleady installed?&quot;
	. &quot;D:\Programs (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1&quot;
}

# Specify the vCenter server
$server = &quot;vcenter&quot;
# Specify the difference in hours to compare
$HoursDifferenceCompare = 24
# Cluster filter
$ClusterFilter = &quot;*&quot;
# Connect to vCenter
Connect-VIServer -Server $server -user domain\username -password vcpassword
# Initalize the main HTML content
$midHTML=&quot;&quot;
# Get each cluster that starts with $ClusterFilter and sort them. 
# Make sure only unique values are returned
ForEach ($Cluster in Get-Cluster $ClusterFilter | Sort -unique)
{
	# Get all the VMs per cluster
	$VMs = Get-Cluster $Cluster | Get-VM 
	# Loop each VM
	ForEach ($VM in $VMs)
	{
		# Get the last backup attribute
		$LastBackup = Get-VM $VM | Get-Annotation -CustomAttribute &quot;Last Backup&quot;
		# Parse the output, trinm the string
		$LastBackupTimeStamp = $LastBackup -replace &quot;Last Backup:&quot;
		# Get the date/time when the script started
		$StartDate=(Get-Date)
		# The end date is the Last Backup time for the VM
		# If the VM was never backed up, assume 01/01/70
		if ($LastBackupTimeStamp -eq '') {
			$EndDate = &#x5B;datetime]'January 1, 1970'
			$LastBackupTimeStamp = &quot;NEVER&quot;}
		else {
			$EndDate = &#x5B;datetime]$LastBackupTimeStamp 
			}
		# Calculate the difference
		$TimeSpan = New-TimeSpan -Start $StartDate -End $EndDate
		# It's a negative value, so get the absolute
		$DaysDifference = &#x5B;math]::abs($TimeSpan.Days)
		$HoursDifference = &#x5B;math]::abs($TimeSpan.Hours) + ($DaysDifference * 24)
		# Print the output
		if ($HoursDifference -gt $HoursDifferenceCompare) {
			# Remove for debugging if needed
			#Write-Host $Cluster &quot; &quot; $VM &quot; &quot; $LastBackupTimeStamp
			# Build the HTML
			$midHTML = $midHTML + '&lt;font color=&quot;red&quot;&gt;'
			$midHTML = $midHTML + &quot;&lt;p&gt;&quot; + $Cluster + &quot; &quot; + $VM.Name.PadRight(30,&quot;-&quot;) + &quot; &quot; + $LastBackupTimeStamp + &quot;&lt;/p&gt;&quot;
			$midHTML = $midHTML + &quot;&lt;/font&gt;&quot;
		} else {
			$midHTML = $midHTML + &quot;&lt;p&gt;&quot; + $Cluster + &quot; &quot; + $VM.Name.PadRight(30,&quot;-&quot;) + &quot; &quot; + $LastBackupTimeStamp + &quot;&lt;/p&gt;&quot;
		}
	}	
}

# Top HTML header
$topHTML = @&quot;
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;body&gt;
&lt;font face=&quot;Courier New, Courier, monospace&quot;&gt;
&lt;style&gt;
p
{
  margin:0;
  padding:0;
  font-size:12px;
    line-height:12px;
}
div
{
  margin:0;
  padding:0;
}
&lt;/style&gt;
&lt;div&gt;
&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;CLUSTER NAME&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;SERVER NAME&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;DATE OF LAST BACKUP&lt;/p&gt;
&lt;p&gt;-----------------------------------------------------------------------&lt;/p&gt;
&quot;@

# Bottom HTML footer
$bottomHTML = @&quot;
&lt;p&gt;-----------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;Script by K.Andreev - 20160630&lt;/p&gt;
&lt;/div&gt;
&lt;/font&gt;
&lt;/body&gt;
&lt;/html&gt;
&quot;@

# e-mail setup
$EmailFrom =&quot;sender@domain.com&quot;
$EmailTo =&quot;receiver@domain.com&quot;
$msg = New-Object System.Net.Mail.MailMessage ($EmailFrom,$EmailTo)
$msg.subject = &quot;CommVault Report &quot; + $StartDate
$msg.IsBodyHtml = $true;
$msg.Body =$topHTML + $midHTML + $bottomHTML
$smtpClient = New-Object System.Net.Mail.SmtpClient
$smtpClient.Host = &quot;smtp.server.com&quot;
$smtpClient.EnableSsl = $false
$smtpClient.Send($msg)

# Disconnect from vCenter
Disconnect-VIServer -Server $Server -Confirm:$false
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.andreev.it/2016/06/90-windowspowershell-commvault-report-in-vcenter/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ESX/ESXi: Enable sound (audio) in a VM for use in a RDP session</title>
		<link>https://blog.andreev.it/2014/01/enable-sound-audio-in-a-vm-for-use-in-a-rdp-session/</link>
					<comments>https://blog.andreev.it/2014/01/enable-sound-audio-in-a-vm-for-use-in-a-rdp-session/#respond</comments>
		
		<dc:creator><![CDATA[Kliment Andreev]]></dc:creator>
		<pubDate>Sun, 19 Jan 2014 00:36:42 +0000</pubDate>
				<category><![CDATA[ESX/ESXi]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[RDP]]></category>
		<guid isPermaLink="false">http://blog.iandreev.com/?p=1224</guid>

					<description><![CDATA[I manage a terminal server that Service Desk is using to access some applications&#8230;]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div><p>I manage a terminal server that Service Desk is using to access some applications using <strong>RDP</strong> client. Recently, they needed audio enabled. These steps will help accomplish that goal . </p>
<p>First, log to the server and make sure that <strong>Windows Audio</strong> service is set to start as <strong>Automatic</strong> instead of <strong>Manual</strong>. Then, start the service. </p>
<p><a href="https://blog.andreev.it/wp-content/uploads/2014/01/P039-01.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2014/01/P039-01.png" alt="" width="520" height="86" class="aligncenter size-full wp-image-6982" srcset="https://blog.andreev.it/wp-content/uploads/2014/01/P039-01.png 520w, https://blog.andreev.it/wp-content/uploads/2014/01/P039-01-300x50.png 300w" sizes="(max-width: 520px) 100vw, 520px" /></a><br />
Go to <strong>Administrative Tools</strong>, <strong>Remote Desktop</strong> and start the <strong>Remote Desktop Session Host Configuration</strong>.  Select the <strong>RDP</strong> connection, right-click and choose <strong>Properties</strong>. </p>
<p><a href="https://blog.andreev.it/wp-content/uploads/2014/01/P039-02.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2014/01/P039-02.png" alt="" width="616" height="283" class="aligncenter size-full wp-image-6983" srcset="https://blog.andreev.it/wp-content/uploads/2014/01/P039-02.png 616w, https://blog.andreev.it/wp-content/uploads/2014/01/P039-02-300x138.png 300w, https://blog.andreev.it/wp-content/uploads/2014/01/P039-02-585x269.png 585w" sizes="(max-width: 616px) 100vw, 616px" /></a><br />
In the dialog box, select <strong>Client Settings</strong> and uncheck <strong>Audio and Video Playback</strong>.</p>
<p><a href="https://blog.andreev.it/wp-content/uploads/2014/01/P039-03.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2014/01/P039-03.png" alt="" width="397" height="494" class="aligncenter size-full wp-image-6984" srcset="https://blog.andreev.it/wp-content/uploads/2014/01/P039-03.png 397w, https://blog.andreev.it/wp-content/uploads/2014/01/P039-03-241x300.png 241w" sizes="(max-width: 397px) 100vw, 397px" /></a></p>
<p>You&#8217;ll get a message that you have to log off and log back on for these changes to take effect. </p>
<p>Also, make sure that you don&#8217;t inherit any domain policies that prevent the <strong>RDP</strong> audio settings. Click <strong>Start</strong>, <strong>Run</strong> and type:</p>
<pre class="brush: bash; title: ; notranslate">
gpedit.msc
</pre>
<p>Navigate to <strong>Computer Configuration | Administrative Templates | Windows Components | Remote Desktop Services | Remote Desktop Session Host | Device and Resource Configuration</strong>.</p>
<p><a href="https://blog.andreev.it/wp-content/uploads/2014/01/P039-04.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2014/01/P039-04.png" alt="" width="715" height="255" class="aligncenter size-full wp-image-6985" srcset="https://blog.andreev.it/wp-content/uploads/2014/01/P039-04.png 715w, https://blog.andreev.it/wp-content/uploads/2014/01/P039-04-300x107.png 300w, https://blog.andreev.it/wp-content/uploads/2014/01/P039-04-585x209.png 585w" sizes="(max-width: 715px) 100vw, 715px" /></a></p>
<p>If it says <strong>Not Configured</strong> or <strong>Enabled</strong>, it&#8217;s fine. If it says <strong>Disabled</strong>, you&#8217;ll have to modify the domain <strong>GPO</strong>.</p>
<p>Finally, on the client computers, make sure that the <strong>RDP</strong> client is set to play the audio on the remote machine and not on the server.<br />
<a href="https://blog.andreev.it/wp-content/uploads/2014/01/P039-05.png"><img loading="lazy" decoding="async" src="https://blog.andreev.it/wp-content/uploads/2014/01/P039-05.png" alt="" width="739" height="474" class="aligncenter size-full wp-image-6986" srcset="https://blog.andreev.it/wp-content/uploads/2014/01/P039-05.png 739w, https://blog.andreev.it/wp-content/uploads/2014/01/P039-05-300x192.png 300w, https://blog.andreev.it/wp-content/uploads/2014/01/P039-05-585x375.png 585w" sizes="(max-width: 739px) 100vw, 739px" /></a></p>
<p>Sources:</p>
<p><a href="http://technet.microsoft.com/en-us/library/cc770631.aspx" target="_blank" rel="noopener noreferrer">http://technet.microsoft.com/en-us/library/cc770631.aspx</a><br />
<a href="http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&#038;cmd=displayKC&#038;externalId=1004839" target="_blank" rel="noopener noreferrer">http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&#038;cmd=displayKC&#038;externalId=1004839</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.andreev.it/2014/01/enable-sound-audio-in-a-vm-for-use-in-a-rdp-session/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
