您好,登錄后才能下訂單哦!
在Azure上創(chuàng)建虛擬機(jī)一般是使用市場(chǎng)上做好的操作系統(tǒng)映像,但有的時(shí)候?qū)τ谝恍I(yè)務(wù)系統(tǒng)的特殊要求需要一些特別版本的系統(tǒng)映像恰好是市場(chǎng)里沒(méi)有的,比如這里我需要用CentOS6.4,市場(chǎng)里沒(méi)有,因此我就需要自己做一個(gè)CentOS6.4的映像上傳到Azure供自己以后使用,在制作之前需要了解Azure對(duì)自定義映像的一些限制:
Azure 不支持 VHDX 格式,僅支持 固定大小的 VHD
在安裝 Linux 系統(tǒng)時(shí),建議使用標(biāo)準(zhǔn)分區(qū)而不是 LVM(通常是許多安裝的默認(rèn)值)。 這可以避免與克隆 VM 發(fā)生 LVM 名稱沖突,尤其是在需要將 OS 磁盤(pán)連接到另一個(gè)同類 VM 進(jìn)行故障排除時(shí)。
內(nèi)核需要支持裝載 UDF 文件系統(tǒng)。
低于 2.6.37 的 Linux 內(nèi)核版本不支持具有更大 VM 大小的 Hyper-V 上的 NUMA
不要在操作系統(tǒng)磁盤(pán)上配置交換分區(qū)。
Azure 上的所有 VHD 必須已將虛擬大小調(diào)整為 1MB。 從原始磁盤(pán)轉(zhuǎn)換為 VHD 時(shí),必須確保在轉(zhuǎn)換前原始磁盤(pán)大小是 1MB 的倍數(shù)。
按照如上要求我來(lái)做一個(gè)CentOS6.4的映像吧,首先我再Hyper-V上創(chuàng)建一臺(tái)CentOS64的虛擬機(jī)
等會(huì)創(chuàng)建虛擬磁盤(pán),因?yàn)槟J(rèn)創(chuàng)建的是VHDX,但這里需要VHD的虛擬磁盤(pán)
創(chuàng)建好虛擬機(jī)后設(shè)置該虛擬機(jī),點(diǎn)擊添加硬盤(pán)驅(qū)動(dòng)器
新建,下一步
選擇VHD,下一步
選擇固定大小
設(shè)置VHD的名稱以及保存位置
設(shè)置大小,當(dāng)然這里只需要系統(tǒng)盤(pán)
掛在CentOS6.4的ISO,然后啟動(dòng)虛擬機(jī)
跳過(guò)
NEXT
Next
Next
Next
Yes
配置網(wǎng)卡,并編輯勾選自動(dòng)連接,應(yīng)用后Next
選擇時(shí)區(qū)為上海,并且不勾選UTC
設(shè)置root密碼
選擇創(chuàng)建自定義布局,Next
創(chuàng)建標(biāo)準(zhǔn)分區(qū)
使用全部大小,不創(chuàng)建交換分區(qū)
下一步
Yes
格式化
Write changes to disk
下一步
下一步
開(kāi)始安裝,等待安裝完成
重啟
重啟好登錄,然后首先看內(nèi)核
++++++++++++++++++++++++++++可選步驟+++++++++++++++++++++++++++++++++++
備注:升級(jí)了內(nèi)核也就升級(jí)了CentOS系統(tǒng)版本號(hào),比如CentOS6.4升級(jí)當(dāng)前最新就變成CentOS6.10了
內(nèi)核低于2.6.37 的 Linux 內(nèi)核版本不支持具有更大 VM 大小的 Hyper-V 上的 NUMA,因此需要升級(jí)內(nèi)核
升級(jí)網(wǎng)絡(luò)安全服務(wù)
yum update nss
導(dǎo)入public key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
先要進(jìn)入后面的網(wǎng)址,http://elrepo.org/tiki/tiki-index.php
選擇要安裝的ELRepo
yum install https://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
安裝 kernel-lt(lt=long-term)
yum --enablerepo=elrepo-kernel install kernel-lt -y
編輯grub.conf文件,修改Grub引導(dǎo)順序
vim /etc/grub.conf
最后重啟系統(tǒng)
shutdown -r now
內(nèi)核升級(jí)完畢,再次檢查內(nèi)核版本
++++++++++++++++++++++++++++可選步驟+++++++++++++++++++++++++++++++++++
在 CentOS 6 中,NetworkManager 可能會(huì)干擾 Azure Linux 代理。 請(qǐng)運(yùn)行以下命令來(lái)卸載該包(我這里安裝的方式?jīng)]有這個(gè)):
sudo rpm -e --nodeps NetworkManager
檢查/etc/sysconfig/network 文件是否如下:vim /etc/sysconfig/network
檢查/etc/sysconfig/network-scripts/ifcfg-eth0文件是否如下:vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改 udev 規(guī)則,以免為以太網(wǎng)接口生成靜態(tài)規(guī)則。 在 Azure 或 Hyper-V 中克隆虛擬機(jī)時(shí),這些規(guī)則可能會(huì)引發(fā)問(wèn)題:
# sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
# sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
通過(guò)運(yùn)行以下命令,確保網(wǎng)絡(luò)服務(wù)在引導(dǎo)時(shí)啟動(dòng)
# sudo chkconfig network on
如果要使用 Azure 數(shù)據(jù)中心托管的 OpenLogic 鏡像,在/etc/yum.repos.d/目錄下新建一個(gè)CentOS-Azure.repo 文件
文件內(nèi)容如下,包含 Azure Linux 代理等其他包的 [openlogic] 存儲(chǔ)庫(kù):
# CentOS-Azure.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base
baseurl=http://olcentchan.chinacloudapp.cn/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://olcentchan.chinacloudapp.cn/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=http://olcentchan.chinacloudapp.cn/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://olcentchan.chinacloudapp.cn/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
baseurl=http://olcentchan.chinacloudapp.cn/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
將以下行添加到 /etc/yum.conf
http_caching=packages
運(yùn)行以下命令,清除當(dāng)前的 yum 元數(shù)據(jù)并使用最新的包更新系統(tǒng)
# yum clean all
建議將所有包都更新到最新版本,除非要為舊版 CentOS 創(chuàng)建映像
# sudo yum -y update
運(yùn)行此命令后,重新啟動(dòng)系統(tǒng)
shutdown -r now
安裝適用于 Linux Integration Services (LIS) 的驅(qū)動(dòng)程序(對(duì)于 CentOS 6.3 及更低版本來(lái)說(shuō)是 必需 步驟,對(duì)于更高版本來(lái)說(shuō)是可選步驟)
# sudo rpm -e hypervkvpd ## (如果沒(méi)有安裝可能會(huì)返回錯(cuò)誤,沒(méi)關(guān)系)
# sudo yum install -y microsoft-hyper-v
安裝Azure Linux 代理和依賴項(xiàng)(如果沒(méi)有刪除 NetworkManager和NetworkManager-gnome 包,則安裝 WALinuxAgent 包時(shí)會(huì)刪除它們)
# sudo yum install python-pyasn1 WALinuxAgent
在 grub 配置中修改內(nèi)核引導(dǎo)行,使其包含 Azure 的其他內(nèi)核參數(shù)(將確保所有控制臺(tái)消息都發(fā)送到第一個(gè)串行端口,從而可以協(xié)助 Azure 支持人員調(diào)試問(wèn)題),打開(kāi)/boot/grub/menu.lst
vim /boot/grub/menu.lst
console=ttyS0 earlyprintk=ttyS0 rootdelay=300
CentOS 6.5或更早版本還必須設(shè)置內(nèi)核參數(shù) numa=off
由于低于 2.6.37 的 Linux 內(nèi)核版本中的 bug,因此大型VM不支持非一致性內(nèi)存訪問(wèn) (NUMA),運(yùn)行版本低于 2.6.37 的自定義內(nèi)核的系統(tǒng)或者版本低于 2.6.32-504 的基于 RHEL 的內(nèi)核必須在 grub.conf 中的內(nèi)核命令行上設(shè)置啟動(dòng)參數(shù) numa=off,有關(guān)詳細(xì)信息,請(qǐng)參閱 Red Hat KB 436883
如果該文件里有如下參數(shù),建議刪除
rhgb quiet crashkernel=auto
接著檢查下內(nèi)核是否支持裝載 UDF 文件系統(tǒng),這里看是支持的,OK沒(méi)問(wèn)題
永久關(guān)閉SELinux(這樣需要重啟服務(wù)器后生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
永久關(guān)閉Linux防火墻
chkconfig iptables off
接著安裝waagent(Microsoft Azure Linux代理)先打開(kāi)https://github.com/Azure/WALinuxAgent/releases,選擇最新的版本
cd /tmp/
yum install -y wget
wget https://github.com/Azure/WALinuxAgent/archive/v2.2.38.tar.gz
tar -xzf v2.2.38.tar.gz
ls -l
cd WALinuxAgent-2.2.38
ls -l
接著安裝pip
sudo yum install python-pip
python package setuptools是安裝Azure Linux Agent的先決條件
yum install -y python-setuptools
安裝好python package setuptools后繼續(xù)安裝Azure Linux Agent
sudo python setup.py install
查看waagent運(yùn)行狀態(tài)
service waagent restart
查看waagent版本
waagent -version
創(chuàng)建一個(gè)新的非root賬戶,比如zjunsen
# useradd zjunsen
# passwd zjunsen
輸入新密碼(密碼建議設(shè)置為符合Azure虛擬機(jī)創(chuàng)建時(shí)的復(fù)雜度要求)
再次輸入新密碼
讓zjunsen加入root組
# usermod -G root zjunsen
# visudo
添加zjunsen可以執(zhí)行sudo
最后運(yùn)行以下命令對(duì)虛擬機(jī)執(zhí)行通用化設(shè)置,在設(shè)置之前需要修改下網(wǎng)絡(luò)配置,為什么要在關(guān)機(jī)之前的通用化之前來(lái)做就是怕找不到網(wǎng)卡
sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
編輯“/etc/resolv.conf”,添加Azure上的DNS服務(wù)器
sudo vim /etc/resolv.conf
修改如下
search pfa1hgkf53jujovxud25btaopc.shax.internal.chinacloudapp.cn
nameserver 168.63.129.16
加下來(lái)就可以對(duì)CentOS通用化了,一般通用化使用waagent -deprovision+user或者waagent -deprovision
注:+user 參數(shù)還會(huì)刪除上次預(yù)配的用戶帳戶(deprovision參數(shù)會(huì)禁用root賬戶);新建的其他root組的user賬戶依然可用
這里執(zhí)行如下:
# sudo waagent -deprovision+user -force
# export HISTSIZE=0
# sudo shutdown -h 0
執(zhí)行init 0或shutdown -h 0關(guān)機(jī),在Hyper-V管理器中可以看到該虛擬機(jī)關(guān)機(jī)了,CentOS6.4 VHD就準(zhǔn)備就緒可以上傳到Azure了
接下來(lái)切換到Azure門(mén)戶上,創(chuàng)建一個(gè)資源組
接下來(lái)在這個(gè)資源組里創(chuàng)建一個(gè)存儲(chǔ)賬戶
創(chuàng)建好以后會(huì)看到該存儲(chǔ)賬戶有兩組25個(gè)字符的訪問(wèn)密鑰,這里我只需要用到KEY1的密鑰
接下來(lái)創(chuàng)建容器
添加容器
設(shè)置專用
接下來(lái)上傳VHD到Azure容器里,因?yàn)閂HD文件比較大,這里采用Azcopy , 因?yàn)锳zcopy 可以支持?jǐn)帱c(diǎn)續(xù)傳
Azcopy 下載地址:https://docs.azure.cn/zh-cn/storage/common/storage-use-azcopy?toc=%2fstorage%2ftables%2ftoc.json
通過(guò)Azcopy操作Azure存儲(chǔ)可以參考https://docs.azure.cn/zh-cn/articles/azure-operations-guide/storage/aog-storage-how-to-use-azcopy
默認(rèn)情況下,Azcopy 的安裝位置:64-bit Window 為 C:\Program Files (x86)\Microsoft SDKs\Azure,32-bit Windows 為 C:\Program Files\Microsoft SDKs\Azure
使用Azcopy 將本地的文件上傳到對(duì)應(yīng)的存儲(chǔ)賬戶下面的容器
執(zhí)行命令格式為:AzCopy /Source:C:\myfolder /Dest:https://myaccount.blob.core.chinacloudapi.cn/mycontainer /DestKey:key /Pattern:abc.txt
在這里執(zhí)行的命令是:(×××高亮部分按照您的實(shí)際情況修改)(該存儲(chǔ)賬戶沒(méi)有開(kāi)啟共享訪問(wèn)簽名(新建存儲(chǔ)賬戶默認(rèn)是未開(kāi)啟))
備注:當(dāng) /Source 是 blob 容器或 blob 虛擬目錄時(shí),AzCopy 使用區(qū)分大小寫(xiě)匹配,而在所有其他情況下則使用不區(qū)分大小寫(xiě)匹配。
PS C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy> .\AzCopy.exe /Source:D:\Hyper-V\CentOS64\Cent64OS.vhd /Dest:https://vmosimage.blob.core.chinacloudapi.cn/mydisk/CentOS64.vhd /DestKey:/eAKlZpIy7sWO0AT3Hi4DV895mwHubHDqe+wbz0vJnbyes0f9oB4pCdKELZ3yvrLfjrqGjJwEYzpiioCO0EiGQ== /BlobType:page
紅色字體的CentOS64.vhd是上傳到Azure容器里的保存名字;最后一定要加/BlobType:page否則上傳上去就是block blob,而不是適用于vhd的page blob
執(zhí)行等待上傳完成,因?yàn)橹С謹(jǐn)帱c(diǎn)續(xù)傳,如果中斷就再執(zhí)行一下這條命令就今天繼續(xù)上傳(如果你上傳了一半突然發(fā)現(xiàn)又要修改源vhd的內(nèi)容,別忘了執(zhí)行通用化設(shè)置后重新執(zhí)行命令上傳時(shí)選擇No開(kāi)始全新上傳,而不是Yes斷點(diǎn)續(xù)傳之前的)
也可以利用Windows Admin Center查看上傳的狀態(tài)
上傳完成
在Azure門(mén)戶上也可以看到上傳好的該vhd文件
接下來(lái)就可以創(chuàng)建自定義映像了,在所有服務(wù)中選擇映像
點(diǎn)擊添加
設(shè)置名稱,選擇OS類型是Linux,選擇剛才上傳的自定義映像所在位置
選擇賬戶類型是標(biāo)準(zhǔn)HDD還是標(biāo)準(zhǔn)SSD或高級(jí)SSD,當(dāng)然標(biāo)準(zhǔn)HDD只能創(chuàng)建不帶SSD的虛擬機(jī)型號(hào),標(biāo)準(zhǔn)SSD可以創(chuàng)建帶SSD磁盤(pán)的虛擬機(jī)型號(hào),如D4s v2這樣的。
映像創(chuàng)建好以后,這就是模板映像了,點(diǎn)擊它進(jìn)去
點(diǎn)擊創(chuàng)建VM,可以根據(jù)這個(gè)模板映像創(chuàng)建基于這個(gè)CentOS6.4的多個(gè)提供不同業(yè)務(wù)的系統(tǒng)服務(wù)了
設(shè)置虛擬機(jī)的名稱,大小,虛擬網(wǎng)絡(luò)等等,然后創(chuàng)建,(在創(chuàng)建VM時(shí)建議使用本地新建賬戶(這里是zjunsen)一直的賬戶名和密碼)成功后就可以看到公網(wǎng)IP和內(nèi)網(wǎng)IP
接著就入站網(wǎng)絡(luò)安全組開(kāi)放22端口即可連接
到這里我就介紹完如何自定義Linux映像并上傳后基于該映像創(chuàng)建虛擬機(jī)的全過(guò)程了。
PS:整個(gè)過(guò)程有一個(gè)不完美的地方就是在利用映像創(chuàng)建VM部署進(jìn)行時(shí)會(huì)持續(xù)半小時(shí)最后提示沒(méi)有通用化而部署失敗,但實(shí)際虛擬機(jī)已經(jīng)創(chuàng)建出來(lái)可以連接使用了,我個(gè)人認(rèn)為影響不大,僅供參考。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。