クラウドとコンテナの基礎
コンテナを実現する名前空間とcgroups、イメージと層とコピーオンライト、Dockerfileの命令(RUN・CMD・ENTRYPOINT・COPY)、ビルドのキャッシュと命令の順序、ポートの公開、ボリュームとバインドマウント、タグとダイジェスト、マルチステージビルド、KubernetesのPod・Deployment・Service・Ingress・Secret、リコンサイルとローリングアップデート、readiness/livenessプローブ、オートスケーリングの計算、requestsとlimits、責任共有モデル、アベイラビリティゾーン、サーバーレス、ストレージの種類、従量課金と予約の損益分岐点、データ転送の料金、IaC、イミュータブルインフラストラクチャ、ブルーグリーンとカナリア、オブザーバビリティを3択問題で学べます。
クラウドとコンテナの基礎の要点
Webのサービスや社内のシステムの多くは、いまやクラウドの上で、コンテナにまとめたアプリケーションとして動いています。コンテナは、ホストのOSのカーネルを共有しながらプロセスを隔離する仕組みで、Dockerでイメージを作り、Kubernetesのような基盤で多数のマシンに配置して、数を保ち、更新します。
ここでは、名前空間とcgroups、イメージの層とコピーオンライト、Dockerfileの命令とビルドのキャッシュ、ポートの公開、ボリュームとバインドマウント、タグとダイジェスト、マルチステージビルドから始め、KubernetesのPod・Deployment・Service・Ingress・Secret、あるべき状態の宣言とリコンサイル、ローリングアップデートの計算、readinessプローブとlivenessプローブ、HorizontalPodAutoscalerの計算、requestsとlimitsとPodの配置を扱います。続いて、クラウドの責任共有モデル、リージョンとアベイラビリティゾーン、サーバーレスとコールドスタート、ブロック・ファイル・オブジェクトのストレージ、従量課金の料金と予約の損益分岐点、データ転送の料金、IaCとイミュータブルインフラストラクチャ、ブルーグリーンデプロイメントとカナリアリリース、成果物を一度だけビルドする考え方、環境変数による設定、オブザーバビリティを確かめます。計算問題の値は、選択肢の誤りの値も含めて、Pythonで計算して確かめています。価格はすべて架空の値です。ハイパーバイザとコンテナと仮想マシンの違いは「OSとハードウェア」、IaaS・PaaS・SaaS、スケールアウト、冗長化、ライブマイグレーション、CDNは「システム構成と信頼性設計」、ロードバランサとセッションは「Web技術の基礎」、CI/CDは「ソフトウェア開発とプロジェクト管理」、SLAは「サービスマネジメントとシステム監査」、シェルと環境変数は「Linuxとコマンドラインの基礎」の分野で扱います。
クラウドとコンテナの基礎の問題一覧(40問)
- Linuxのコンテナを実現するカーネルの機能のうち、名前空間(namespaces)とcgroups(コントロールグループ)の役割の組み合わせとして、正しいものはどれか。
- LinuxのホストでDockerを使い、ホストとは別のディストリビューションをもとにしたイメージからコンテナを起動して、その中で uname -r(カーネルのリリースを表示するコマンド)と cat /etc/os-release(ディストリビューションの情報を表示するコマンド)を実行した。結果の説明として、正しいものはどれか。
- コンテナイメージとコンテナの関係の説明として、正しいものはどれか。
- あるイメージから起動したコンテナの中で、イメージに含まれている設定ファイル /etc/app.conf を書き換えた。Dockerの一般的なストレージの仕組み(overlay2 など)で起きることとして、正しいものはどれか。
- 500 MBのアーカイブ data.tar.gz を展開するため、上のDockerfileでイメージを作った。展開の後で、同じ RUN の中でアーカイブを削除したのに、イメージの大きさはアーカイブの分だけ大きいままだった。理由と対策の組み合わせとして、最も適切なものはどれか。
- 同じベースイメージ(120 MB)の上に、それぞれ固有の層を30 MBずつ重ねた5つのイメージがある。層の圧縮やメタデータの容量は考えないものとする。1台のサーバにこの5つのイメージをすべて取得(pull)したとき、イメージが使うディスクの容量として、正しいものはどれか。
- 上のDockerfileで、docker build でイメージを作るときに実行されるコマンドと、docker run でコンテナを起動するときに実行されるコマンドの組み合わせとして、正しいものはどれか。
- 上のDockerfileから作ったイメージ pinger を、docker run pinger example.com として起動した。コンテナの中で実行されるコマンドとして、正しいものはどれか。
- ポート80で待ち受けるWebサーバのイメージ nginx から、上のコマンドでコンテナを起動した。ホストのIPアドレスを 192.0.2.10 とし、ファイアウォールなどの制限はないものとする。同じネットワークにある別のPCのブラウザから、このWebサーバに接続するURLとして、正しいものはどれか。
- 上のDockerfile(B)は、COPY . . の後に RUN npm ci を置いていたDockerfile(A)を、依存関係のファイルだけを先にコピーする順序に変えたものである。npm ci には120秒、npm run build には30秒、COPY . . には2秒かかり、ほかの命令の時間は無視できるものとする。1日に20回、src の下のソースコードだけを変えて(package.json と package-lock.json は変えずに)イメージを作り直す。前回のビルドのキャッシュが使えるとき、1日のビルド時間の合計で、B が A より短くなる時間として、正しいものはどれか。
- Dockerで、コンテナが書いたデータを残すための名前付きボリュームとバインドマウントの説明として、正しいものはどれか。
- イメージを registry.example.com/team/web:1.4 と指定して取得(pull)する。この指定の各部分の意味の組み合わせとして、正しいものはどれか。
- scratch は、ファイルを何も含まない空のイメージである。上のマルチステージビルドのDockerfileで作った最終のイメージに含まれるものとして、正しいものはどれか。
- Kubernetesで、デプロイして管理する最小の単位であり、1つ以上のコンテナをまとめて、同じIPアドレスやボリュームを共有させるものはどれか。
- Kubernetesで、replicas: 3 を指定したDeploymentのPodが3つ動いている。このうち1つのPodを kubectl delete pod で削除したときに起きることとして、正しいものはどれか。
- KubernetesのDeploymentで、Podのテンプレートのコンテナイメージを新しい版に変更した。既定の更新方式(RollingUpdate)で起きることとして、正しいものはどれか。
- replicas: 10 のDeploymentで、ローリングアップデートの設定を maxSurge: 25%、maxUnavailable: 25% とした。更新の途中の、Podの総数の上限と、利用可能なPodの数の下限の組み合わせとして、正しいものはどれか。
- Kubernetesで、Podは作り直されるたびにIPアドレスが変わる。ほかのアプリケーションから、ラベルで選んだ複数のPodに、変わらない名前とアドレスで接続して負荷を分散できるようにするリソースはどれか。
- Kubernetesのクラスタで、1つのホスト名に届いたHTTPSの要求のうち、パスが /api で始まるものは api のServiceへ、それ以外は web のServiceへ振り分けたい。この振り分けの規則を定めるのに適したリソースはどれか。
- KubernetesのSecretに、データベースのパスワードを保存する。Secretの説明として、正しいものはどれか。
- あるWebアプリケーションは、起動してからキャッシュを読み込むまでの約60秒間は要求を処理できず、その間は /ready に503を返す。Podのコンテナに上の設定を加えたときの効果として、正しいものはどれか。
- KubernetesのWebアプリケーションで、livenessプローブの確認の処理の中で、依存先のデータベースに接続できるかまで調べるようにした。この設定で起こりうる問題として、最も適切なものはどれか。
- KubernetesのHorizontalPodAutoscalerで、PodのCPU使用率の目標を70%、Podの数の範囲を1〜10とした。いま5つのPodの平均のCPU使用率が30%である。必要なPodの数を ⌈現在の数 × 現在の使用率 ÷ 目標の使用率⌉(⌈ ⌉ は切り上げ)で求めるとき、必要なPodの数として、正しいものはどれか。
- Podのコンテナに上の設定をしたDeploymentで、Podが4つ動いており、どのPodもCPUを400m(0.4コア)ずつ使っている。HorizontalPodAutoscalerのCPU使用率の目標を60%とし、必要なPodの数は ⌈現在の数 × 現在の使用率 ÷ 目標の使用率⌉ で求めるものとする。必要なPodの数として、正しいものはどれか。
- Kubernetesで、コンテナに設定する資源の requests と limits の説明として、正しいものはどれか。
- 割り当て可能な資源がCPU 4コア、メモリ 8 GiB のノードがある。各Podのコンテナには、requests としてCPU 500m・メモリ 1.5 GiB、limits としてCPU 1コア・メモリ 2 GiB を設定した。ほかのPodやシステムの予約はないものとする。このノードに置けるPodの最大の数として、正しいものはどれか。
- クラウドのマネージドなデータベースサービス(事業者がデータベースのソフトウェアを運用するサービス)を使う。責任共有モデルの考え方で、一般に利用者の責任として残るものはどれか。
- クラウドで、同じリージョンの中の複数のアベイラビリティゾーンに、Webサーバとデータベースの複製を分けて置く主な目的として、適切なものはどれか。
- サーバーレスの関数(FaaS)で、しばらく呼び出されていなかった関数の最初の呼び出しだけ、応答が数百ミリ秒から数秒遅くなることがある。この現象の説明として、正しいものはどれか。
- クラウドのストレージを、①仮想マシンにディスクとして接続してファイルシステムを作り、データベースのデータファイルを置く、②複数のサーバから同時にマウントして共有のディレクトリとして使う、③HTTPのAPIでキー(名前)を指定して大量の画像を読み書きし、容量を前もって決めずに増やす、という3つの用途で使う。①〜③に適したストレージの種類の組み合わせとして、適切なものはどれか。
- 1時間あたり40円(架空の単価)で、使った時間だけ料金がかかる仮想マシンを使う。平常時は2台を1か月(30日)の間ずっと動かし、平日の20日は、毎日6時間だけ負荷に合わせて4台を追加する。1か月の料金として、正しいものはどれか。
- ある仮想マシンは、使った時間だけ払うオンデマンドでは1時間あたり50円、1年分の利用を前もって約束する予約では、使った時間にかかわらず1年で262,800円かかる(どちらも架空の価格)。1年を8,760時間とすると、1年間の利用時間がある時間を超えたときに、予約の方が安くなる。その時間として、正しいものはどれか。
- 多くのパブリッククラウドのデータ転送の料金の考え方として、一般に当てはまるものはどれか。
- 宣言的なIaC(Infrastructure as Code)のツールで、ネットワークと仮想マシン2台の構成を定義したファイルを適用して、環境を作った。その直後に、何も変えずに同じファイルをもう一度適用したときに起きることとして、適切なものはどれか。
- イミュータブルインフラストラクチャの考え方に沿った、本番のサーバのソフトウェアの更新の方法として、適切なものはどれか。
- 本番と同じ構成の環境を2つ用意し、一方で現在の版を動かしたまま、もう一方に新しい版を入れて確かめてから、ロードバランサの向き先を一度に切り替える。問題があれば、向き先を戻してすぐに元の版に戻す。このリリースの方法はどれか。
- 1時間に12,000件の要求を受けるサービスで、新しい版をカナリアリリースし、要求の5%だけを新しい版に送った。新しい版には、受けた要求の3%が失敗する不具合があり、1時間後に気づいて、すべての要求を元の版に戻した。この1時間に不具合で失敗した要求の件数として、正しいものはどれか。
- CI/CDのパイプラインで作ったコンテナイメージを、ステージング環境で試験し、合格した。このイメージを本番環境に出す方法として、最も適切なものはどれか。
- 上のように、データベースの接続先をイメージに書き込まず、コンテナを起動するときに環境変数で渡すようにした。この設計の主な利点として、最も適切なものはどれか。
- 複数のサービスが連携して動くシステムで、利用者の1つの要求が、どのサービスをどの順に通り、それぞれでどれだけ時間がかかったかを調べたい。オブザーバビリティのためのデータのうち、最も適したものはどれか。
クラウドとコンテナの基礎の参考書を探す PR
Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。
コンピュータシステムのほかの分野
- 計算機算術 IEEE 754・固定小数点・丸め誤差
- 確率・統計と待ち行列 場合の数・確率分布・推定と検定・M/M/1
- 命令セット・アセンブリ RISC-V・アドレッシング・呼び出し規約
- コンパイラ 構文解析・SSA・最適化・レジスタ割り当て
- リンカ・ローダと実行形式 ELF・シンボル解決・再配置・動的リンク
- OSとハードウェア 割り込み・システムコール・ページフォールト
- Linuxとコマンドラインの基礎 シェル・パーミッション・パイプ・スクリプト
- メモリ階層と性能 キャッシュ・置き換え方式・ミスの3分類
- マルチコアと同期 MESI・アトミック命令・メモリバリア
- GPUプログラミング ワープ・共有メモリ・合体アクセス・占有率
- AIハードウェアとソフトウェアスタック 推論と学習・量子化・Rooflineモデル
- 機械学習の基礎 学習の種類・評価指標・ニューラルネットワーク
- 組込み・ファームウェア GPIO・UART/SPI/I2C・RTOS
- ハードウェア記述言語と検証 Verilog・ラッチ・状態機械・テストベンチ
- インターフェース・バス規格 PCIe・USB・SerDes・CXL
- ネットワークの基礎 TCP/IP・サブネット計算・DNS・TLS
- Web技術の基礎 HTTP・Cookie・REST・CORS・キャッシュ
- 無線通信の基礎 変調・OFDM・MIMO・RF回路
- 情報セキュリティの基礎 暗号・認証・Web攻撃と対策
- データベースの基礎 SQL・正規化・トランザクション
- データ構造とアルゴリズム 計算量・探索・ソート・グラフ
- プログラミングの基礎(擬似言語のトレース) 擬似言語・トレース・配列・再帰
- C言語の基礎 ポインタ・メモリ・未定義動作
- ソフトウェア開発とプロジェクト管理 開発プロセス・テスト・日程とコストの管理
- 経営戦略と会計の基礎(ストラテジ系) 会計・損益分岐点・経営戦略・マーケティング
- サービスマネジメントとシステム監査 SLA・インシデントと問題・監査と内部統制
- システム構成と信頼性設計 冗長化・RAID・バックアップ・クラウド
- 性能評価・プロファイリング アムダールの法則・CPI・ボトルネック
- ハードウェアセキュリティ サイドチャネル・セキュアブート・TEE・PUF
- 電力管理(ソフトウェア制御) DVFS・パワーゲーティング・スリープ状態