星期六, 11月 16, 2019

使用 gcloud 指令建立GCE快照排程套用到磁碟小記

使用 gcloud 指令建立GCE快照排程套用到磁碟小記

今天來實作 使用 gcloud 指令建立GCE快照排程並套用到 GCE 上面的磁碟

想法: 想對專案的 GCE 機器建立快照排程, 套用到磁碟以防萬一

建立快照排程
  • 這邊要注意自已 Google SDK 版本是否夠新? 之前我環境 google cloud sdk 245 就沒有支援, 所以這次就順手把他升級到 google cloud sdk 271.
  • 升級方式:  gcloud components update

# gcloud  compute  resource-policies create  snapshot-schedule  daily-3day-1400  --max-retention-days  3  --start-time 14:00 --daily-schedule  --region  asia-east1 --on-source-disk-delete keep-auto-snapshots --snapshot-labels env=lab,media=images --storage-location asia-east1 --project sakanatest

  • snapshot-schedule 只能用小寫以及-
  • --on-source-disk-delete
    • keep-auto-snapshots: keep automatically-created snapshots when the source disk is deleted. This is the default behavior.
  • 這邊的 start-time 是以 UTC 時間為主, 要找個時間看看如何設定 local time

列出排程
# gcloud  compute  resource-policies  list --project  sakanatest

NAME              DESCRIPTION REGION                                                                        CREATION_TIMESTAMP
daily-3day-1400               https://www.googleapis.com/compute/v1/projects/sakanatest/regions/asia-east1  2019-11-16T00:48:02.826-08:00


接下來就是將 GCE 上面磁碟套用這個快照排程

# gcloud  compute  disks add-resource-policies test20191114 --resource-policies daily-3day-1400 --zone asia-east1-b --project sakanatest

Updated [https://www.googleapis.com/compute/v1/projects/sakanatest/zones/asia-east1-b/disks/test20191114].

  • test20191114 是磁碟名稱


接下來想到一個問題, 如果哪天排程時間想要改變該如何??
做法
  • 建立一個新的快照排程
  • 將舊的快照排程從磁碟卸載
  • 將新的快照排程加到磁碟

接下來進行實驗
建立一個 保留5 天, 18:00 建立快照的排程

# gcloud  compute  resource-policies create  snapshot-schedule  daily-5day-1800  --max-retention-days  5  --start-time 18:00 --daily-schedule  --region  asia-east1 --on-source-disk-delete keep-auto-snapshots --snapshot-labels env=lab,media=images --storage-location asia-east1 --project sakanatest

嘗試套用到剛剛的磁碟, 會得到錯誤訊息, 因為一次只能套用一個快照排程

# gcloud compute disks add-resource-policies test20191114 --resource-policies daily-5day-1800 --zone asia-east1-b --project sakanatest

ERROR: (gcloud.compute.disks.add-resource-policies) Could not fetch resource:
 - Invalid resource usage: 'Disk already has resource policy attached. Attaching multiple policies are not supported.'.

將剛剛的磁碟移除舊的快照排程

# gcloud  compute  disks  remove-resource-policies  test20191114 --resource-policies daily-3day-1400  --zone  asia-east1-b --project  sakanatest

Updated [https://www.googleapis.com/compute/v1/projects/sakanatest/zones/asia-east1-b/disks/test20191114].

將新的快照排程加入
# gcloud  compute  disks add-resource-policies  test20191114  --resource-policies daily-5day-1800  --zone  asia-east1-b  --project  sakanatest

Updated [https://www.googleapis.com/compute/v1/projects/sakanatest/zones/asia-east1-b/disks/test20191114].

這樣就可以了 :)

如果時間到也可以列出快照驗證 
列出快照指令
# gcloud  compute  snapshots  list --project sakanatest

先記下來 

~ enjoy it

Reference:

三大雲平台工具容器升級小記 with openSUSE Leap 15.1 container

三大雲平台工具容器升級小記 with openSUSE Leap 15.1 container

OS: container with openSUSE Leap 15.1

上次升級是 2019/8/3 , 這次會來升級的原因是 Google SDK 已經到了 271.0.0, 然後最近要作一個 Lab 需要 gcloud compute resource-policies 相關指令,  但是 Google SDK 245.0.0 沒有....
[ 謎之音: 需求是前進的鞭子 ~  ]

先整理結果

升級前
OS: openSUSE Leap 15
awscli:  aws-cli/1.16.210 Python/2.7.14
gcloud: Google Cloud SDK 245.0.0
azure-cli: 2.0.70

升級後
OS: openSUSE Leap 15.1
awscli:  aws-cli/1.16.282 Python/2.7.14
gcloud: Google Cloud SDK 271.0.0
azure-cli: 2.0.76

Todo
  • 12 月的時候將 awscli 用 python3 安裝
    • 原因是 Google SDK 目前還是 Python2, 所以想要一起升級 :p

這次的做法會透過 docker build 指令來進行
  • 我有比較過 docker build 以及使用現有的 docker image 修改後再使用 docker commit 建立的 image 大小還是很有差異的

Dockerfile 的部分我是拿之前 openSUSE Leap 15 來修改

實際上只有修改
  • openSUSE Leap 版本
  • Update time
  • Google SDK 版本還有下載的檔案路徑以及檔案名稱


列出 diff 的結果給大家參考

> diff  opensuseLeap151_ansible_Dockerfile  opensuseLeap15_ansible_Dockerfile 

1,2c1,2
< # openSUSE Leap 15.1 with ansible, azure-cli
< FROM opensuse/leap:15.1
---
> # openSUSE Leap 15 with ansible, azure-cli
> FROM opensuse/leap:15
6c6
< # update: 20191116
---
> # update: 20190727
49c49
< # Install google cloud SDK 271
---
> # Install google cloud SDK 240
51,52c51,52
< RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-271.0.0-linux-x86_64.tar.gz && \
<   tar zxvf google-cloud-sdk-271.0.0-linux-x86_64.tar.gz && \
---
> RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-245.0.0-linux-x86_64.tar.gz && \
>   tar zxvf google-cloud-sdk-245.0.0-linux-x86_64.tar.gz && \


Dockerfile 內容如下

# openSUSE Leap 15.1 with ansible, azure-cli
FROM opensuse/leap:15.1

# Author
# MAINTAINER 已經棄用, 之後要使用 LABEL 方式
# update: 20191116
LABEL maintainer="sakana@cycu.org.tw"

# Install python2-pip, upgrade pip, ansible[azure]
RUN zypper install -y python2-pip && \
  pip2 install --upgrade pip && \
  pip2 install ansible[azure]

# Install openssh, set ls alias
RUN zypper install -y openssh
RUN echo "alias ls='ls --color=tty'" >> /root/.bashrc

# Install wget, download azure_rm.py, set permission
RUN zypper install -y wget && \
  wget  https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/azure_rm.py && \
  chmod a+x azure_rm.py && \
  mv azure_rm.py /root

# Create working directory in /root
RUN mkdir /root/.azure && \
  mkdir /root/.aws && \
  mkdir /root/playbook && \
  mkdir -p /root/.config/gcloud && \
  wget https://raw.githubusercontent.com/sakanamax/LearnAnsible/master/template/ansible.cfg && \
  mv /ansible.cfg /root && \
  wget https://raw.githubusercontent.com/sakanamax/LearnAnsible/master/template/hosts && \
  mv /hosts /root

# Install azure-cli
RUN zypper install -y curl && \
  rpm --import https://packages.microsoft.com/keys/microsoft.asc && \
  zypper addrepo --name 'Azure CLI' --check https://packages.microsoft.com/yumrepos/azure-cli azure-cli && \
  zypper install --from azure-cli -y azure-cli

#install vim tar gzip
RUN zypper install -y vim tar gzip
RUN echo "set encoding=utf8" > /root/.vimrc

# Install awscli
RUN pip install awscli
RUN echo "source /usr/bin/aws_bash_completer" >> /root/.bashrc


# Install google cloud SDK 271
ENV CLOUDSDK_CORE_DISABLE_PROMPTS 1
RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-271.0.0-linux-x86_64.tar.gz && \
  tar zxvf google-cloud-sdk-271.0.0-linux-x86_64.tar.gz && \
  /google-cloud-sdk/install.sh && \
  echo "if [ -f '/google-cloud-sdk/path.bash.inc' ]; then . '/google-cloud-sdk/path.bash.inc'; fi" >> /root/.bashrc && \
  echo "if [ -f '/google-cloud-sdk/completion.bash.inc' ]; then . '/google-cloud-sdk/completion.bash.inc'; fi" >> /root/.bashrc

使用 docker build 指令建立 image

> docker build  -t  sakana/ansible_opensuse151:20191116  -f  ./opensuseLeap151_ansible_Dockerfile   .

  • 使用 -f 指定 Dockerfile 名稱
  • 最後是 ” . “ 目前的目錄


測試 container image

> docker  run  -v  ~/.aws:/root/.aws  -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -it  sakana/ansible_opensuse151:20191116  /bin/bash

測試結果 OK, 建立  tag

觀察資訊
> docker  images

REPOSITORY                   TAG IMAGE ID           CREATED SIZE
sakana/ansible_opensuse151   20191116 dcd69d00b4aa        34 minutes ago      1.19GB
opensuse/leap                15.1 fef5ad254f63        10 days ago 103MB
sakana/ansible_opensuse15    latest 4fe595fb61e4        3 months ago 1.1GB

建立 tag 
> docker  tag  dcd69d00b4aa  sakana/ansible_opensuse151:latest

登入 docker
> docker  login

上傳 image
> docker  push  sakana/ansible_opensuse151:20191116

> docker  push  sakana/ansible_opensuse151:latest

完工, 以後使用就用

> docker  run  -v  ~/.aws:/root/.aws  -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -it  sakana/ansible_opensuse151  /bin/bash


~ enjoy it

Reference: