2.Azure -- VM 2

使用 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值