- 1 - 创建/管理 VM
- 2 - 创建/管理磁盘
- 3 - 自动执行配置
- 4 - 创建 VM 映像
- 5 - 高度可用的 VM
- 6 - 创建规模集
- 7 - 对 VM 进行负载均衡
- 8 - 管理网络
- 9 - 备份虚拟机
- 10 - 管理 VM
- 11 - 监视 VM
- 12 - 通过 Jenkins 生成
- 13 - 将 Jenkins 与 Azure DevOps 集成
- 14a - 创建 LAMP 堆栈
- 14b - 创建 LEMP 堆栈
- 14c - 创建 MEAN 堆栈
- 15 - 使用 SSL 保护 Web 服务器
使用 Azure CLI 创建和管理 Linux VM
创建资源组
az group create --name myResourceGroupVM --location chinaeast
创建虚拟机
使用 az vm create 命令创建虚拟机。
创建虚拟机时,可使用多个选项,例如操作系统映像、磁盘大小调整和管理凭据。 下面的示例创建一个名为 myVM、运行 Ubuntu Server 的 VM。 将在该 VM 上创建名为 azureuser 的用户帐户,并生成 SSH 密钥(如果这些密钥在默认密钥位置 ( ~/.ssh) 中不存在):
Azure CLI
az vm create \
--resource-group myResourceGroupVM \
--name myVM \
--image UbuntuLTS \
--admin-username azureuser \
--generate-ssh-keys
连接到 VM
现在可以使用 SSH 从本地计算机连接到 VM。 将示例 IP 地址替换为上一步骤中记下的 publicIpAddress
。
bash
ssh azureuser@52.174.34.95
登录 VM 后,可以安装和配置应用程序。 完成后,可按正常方式关闭 SSH 会话:
bash
exit
若要查看最常用映像的列表,请使用 az vm image list 命令。
Azure CLI
az vm image list --output table
命令输出返回 Azure 上最常用的 VM 映像。
查找可用的 VM 大小
若要查看在特定区域可用的 VM 大小的列表,请使用 az vm list-sizes 命令。
Azure CLI
az vm list-sizes --location chinaeast --output table
调整 VM 的大小
部署 VM 后,可调整其大小以增加或减少资源分配。 可通过 az vm show 查看 VM 的当前大小:
az vm show --resource-group myResourceGroupVM --name myVM --query hardwareProfile.vmSize
调整 VM 大小之前,请检查所需的大小在当前 Azure 群集上是否可用。 az vm list-vm-resize-options 命令返回大小列表。
Azure CLI
az vm list-vm-resize-options --resource-group myResourceGroupVM --name myVM --query [].name
如果所需大小可用,则可从开机状态调整 VM 大小,但需在此操作期间重启 VM。 使用 az vm resize 命令执行大小调整。
Azure CLI
az vm resize --resource-group myResourceGroupVM --name myVM --size Standard_DS4_v2
若要检索特定 VM 的状态,请使用 az vm get-instance-view 命令。 请确保为虚拟机和资源组指定有效的名称。
Azure CLI复制
az vm get-instance-view --name myVM --resource-group myResourceGroup --query instanceView.statuses[1] --output table
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oOjjMT8A-1587109862808)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200416093404089.png)]
管理任务
获取 IP 地址
此命令返回虚拟机的私有 IP 地址和公共 IP 地址。
Azure CLI
az vm list-ip-addresses --resource-group myResourceGroup --name myVM --output table
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gzTvwO8M-1587109862811)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200416094014383.png)]
停止虚拟机
Azure CLI
az vm stop --resource-group myResourceGroup --name myVM
启动虚拟机
Azure CLI
az vm start --resource-group myResourceGroup --name myVM
删除资源组
删除资源组还会删除其包含的所有资源,例如 VM、虚拟网络和磁盘。 --no-wait
参数会使光标返回提示符处,无需等待操作完成。 --yes
参数将确认是否希望删除资源,而不会有额外提示。
Azure CLI
az group delete --name myResourceGroup --no-wait --yes
使用 Azure CLI 管理 Azure 磁盘
将磁盘附加到现有 VM
若要创建新磁盘并将其附加到现有虚拟机,请使用 az vm disk attach 命令。 以下示例创建大小为 128 GB 的高级磁盘,并将其附加到上一步创建的 VM 中。
Azure CLI
az vm disk attach --resource-group myResourceGroupDisk --vm-name myVM --name myDataDisk --size-gb 128 --sku Premium_LRS --new
准备数据磁盘
将磁盘附加到虚拟机后,需要将操作系统配置为使用该磁盘。
创建与虚拟机的 SSH 连接。 将示例 IP 地址替换为虚拟机的公共 IP 地址。
Azure CLI
ssh 10.101.10.10
使用 fdisk
对磁盘进行分区。
bash
(echo n; echo p; echo 1; echo ; echo ; echo w) | sudo fdisk /dev/sdc
使用 mkfs
命令将文件系统写入分区。
bash
sudo mkfs -t ext4 /dev/sdc1
装载新磁盘,使其在操作系统中可访问。
bash
sudo mkdir /datadrive && sudo mount /dev/sdc1 /datadrive
现在可以通过 datadrive 装入点访问磁盘,可运行 df -h
命令对此进行验证。
bash
df -h
若要确保在重启后重新装载驱动器,必须将其添加到 /etc/fstab 文件。 为此,请使用 blkid
实用工具获取磁盘的 UUID。
bash
sudo -i blkid
输出显示驱动器的 UUID,在本例中为 /dev/sdc1
。
bash
/dev/sdc1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="ext4"
在 /etc/fstab 文件中添加类似于以下内容的行。
bash
UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e /datadrive ext4 defaults,nofail 1 2
配置磁盘后,关闭 SSH 会话。
bash
exit
创建磁盘快照
创建磁盘快照时,Azure 会创建磁盘的只读时间点副本。 Azure VM 快照可用于快速保存配置更改前 VM 所处的状态。
创建快照
创建虚拟机磁盘快照前,需要磁盘 ID 或名称。 使用 az vm show 命令返回磁盘 ID
Azure CLI
osdiskid=$(az vm show -g myResourceGroupDisk -n myVM --query "storageProfile.osDisk.managedDisk.id" -o tsv)
获取虚拟机磁盘 ID 后,使用以下命令可创建磁盘快照。
Azure CLI
az snapshot create \
--resource-group myResourceGroupDisk \
--source "$osdiskid" \
--name osDisk-backup
从快照创建磁盘
然后,可将此快照转换为可用于重新创建虚拟机的磁盘。
Azure CLI
az disk create \
--resource-group myResourceGroupDisk \
--name mySnapshotDisk \
--source osDisk-backup
从快照还原虚拟机
若要演示如何还原虚拟机,请删除现有虚拟机。
Azure CLI
az vm delete \
--resource-group myResourceGroupDisk \
--name myVM
从快照磁盘创建新虚拟机。
Azure CLI
az vm create \
--resource-group myResourceGroupDisk \
--name myVM \
--attach-os-disk mySnapshotDisk \
--os-type linux
重新附加数据磁盘
需要将所有数据磁盘重新附加到虚拟机。
先使用 az disk list 命令找到数据磁盘名称。 此示例将磁盘名称放在名为“datadisk” 的变量中,将在下一步中使用该变量。
Azure CLI
datadisk=$(az disk list \
-g myResourceGroupDisk \
--query "[?contains(name,'myVM')].[id]" \
-o tsv)
使用 az vm disk attach 命令附加磁盘。
Azure CLI
az vm disk attach \
-g myResourceGroupDisk \
--vm-name myVM \
--name $datadisk
##ssh链接
ssh -i C:\Users\Administrator\.ssh\id_rsa harrish@139.217.133.153
如何在 Azure 中的 Linux 虚拟机首次启动时使用 cloud-init 对其进行自定义
Cloud-init 概述
Cloud-init 是一种广泛使用的方法,用于在首次启动 Linux VM 时对其进行自定义。 可使用 cloud-init 来安装程序包和写入文件,或者配置用户和安全性。 在初始启动期间运行 cloud-init 时,无需额外的步骤和代理即可应用配置。
Cloud-init 还支持不同的发行版。 例如,不需使用 apt-get install 或 yum install 来安装包, 而是可定义要安装的程序包的列表。 Cloud-init 将对所选发行版自动使用本机包管理工具。
我们正在与合作伙伴协作,将 cloud-init 纳入用户向 Azure 提供的映像中并使其在映像中正常运行。 下表概述了 cloud-init 当前在 Azure 平台映像上的可用性:
创建 cloud-init 配置文件
若要运行 cloud-init,请创建一个 VM,以便安装 NGINX 并运行简单的“Hello World”Node.js 应用。 以下 cloud-init 配置会安装所需的程序包,创建 Node.js 应用,然后初始化并启动该应用。
在本地 Shell 中,创建名为“cloud-init.txt” 的文件并粘贴下面的配置。
我们如果想创建一个cc.txt的文件,只需输入“cd.>cc.txt”,按回车键,cd.表示为当前目录,如下图所示:
#cloud-config
package_upgrade: true
packages:
- nginx
- nodejs
- npm
write_files:
- owner: www-data:www-data
path: /etc/nginx/sites-available/default
content: |
server {
listen 80;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
- owner: azureuser:azureuser
path: /home/azureuser/myapp/index.js
content: |
var express = require('express')
var app = express()
var os = require('os');
app.get('/', function (req, res) {
res.send('Hello World from host ' + os.hostname() + '!')
})
app.listen(3000, function () {
console.log('Hello world app listening on port 3000!')
})
runcmd:
- service nginx restart
- cd "/home/azureuser/myapp"
- npm init
- npm install express -y
- nodejs index.js
创建虚拟机
使用 az group create 创建资源组,然后才能创建 VM。 以下示例在“chinaeast” 位置创建名为“myResourceGroupAutomate” 的资源组:
Azure CLI
az group create --name myResourceGroupAutomate --location chinaeast
现在,请使用 az vm create 创建 VM。 使用 --custom-data
参数传入 cloud-init 配置文件。 如果未将 cloud-init.txt 配置文件保存在现有工作目录中,请提供该文件的完整路径。 以下示例创建一个名为 myVM 的 VM:
Azure CLI
az vm create --resource-group myResourceGroupAutomate --name myAutomatedVM --image UbuntuLTS --admin-username azureuser --generate-ssh-keys --custom-data cloud-init.txt
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dKLe4JWX-1587109862815)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200416133041621.png)]
看起来我们并没有足够的权限去创建一个这样的虚拟机了,不过过程都对,目前就先这样吧。
注入 Key Vault 中的证书
此可选部分展示了如何在 Azure Key Vault 中安全存储证书,并在 VM 部署期间将其注入。 此过程可确保首次启动时将最新的证书注入到 VM 中,不必使用包含内嵌证书的自定义映像。 在该过程中,证书永远不会离开 Azure 平台,也不会在脚本、命令行历史记录或模板中公开。
zure Key Vault 保护加密密钥和机密,例如证书或密码。 Key Vault 有助于简化密钥管理过程,让你能够持续掌控用于数据访问和加密的密钥。 此方案介绍了一些用于证书创建和使用的 Key Vault 概念,但未详述如何使用 Key Vault。
以下步骤演示如何:
- 创建 Azure Key Vault
- 生成证书或将其上传到 Key Vault
- 利用要注入到 VM 的证书创建密钥
- 创建 VM 并注入证书
创建 Azure Key Vault
首先,使用 az keyvault create 创建 Key Vault,并在部署 VM 时启用该 Key Vault。 每个 Key Vault 均需具备唯一名称且全部小写。 将下例中的 mykeyvault 替换为自己唯一的 Key Vault 名称:
Azure CLI
keyvault_name=mykeyvault
az keyvault create --resource-group myResourceGroupAutomate --name $harrishHe0225 --enabled-for-deployment
生成证书并将其存储在 Key Vault 中
为供生产使用,应通过 az keyvault certificate import 导入由受信任的提供程序签名的有效证书。 在本教程中,以下示例显示了如何使用 az keyvault certificate create 生成使用默认证书策略的自签名证书:
Azure CLI
az keyvault certificate create \
--vault-name $keyvault_name \
--name mycert \
--policy "$(az keyvault certificate get-default-policy --output json)"
准备用于 VM 的证书
若要在 VM 创建过程中使用该证书,请使用 az keyvault secret list-versions 获取证书的 ID。 VM 需要特定格式的证书才能在启动时将其注入,因此请使用 az vm secret format 转换该证书。 以下示例将这些命令的输出分配给变量,以便在后续步骤中使用:
Azure CLI
secret=$(az keyvault secret list-versions \
--vault-name $keyvault_name \
--name mycert \
--query "[?attributes.enabled].id" --output tsv)
vm_secret=$(az vm secret format --secret "$secret" --output json)
创建 cloud-init 配置以保护 NGINX
创建 VM 时,证书和密钥都将存储在受保护的 /var/lib/waagent/ 目录中。 要将证书自动添加到 VM 并配置 NGINX,可使用上一示例中已更新的 cloud-init 配置。
创建名为“cloud-init-secured.txt” 的文件并粘贴下面的配置。 例如,键入 sensible-editor cloud-init-secured.txt
以创建文件并查看可用编辑器的列表。 请确保已正确复制整个 cloud-init 文件,尤其是第一行:
#cloud-config
package_upgrade: true
packages:
- nginx
- nodejs
- npm
write_files:
- owner: www-data:www-data
path: /etc/nginx/sites-available/default
content: |
server {
listen 80;
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/mycert.cert;
ssl_certificate_key /etc/nginx/ssl/mycert.prv;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
- owner: azureuser:azureuser
path: /home/azureuser/myapp/index.js
content: |
var express = require('express')
var app = express()
var os = require('os');
app.get('/', function (req, res) {
res.send('Hello World from host ' + os.hostname() + '!')
})
app.listen(3000, function () {
console.log('Hello world app listening on port 3000!')
})
runcmd:
- secretsname=$(find /var/lib/waagent/ -name "*.prv" | cut -c -57)
- mkdir /etc/nginx/ssl
- cp $secretsname.crt /etc/nginx/ssl/mycert.cert
- cp $secretsname.prv /etc/nginx/ssl/mycert.prv
- service nginx restart
- cd "/home/azureuser/myapp"
- npm init
- npm install express -y
- nodejs index.js
创建安全的 VM
现在,请使用 az vm create 创建 VM。 使用 --secrets
参数注入 Key Vault 中的证书数据。 与上个示例一样,使用 --custom-data
参数传入 cloud-init 配置:
Azure CLI
az vm create \
--resource-group myResourceGroupAutomate \
--name myVMWithCerts \
--image UbuntuLTS \
--admin-username azureuser \
--generate-ssh-keys \
--custom-data cloud-init-secured.txt \
--secrets "$vm_secret"
若要使 VM 能使用安全的 Web 流量,请通过 az vm open-port 从 Internet 打开端口 443:
Azure CLI
az vm open-port --resource-group myResourceGroup --name myVM --port 443
使用 Azure CLI 创建 Azure VM 的自定义映像
准备阶段
下列步骤详细说明如何将现有 VM 转换为可重用自定义映像,以便将其用于创建新 VM 实例。
若要完成本教程中的示例,必须现有一个虚拟机。 如果需要,此脚本示例可为你创建一个虚拟机。 按照教程进行操作时,请根据需要替换资源组和 VM 名称。
创建自定义映像
若要创建虚拟机的映像,需通过以下方式准备 VM:取消源 VM 的预配,解除其分配,然后将其标记为通用化。 准备好 VM 后,可以创建映像。
取消预配 VM
取消预配可通过删除特定于计算机的信息来通用化 VM。 实现此通用化后,即可从单个映像部署多个 VM。 在取消预配期间,主机名将重置为“localhost.localdomain” 。 还会删除 SSH 主机密钥、名称服务器配置、根密码和缓存的 DHCP 租约。
通过 SSH 连接到 VM。
bash
ssh azureuser@52.174.34.95
取消预配 VM。
bash
sudo waagent -deprovision+user -force
关闭 SSH 会话。
bash
exit
解除分配 VM 并将其标记为通用化
若要创建映像,需要解除分配 VM。 使用 az vm deallocate 解除分配 VM。
Azure CLI
az vm deallocate --resource-group myResourceGroup --name myVM
最后,使用 az vm generalize 将 VM 的状态设置为“通用化”,以便 Azure 平台知道 VM 已通用化。 只能从通用化 VM 创建映像。
Azure CLI
az vm generalize --resource-group myResourceGroup --name myVM
创建映像
现在,可使用 az image create 创建 VM 的映像。 以下示例从名为 myVM 的 VM 创建名为 myImage 的映像。
Azure CLI
az image create \
--resource-group myResourceGroup \
--name myImage \
--source myVM
从映像创建 VM
现在,你已有了一个映像,可以使用 az vm create 从该映像创建一个或多个新 VM。 以下示例从名为 myImage 的映像创建名为 myVMfromImage 的 VM。
Azure CLI
az vm create \
--resource-group myResourceGroup \
--name myVMfromImage \
--image myImage \
--admin-username azureuser \
--generate-ssh-keys
我们建议你将单个映像的并发部署数量限制为 20 个 VM。 如果计划从同一自定义映像中同时大规模部署 20 多个 VM,则应将共享映像库与多个映像副本一起使用。
映像管理
下面是一些常见映像管理任务的示例,说明了如何使用 Azure CLI 完成这些任务。
以表格格式按名称列出所有映像。
Azure CLI
az image list \
--resource-group myResourceGroup
删除映像。 此示例将从 myResourceGroup 中删除名为 myOldImage 的映像。
Azure CLI
az image delete \
--name myOldImage \
--resource-group myResourceGroup
使用 Azure CLI 创建和部署高度可用的虚拟机
概述
可用性集是一种逻辑分组功能,在 Azure 中使用它可以确保将 VM 资源部署在 Azure 数据中心后,这些资源相互隔离。 Azure 确保可用性集中部署的 VM 能够跨多个物理服务器、计算机架、存储单元和网络交换机运行。 如果出现硬件或 Azure 软件故障,只有一部分 VM 会受到影响,整体应用程序仍会保持运行,可供客户使用。 如果想要构建可靠的云解决方案,可用性集是一项关键功能。
创建可用性集
可使用 az vm availability-set create 创建可用性集。 在本示例中,myResourceGroupAvailability 资源组中名为 myAvailabilitySet 的可用性集的更新域数和容错域数均设置为 2。
首先,使用 az group create 创建资源组,然后创建可用性集:
Azure CLI复制
az group create --name myResourceGroupAvailability --location chinaeast
az vm availability-set create \
--resource-group myResourceGroupAvailability \
--name myAvailabilitySet \
--platform-fault-domain-count 2 \
--platform-update-domain-count 2
使用可用性集可跨容错域和更新域隔离资源。 容错域代表服务器、网络和存储资源的隔离集合。 在前面的示例中,在部署 VM 时,可用性集至少分布在两个容错域中。 可用性集还分布在两个更新域中。 两个更新域确保当 Azure 执行软件更新时,VM 资源是隔离的,防止在 VM 上运行的所有软件同时更新。
在可用性集内创建 VM
必须在可用性集中创建 VM,确保它们正确地分布在硬件中。 在创建可用性集后,无法将现有 VM 添加到可用性集中。
通过 az vm create 创建 VM 时,请使用 --availability-set
参数指定可用性集的名称。
Azure CLI
for i in `seq 1 2`; do
az vm create \
--resource-group myResourceGroupAvailability \
--name myVM$i \
--availability-set myAvailabilitySet \
--size Standard_DS1_v2 \
--vnet-name myVnet \
--subnet mySubnet \
--image UbuntuLTS \
--admin-username azureuser \
--generate-ssh-keys
done
现在,可用性集内有两台虚拟机。 由于它们在同一可用性集中,Azure 会确保 VM 及其所有资源(包括数据磁盘)分布在隔离的物理硬件上。 这种分布方式有助于确保提高整体 VM 解决方案的可用性。
可以在门户中转到“资源组”> myResourceGroupAvailability > myAvailabilitySet 来查看可用性集分布。 VM 分布在两个容错和更新域中,如以下示例所示:
检查可用的 VM 大小
以后可以向可用性集添加更多 VM(VM 大小可在硬件上获得)。 使用 az vm availability-set list-sizes 列出可用性集的硬件群集上所有可用的大小:
Azure CLI
az vm availability-set list-sizes \
--resource-group myResourceGroupAvailability \
--name myAvailabilitySet \
--output table
mage UbuntuLTS
–admin-username azureuser
–generate-ssh-keys
done
现在,可用性集内有两台虚拟机。 由于它们在同一可用性集中,Azure 会确保 VM 及其所有资源(包括数据磁盘)分布在隔离的物理硬件上。 这种分布方式有助于确保提高整体 VM 解决方案的可用性。
可以在门户中转到“资源组”> myResourceGroupAvailability > myAvailabilitySet 来查看可用性集分布。 VM 分布在两个容错和更新域中,如以下示例所示:
[外链图片转存中...(img-popWsyrp-1587109862817)]
## 检查可用的 VM 大小
以后可以向可用性集添加更多 VM(VM 大小可在硬件上获得)。 使用 [az vm availability-set list-sizes](https://docs.azure.cn/cli/vm/availability-set?view=azure-cli-latest#az-vm-availability-set-list-sizes) 列出可用性集的硬件群集上所有可用的大小:
Azure CLI
```azurecli
az vm availability-set list-sizes \
--resource-group myResourceGroupAvailability \
--name myAvailabilitySet \
--output table