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についての情報が少なく、手探りでの勉強になりますので、本記事が少しでも参考になれば幸いでございます。