星期日, 3月 29, 2020

使用 gcloud 指令建立快照與從快照建立磁碟與 GCE 小記

使用 gcloud 指令建立快照與從快照建立磁碟與 GCE 小記

OS: Container with openSUSE Leap 15

工作上三個雲端平臺都會碰到, 所以就想要使用一些工具或是方式來節省時間
畢竟偷懶是工程師前進最大的動力 :p
上次寫這類文章的時候是 2019/11 的時候, 時間過的真是快 : )

有的時候遇到業務需求, 要建立快照來複製 GCP 上面的機器進行實驗或是擴充

以下是一些自己在 GCP 上面的小記

建立快照
基本上就是使用 gcloud compute disks snapshot 的方式來建立

把他寫成 shell script

檔案 gcp_create_Disksnapshot.sh
內容如下:

#!/bin/bash

# edit by sakana 2020/3/28
# 建立 快照

# 顯示快照名稱輸入方式

echo ""
echo "請輸入快照名稱, 請用小寫英文或是-"
echo " 例如: test-20200328"
echo ""

# 設定 快照名稱
read -e -p "Please enter snapshot name: " -i "test-20200328" snapshot_name

# 設定 來源磁碟
echo "請輸入來源磁碟名稱"
read -e -p "Please enter source disk name: " -i "test20200328" source_disk_name
echo ""

# 設定 快照儲存位置
echo "請輸入快照儲存位置"
read -e -p "Please enter storage location : " -i "asia-east1" storage_location
echo ""

# 設定 來源磁碟所在的 zone
echo "輸入來源磁碟所在的 zone"
read -e -p "Please enter zone name: " -i "asia-east1-b" zone_name
echo ""

# 設定使用專案
read -e -p "Please enter project name: " -i "sakanatest" project_name

# 開始建立 快照
gcloud  compute disks snapshot $source_disk_name  --zone  $zone_name --storage-location $storage_location --snapshot-names $snapshot_name --project $project_name

# 列出排程
echo ""
echo "List snapshot  with project $project_name"
echo ""
gcloud compute snapshots list --project $project_name

從快照建立磁碟
使用 gcloud compute disk create 指令

把他寫成 shell script

檔案 gcp_create_Disk_from_snapshot.sh
內容如下:

#!/bin/bash

# edit by sakana 2020/3/28
# 從 快照 建立磁碟

echo ""
echo "這個 script 會從快照建立磁碟"
echo ""

# 設定使用專案
read -e -p "Please enter project name: " -i "sakanatest" project_name

# 列出專案目前的 snapshot
echo ""
echo "如果已經知道快照名稱, 可以不列出快照 list"
read -e -p "是否要列出專案 $project_name 的所有快照? (要列出所有快照請輸入小寫 yes) : " -i "no" list_snapshots
echo ""
[ $list_snapshots == yes ] && gcloud compute snapshots list --project $project_name
echo ""


# 設定 來源快照名稱
echo ""
echo "請輸入來源快照名稱"
read -e -p "Please enter source snapshot name: " -i "test-20200328" source_snapshot_name
echo ""

# 顯示快照資訊
echo "顯示該來源快照資訊, 請注意磁碟大小 (diskSizeGb): "
echo "========"
gcloud compute snapshots describe $source_snapshot_name
echo "========"

# 設定 磁碟名稱
echo ""
echo "請輸入要建立磁碟名稱"
read -e -p "Please enter new disk name: " -i "test20200328-2" new_disk_name
echo ""

# 設定 磁碟大小
echo "請輸入磁碟大小, 沒有指定單位的話, 預設是 GB"
read -e -p "Please enter disk size: " -i "10" new_disk_size

# 設定 磁碟所在的 zone
echo "輸入磁碟所在的 zone"
read -e -p "Please enter zone name: " -i "asia-east1-b" zone_name
echo ""

# 設定磁碟類型
echo ""
echo "請輸入磁碟的類型, pd-standard 標準磁碟 / pd-ssd SSD, 依據 Region 會有不同"
read -e -p "Please enter disk type: " -i "pd-standard" new_disk_type


# 開始建立 磁碟
gcloud  compute disks create $new_disk_name  --size $new_disk_size --zone  $zone_name --source-snapshot $source_snapshot_name --type $new_disk_type --project $project_name



最後一個步驟就是

從快照磁碟建立 GCE, 我這邊還有指定自訂的規格, 網路與 Subnet

使用 gcloud compute insances create 指令

把他寫成 shell script

檔案 gcp_create_CustomSpec_CustomNetwork_from_snapshot_gce.sh
內容如下:

#!/bin/bash

# edit by sakana 2020/3/28
# 建立 從快照磁碟建立客製化GCE 指定 Subnet
# 從快照建立執行個體的行爲, 其實是兩個動作. 1-由快照建立磁碟, 2-由快照磁碟建立執行個體
# 這個 script 有用到 gcloud topic escaping ( https://cloud.google.com/sdk/gcloud/reference/topic/escaping )
# 就是如果一個 argument 會用到多個逗號 ( , ) , 要使用跳脫字元來代替逗號
# 語法 在兩個 ^ 內定義要定義的替代字元, 例如使用冒號來代替逗號
# 範例  --address ^:^123.456.789.198:22.333.146.189 就等於 123.456.789.198,22.333.146.189

echo ""
echo "從快照磁碟建立客製化的 GCE, 網路指定 Subnet"
echo "CPU / 記憶體只能用整數, subnet 名稱請先準備好"
echo ""


# 設定使用專案
read -e -p "Please enter project name: " -i "sakanatest" project_name

# 列出專案目前的 磁碟
echo ""
echo "如果已經知道快照磁碟名稱, 可以不列出快照磁碟 list"
read -e -p "是否要列出專案 $project_name 的所有磁碟? (要列出所有快照請輸入小寫 yes) : " -i "no" list_disks
echo ""
[ $list_disks == yes ] && gcloud compute disks list --project $project_name
echo ""

# 設定 VM 名稱
echo "輸入 VM 名稱"
read -e -p "Please enter vm name: " -i "test" gce_name
echo ""

# 設定 zone
read -e -p "Please enter zone name: " -i "asia-east1-b" zone_name

# 設定 cpu 數量
read -e -p "Please enter cpu number: " -i "1" cpu_number

# 設定 記憶體大小
read -e -p "Only use integer, Please enter memory GB: " -i "4" mem_size

# 設定 Subnet 名稱
read -e -p "Please enter Subnet name: " -i "sakana-test-10-12-53" subnet_name

# 設定快照磁碟
echo ""
echo "輸入快照磁碟名稱"
read -e -p "Please enter disk name: " -i "test20200328-2" disk_name
echo ""

# 開始建立 GCE, --custom-extensions 爲擴充記憶體
gcloud beta compute instances create $gce_name --zone $zone_name --custom-extensions --custom-cpu $cpu_number --custom-memory $mem_size  --subnet $subnet_name --disk ^:^name=$disk_name:device-name=$disk_name:mode=rw:boot=yes:auto-delete=yes  --project $project_name


慢慢地把工作中的需求整理成 script
往 GCP 更進一步

~ enjoy it

Reference

沒有留言: