Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】100 Days of DevOps: Day 63

2025年10月05日に「Dev.to」が公開したITニュース「100 Days of DevOps: Day 63」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Kubernetesに「Iron Gallery」アプリをデプロイした。専用名前空間を作り、フロントエンドとMariaDBをDeploymentで配置。内部DBと外部アプリ用にServiceを設定した。YAML定義を適用し、コマンドで正常稼働を確認。フロントエンドはNodePortで外部公開された。

出典: 100 Days of DevOps: Day 63 | Dev.to公開日:

ITニュース解説

このニュース記事は、Kubernetesという技術を使って「Iron Gallery」というウェブアプリケーションと、それが必要とするデータベースをインターネット上に公開するまでの手順と結果を詳しく説明している。システムエンジニアを目指す上で、現代のアプリケーション開発と運用においてKubernetesは非常に重要な技術であるため、この事例を通じてその基本を理解することは役立つだろう。

まず、Kubernetesとは何かを簡単に説明する。これは、たくさんのコンピュータ(ノードと呼ぶ)をまとめて一つの大きなコンピュータのように扱い、その上でアプリケーションを動かすための「オーケストレーションツール」である。アプリケーションを安定して動かし続けたり、利用者が増えたときに自動で処理能力を上げたり、更新をスムーズに行ったりするのを助ける。この記事では、アプリケーションの実行環境全体をコードとして定義し、そのコードをKubernetesに渡すことで、自動的に環境が構築される様子を示している。

今回デプロイされた「Iron Gallery」アプリケーションは、一般的なウェブアプリケーションのように、利用者が直接触れる「フロントエンド」部分と、データ(写真の情報など)を保存する「バックエンド」のデータベース部分に分かれている。これらをKubernetes上でどのように配置し、連携させたのかがポイントとなる。

デプロイメントの全体像としては、まず「iron-namespace-datacenter」という専用の「名前空間」が作られた。名前空間とは、Kubernetesクラスタ内でリソース(アプリケーションやデータベースなど)を論理的にグループ化し、他のアプリケーションと干渉しないように隔離するための仕組みだ。これにより、複数のプロジェクトやチームが同じKubernetesクラスタを安全に共有できるようになる。

次に、アプリケーションのフロントエンドである「Iron Gallery」と、バックエンドの「MariaDB」データベースをそれぞれ「デプロイメント」という形で定義した。デプロイメントは、特定のアプリケーションのコンテナ(アプリケーションを動かすための軽量な仮想環境)をいくつ動かすか、どのように動かすかといった詳細な設定を管理するKubernetesの機能だ。 「iron-gallery-deployment-datacenter」は、ウェブアプリケーション本体を動かすデプロイメントである。ここでは、アプリケーションのコンテナイメージとして「kodekloud/irongallery:2.0」が指定されている。また、アプリケーションが利用できるメモリ量やCPU使用量を制限する「リソース制限」が設定され、設定ファイルや画像を保存するための「ボリュームマウント」も定義されている。ボリュームマウントは、コンテナが再起動してもデータが消えないように、外部の永続的なストレージをコンテナ内部に接続する仕組みだが、ここでは「emptyDir」という一時的なボリュームが使われているため、デプロイメントが削除されるとデータも消える点に注意が必要だ。 一方、「iron-db-deployment-datacenter」は、MariaDBデータベースを動かすデプロイメントだ。こちらも「kodekloud/irondb:2.0」というコンテナイメージを使用し、データベースの名前、ルートパスワード、ユーザー名、ユーザーパスワードといった重要な設定は「環境変数」として渡されている。実際の運用では、これらのパスワードは「Kubernetes Secrets」という、より安全な方法で管理することが推奨される。データベースのデータを永続化するためにも、「/var/lib/mysql」にボリュームマウントが設定されているが、こちらも「emptyDir」であるため、本番環境では永続ボリューム(Persistent Volume)を使うのが一般的だ。

デプロイされたアプリケーションやデータベースにアクセスできるようにするために、「サービス」が定義された。サービスは、複数のコンテナ(Podと呼ぶ)が動いていても、それらに安定したネットワークアドレスとポートを提供し、アクセスを容易にするための抽象化された仕組みだ。 「iron-db-service-datacenter」は、データベースへのアクセスを提供する「ClusterIP」タイプのサービスである。ClusterIPサービスは、Kubernetesクラスタ内部からのみアクセス可能で、外部からは直接アクセスできない。これは、セキュリティ上の理由からデータベースをクラスタ内部に隔離するためによく使われる。 「iron-gallery-service-datacenter」は、フロントエンドアプリケーションへのアクセスを提供する「NodePort」タイプのサービスである。NodePortサービスは、クラスタ内の各ノード(コンピュータ)の特定のポート(ここでは32678番)を開放し、そのポートを通じて外部からアプリケーションにアクセスできるようにする。これにより、ブラウザなどからアプリケーションに接続できる。

これらの設定は、すべてYAML(ヤムル)形式のテキストファイル、いわゆる「Kubernetesマニフェスト」として記述されている。この記事では、名前空間、二つのデプロイメント、二つのサービス、それぞれの設定がYAMLファイルとして示されている。システムエンジニアは、このようなテキストファイルでインフラやアプリケーションの構成をコードとして管理する「Infrastructure as Code(IaC)」という考え方を習得することが求められる。

実際にこれらの設定をKubernetesクラスタに適用する手順も示されている。kubectlというコマンドラインツールを使って、一つずつYAMLファイルを適用していく。例えば、kubectl apply -f iron-namespace-datacenter.yamlと実行すると、名前空間が作成される。全てのYAMLファイルを適用した後、kubectl getコマンドを使って、作成されたリソースが正しく動作しているかを確認する。 kubectl get ns iron-namespace-datacenterで名前空間のステータスを確認し、「Active」であれば正常に動作していることを示す。 kubectl get deploy -n iron-namespace-datacenterでデプロイメントのステータスを確認し、「READY 1/1」となっていれば、期待通りに1つのコンテナが正常に動作していることを意味する。 kubectl get pods -n iron-namespace-datacenterで各デプロイメントによって作成された個々のコンテナ(Pod)のステータスを確認し、「Running」であれば問題なく稼働していることを示す。 kubectl get svc -n iron-namespace-datacenterでサービスのステータスを確認し、ClusterIPとNodePortが正しく設定され、対応するポートが開放されていることを確認できる。NodePortサービスの場合、「PORT(S) 80:32678/TCP」のように、アプリケーションの80番ポートがノードの32678番ポートにマッピングされていることが示される。

このようにして、「Iron Gallery」アプリケーションとそのデータベースは、Kubernetesクラスタ上に正常にデプロイされ、外部からアクセス可能な状態になった。この一連の作業は、現代のクラウドネイティブなアプリケーション開発と運用において基本的なスキルであり、システムエンジニアとして学習を続ける上で非常に重要な経験となるだろう。アプリケーションの分離、リソースの管理、ネットワークの構成、そしてデプロイ後の検証といったKubernetesの基本的な概念を理解する良い事例と言える。

関連コンテンツ

関連IT用語