Hejdaの見る夢

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

DevRel Meetup in Tokyo #50 〜クラウドサービスとOSS〜 にて、今後のオンライン勉強会のあり方について聞いてきました👀

2020 年 03 月 04 日に行われた、DevRel Meetup in Tokyo #50 〜クラウドサービスとOSS〜 にオンライン参加しました。

そして、学びが多かったので、忘れる前に書き留めて置こうと思います。

🙇 本セッションも大変有意義でしたが、本記事では本セッション後のスタッフさんたちによるオンライン勉強会の感想になります 🙇

リンク

  • connpass

devrel.connpass.com

twitter.com

  • togetter

togetter.com

  • スタッフさん (@beajourneyman) によるまとめ

note.com

配信場所の話

  • 場所に縛られることが無くなったので、基本は各個人の家が中心になっていく。
  • 家にお子さんがいる場合、起こしてしまう可能性や、起きてても「なんで構ってくれないの?」という熱い視線があるとか。
  • リモートワークが増えることにより会社でオンライン勉強会に参加出来るようなった方もいれば、そもそも業務以外で会社の会議室を使うことは出来ない人も依然としている。

開始時間の話

  • リモートワークの場合、開始時間が早いと参加しやすくなる(会場までの移動時間を考慮する必要が無い人も多い。
  • 一方で配信場所で取り上げた問題も同様にあるし、開始時間の問題は引き続き起こりそう。

アバターの問題

  • YouTube Live のような一方通行な配信ではなく、Zoom を使った双方向のオンライン meetup などで起きそうな問題。
  • 家の中を映したくない場合はバーチャル壁紙や映っても問題無い場所を探すかで対処可能。問題は顔出しについて。
  • 様々な理由で顔出ししたくない人がいること自体はいいけど、アバターを使い出すと本人が特定しずらい上にアバター被りも起きうる
    • 時にはアバターが他の参加者に不快感を与えることもありうる?
    • 本人を想起できる特徴やアイテムがあればよい?
    • また、「顔出ししたい人としたくない人」、「話し合いに参加したい人・ただ聞いてるだけでいい人」のようなロール分けが出来る仕組みがるあるとよい。

拡散力の問題

  • 勉強会の活発度の指標のひとつには SNS でのツイート量があり、今日の Web 系の勉強会だと Twitter が主流である(他の業界だと、YouTube だったり Discord だったり)。
  • Zoom や Youtube の中にそれぞれチャット機能があり、そこでコメントし合うのはよいが、クローズドなため拡散力が落ちてしまい、活発度を外にアピールしずらくなりそう。
    • 普段、オフラインでも現地での全ての会話を発信している訳では無いので、やり方や仕組みでカバーしていくしかない

参加率の問題

  • オンラインだと地理的に参加が難しかったり、私的な事情で参加しにくい人達が一定数いたが1部緩和されたのは良かった点。
  • 一方、より参加しやすくなった反面、「登録はしたが参加しない割合」も増える。
    • 「参加率」という面では下がる可能性は高い。
  • ただ、途中まで参加・途中から参加・中抜けなどはしやすいので、やはりオンラインのメリットは大きそう。

まとめ

昨今のオンライン勉強会の流れは始まりは不穏でしたが、一部のアーリーアダプタ達が精力的にオンライン勉強会のノウハウや今後の展望を話し合っているのを見ているとブレイクスルーの予感しかないので、自分も積極的に関わっていきたいなと思っています :)

DevRel さんの次回の勉強会は Online の名を冠している勉強会なので要チェックですね!!

  • connpass

devrel.connpass.com

Have fun!! :)

Video Indexer を使って、映像から音声を抽出してみた!! 📹

動機

昨今、さまざまな要因でオンライン勉強会が施行されるようになりました。

その中で、さまざまな分野で試行錯誤が練られていると思います。

多拠点での開催や、VRなどを使った方針、如何にストレス無く配信・視聴出来る仕組みづくり等々。

また、その技術やナレッジに関しても日々アップデートされています。

先週行われた、Serverless meetup #16 でも、初のオンライン開催され、とても好評でした。

この勉強会では Zoom と YouTube Live を用いた、多拠点での配信を行ってました。

わたしはたまたま、配信場所にお邪魔する機会があったので参加してきたのですが、とても貴重な経験をさせて頂きました。

多謝(-人-)

後日、動画を翻訳することで国内だけでなく全世界を視野にいれた配信が出来るのでは? という話になり、私が個人的に前から気になっていた Azure Media Services を使ってみいなと思っていました。

  • Azure Media Services

https://azure.microsoft.com/en-us/services/media-services/

その中で、まずは Video Indexer を用いて、映像から音声を文字おこしする作業をしてみます。

  • Video Indexer

https://azure.microsoft.com/en-us/services/media-services/video-indexer/

勉強に使った YouTube

くらでべ (クラウドデベロッパーちゃんねる)

www.youtube.com

Azure | Azure Media Services 基礎 (前編)

www.youtube.com

Azure | Azure Media Services基礎 (後編)

www.youtube.com

Tweet

動画を見ていて、特に気付きがあった点をつぶやいてました。

  • 前編を視聴している際のつぶやき

  • 後編を視聴している時のつぶやき

Video Indexer を試してみる

くらでべで学んだ結果、まずは Video Indexer を用いて動画の中の言語抽出をする必要があるようなので、試してみます。

https://azure.microsoft.com/en-us/services/media-services/video-indexer/

利用するステップは 3 ステップです。

  • Video Indexer にログイン
  • データのアップロード
  • 結果の確認

Video Indexer にログイン

https://azure.microsoft.com/en-us/services/media-services/ にアクセス

f:id:nari_kyu:20200301214217p:plain

自分のアカウントでログイン

f:id:nari_kyu:20200301214328p:plain

f:id:nari_kyu:20200301214342p:plain

f:id:nari_kyu:20200301214354p:plain

データのアップロード

アップロードに要する時間はご自身のネット環境に依存します。

今回の場合は 520MB の動画で 4 分ほどでアップロード出来ました。

f:id:nari_kyu:20200301214415p:plain

f:id:nari_kyu:20200301214432p:plain

そこから解析がスタートします。

解析中は以下のようなシークバーが出るので、終るまで気長に待ちます。

f:id:nari_kyu:20200301214455p:plain

解析は動画と同じくらいの時間で出来ました。

ただ、これはたまたまだったかもしれません。

結果の確認

こんな感じ

f:id:nari_kyu:20200301214535p:plain

映像の解析を行った結果、動画内の人を認識し、かつその動画内でその人が映っている箇所を特定出来るようにされています。

f:id:nari_kyu:20200301214805p:plain

文字起こしもかなり精度良く出来ています。

f:id:nari_kyu:20200301214837p:plain

文字起こしが間違っている場合は右上の鉛筆マークから修正を行うことが可能です。

f:id:nari_kyu:20200301215107p:plain

文字起こしのテキストも赤枠のところから、ダウンロードが可能です。

f:id:nari_kyu:20200301215200p:plain

f:id:nari_kyu:20200301215213p:plain

あとは、ローカルでさらに編集など行いましょう!!

まとめ

Video Indexer を使うことで、2 時間超えの映像も簡単に文字起こしが出来ました!!

本当に簡単にここまで出来ました!!

Azure すごい!!

この次はテキストを英語翻訳し、Azure Media Services を用いて映像に載せていくようにしてみます!! (`・ω・´)ゞ

spot node pool to an Azure Kubernetes Service を試したみた!! 🚀

AKS クラスターに新しい機能が追加されたようなので、試してみました!!

公式ドキュメント

Add a spot node pool to an Azure Kubernetes Service (AKS) cluster

情報元

結論

AKS に spot node pool が使えるようになり、これが AKS の運用においてコスト削減に繋がるとのことです。

spot node pool というのは、Spot VMs[1] を用いた virtual machine scale set (vmss) [2] であり、コスト削減というのはこの Spot VMs を使うからです。

⚠ 注意事項

  • 2020/02/29 の時点では今回取り上げる Spot VMs 等はプレビュー段階のため、GA時にはコマンドや実行状況などは変わる可能性があります。
  • プレビュー版故に SLA は無いので、開発環境であっても自己責任で使用して下さい。
  • SpotVM の制約として、vmss は single fault domain[3] のみで可能なため、HA 構成を設定することが出来ません[4]
  • Azure 側にて、リソースが必要になった場合は、SpotVM は優先的にリソースを奪われるようです。

実際に構築してみる

手順は 2 個です。

順番にやっていきましょう!! 🙌

サブスクリプションの作成とプレビュー機能の有効化

spotpoolpreview preview 機能を使えるようにする

f:id:nari_kyu:20200229230833p:plain

f:id:nari_kyu:20200229230846p:plain

  • 今回の検証用に作成し、iganar-aks-test-20200229 とリネームしたものを使っていきます。
az account list --output table
# az account list --output table
Name                        CloudName    SubscriptionId             State    IsDefault
--------------------------  -----------  -------------------------  -------  -----------
iganari-hogehoge            AzureCloud   zzzzzzzzzzzzzzzzzzzzzzzzz  Enabled  True
iganari-hugahuga            AzureCloud   yyyyyyyyyyyyyyyyyyyyyyyyy  Enabled  False
iganar-aks-test-20200229    AzureCloud   xxxxxxxxxxxxxxxxxxxxxxxxx  Enabled  False
  • Default にセットしていない場合は az account set コマンドを使います。
az account set --subscription ${SubscriptionId}
# az account list --output table
Name                        CloudName    SubscriptionId             State    IsDefault
--------------------------  -----------  -------------------------  -------  -----------
iganari-hogehoge            AzureCloud   zzzzzzzzzzzzzzzzzzzzzzzzz  Enabled  False
iganari-hugahuga            AzureCloud   yyyyyyyyyyyyyyyyyyyyyyyyy  Enabled  False
iganari-aks-test-20200229   AzureCloud   xxxxxxxxxxxxxxxxxxxxxxxxx  Enabled  True
  • spotpoolpreview preview を登録します。

今回の spot node pool を用いた AKS を構築するには、spotpoolpreview 機能を Subscription の中で有効にする必要があるので下記のコマンドを実行しましょう。

az feature register --namespace "Microsoft.ContainerService" --name "spotpoolpreview"
### ex

# az feature register --namespace "Microsoft.ContainerService" --name "spotpoolpreview"
Once the feature 'spotpoolpreview' is registered, invoking 'az provider register -n Microsoft.ContainerService' is required to get the change propagated
{
  "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxx/providers/Microsoft.Features/providers/Microsoft.ContainerService/features/spotpoolpreview",
  "name": "Microsoft.ContainerService/spotpoolpreview",
  "properties": {
    "state": "Registering"
  },
  "type": "Microsoft.Features/providers/features"
}
  • 有効化には数分かかりますので、実行中のステータスに関しては以下のコマンドで確認出来ます。
az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/spotpoolpreview')].{Name:name,State:properties.state}"
### ex

### 実行前は何も表示されない
# az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/spotpoolpreview')].{Name:name,State:properties.state}

### 実行直後
# az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/spotpoolpreview')].{Name:name,State:properties.state}"
Name                                        State
------------------------------------------  -----------
Microsoft.ContainerService/spotpoolpreview  Registering

### 有効化完了
# az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/spotpoolpreview')].{Name:name,State:p
roperties.state}"
Name                                        State
------------------------------------------  ----------
Microsoft.ContainerService/spotpoolpreview  Registered
  • 上記のコマンドの State が Registered になったら、下記のコマンドで登録情報を更新します。
    • az provider register コマンドを使用して、Microsoft.ContainerServiceリソースプロバイダーの登録を更新しています。
az provider register --namespace Microsoft.ContainerService

---> ここまでの作業で spotpoolpreview preview 機能を使えるようになりました!! 🚀

Install aks-preview CLI extension

spot node pool を用いた AKS クラスタCLI から作成する場合、aks-preview CLI extension の version 0.4.32 以降が必要になります。

az extension add コマンドを使用して、aks-preview Azure CLI extension をインストールし、az extension update コマンドを使用して更新を確認しましょう。

az extension add --name aks-preview
az extension update --name aks-preview

---> ここで AKS を作る準備が出来ました!! 🚀

Add a spot node pool to an AKS cluster

複数のノードプールが有効になっている AKS クラスタを作成する

まずはいつも通りの AKS クラスタを作成します。

  • リソースグループの作成をします。
az group create --name my-Resource-Group --location eastus
  • AKS クラスタの作成をします。
    • オプションや K8s のバージョンはあくまでデモ用です。
az aks create \
    --resource-group my-Resource-Group \
    --name iganariAKSCluster \
    --vm-set-type VirtualMachineScaleSets \
    --node-count 2 \
    --generate-ssh-keys \
    --kubernetes-version 1.15.7 \
    --load-balancer-sku standard
  • 比較のために node pool を追加しておきましょう。
az aks nodepool add \
    --resource-group my-Resource-Group \
    --cluster-name iganariAKSCluster \
    --name nodepoolno \
    --node-count 3 \
    --kubernetes-version 1.15.5 \
    --no-wait

spot node pool を追加します。

  • 下記のコマンドにて追加することが出来ます。
    • --priority Spot 及び、 --enable-cluster-autoscaler のオプションが付いていることが分かります。
az aks nodepool add \
    --resource-group my-Resource-Group \
    --cluster-name iganariAKSCluster \
    --name nodepoolspot \
    --priority Spot \
    --eviction-policy Delete \
    --spot-max-price -1 \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3 \
    --no-wait

AKS の状態を確認しましょう。

  • CLI にて確認していきましょう。
# az aks nodepool list --resource-group my-Resource-Group --cluster-name iganariAKSCluster -o table
The behavior of this command has been altered by the following extension: aks-preview
Name          OsType    VmSize           Count    MaxPods    ProvisioningState
------------  --------  ---------------  -------  ---------  -------------------
nodepool1     Linux     Standard_DS2_v2  2        110        Succeeded
nodepoolno    Linux     Standard_DS2_v2  3        110        Succeeded
nodepoolspot  Linux     Standard_DS2_v2  3        110        Succeeded
  • ポータルからも確認してみましょう。

f:id:nari_kyu:20200229231711p:plain

---> これで spot node pool を用いた AKS の構築自体は完了です!! 🚀

サンプルプログラムを配置してみる

実際に動くサンプルアプリケーションを用いて挙動を確認してみましょう。

サンプルアプリケーションは公式のものを使用します。

  • まずは AKS との認証を行います。
az aks get-credentials --resource-group my-Resource-Group --name iganariAKSCluster

Azure の公式ドキュメントに載っているサンプルの YAML をすこし改良してみます。

kind: Namespace
apiVersion: v1
metadata:
  name: sample-vote
  labels:
    name: sample-vote

---

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: azure-vote-back
  namespace: sample-vote
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: azure-vote-back
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-back
        image: redis
        ports:
        - containerPort: 6379
          name: redis
      tolerations:
      - key: "kubernetes.azure.com/scalesetpriority"
        operator: "Equal"
        value: "spot"
        effect: "NoSchedule"

---

apiVersion: v1
kind: Service
metadata:
  name: azure-vote-back
  namespace: sample-vote
spec:
  ports:
  - port: 6379
  selector:
    app: azure-vote-back

---

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: azure-vote-front
  namespace: sample-vote
spec:
  replicas: 1
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  minReadySeconds: 5 
  template:
    metadata:
      labels:
        app: azure-vote-front
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-front
        image: microsoft/azure-vote-front:v1
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 250m
          limits:
            cpu: 500m
        env:
        - name: REDIS
          value: "azure-vote-back"
      tolerations:
      - key: "kubernetes.azure.com/scalesetpriority"
        operator: "Equal"
        value: "spot"
        effect: "NoSchedule"
---

apiVersion: v1
kind: Service
metadata:
  name: azure-vote-front
  namespace: sample-vote
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: azure-vote-front
  • kubectl コマンドを持ちいて、デプロイしましょう。
kubectl create -f sample.yaml
  • デプロイ後に Pod を確認してみましょう。
    • spot node pool 上に Pod が作成出来たのが確認出来ます。
kubectl get po --namespace=sample-vote -o wide
# kubectl get po --namespace=sample-vote -o wide
NAME                                READY   STATUS    RESTARTS   AGE     IP           NODE                                   NOMINATED NODE   READINESS GATES
azure-vote-back-79ccd5b979-qh4bw    1/1     Running   0          8m14s   10.244.7.2   aks-nodepoolspot-20405705-vmss000000   <none>           <none>
azure-vote-front-559d85d4f7-898wz   1/1     Running   0          105s    10.244.4.2   aks-nodepoolno-20405705-vmss000000     <none>           <none>
  • 外部 IP アドレスの確認をします。
# kubectl get service --namespace=sample-vote
NAME               TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
azure-vote-back    ClusterIP      10.0.236.31    <none>         6379/TCP       8m19s
azure-vote-front   LoadBalancer   10.0.113.113   40.71.235.54   80:32604/TCP   8m17s

f:id:nari_kyu:20200229232827p:plain

---> ちゃんと起動して、かつ動くことを確認出来ました!! 🚀

削除コマンド

検証が完了した後にはリソースの解放をしておきましょう。

kubectl delete -f sample.yaml
for i in nodepoolno nodepoolspot ;
  do \
    az aks nodepool delete \
      --resource-group my-Resource-Group \
      --cluster-name iganariAKSCluster \
      --name $i ;
  done
az aks delete \
    --resource-group my-Resource-Group \
    --name iganariAKSCluster
az group delete \
    --name my-Resource-Group

---> これでリソースの解放も完了です!! 💪

まとめ

AKS の新しい機能である、spot node pool を使った AKS を構築し、その上に Pod を配置して、ブラウザでアプリケーションの動作確認を取るところまで確認出来ました。

ほぼ、CLI からの操作で簡単に行えるので操作感的には問題ないかと思います。

また、マニュフェストファイルへの追加事項も多くないので、一度書いてしまえばそこまで苦ではありません。

一点、疑問が残るのですが、Spot VMs を使っていること自体を確認するパラメータが今の所見つからないので、名前等で判別出来るようにしておかないといけないのか??と思っています 🤔

さすがにそれは無いと思いますが…

また spot node pool 及び、Spot VMs を使うに当たっていくつかの制約があるので、この機能を使う前に併せて読んでおいたほうが良さそうです。[5]

というとこで、今回の検証は終わりになります。

引き続き、AKS の進化を楽しんでいきましょう!!

Have fun !! :)

参考

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?

まとめ

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

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