近年、システム開発の現場で当たり前のように使われるようになった**「コンテナ技術」。Dockerを使いこなせるようになったエンジニアが次に直面する壁、それがKubernetes(クーバネティス/K8s)**です。
「名前は聞くけど、難しそうで手が出せない」 「Docker Composeとは何が違うの?」
そんな疑問をお持ちの方に向けて、本記事ではKubernetesの基本概念から、実際にローカル環境で動かすハンズオンまでを徹底解説します。
Kubernetes(K8s)とは何か?
Kubernetes(通称 K8s)は、Googleが自社運用していたBorgというシステムをベースに開発された、オープンソースのコンテナオーケストレーションツールです。
簡単に言うと、**「大量のコンテナを、自動で賢く管理してくれる指揮者」**のような存在です。
なぜKubernetesが必要なのか?
Docker単体では、1つのサーバー上でコンテナを起動・停止することは簡単です。しかし、本番環境で数十、数百のコンテナを複数のサーバーにまたがって運用する場合、以下のような課題が発生します。
- 死活監視: コンテナが落ちたら誰が再起動するのか?
- スケーリング: アクセスが増えた時にどうやってコンテナを増やすか?
- 負荷分散: 複数のコンテナへの通信をどう振り分けるか?
これらを自動化し、解決してくれるのがKubernetesです。
メモ: Kubernetesはギリシャ語で「操舵手(船の舵を取る人)」を意味します。ロゴが船の操舵輪なのはそのためです。
最低限知っておくべき4つの専門用語
Kubernetesを学ぶ際に最初につまずくのが、独自の専門用語です。ここでは、ハンズオンに必要な4つの最重要概念だけを解説します。
1. Node(ノード)
コンテナが実際に動く**「サーバー(マシン)」**そのものです。Kubernetesという集合住宅における「建物」だと考えてください。
2. Pod(ポッド)
Kubernetesにおける最小のデプロイ単位です。1つ以上のコンテナ(Dockerコンテナなど)を含みます。 「コンテナそのもの」ではなく、「コンテナを包む薄い殻(豆のさや)」というイメージです。K8sはコンテナを直接管理するのではなく、このPodを管理します。
3. Deployment(デプロイメント)
Podの**「管理職」**です。「アプリAのPodを常に3つ起動しておく」といった指示書(マニフェスト)を管理します。Podが1つ落ちたら、Deploymentがすぐに新しいPodを作って補充します。
4. Service(サービス)
Podへの**「受付窓口」**です。Podは再起動のたびにIPアドレスが変わりますが、Serviceは固定の窓口を提供し、裏側のPodへ通信を適切に振り分け(ロードバランシング)ます。
【実践】Kubernetesハンズオン
ここからは実際に手を動かして理解を深めましょう。 今回は、ローカル環境で簡単にKubernetesクラスターを構築できるツールMinikubeを使用します。
前提条件
- Dockerがインストールされていること
- ターミナル(コマンドプロンプトやPowerShell)が使えること
手順1: 環境構築(Minikubeのインストール)
まずは、公式ドキュメントに従ってMinikubeとkubectl(K8sを操作するコマンドツール)をインストールしてください。
- Minikubeのインストール手順(公式) <small>※外部リンク</small>
インストール完了後、以下のコマンドでクラスターを起動します。
Bash
minikube start
正常に起動したか確認します。
Bash
kubectl get nodes
Ready と表示されていれば準備完了です。
手順2: Deploymentの作成(Nginxを動かす)
WebサーバーであるNginxをデプロイしてみましょう。 以下のコマンドを実行して、Deploymentを作成します。
Bash
# "my-nginx"という名前で、nginxイメージを使用するDeploymentを作成
kubectl create deployment my-nginx --image=nginx
作成されたか確認します。
Bash
kubectl get deployments
手順3: Podの確認
Deploymentによって自動的にPodが作成されているはずです。
Bash
kubectl get pods
STATUS が Running になっていれば、Nginxのコンテナが起動しています。
手順4: Serviceの作成(外部公開)
このままでは、クラスターの外からNginxにアクセスできません。Serviceを作成して公開します。
Bash
# Deploymentを公開(ポート80番を開放)
kubectl expose deployment my-nginx --type=NodePort --port=80
手順5: ブラウザで確認
Minikubeの場合、以下のコマンドでブラウザを自動起動してアクセスできます。
Bash
minikube service my-nginx
ブラウザに「Welcome to nginx!」と表示されましたか? これで、あなたはKubernetesを使ってWebサーバーを公開することに成功しました!
手順6: 後片付け
作成したリソースを削除します。
Bash
kubectl delete service my-nginx
kubectl delete deployment my-nginx
minikube stop
まとめと次のステップ
今回はKubernetesの基礎概念と、Minikubeを使った簡単なハンズオンを紹介しました。
- Kubernetesはコンテナ運用の自動化ツール
- Podが最小単位、Deploymentが数を管理、Serviceが通信を管理
次のステップとして、コマンド(命令的)ではなく、YAMLファイル(宣言的)を使った管理方法(マニフェストファイルの記述)を学ぶことをおすすめします。これによって「Infrastructure as Code」を実現できるようになります。
もし、Dockerの基礎から復習したい場合は、以下の記事も参考にしてください。
Kubernetesは奥が深いですが、まずは「動いた!」という体験が重要です。ぜひご自身のPCでも試してみてください。
コメントを残す