Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Veleroを使ったAKSバックアップのご紹介
@tetsuyasd
2020/03/25
Tokyo JAZUG Night #26
Who am I ?
2
名前: 惣道 哲也 (そうどう てつや)
Twitter: @tetsuyasd
所属: 日本ヒューレット・パッカード株式会社 Pointnext事業統括
職務: オープンソース関連いろいろ(調査、検証、構築、提案)
...
Agenda (30min)
3
1. kubernetesクラスタの運用管理とバックアップ手法
2. Veleroの特徴と主な機能
3. AKS環境へのVeleroの導入方法と使い方(デモ)
1. Kubernetesクラスタの運用管理と
バックアップ手法
Kubernetesクラスタの運用管理の必要性
コンテナの配備、さまざま管理タスクが自動化される点がk8sのメリット
一方で、以下のような運用管理は必要
✓バックアップ
✓クラスタ基盤の運用監視
✓バージョンアップ
✓ログ管理
✓クラスタ基盤の...
「Kubernetesってバックアップいるんですか?」
6
https://www.publickey1.jp/blog/19/spotifykubernetes.html
ユーザ操作によりクラスタごと削除してしまった例(kubecon Eur...
7
リストアプロセスが自動化されてないために、さらなる悪夢が・・・
https://www.youtube.com/watch?v=ix0Tw8uinWs
✓手動プロセス、かつ、ドキュメントに誤記
✓クラスタ再作成スクリプトにも不具合
✓復旧ま...
8
翌月、さらに盛大にやらかす
https://www.youtube.com/watch?v=ix0Tw8uinWs
✓3リージョン中2リージョンをロスト ✓結論「バックアップ(とリストア試験)大事」
「Kubernetesってバックアップい...
参考: GitOps (WeaveWorks)
✓環境構成データをすべてGitに持つ (Single Source of Truth)
✓「こなれた」パイプライン設計とブランチ戦略が求められる
9
https://www.weave.works...
2. Veleroの特徴と主な機能
Veleroとは
11
k8sクラスタのリソースやボリュームを安全に
バックアップ・リストアできるOSSツール
✓スケジュールバックアップ
✓ディザスタリカバリ(DR)
✓k8sクラスタ間マイグレーション
元々はHeptio社がArkという名前...
Veleroとは
12
k8sクラスタのバックアップを取得する仕組み
1. カスタムリソース(CR)としてのバックアップ定義の作成をk8s APIにコール
2. (事前に配備済の)バックアップコントローラが検知
3. 定義されたタイミングで、対...
Veleroを使わずに手組みでバックアップするなら・・・
13
取得すべきバックアップデータの例
✓etcdctlコマンドを用いたetcdデータベースのバックアップ
✓一貫性を保持したリソースのyamlエクスポートと保管
✓Volumeストレー...
Veleroを使うと・・・
14
k8sアーキテクチャの深い理解に基づいたスマートな方式
✓(etcd直接でなく) kubernetes APIをアクセスしてリソース情報を抽出
✓保管先は設定したオブジェクトストレージ
✓PVに対応した固有のプ...
その他のVeleroの特徴
15
バックアップ・リストアの範囲指定
✓クラスタ全体、Namespace単位、ラベル指定単位
リソース情報を設定したオブジェクトストレージに保管
✓S3、GCS、Azure Blob Storage、Minioなど...
3. AKS環境へのVeleroの導入方法と使い方
検証環境の構成
17
Product Version Note
AKS 1.16.7 東日本(japaneast)リージョン
azure-cli 2.1.0
kubectl 1.16.0
velero 1.3.1 2020/03/22時点のla...
導入・利用の手順概要
18
 AKSのセットアップ
 Azureストレージアカウント
とBLOBコンテナの作成
(バックアップ先コンテナ)
 service principalの作成
(veleroがAzureリソース管理を
自動で行うた...
導入・利用の手順概要
19
1-1. AKSクラスタの作成 (3ノード構成)
$ az aks create ¥
--resource-group $AZURE_AKS_RESOURCE_GROUP ¥
--name $AKS_NAME ¥
-...
導入・利用の手順概要
20
1-2. ストレージアカウントとBLOBコンテナの作成
$ AZURE_STORAGE_ACCOUNT_ID="velero$RANDOM"
$ az storage account create ¥
--name ...
導入・利用の手順概要
21
1-3. service principalの作成(AzureAD)
$ AZURE_CLIENT_SECRET=`az ad sp create-for-rbac ¥
--name "velero" ¥
--rol...
導入・利用の手順概要
22
1-3. service principalの作成(AzureAD)
$ cat credentials-velero
AZURE_SUBSCRIPTION_ID=03xxxxxx-xxxx-xxxx-xxxx-xx...
導入・利用の手順概要
23
2-1. Velero CLIのインストール
$ wget https://github.com/vmware-tanzu/velero/releases/download/v1.3.1/velero-v1.3.1-...
導入・利用の手順概要
24
2-2. Veleroのインストール
$ velero install ¥
--provider azure ¥
--plugins velero/velero-plugin-for-microsoft-azure:...
導入・利用の手順概要
25
3-1. バックアップスケジュールの定義
$ velero schedule create voting-backup ¥
--include-namespaces=voting ¥
--snapshot-volum...
導入・利用の手順概要
26
3-2. 取得済みバックアップの確認
$ velero backup get
NAME STATUS CREATED EXPIRES STORAGE
LOCATION SELECTOR
voting-backup-2...
導入・利用の手順概要
27
3-3. リストアの実行
$ velero restore create --from-backup voting-backup-20200229121201
Restore request "voting-back...
全体構成イメージ
28
PodP
velero
ReplicaSetRS
velero
DeploymentD
velero
PodP
app
ReplicaSetRS
app
DeploymentD
app
PodP
analytics
Re...
Azure側のふるまい ①BLOBコンテナへの保存
29
Veleroで取得したリソースオブジェクトはBLOBコンテナに保存される
✓BackupStorageLocationと呼ばれます
Azure側のふるまい ②PVのスナップショット取得
30
VeleroでPVのスナップショットを取るとManaged Diskのスナップショットが取得される
✓VolumeSnapshotLocationと呼ばれます
PVPV
mysql-p...
Veleroのインストールとバックアップ・リストアのデモ
31
(動画でご紹介します)
Veleroが役立つユースケースの例
Veleroのバックアップが有用と思われるユースケースの例
✓障害・オペミス対策
✓クラスタ環境のスケジュールバックアップ
✓DR用途
✓テナント環境のクラスタ間移行
✓AKSのアップグレード前のバックアッ...
参考URL
– Azure Kubernetes Services (AKS) のストレージとバックアップに関するベスト プラクティス
https://docs.microsoft.com/ja-jp/azure/aks/operator-be...
まとめ
まとめ
35
複雑なシステムを扱う際に失敗は不可避であり、
そこから継続的に学び共有する文化が不可欠です。
運用が精神論に陥らないための仕組み、仕掛けを確立しておきましょう。
Spotifyによる発表資料より
https://www.youtu...
ご清聴ありがとうございました
37
本資料に関するお問い合わせ
37
@tetsuyasd
Mailto: tetsuya.sodo@hpe.com
本資料で記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。
本発表内容に関して、ご質問等が...
Upcoming SlideShare
Loading in …5
×

JAZUG #26 AKS backup with Velero

JAZUG #26で発表した「Veleroを使ったAKSバックアップのご紹介」の資料です。

  • Be the first to comment

JAZUG #26 AKS backup with Velero

  1. 1. Veleroを使ったAKSバックアップのご紹介 @tetsuyasd 2020/03/25 Tokyo JAZUG Night #26
  2. 2. Who am I ? 2 名前: 惣道 哲也 (そうどう てつや) Twitter: @tetsuyasd 所属: 日本ヒューレット・パッカード株式会社 Pointnext事業統括 職務: オープンソース関連いろいろ(調査、検証、構築、提案) - Cloud / Container / Data Analytics / etc…
  3. 3. Agenda (30min) 3 1. kubernetesクラスタの運用管理とバックアップ手法 2. Veleroの特徴と主な機能 3. AKS環境へのVeleroの導入方法と使い方(デモ)
  4. 4. 1. Kubernetesクラスタの運用管理と バックアップ手法
  5. 5. Kubernetesクラスタの運用管理の必要性 コンテナの配備、さまざま管理タスクが自動化される点がk8sのメリット 一方で、以下のような運用管理は必要 ✓バックアップ ✓クラスタ基盤の運用監視 ✓バージョンアップ ✓ログ管理 ✓クラスタ基盤のメンテナンス ✓例:ノードに対するパッチ適用など 5 AKSではバージョンアップも すべて自動などと言っておるようだが、 aks upgradeコマンドを使えば 絶対失敗しないと 言い切れるのかね、君は? クラウドネイティブ化に 立ちはだかる社内の壁 (※偏見です) ちなみに、経験上aks upgradeで失敗したことはないです。
  6. 6. 「Kubernetesってバックアップいるんですか?」 6 https://www.publickey1.jp/blog/19/spotifykubernetes.html ユーザ操作によりクラスタごと削除してしまった例(kubecon Europe 2019) ✓10億ユーザを抱えるSpotifyの事例 https://www.youtube.com/watch?v=ix0Tw8uinWs テスト環境と間違えて 本番環境を削除してしまった
  7. 7. 7 リストアプロセスが自動化されてないために、さらなる悪夢が・・・ https://www.youtube.com/watch?v=ix0Tw8uinWs ✓手動プロセス、かつ、ドキュメントに誤記 ✓クラスタ再作成スクリプトにも不具合 ✓復旧まで3時間以上を要した 「Kubernetesってバックアップいるんですか?」
  8. 8. 8 翌月、さらに盛大にやらかす https://www.youtube.com/watch?v=ix0Tw8uinWs ✓3リージョン中2リージョンをロスト ✓結論「バックアップ(とリストア試験)大事」 「Kubernetesってバックアップいるんですか?」
  9. 9. 参考: GitOps (WeaveWorks) ✓環境構成データをすべてGitに持つ (Single Source of Truth) ✓「こなれた」パイプライン設計とブランチ戦略が求められる 9 https://www.weave.works/blog/gitops-high-velocity-cicd-for-kubernetes 「Kubernetesってバックアップいるんですか?」
  10. 10. 2. Veleroの特徴と主な機能
  11. 11. Veleroとは 11 k8sクラスタのリソースやボリュームを安全に バックアップ・リストアできるOSSツール ✓スケジュールバックアップ ✓ディザスタリカバリ(DR) ✓k8sクラスタ間マイグレーション 元々はHeptio社がArkという名前で開発していたものが、2018年11月にVmware社がHeptioを買収 したことにともない、名称をVeleroに変更した。 ※Heptioはk8sを開発したエンジニアのCraig McLuckieとJoe Bedaが創業した企業
  12. 12. Veleroとは 12 k8sクラスタのバックアップを取得する仕組み 1. カスタムリソース(CR)としてのバックアップ定義の作成をk8s APIにコール 2. (事前に配備済の)バックアップコントローラが検知 3. 定義されたタイミングで、対象リソースの全情報をk8s API経由で取得 4. 取得したJSONファイル群をオブジェクトストレージへアップロード 5. (option) PVのスナップショットを取得 https://velero.io/docs/v1.3.1/how-velero-works/
  13. 13. Veleroを使わずに手組みでバックアップするなら・・・ 13 取得すべきバックアップデータの例 ✓etcdctlコマンドを用いたetcdデータベースのバックアップ ✓一貫性を保持したリソースのyamlエクスポートと保管 ✓Volumeストレージのバックアップ
  14. 14. Veleroを使うと・・・ 14 k8sアーキテクチャの深い理解に基づいたスマートな方式 ✓(etcd直接でなく) kubernetes APIをアクセスしてリソース情報を抽出 ✓保管先は設定したオブジェクトストレージ ✓PVに対応した固有のプラグインを用いて適宜スナップショットを作成
  15. 15. その他のVeleroの特徴 15 バックアップ・リストアの範囲指定 ✓クラスタ全体、Namespace単位、ラベル指定単位 リソース情報を設定したオブジェクトストレージに保管 ✓S3、GCS、Azure Blob Storage、Minioなどが選択可能 リソースだけでなくPVのスナップショット取得が可能 (*1) ✓バックエンドボリュームに対応したプラグインが提供されていればOK バックアップ取得のスケジュール管理 ✓cronスケジュールの要領で バックアップ前後のhook処理が可能 ✓バックアップ前のfilesystem freezeなども実行可能 (*1) PVスナップショットを他リージョンや他クラウドに取得することはできません
  16. 16. 3. AKS環境へのVeleroの導入方法と使い方
  17. 17. 検証環境の構成 17 Product Version Note AKS 1.16.7 東日本(japaneast)リージョン azure-cli 2.1.0 kubectl 1.16.0 velero 1.3.1 2020/03/22時点のlatest version velero plugins for Microsoft Azure 1.0.1 2020/03/22時点のlatest version
  18. 18. 導入・利用の手順概要 18  AKSのセットアップ  Azureストレージアカウント とBLOBコンテナの作成 (バックアップ先コンテナ)  service principalの作成 (veleroがAzureリソース管理を 自動で行うために必要)  velero CLIのインストール  veleroのインストールと起動  サンプルアプリケーションの デプロイ  バックアップスケジュールの 作成  リストアの確認 事前準備 Veleroインストール バックアップ・リストア おおよそこのような手順 ※本発表の最後に、詳細な手順を説明したブログのURLも記載していますので、ご参照ください。
  19. 19. 導入・利用の手順概要 19 1-1. AKSクラスタの作成 (3ノード構成) $ az aks create ¥ --resource-group $AZURE_AKS_RESOURCE_GROUP ¥ --name $AKS_NAME ¥ --network-plugin azure ¥ --vnet-subnet-id ${VNET_SUBNET_ID} ¥ --docker-bridge-address 172.17.0.1/16 ¥ --dns-service-ip 10.0.0.10 ¥ --service-cidr 10.0.0.0/16 ¥ --node-count 3 ¥ --kubernetes-version 1.16.7 ¥ --generate-ssh-keys $ kubectl get nodes NAME STATUS ROLES AGE VERSION aks-nodepool1-18086731-vmss000000 Ready agent 146m v1.16.7 aks-nodepool1-18086731-vmss000001 Ready agent 146m v1.16.7 aks-nodepool1-18086731-vmss000002 Ready agent 146m v1.16.7 ※事前のResourceGroupやVNetの作成手順は省略しています。 また、環境変数の指定は適宜行う必要があります。 詳細な手順は最後に紹介するブログからご確認いただけます。 事前準備
  20. 20. 導入・利用の手順概要 20 1-2. ストレージアカウントとBLOBコンテナの作成 $ AZURE_STORAGE_ACCOUNT_ID="velero$RANDOM" $ az storage account create ¥ --name $AZURE_STORAGE_ACCOUNT_ID ¥ --resource-group $AZURE_BACKUP_RESOURCE_GROUP ¥ --sku Standard_GRS ¥ --encryption-services blob ¥ --https-only true ¥ --kind BlobStorage ¥ --access-tier Hot $ BLOB_CONTAINER=velero $ az storage container create ¥ -n $BLOB_CONTAINER ¥ --public-access off ¥ --account-name $AZURE_STORAGE_ACCOUNT_ID 事前準備
  21. 21. 導入・利用の手順概要 21 1-3. service principalの作成(AzureAD) $ AZURE_CLIENT_SECRET=`az ad sp create-for-rbac ¥ --name "velero" ¥ --role "Contributor" ¥ --query 'password' ¥ --scopes /subscriptions/$AZURE_SUBSCRIPTION_ID ¥ -o tsv` $ AZURE_CLIENT_ID=`az ad sp list ¥ --display-name "velero" ¥ --query '[0].appId' ¥ -o tsv` 事前準備 アプリの登録メニューから 作成されたSPが確認できる
  22. 22. 導入・利用の手順概要 22 1-3. service principalの作成(AzureAD) $ cat credentials-velero AZURE_SUBSCRIPTION_ID=03xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx AZURE_TENANT_ID=27xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx AZURE_CLIENT_ID=65xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx AZURE_CLIENT_SECRET=b6xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx AZURE_RESOURCE_GROUP=MC_akstest01rg_aks01_japaneast AZURE_CLOUD_NAME=AzurePublicCloud ✓ ここまでの手順で取得した情報をもとにvelero用のクレデンシャルファイルを作る ✓ “AZURE_RESOURCE_GROUP”は”MC”で始まるAKSの実際のリソース(VMなど)が格納されているRGを指定 事前準備
  23. 23. 導入・利用の手順概要 23 2-1. Velero CLIのインストール $ wget https://github.com/vmware-tanzu/velero/releases/download/v1.3.1/velero-v1.3.1- linux-amd64.tar.gz $ tar zxvf velero-v1.3.1-linux-amd64.tar.gz $ export PATH=$PATH:~/velero-v1.3.1-linux-amd64 インストール
  24. 24. 導入・利用の手順概要 24 2-2. Veleroのインストール $ velero install ¥ --provider azure ¥ --plugins velero/velero-plugin-for-microsoft-azure:v1.0.1 ¥ --secret-file ./credentials-velero ¥ --bucket $BLOB_CONTAINER ¥ --backup-location-config ¥ resourceGroup=$AZURE_BACKUP_RESOURCE_GROUP,storageAccount=$AZURE_STORAGE_ACCOUNT_ID ¥ --snapshot-location-config apiTimeout=5m インストール ✓ リソース保存先(bucket)のBLOBや、PVであるManaged Diskを扱うためのAzure用Veleroプラグインを指定する ✓ “--backup-location-config”はリソース保存先の設定 ✓ “--snapshot-location-config”はPVのスナップショットの設定 ✓ それぞれ細かい設定が可能 ✓ https://github.com/vmware-tanzu/velero-plugin-for-microsoft-azure/blob/master/backupstoragelocation.md ✓ https://github.com/vmware-tanzu/velero-plugin-for-microsoft-azure/blob/master/volumesnapshotlocation.md
  25. 25. 導入・利用の手順概要 25 3-1. バックアップスケジュールの定義 $ velero schedule create voting-backup ¥ --include-namespaces=voting ¥ --snapshot-volumes=true ¥ --volume-snapshot-locations=default ¥ --schedule="*/5 * * * *" $ velero schedule get NAME STATUS CREATED SCHEDULE BACKUP TTL LAST BACKUP SELECTOR voting-backup Enabled 2020-02-29 12:08:34 +0000 UTC */5 * * * * 720h0m0s 6s ago <none> バックアップ・リストア ✓ バックアップ対象を指定するオプション ✓ 特定のnamespaceを含める、または、除外する ✓ 特定のリソースタイプを含める、または、除外する ✓ 特定のラベルをセレクタで指定する ✓ バックアップの挙動を指定するオプション ✓ バックアップ取得スケジュール(cronフォーマットで指定) ✓ バックアップデータの保持期間(TTL)(デフォルト:720時間) ✓ PVのスナップショットを取得するか(true/false) ※”velero backup create <backup-name> …”としてワンショットのバックアップを取得することも可能です。
  26. 26. 導入・利用の手順概要 26 3-2. 取得済みバックアップの確認 $ velero backup get NAME STATUS CREATED EXPIRES STORAGE LOCATION SELECTOR voting-backup-20200229121201 Completed 2020-02-29 12:12:01 +0000 UTC 29d default <none> バックアップ・リストア ✓ 前ページのスケジュール設定に従い、5分間隔で自動バックアップが行われる
  27. 27. 導入・利用の手順概要 27 3-3. リストアの実行 $ velero restore create --from-backup voting-backup-20200229121201 Restore request "voting-backup-20200229121201-20200229121613" submitted successfully. Run `velero restore describe voting-backup-20200229121201-20200229121613` or `velero restore logs voting-backup-20200229121201-20200229121613` for more details. $ velero restore get NAME BACKUP STATUS WARNINGS ERRORS CREATED SELECTOR voting-backup-20200229121201-20200229121613 voting-backup-20200229121201 InProgress 0 0 2020-02-29 12:16:14 +0000 UTC <none> $ velero restore get NAME BACKUP STATUS WARNINGS ERRORS CREATED SELECTOR voting-backup-20200229121201-20200229121613 voting-backup-20200229121201 Completed 0 0 2020-02-29 12:16:14 +0000 UTC <none> バックアップ・リストア ✓ 取得済みバックアップから一つ選択し、リストアを実行
  28. 28. 全体構成イメージ 28 PodP velero ReplicaSetRS velero DeploymentD velero PodP app ReplicaSetRS app DeploymentD app PodP analytics ReplicaSetRS analytics DeploymentD analytics PodP storage ReplicaSetRS storage DeploymentD storage PodP app PodP app PVCPVC mysql-pvc PVPV mysql-pv namespace: velero namespace: voting ※ユーザテナント(アプリケーションが稼働する場所) 実体はManaged Disk Velero CLIによるリ クエストを処理する コントローラ https://github.com/Azure-Samples/aks-voting-app
  29. 29. Azure側のふるまい ①BLOBコンテナへの保存 29 Veleroで取得したリソースオブジェクトはBLOBコンテナに保存される ✓BackupStorageLocationと呼ばれます
  30. 30. Azure側のふるまい ②PVのスナップショット取得 30 VeleroでPVのスナップショットを取るとManaged Diskのスナップショットが取得される ✓VolumeSnapshotLocationと呼ばれます PVPV mysql-pv 実体はManaged Disk
  31. 31. Veleroのインストールとバックアップ・リストアのデモ 31 (動画でご紹介します)
  32. 32. Veleroが役立つユースケースの例 Veleroのバックアップが有用と思われるユースケースの例 ✓障害・オペミス対策 ✓クラスタ環境のスケジュールバックアップ ✓DR用途 ✓テナント環境のクラスタ間移行 ✓AKSのアップグレード前のバックアップ取得 ✓(心の平穏のため) 32 ストラドルキャリア(英語: Straddle carrier)は、 コンテナターミナルをはじめとする港湾や貨物の 積み替え拠点において、コンテナを移動させたり 積み上げたりするために用いられる特殊自動車 である。 (参照: https://ja.wikipedia.org/wiki/ストラドルキャリア) コンテナの引っ越し は任せて
  33. 33. 参考URL – Azure Kubernetes Services (AKS) のストレージとバックアップに関するベスト プラクティス https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-storage – Veleroの公式ドキュメント (latest: v1.3.1 as of 2020/03/22) https://velero.io/docs/v1.3.1/ – Velero plugins for Microsoft Azureのドキュメント https://github.com/vmware-tanzu/velero-plugin-for-microsoft-azure/blob/master/README.md – @ysakashitaさんによるGKEのVeleroバックアップの記事 https://qiita.com/ysakashita/items/3a0b2ad9ac37e2ce315a – 本日の発表内容をqiitaにもアップしております https://qiita.com/tetsuyasodo/items/a32e437958d6c8887512 33
  34. 34. まとめ
  35. 35. まとめ 35 複雑なシステムを扱う際に失敗は不可避であり、 そこから継続的に学び共有する文化が不可欠です。 運用が精神論に陥らないための仕組み、仕掛けを確立しておきましょう。 Spotifyによる発表資料より https://www.youtube.com/watch?v=ix0Tw8uinWs
  36. 36. ご清聴ありがとうございました
  37. 37. 37 本資料に関するお問い合わせ 37 @tetsuyasd Mailto: tetsuya.sodo@hpe.com 本資料で記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。 本発表内容に関して、ご質問等があればお問い合わせ下さい。 また、内容に関しては個人の意見に基づくものであり、所属組織団体の公式見解とは異なる場合がございます点、ご了承 下さい。

×