LPIC-305 に合格しました
目次
初めまして、システムソリューション部所属 筋トレエンジニアの白阪です。
夏が本格的に始まって、筋トレの季節になってきたので舞い上がっております。
突然ですが皆様 LPIC はご存じでしょうか?
IT資格の中でもかなり有名であり、エンジニアであれば受験したことがある方も多いかと思います。
昨年それの Level3 に改定が入り、LPIC304 が廃止され、305(Virtualization and Containerization)と306(High Availability and Storage Clusters)へ分割されました。
そこで305の内容が私の好きなコンテナ関係だったこともあり、先月試験を受けてきましたので、合格のために勉強したことと試験の感想をお伝えできればと思います!
1. LPIC-305の概要
ザックリとした試験の概要としては、KVMな どの仮想化技術全般、Docker などのコンテナ技術、Packer などのプロビジョニング用ツールの扱いが主な試験範囲となり、
KVM や Xen がどのようにして仮想化を実現しているかや、namespace などのコンテナ技術を実現するための概念、およびDocker や Kubernetes の実際の挙動などが出題されました。
※ 下記公式サイトに、詳細な概要が記載されておりますのご参照ください。
https://www.lpi.org/ja/exam-305-objectives
また、2022年に新設された試験となりますので、従来の LPIC-304 のように ping-t やいわゆる黒本などが出版されていません(2023年7月時点)
なので、試験勉強は重要語句を自分でノートなどにまとめて覚えたり、実際に手を動かしてを挙動を確認する必要がありますので
最低でも1ヶ月以上は勉強時間を確保したほうが無難かと思います。
2. 試験のために勉強したこと
大きく分けて4つのことを重点的に勉強しましたので、それぞれ説明します。
・ping-t で LPIC-304 の問題集を繰り返し解く
・コンテナの基本的な概念の勉強
・Docker、LXD、Kubernetesを手を動かして勉強
・Packer などの勉強
ping-t で LPIC-304 の問題集を繰り返し解く
仮想化技術全般の範囲が LPIC-305 と 304 で被っていたので、ping-tで その部分だけ集中的に勉強し、安定して 100% を取れるようにしました。
特に、最初は Xen と QEMU がそれぞれどのようなものか全くイメージができなかったので、問題を解くたびに ping-t の解説にある図解を繰り返し読むようにしました。
上記に加えて、QEMU でハードウェアのエミュレーションを行い、KVM で CPU仮想化のサポートを行うなどの具体的な動きをそらんじれるようになるまで暗記しました。
その結果、本番試験で問題内容と関係のない単語は省くなどの消去法に活用できました。
コンテナの基本的な概念の勉強
ここから試験対策本や専用のWebサイトがないので、まずは公式サイトに記載されている重要そうな語句をまとめたうえで、Docker の書籍やインターネットで検索して深堀していきました。
とりわけ、コンテナ技術を実現するうえで最も基本的な機能である、「namespace」、「cgroups」、「capability」、「seccomp」については、複数の書籍で詳細に勉強したり、
実際にDocker環境を構築したうえで、nsenterコマンドとunshareコマンドで実際に名前空間を作成したりしました。
上記に加え、runc と containerd の関連性や Kubernetes の pod が落ちたときの挙動など、かなり細かく勉強しました。
Docker、LXD、Kubernetesを手を動かして勉強
こちらは試験の重量が高いこともあり、ローカルの Vagrant + VirtualBox に Docker とLXD 環境を構築し、ひたすらコンテナの作成と削除を繰り返しました。
試験では Dockerfile の中身やローカルディレクトリをマウントしてコンテナを起動するコマンドはどれかなどが出題されるので、
様々な想定でrunコマンドを実行するようにし、--volumes-from などの比較的使用されやすいオプションも覚えるようにしました。
また、Docker の各種オプションを指定することができる、daemon.json ファイルのデフォルトのパスも暗記するようにしました。
▼ --volumes-from オプションを指定
docker run --volumes-from 【コンテナ名】 -d -p 8080:80 centos7:latest
次に、Docker より馴染みはないですが、仮想マシンをそのままコンテナ化したLXDコンテナも勉強し、OSイメージを引っ張ってくるコマンドや、ポートフォーワードを設定してブラウザからコンテナ内のページを見れるようにするなど、多岐にわたり勉強しました。
▼ ポートフォワード設定
lxc config device add centos http proxy listen=tcp:127.0.0.1:50005 connect=tcp:【コンテナのIP】:80 bind=host
なお、Kubernetes は自前環境の構築がやや複雑なこともあり、Docker Desktop を利用してコマンドの練習や挙動の確認を実施しました。
具体的には、複数のコンテナが含まれているポッドを作成し、その中の1つのコンテナが削除されたときの挙動や複数のポッドを組み合わせて WordPress ページの作成などを実施しました。
Packer などの勉強
上記以外に、「Packer」、「cloud-init」、「Docker Swarm」も一通り手を動かして勉強しました。
例えば、cloud-init は LXDコンテナと組み合わせて、config ファイルに cloud-init ファイルを指定して、LXDコンテナを起動したりしました。
▼ config ファイルに cloud-init ファイルを指定してLXDコンテナ起動
lxc config set ubuntu-container user.user-data - < cloud-init-config.yml
また、Docker Swarm は Kubernetes ほど構築が複雑ではないので、自分で環境を構築し、Dockerイメージを引っ張ってくるコマンドを検証したり、ワーカーノードが落ちたとき、別のワーカーノード上にコンテナが自動作成されるかどうかなどを確認しました。
ただ、ここは試験の重量がそこまで高くないので、軽く触れる程度にしておきました。
以上が勉強したことのまとめとなりますが、これ以外にもDockerコンテナの capability を変更して、実行できるサービスを制限したりなど、網羅的に勉強するようにしました。
なお、学習期間としては大体1か月半くらいになります。
3. 試験を受けてみて
試験を受けた感想としましては以下となります。
・仮想化技術の範囲は LPIC-304 の過去問を繰り返せばなんとかなる
・コンテナの基本概念と Docker は、とにかく手を動かして色々なオプションを覚える
・試験の重量が低いものはそこまで深堀しなくてもいい
上記の中でもDockerに関する問題は、出題数の3分の1(体感)くらいは出てきたような気がするので、完全に理解するくらいの気概で勉強すれば分からない語句はなくなるかと思います。
また、試験の重量が低い項目も、それぞれ1問か2問ぐらいは出題されるので、build コマンドなどの基本的なコマンドは覚えるようにしましょう。
4.まとめ
本試験を通して仮想化やコンテナの基本的な概念を知る良い機会となりました。
そして、実際に手を動かして覚えていくことができたので、勉強自体が苦ではなく、むしろ楽しみながら新たな知識を学ぶことができました。
LPIC-305 についての情報が少なく、手探りでの勉強になりますので、本記事が少しでも参考になれば幸いでございます。