Hejdaの見る夢

一人前のエンジニアを目指して頑張ったこととかをつらつら書くブログ

Azure の deallocate をちゃんと調べる part.1

発端

先日、第27回 SQL Server 2019勉強会(オンライン) に参加した際に deallocate という機能があり、これが開発環境の Azure Kubernetes Service (AKS) においてコスト削減に繋がるとの情報を頂きました。

ただこのツイートは情報を正確に表現出来ていなく、誤認識を生んでしまう可能性があるのでちゃんと調べることにしました。

  • 第27回 SQL Server 2019勉強会(オンライン)

sqlserver.connpass.com

  • 問題の自分のツイート

結論

個人的な見解

Azure における Deallocate 機能 は、virtual machine (及び、virtual machine scale sets (vmss)) の機能であり、AKS ひいて は Kubernetes (K8s) の機能ではありません。

メリット・デメリットをしっかり把握した上で、自己責任で使用してください。

何故か

AKS の cluster autoscaler は vmss で用いて実現しています。

cluster autoscaler は K8s の機能であり、vmss は Azure の機能です。

マネージド K8s である AKS が cluster autoscaler を実現するために、node pools のリソースを確保する際に vmss の機能を用いて実行しているようです。

注意点

Deallocate は virtual machine (vm) をシャットダウンし、かつリソースを解放する機能です。そのため deallocate 中の vm の維持に掛かる課金は停止します。

しかし、ディスクや 静的 IP アドレスなどのリソースは引き続き課金が継続されるため、完全に課金が発生しなくなるわけではありません。

AKS から cluster autoscaler を使用する場合は --enable-cluster-autoscaler を使用します。

### refs: https://docs.microsoft.com/en-us/azure/aks/cluster-autoscaler#create-an-aks-cluster-and-enable-the-cluster-autoscaler

# First create a resource group
az group create --name myResourceGroup --location eastus

# Now create the AKS cluster and enable the cluster autoscaler
az aks create \
  --resource-group myResourceGroup \
  --name myAKSCluster \
  --node-count 1 \
  --vm-set-type VirtualMachineScaleSets \
  --load-balancer-sku standard \
  --enable-cluster-autoscaler \
  --min-count 1 \
  --max-count 3

この設定をした際は、vmss 自体を操作することは出来なくなり、 az aks コマンド経由で操作を行うようになるようです。

これは誤操作を防ぐためにも必要な処置のように思います。

# Note

Manual scaling is disabled when you use the cluster autoscaler. 
Let the cluster autoscaler determine the required number of nodes. 
If you want to manually scale your cluster, disable the cluster autoscaler.

しかし、cluster autoscaler の設定せずに AKS を構築すると、vmss の deallocate 機能を使えてしまえるかのようにドキュメントからは読めます。

次回はそこを検証してみようと思います。

参考ドキュメント

  • Virtual Machines - Deallocate

  • Automatically scale a cluster to meet application demands on Azure Kubernetes Service (AKS)

  • What are virtual machine scale sets?

まとめ

というわけで、この回は切りが良いのでここまで。

検証は次回に続きます :)

Multi Cli を作りました

成果物

github.com

どんなものか

  • (今の所) AWS、Azure、GCPCLI をコンテナ上で使えるようにします。
    • これにより、ホストマシンの環境を必要以上に汚すことはありません。
  • Docker Compose を用いることで、常時起動をより簡易にしています。
    • docker コマンドの -d でも出来ますが、管理の工数が増えるため、Docker Compose を使用しました。
  • さくっと CLI を使いたい時に重宝します(多分)
    • CLI を使いたいけど、Cloud Shell を起動するのもめんどいし…な時など!!(あるのか??)

使用方法

  • Repository を Clone し、docker-compose コマンドで実行します。
cd {Your work directory}
git clone https://github.com/iganari/multi-cli.git
cd multi-cli
docker-compose up -d
### 例

$ docker-compose up -d
Creating multi-cli-azure  ... done
Creating multi-cli-aws    ... done
Creating multi-cli-gcloud ... done
  • ちゃんと起動しているか、確認します。
docker-compose ps
$ docker-compose ps
      Name             Command       State   Ports
--------------------------------------------------
multi-cli-aws      /bin/sh           Up
multi-cli-azure    /bin/sh -c bash   Up
multi-cli-gcloud   /bin/sh           Up 
  • Docker Compose にて起動しているコンテナにログインします。
docker-compose exec aws    /bin/ash
docker-compose exec azure  /bin/ash
docker-compose exec gcloud /bin/ash
### 例(Azure のコンテナにて)

$ docker-compose exec azure /bin/ash
/ # 
/ # az version
This command is in preview. It may be changed/removed in a future release.
{
  "azure-cli": "2.0.80",
  "azure-cli-command-modules-nspkg": "2.0.3",
  "azure-cli-core": "2.0.80",
  "azure-cli-nspkg": "3.0.4",
  "azure-cli-telemetry": "1.0.4",
  "extensions": {}
}
/ #

停止する場合

  • 起動しっぱなしで特に問題は無いかと思いますが、停止したい場合は以下のコマンドで可能です。
docker-compose stop

エイリアスを貼っておく

この Docker Compose を起動していて、いざ使いたい時にこの Repository のディレクトリに行かないといけないのは面倒ですよね :(

なので、自分の環境にエイリアスを貼っておきます。以下に Bash の場合の例を貼っておきます。

  • ~/.bashrc に以下を追記します。
alias dg='cd ${Your Repository's PATH}/multi-cli && docker-compose exec gcloud /bin/bash && cd -' 
alias dz='cd ${Your Repository's PATH}/multi-cli && docker-compose exec azure /bin/bash  && cd -'
alias dw='cd ${Your Repository's PATH}/multi-cli && docker-compose exec azure /bin/bash  && cd -'
  • ~/.bashrc の変更を読み込みます。
source ~/.bashrc

これで短いコマンドで実行が可能になりました :)

まとめ

Have fun!! :)

プレビュー版 Azure Spot VMs を使ってみた🎉🎉

サマリ

  • Azure Spot VMs が新しくプレビューに追加されました。
  • 既に試用することが可能です。
  • 用途によっては、積極的に使っていきたい機能です。

経緯

2019/12/04 に @ThomasMaurer さんによって、以下のツイートがありました。

内容を簡単にまとめると以下のようです。

  • Azure Spot VMs というサービスがプレビューになったこと。
  • 上記のサービスは条件付きではあるけれど、 Azure VM をかなり割安で使用することが出来ること。
  • プレビューであるけれど、東京リージョンでも使えること。

関連するドキュメントは今のところ、以下の 3 点が公式ドキュメントとして見つけることが出来ました。

Azure Spot VMs とはいったい何か?

以下の特徴があります。

  • Azure VM を従来の金額から大幅に値下げした価格で使用することが出来ます。
  • VMスケールセット(VMSS)に対応しています。

とのことです。

これだけでも、インフラや SRE といった分野のエンジニアからすると、喉から手が出るほど欲しい機能です。

使用条件

VM のサイズの制限があり、以下の VM サイズでは Spot VM は使用出来ません。

実際に使ってみましょう

公式でチュートリアルが整備されています。

Azure portal

Azure CLI

Azure PowerShell

ARM テンプレート

Azure portal と Azure CLI を実際に試してみたいと思います。

試すだけであれば簡単で、登録などは不要なのですぐに試すことが出来ます。

Azure portal から試してみる

Azure portal >> Virtual mashines >> create virtual machine と選択すれば既に選べる状態になっています。

f:id:nari_kyu:20191207163308p:plain

また、Azure Spot instance を選ばなかった場合は Eviction type および、 Eviction policy の項が無くなるようです。

その後、諸々の設定を行い、最後に Create することで VM は起動します。

f:id:nari_kyu:20191207163441p:plain

いつもの VM となんら変わらないですね! 👏👏

Azure CLI から試してみる

Azure portal 上の Azure Cloud Shell から実行します。

それ以外の環境から実行する場合は、az コマンドのインストールや Azure への認証などが必要になります。

  • リソースグループの作成
    • 先ほど作成した spot-vm-test を使います。
    • 新しく作成する場合は下記のコマンドで作成出来ます。
az group create -n spot-vm-test-cli -l japaneast

### location を知りたい場合は以下のコマンドで確認が出来ます。
az account list-locations

ドキュメントに習って、 Azure CLIVM を作成していきます。

  • 環境変数を用います。
    • 試される場合は、この変数を好きな値に変更してください。
export _rg_name='spot-vm-test'
export _vm_name='spot-vm-test-cli'
  • az コマンドを用いて、 Spot VMs を作成します。
az vm create \
    --resource-group ${_rg_name} \
    --name ${_vm_name} \
    --image UbuntuLTS \
    --admin-username azureuser \
    --generate-ssh-keys \
    --priority Spot \
    --max-price -
  • 実際の Azure Cloud Shell の様子です。

f:id:nari_kyu:20191207165446p:plain

  • Spot VMs を作成した際に設定したログインユーザ名と、標準出力に秘密鍵(と公開鍵)の PATH および、 パブリック IP アドレス が出力されているので、その情報を元に SSH ログインしてみます。

f:id:nari_kyu:20191207170558p:plain

こちらも無事 SSH 出来ました!! 👏👏

ちなみに この VM は Spot VMs か否か を判断したい場合にどこを見ればいいか、現時点では分かりませんでした。

こちらは分かり次第、追記したいと思います😉

リソースの削除

作成した VM はいくら Spot VMs とはいえ課金が発生してしまうので、不要なったらリソースグループごと消してしまいましょう。

f:id:nari_kyu:20191207175239p:plain

まとめ

プレビュー版なので仕様変更がある可能性が高いですが、それを差し引いてもすぐにでも積極的に使っていきたい機能です。

個人的な思い

※ ここから下は完全に個人的な感想です。

このサービスはすべてのリージョンで使用出来ることや、ほぼすべて VM サイズで使用出来ることもすごいのですが、個人的には VM スケールセット(VMSS) に対応してるというのがとても意味が大きいと考えています。

昨今は PaaS を代表としたインフラを考慮しない設計が注目を浴びていますが、要件によっては VM を扱わなくてはならず、VMスケールセット を構築している環境も多いと思います。

Azure Spot VMs は 中断できるワークロードに最適 とあるように、ユーザ側の意図しないタイミングで落ちる可能性があります。

これが逆に良くて、この条件を加味した VM に依存しないアークテクチャ設計 を求められることになり、結果的にインフラレイヤーにおけるカオスエンジニアリングを意識したアーキテクチャを考えざるを得ない状況になると予想します。

結果として DevOps や SRE といった基盤よりのエンジニアの腕の見せどころとなり、よりクラウドネイティブな設計をさざるを得なくなります。

さらに個人的な願いとしては AKS の Node に使いたいと思っていて、何か貢献出来ればいいなぁと思いつつ、 CLI および Terraform の実装待ちというステータスです😊

Microsoft Learn もくもく会に参加しました(※ 注意書き有

注意点

※ 当日はわたしは咳喘息の悪化に伴い、本当は参加していません!!

※ この記事は、行きたかった気持ちを供養する記事です…

Microsoft Learn もくもく会とは

紹介

今回は、第10回 Microsoft Learn もくもく会 @品川 に参加してきたので、その時のメモになります。(※ 参加出来ていません)

雰囲気や内容を把握して頂き、今後参加される際の参考になればと思います。

あと、 Twitter でおだしょーさん(@MS_odasho)を追いかけていると、より詳細な雰囲気が掴めると思います

楽しそうですよね!! :)

当日の時間の流れや雰囲気

ざっくりなスケジュール

  • 12:30 ~
    • 受付
  • 13:10 ~
    • 会の説明
  • 13:15 ~
    • 自己紹介
  • 13:20 ~
    • もくもくタイム開始
  • 16:45 ~
    • 成果発表
  • 17:00
    • 解散

雰囲気

  • (普通の?)もくもく会
  • 飲み物はフリードリンクをいただけるので、適宜動く感じ

あまりツイートが見つからなかったので、みんな集中してやっていたのかなと思います!

アドベントカレンダーについて

話しが変わるのですが、すこし前に Twitter で以下のやりとりがあり、 Microsoft Learn のアドベントカレンダーを作ることになり、勉強会でも紹介がありました。(これは予想)

今回はこのアドベントカレンダー作成と実施も兼ねて参加したので、効率的に時間を使えたかと思います。(※ 参加出来ていません)

なお、勉強会後は有志で夕飯を食べに行ったそうなのですが、私は次の予定があったので、先に帰りました。

次回参加出来る機会があれば、ごはんまでご一緒出来るといいなと思います :D

わたしが作成しているコレクション

まとめとか感想とか

Microsost learn は本当にすごくよく出来たサービスであり、もろもろのサービスの質や量、認定精度、社員さんの対応などを考えると Microsoft の本気というか、ある意味 余裕さ さえ感じました。

本当にエンジニア(も)を大切にしているんだなという印象が他のクラウドよりもより強く感じます。

しかし、 Microsost Learn はキッカケでしかないため、ここで得た知識や技術を使って実際に Azure を動かして、なにかアウトプットをしたいなと思います!! ;)