Upgrade to Pro — share decks privately, control downloads, hide ads and more …

さくらのクラウドでのcloud-initの実装と利用例の紹介 / Implementation of cloud-init in SAKURA Cloud and introduction of usage examples

Komei Nomura
December 16, 2022

さくらのクラウドでのcloud-initの実装と利用例の紹介 / Implementation of cloud-init in SAKURA Cloud and introduction of usage examples

2022/12/16 さくらテックランチ#1の発表資料になります。

connpass: https://sakura-tokyo.connpass.com/event/266667/
youtube: https://www.youtube.com/watch?v=WaKq_xz6iq4

Komei Nomura

December 16, 2022
Tweet

More Decks by Komei Nomura

Other Decks in Technology

Transcript

  1. さくらのクラウドでの
    cloud-initの実装と利⽤例の紹介
    2022/12/16 さくらテックランチ#1
    さくらインターネット株式会社
    野村 孔命

    View Slide

  2. ⽬次
    1. ⾃⼰紹介と本発表の⽬的
    2. cloud-initの概要
    3. さくらのクラウドでのcloud-init機能の実装
    4. cloud-initの利⽤例

    View Slide

  3. ⾃⼰紹介と本発表の⽬的

    View Slide

  4. • 名前:野村 孔命
    • 所属:さくらインターネット株式会社 クラウド事業本部クラウドサービス部
    • 業務:
    • さくらのクラウドのAPIの開発
    • お客様の⾏動ログを収集する基盤の開発
    • クラウドのシステムのログを収集する基盤の開発
    ⾃⼰紹介

    View Slide

  5. • cloud-initについて知ってもらう
    • cloud-initの概要やNoCloudでの実⾏の仕組みを説明する
    • さくらのクラウドでのcloud-init機能の実装について説明する
    • 私の考えるcloud-initの使い⽅の⽅針を共有する
    • ⽅針を共有した上で、⽅針に沿ったcloud-initの利⽤例を紹介する
    本発表の⽬的

    View Slide

  6. cloud-initの概要

    View Slide

  7. • cloud-initはクラウドのインスタンスのセットアップを⾏う⽅法の⼀つ
    • 「メタデータとユーザデータ」を「何らかの⽅法」でVMが受け取り、これらの情報をもとに
    セットアップを⾏う
    • 様々なLinuxディストリビューションで利⽤可能
    • Ubuntu, Debian, AlmaLinux, Rockylinux, Alpine, RHEL etc.
    • 余談:cloudbase-initを利⽤するとwindowsも対応化
    • 様々なクラウドプロバイダで利⽤可能
    cloud-initとは

    View Slide

  8. • メタデータ
    • クラウドプロバイダが提供するインスタンス固有の情報を記述したファイル
    • インスタンスID, ホスト名, ディストリビューション名, etc.
    • クラウドプロバイダが⾃動的に⽣成
    • メタデータの内容をユーザデータから参照して利⽤可能
    • ユーザデータ
    • インスタンスのセットアップ内容を記述したyamlファイル
    • このファイルはユーザが記述し、記述内容に基づいてセットアップが⾏われる
    • 様々なセットアップの記述に便利なモジュールが⽤意されている
    メタデータとユーザデータ

    View Slide

  9. メタデータとユーザデータの例
    メタデータ ユーザデータ

    View Slide

  10. • メタデータとユーザデータを渡す⽅法は、クラウドサービスに依存する
    • さくらのクラウドでは、Webフォーム、APIパラメータ、usacloud(CLIツール)から渡せる
    • AWSも同様に、WebフォームやCLIツールから渡せる
    • ローカルでVMを⽴てるときに利⽤するデータの受け渡し⽅法(NoCloud)が提供されている
    • SMBIOS(System Management BIOS)上のシリアル番号を利⽤して渡す
    • ラベル「cidata」がつけられたファイルシステムを利⽤して渡す ← さくらのクラウドで利⽤
    メタデータとユーザデータをVMに渡す⽅法

    View Slide

  11. • cloud-initがインストールされているアーカイブのディスクイメージ
    • 今回は ubuntu-20.04-server-cloudimg-amd64.img
    • メタデータ、ユーザデータを含むディスクイメージ
    • ファイルシステム: ISO9660 or FAT
    • ファイルシステムラベル: cidata or CIDATA
    NoCloudでのcloud-initの実⾏に必要なもの

    View Slide

  12. NoCloudでのcloud-initの実⾏
    Disk image 1
    Disk image 2
    ファイルシステム: ISO9660 or FAT
    ファイルシステムラベル: cidata or CIDATA
    /meta-data
    /user-data
    VM
    qemu-system-x86_64 -m 2G -nographic
    -drive file=./archive/ubuntu-20.04-cloudimg.img,format=qcow2
    -drive file=disk2.img,if=virtio,format=raw,readonly=on
    ホストサーバ
    VM起動後、cloud-initが実⾏されセットアップが⾏われる

    View Slide

  13. さくらのクラウドでの
    cloud-init機能の実装

    View Slide

  14. • cloud-initは様々なクラウドサービスに対応しており、クラウドの利⽤者としては⼀般的なも
    のとなっている
    → さくらのクラウドでも提供し、利⽤者の利便性を向上させたい
    • パブリックアーカイブ提供の労⼒と速度の問題
    • さくらのクラウドでは、お客様の⾯倒なインストール作業を減らすために、初期のインストールされ
    た状態のアーカイブを提供している
    • 各種ディストリビューションの新しいバージョンが公開される度に、設定を⾏うスクリプトの作成や
    検証が必要となる
    • 結果、労⼒は増え、提供速度が遅くなっている
    → cloud-initを利⽤することで、パブリックアーカイブ提供の労⼒削減と速度向上を図りたい
    cloud-init機能の実装背景 1

    View Slide

  15. • ディスク修正機能の負荷が⾼い
    • さくらのクラウドでは、基本的な初期設定(パスワードやネットワークなど)を⾏うための機能とし
    て、ディスク修正を提供している
    • ディスク修正では、修正対象のディスクを特定のサーバにマウントして設定の処理をしている
    • ⼤量にディスク修正リクエストが来ると、処理を⾏うサーバに負荷が集中してしまう
    → cloud-initによって、それぞれのVMで初期設定の処理をできるようにし、負荷を分散したい
    cloud-init機能の実装背景 2

    View Slide

  16. cloud-init機能の実装

    View Slide

  17. cloud-init機能の実装

    View Slide

  18. cloud-init機能の実装

    View Slide

  19. • Ubuntu20.04ではcloud-initが実⾏されるが、Almalinux8.6では実⾏されない!
    • 初期実装の時は、メタデータ、ユーザデータの保管場所としてフロッピーを利⽤してた
    • メタデータ、ユーザデータはそれほど⼤きいファイルにならない想定
    • アーカイブにインストールされているcloud-initのバージョン違いが原因
    • cidataラベルつけててもフロッピー参照しない
    実装時に当たった問題の⼩話

    View Slide

  20. cloud-initの利⽤例の紹介

    View Slide

  21. • cloud-initには、多様なモジュールが⽤意されており、様々なセットアップ処理を記述できる
    • ミドルウェアをインストールして設定ファイルを置くこともできる
    • 複雑なセットアップ処理をユーザデータに書いてしまうと、可読性が悪くなりメンテナンスが
    ⼤変になることが予想できる
    ユーザデータを記述する上での⽅針
    ⽅針:
    1. ユーザデータの内容は、基本的なセットアップに抑える
    • user/passwordの設定、ssh-keyの設定、ネットワークの設定、パッケージのインストールなど
    2. 複雑なセットアップは構成管理ツールに任せる、もしくはシェルスクリプトに切り出す
    • 複数のミドルウェアのインストールし、それらの設定ファイルをたくさん配置するなど

    View Slide

  22. • ISUCON過去問題を解く環境をさくらのクラウドで構築するという記事がさくらのナ
    レッジに公開されています
    • ISUCON環境の構築には、cloud-initとAnsibleが利⽤されています
    • Ansibleで競技⽤VMやベンチマーク⽤VMのセットアップ処理を記述
    • Ansibleの適⽤ホストに127.0.0.1を指定することで新規作成したインスタンス⾃⾝に適⽤
    • ユーザデータでAnsibleの実⾏準備を⾏い、Ansibleの実⾏をruncmdで⾏なっている
    • ISUCONに興味がある⽅も是⾮記事を読んでみてください!
    利⽤例1:ISUCON環境のセットアップ
    ISUCON過去問題の環境をさくらのクラウドで構築する:https://knowledge.sakura.ad.jp/31520/

    View Slide

  23. • cloud-init ver 22.4からAnsibleモジュールが追加され、VM起動時にansible-playbookの適⽤
    を記述できるようになりました
    余談:Ansibleモジュール
    cloud-init releases 22.4:https://github.com/canonical/cloud-init/releases/tag/22.4

    View Slide

  24. • k0sはKubernetesディストリビューションの⼀つ
    • クラスタの構築に必要な機能を持っている
    • ワンバイナリになっていて、インストールはシェルスクリプトで記述されている
    • 追加設定をせずに、クラスタを構築することができる
    → インストール処理はシェルスクリプトで隠蔽されており、⼗分にシンプルな構築⽅法
    • 今回はcontrol-plane 1台、worker node 1台を構築してみました
    利⽤例2:k0s環境のセットアップ

    View Slide

  25. 利⽤例2:k0s環境のセットアップ
    control-planeで発⾏した
    tokenを設定
    Github Komei22/play-k0s:https://github.com/Komei22/play-k0s/tree/main/user-data
    controll-planeのユーザデータ worker-nodeのユーザデータ
    control-planeとして起動
    workerとして起動

    View Slide

  26. 利⽤例2:k0s環境のセットアップ
    controll-planeのみ起動した状態
    control-planeでtokenを発⾏
    &
    worker-nodeのVMを作成
    worker-nodeがクラスタに参加している様⼦
    シンプルなユーザデータを記述することで、クラスタの構築を簡単に⾏うことができている
    以降、worker-nodeの追加もユーザデータを利⽤することで⾃動的にクラスタに参加させられる

    View Slide

  27. • cloud-initの概要を説明
    • cloud-initの基本的な使い⽅などを説明
    • NoCloudでのcloud-init実⾏の仕組みを説明
    • さくらのクラウドでのcloud-initの実装を説明
    • クラウドが抱えていた問題の背景を説明
    • ユーザデータのシステム間の渡し⽅やNoCloudを使ったさくらのクラウドでの実装を説明
    • cloud-initの利⽤例を紹介
    • ユーザデータ記述の⽅針を説明
    • ISUCON環境のセットアップを紹介
    • k0s環境のセットアップを紹介
    まとめ

    View Slide

  28. ありがとうございました

    View Slide