約5年前に「LPIC-300」に合格した。
LPIC の有意性期間は、5年間だ。
有意性期間を延長するために、コンテナ仮想化の内容を含んだ「LPIC-305」を受験することにした。
なぜ「LPIC-305」を選んだかというと、単純にコンテナ仮想化に興味があったからだ。
この安直な考えが最悪の事態を招くことになろうとは思ってもみなかった…
LPIC-305の参考書について
2023年6月14日現在、「LPIC-305」に特化した参考書はない。あるのは「LPIC-304」の参考書だ。
しかも、「LPIC-304」の参考書は、試験バージョン 2.0 だ。
つまり、「LPIC-304」参考書を勉強したところで、試験バージョンが 2.0 だし、コンテナ仮想化に特化して勉強できるわけではないということだ。
ただ、そんなことは顧みずに『なんとかなるだろう』という思いで、ひたすらコンテナの勉強に励んだ。
2022年に「LPIC-304」試験が「LPIC-305」試験と「LPIC-306」試験に分かれた。
「LPIC-304」試験が廃止されてからしばらく経っているのにも関わらず「LPIC-305」専用の参考書がないのは、「LPIC-304」参考書の内容半分がそのまま有効なためだと思われる。
「LPIC-304」参考書は、以下を購入した。いわゆる黒本だ。
上記の「LPIC-304」黒本を最初から最後まで読んでみたが、この参考書だけでは 「LPIC-305」をクリアできるとは到底思えなかった(ただし、クリアするためには必要な本)。
しかし、困ったことに「LPIC-305」の参考書自体がないので、残りの知識を補うためにネットでひたすら情報を集めるという非効率な状況になってしまった。
LPICレベル3試験の種類について
2021年の時点では、以下の3種類だったが、
- LPIC-300
- LPIC-303
- LPIC-304(Virtualization & High Availability)
2022年に入ってからは、「LPIC-304」が廃止され、以下の4種類になった。
- LPIC-300
- LPIC-303
- LPIC-305(Virtualization and Containerization)
- LPIC-306(High Availability and Storage Clusters)
「LPIC-304」の内容は、Virtualization & High Availability。つまり「仮想化」と「高可用性」だ。
「LPIC-305」の内容は、Virtualization and Containerization。つまり「仮想化」と「コンテナ化」だ。
「LPIC-305」は、「LPIC-304」の「仮想化」の内容をより詳細にしたもののようで、さらに、コンテナを追加したというイメージだ。
ちなみに、「LPIC-306」は、「LPIC-304」の「高可用性」の内容をより詳細にしたもののようで、さらにストレージを追加したというイメージだ。
「LPIC-304」参考書を元に「LPIC-305」を勉強したとしても、コンテナの部分が網羅できていない可能性が高い。
実際「LPIC-305」出題範囲の 重み: 9 を占める「Docker」については、「LPIC-304」黒本にはほとんど記載がなかった。概要にとどまるのみだった。
LPIC-305の出題内容について
「LPIC-305」の出題内容は以下の通り。
完全仮想化(重み合計: 25)
- 仮想化の概念と理論(重み: 6)
- Xen(重み: 3)
- QEMU(重み: 4)
- Libvirt Virtual Machine Management(重み: 9)
- 仮想マシンのディスクイメージの管理(重み: 3)
コンテナ仮想化(重み合計: 25)
- コンテナ仮想化の概念(重み: 7)
- LXC(重み: 6)
- Docker(重み: 9)
- コンテナオーケストレーションプラットフォーム(重み: 3)
VMのデプロイとプロビジョニング(重み合計: 10)
- クラウド管理ツール(重み: 2)
- Packer(重み: 2)
- cloud-init(重み: 3)
- Vagrant(重み: 3)
ハイパーバイザー
「LPIC-305」に登場するハイパーバイザーには、「KVM (Kernel-based Virtual Machine)」と「Xen」というものがある。
KVM
KVM は、Linux 自体をハイパーバイザー化する仮想マシンソフトウェア。
QEMU (Quick Emulator) というハードウェアエミュレータとセットで利用する。
CPU の仮想化支援機能(Intel VT および AMD-V)を活用する。
KVM は、以下のコンポーネントが必要。
- kvm.ko(カーネルモジュール)
- QEMU(ハードウェアエミュレータ)
- libvirt(仮想マシンモニタ)
- bridge-utils(ネットワークの仮想ブリッジ管理ユーティリティ)
Xen
Xen は、管理 OS を実行するドメイン「Domain-0」と、ゲスト OS を実行するドメイン「Domain-U」というように、領域が二つに分かれているのが特徴。
ゲスト OS の設定ファイルは、/etc/xen/<ゲスト OS 識別名> に保存される。
設定ファイル例)/etc/xen/guest-os1/guest-os1.cfg
Libvirt Virtual Machine Management
libvirt は、仮想マシンの作成、管理、および監視に必要な共通 API(共通インターフェース)を様々な仮想化環境に提供し、統一的な操作を可能にするツールキット(ソフトウェアライブラリ)。
libvirt = library + virtualization
様々なハイパーバイザー上で実行が可能。
libvirt はサポート範囲が広いことが特徴で、現在以下のハイパーバイザーをサポートしている。
- Xen
- KVM
- QEMU
- LXC
- OpenVZ
- VirtualBox
- VMware ESX
など
ソフトウェアには、API ライブラリ、libvirtd(デーモン)、virsh(コマンドラインユーティリティ)が含まれる。
libvirtd の設定ファイルは、/etc/libvirt/libvirtd.conf
virsh
virsh は、libvirt が提供する標準のコマンドラインツールで仮想マシンを操作するために利用する。
仮想マシンの開始、仮想ネットワークの表示、仮想 CPU と物理 CPU の対応付けなど、さまざまな操作を行うことができる。
▼ virsh コマンド
virsh list
ゲストの仮想マシン一覧を表示
virsh list --all
稼働していない仮想マシンも含めた仮想マシン一覧を表示
virsh start
ゲストの仮想マシンを起動
virsh reboot
ゲストの仮想マシンを再起動
virsh console guest-os1
ゲストの仮想マシン(guest-os1)にコンソール接続
virsh net-list
仮想ネットワークの一覧を表示
virsh net-edit
仮想ネットワークの XML 設定ファイルを編集
virsh setvcpus
ゲストの仮想マシンに割当てる仮想 CPU 数を設定
virsh setmem
ゲストの仮想マシンに割当てるメモリサイズを設定
virsh vcpupin
CPU アフィニティ(仮想 CPU と物理 CPU の関連付け)を設定
virsh vcpupin guest-os1 1 4
guest-os1 の仮想 CPU「1」と物理 CPU「4」を対応付ける
dnsmasq
libvirt は、仮想ネットワークを提供するために「dnsmasq」を使用する。
dnsmasq とは、小規模ネットワーク向けの DNS / DHCP / TFTP サーバーのこと。
radvd
libvirt は、「radvd」というネットワークサービスを使用する。
radvd とは、IPv6 ステートレスの自動設定に必要なルータ広告メッセージを送信するデーモンのこと。
「radvd」を分解するとしたら、r + adv + d。
つまるところ radvd は、Router Advertisement Daemon の略だ。
コンテナ
「LPIC-305」に登場するコンテナには、「LXC (Linux Container)」と「Docker」というものがある。
LXC
LinuX Container の略。
OS レベルのコンテナ管理ソフトウェア。
LXC は、プロセスグループを一元管理・制御し、他グループから不可視にするといったリソース管理機構「cgroups (control groups)」を用いて実装される。
Docker
Docker 社が開発しているオープンソフトウェアで、コンテナ管理ソフトウェアの一つ。
Docker は、コンテナ実行環境の代表格。
Docker には、docker-compose.yml という構成ファイルを用いて複数のコンテナを一度に操作する「Docker Compose」や、複数の Docker ホストを束ねて管理する「Docker Swarm」というコンテナオーケストレーションツールがある。
Docker については、Udemy の動画学習に加えて、実際の環境を構築しコマンドを叩いて勉強した。
また、いくつかの本も読んだ。
Dokcer については、記事「WSL2のAlmaLinuxでDockerを動かしDockerコマンドを叩く(図解)」に詳細を書いているので、こちらを参考にしてほしい。
参考書
この本は、解説が丁寧で分かりやすい実践的な Docker の基礎本だ。
本に書いてあるコマンドを実行していくだけで Docker の基本を実践的に学ぶことができる。
コンテナオーケストレーションプラットフォーム
Kubernetes
読み方について
読み方が多い Kubernetes。以下のように複数の読み方がある。
- クーバネティス
- クーベネティス
- クーベルネティス
- クバーネティス
- クバネティス
- クーバーネティス
ちなみに Google 翻訳で音声を再生してみたところ、個人的には「クーバーネティス」というふうに聞こえた。
kubernetes の発音(Google 翻訳)
この呼び方が正しいと言っているわけではありません。
さらに Kubernetes は、先頭文字「K」と最後の文字「s」との間にある文字数が「8」個あることから、K8s と呼ばれたりもする。
用語
Kubernetes は、コンテナを「Pod」と呼ばれる単位で管理する。
Pod には1つ以上のコンテナと、ボリュームが入れられる。
Kubernetesとは
Kubernetes は望ましい状態を常に維持してくれる、とても優秀なコンテナオーケストレーションプラットフォームだ。
望ましい状態とは、たとえば、コンテナを常に5つ起動しておきたいという状況があったとする。
その場合 Kubernetes は、5つのコンテナを常に監視し、1つのコンテナが壊れたのを発見すると、そのコンテナを削除し、コンテナを新たに1つ作成する。
Kubernetes は、マニフェストで定義した状態を常に維持してくれるコンテナオーケストレーションツールだ。
参考書
Docker や Kubernetes に関しては、LPIC-304の黒本では補えないため、以下の本も購入した。
図が多く、説明が分かりやすい。
Docker / Kubernetes 初心者にはおすすめの本だ。
クラウド管理ツール
OpenStack
AWS のようなクラウド(IaaS)環境を、自前で構築することができるツール。
OpenStack は、オープンソースソフトウェアなので無償で利用することができる。
OpenStack には以下のような主要コンポーネントが提供されている。
- Nova・・・OpenStack の中核を成すコンポーネント。仮想マシン作成・起動などを手がける。
- Cinder・・・ブロックストレージ
- Glance・・・仮想マシンイメージの管理
- Keystone・・・認証機能
- Neutron・・・仮想ネットワークの管理
- Swift・・・オブジェクトストレージ
- Horizon・・・ダッシュボードを提供
Terraform
Terraform は、HashiCorp 社によって開発されたクラウドインフラ構築自動化支援ツール。オープンソース。
Terraform は、IaC (Infrastructure as Code) を実現します。
Terraform は、マルチクラウド(AWS、Azure、GCP)で利用可能。
Terraform を使う(コード化する)ことにより、インフラ構築オペレーションの効率化および、オペミス軽減などのメリットが生まれる。
Packer
Packer は、HashiCorp 社によって開発された複数のプラットフォームに対応したマシンイメージ作成・管理ツール。オープンソース。
「AWS」「GCP」「VMware の VMDK / VMX」「VirtualBox の OVF」「Docker」などに対応している。
JSON 形式(または HCL 形式)で書かれたテンプレートファイル「Template」を元にマシンイメージを作成する。
Packer で生成したマシンイメージのことを「アーティファクト」と呼ぶ。
cloud-init
cloud-init は、クラウドインスタンス起動時にシステムの初期設定を自動化するツール。
オープンソースソフトウェアであり、複数のクラウドプラットフォーム(AWS、Azure、GCP など)で使用可能。
ユーザーデータ(user-data)を使用して、Linux OS の初期設定を自動化することができる。
たとえば、以下のような初期設定だ。
- タイムゾーンの変更
- ロケールの変更
- パッケージのアップデート
- パッケージのインストール
- SELinux の無効化
「cloud-config」という YAML 形式で記述された、初期設定定義ファイルを作成する必要がある。
▼ cloud-config 記述例
#cloud-config timezone: Asia/Tokyo package_upgrade: true packages: - glibc-langpack-ja locale: ja_JP.utf8 runcmd: - setenforce 0 (以下略)
cloud-init は、初期設定後にさらに設定変更を行うことはできない。
Vagrant
Vagrant は、HashiCorp 社によって開発された仮想マシンの構築・管理を行うツール。オープンソース。
Vagrant 自身は、仮想化するための機能はない。
そのため Vagrant は、様々な仮想化ソフトと連携して動作する。
連携する仮想化ソフトには、「VirtualBox」「VMware」「Docker」「KVM」などがあり、これらの仮想化ソフトによって構築された仮想環境を Vagrant で管理・操作していくことになる。
「Vagrantfile」に仮想マシンの構成、仮想マシン作成後のプロビジョニングの処理内容、Box 名などを記述し、仮想マシンを構築する。
仮想マシンイメージ(テンプレート)のことを Vagrant では、「Box」と呼ぶ。
▼ vagrant コマンド
vagrant up
仮想マシンを起動
VirtualBox と連携している場合、VirtualBox の仮想マシンが起動する。
vagrant status
仮想マシンの状態確認
vagrant ssh
仮想マシンに SSH 接続
vagrant halt
仮想マシンを停止
vagrant destroy
仮想マシンを削除
「Vagrant」は「Docker」と似ているが、違うところがある。
Docker は「コンテナ型仮想化」であるのに対し、Vagrant (VirtualBox と連携している場合) は「ホスト型仮想化」である。
「Docker」はカーネルを共有するため軽量であるのに対し、「Vagrant」はカーネルを仮想化するため、オーバーヘッド大きく重たいという特徴がある。
「Docker」はコンテナ化された環境に焦点を当てており、「Vagrant」は仮想マシン環境に焦点を当てている。
最後に
2023年7月2日、「LPIC-305」を受験したが、チャレンジは失敗に終わった。
「上述の勉強してきた内容」「Docker 環境の構築」「これまで読んできた本」に続いて、あの有名な「某 Web 問題集サイト」でひたすら問題を解いて試験に挑んだ。
しかし、それだけでは十分ではなかった。
受験して分かったことは、実際に業務レベルでそれらの環境を触ったことがあるかどうかが重要で、表面的な知識だけでは「LPIC-305」がクリアできないことが分かった。
LPIC レベル3に合格したいというだけなら、「LPIC-305」より「LinuC-304」をおすすめします。
あとから調べて分かったことだが、LinuC にはまだ「304」がある(※1)。
LinuCレベル3 304 Virtualization & High Availability https://linuc.org/linuc3/304.html
※1 記事執筆時点「2023/07/02」
しかし、LPIC には「304」はもう無い。
「LPIC」試験と「LinuC」試験は連動していると思いこんでいたが、それは間違いだった。
「304」試験であれば、「LPIC-304の参考書」が役立つし、Web 問題集の「304」も役に立つ。
しかし、「305」用の参考書はないし、Web 問題集にも「305」は無い(※1)。
304と305、どちらを受けるかは自分次第ですが、基本的には「304」をおすすめします。