LPIC-305で勉強したことをひたすら書いていく

プロモーションを含みます
プロモーションを含みます
PR

約5年前に「LPIC-300」に合格した。

LPIC の有意性期間は、5年間だ。

有意性期間を延長するために、コンテナ仮想化の内容を含んだ「LPIC-305」を受験することにした。

なぜ「LPIC-305」を選んだかというと、単純にコンテナ仮想化に興味があったからだ。

この安直な考えが最悪の事態を招くことになろうとは思ってもみなかった…

LPIC-305の参考書について

2023年6月14日現在、「LPIC-305」に特化した参考書はない。あるのは「LPIC-304」の参考書だ。

しかも、「LPIC-304」の参考書は、試験バージョン 2.0 だ。

「LPIC-305」の試験バージョン 3.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)

ハイパーバイザー

ハイパーバイザーは、仮想マシン同士をお互い干渉させず動作させられるようにするソフトウェア。

ハードウェア上に Windows などのホスト OS をインストールせずに直接「仮想化ソフトウェア」をインストールする。

「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」を対応付ける

アフィニティ(Affinity)には、「一体感」や「親和性」という意味があります。

dnsmasq

libvirt は、仮想ネットワークを提供するために「dnsmasqディーエヌエスマスク」を使用する。

dnsmasq とは、小規模ネットワーク向けの DNS / DHCP / TFTP サーバーのこと。

radvd

libvirt は、「radvd」というネットワークサービスを使用する。

radvd とは、IPv6 ステートレスの自動設定に必要なルータ広告メッセージを送信するデーモンのこと。

「radvd」を分解するとしたら、r + adv + d

つまるところ radvd は、Router Advertisement Daemon の略だ。

コンテナ

コンテナは、Linux 上に作成される隔離された専用の箱のようなもののことで、それぞれの専用箱内で、それぞれのアプリケーションが実行されます。

コンテナにはゲスト OS がないため、ハイパーバイザー型に比べオーバーヘッド(余計な処理)が少なく、動作が軽いことが特徴。

「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 はオンプレでも利用可能

Terraform は、IaC (Infrastructure as Code) を実現します。

IaC とは、Infrastructure as Code の略で、インフラ(CPUやメモリ・ディスクなどのリソース、仮想マシンなど)をコード化したものを用いてインフラの自動構築を行うことを指します。

Terraform は、マルチクラウド(AWS、Azure、GCP)で利用可能。

Terraform を使う(コード化する)ことにより、インフラ構築オペレーションの効率化および、オペミス軽減などのメリットが生まれる。

Packer

Packerパッカー は、HashiCorp 社によって開発された複数のプラットフォームに対応したマシンイメージ作成・管理ツール。オープンソース。

「AWS」「GCP」「VMware の VMDK / VMX」「VirtualBox の OVF」「Docker」などに対応している。

JSON 形式(または HCL 形式)で書かれたテンプレートファイル「Template」を元にマシンイメージを作成する。

Packer で生成したマシンイメージのことを「アーティファクト」と呼ぶ。

マシンイメージとは、「仮想マシンイメージ」や「コンテナイメージ」「クラウドのインスタンスイメージ」のことです。

HCL 形式とは、HashiCorp Configuration Language 形式の略で、HashiCorp 社によって作られた設定言語のことです。

cloud-init

cloud-initクラウドイニット は、クラウドインスタンス起動時にシステムの初期設定を自動化するツール

オープンソースソフトウェアであり、複数のクラウドプラットフォーム(AWS、Azure、GCP など)で使用可能。

ユーザーデータ(user-data)を使用して、Linux OS の初期設定を自動化することができる。

たとえば、以下のような初期設定だ。

  • タイムゾーンの変更
  • ロケールの変更
  • パッケージのアップデート
  • パッケージのインストール
  • SELinux の無効化

「cloud-config」という YAMLヤムル 形式で記述された、初期設定定義ファイルを作成する必要がある。

YAMLヤムル 形式とは、Yet Another Markup Language の略語または、YAML Ain’t Markup Language (YAML はマークアップ言語ではない) の略語で、XML や JSON と同じくデータ表現形式の一つ

▼ 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」をおすすめします。