はじめに
初めての Kubernetes 実験へようこそ!この実験では、コンテナ化されたアプリケーションを管理する強力なシステムである Kubernetes を紹介します。この実験が終わるまでに、最初の Kubernetes デプロイメントを作成し、それとやり取りするようになります。
コンテナやオーケストレーションに初めて触れる方も心配しないでください。進行につれて各概念を説明します。さあ、Kubernetes の世界への旅を始めましょう!
注意:この実験ではイメージのプルが必要ですが、無料ユーザーは実験環境からインターネットにアクセスできません。この実験は Pro ユーザー限定です。
Kubernetes クラスタの起動
まずは、Minikube を使ってローカルの Kubernetes クラスタを作成しましょう。Minikube を使うと、コンピュータ上で単一ノードの Kubernetes クラスタを実行でき、学習や開発に最適です。
まず、ターミナルを開きます。/home/labex/project ディレクトリにいる必要があります。もし確認ができない場合は、次のコマンドを入力してこのディレクトリに移動できます。
cd /home/labex/project
次に、Minikube クラスタを起動しましょう。
注意:無料ユーザーはインターネットに接続できないため、実験を開始するときには minikube は既に事前に起動されています。この手順をスキップできます。独自にクラスタを起動する練習をするには、Pro ユーザーにアップグレード してください。
Pro ユーザー限定
minikube start

このコマンドは、ローカルマシン上で Kubernetes クラスタを初期化します。背後で行われていることは次のとおりです。
- Minikube はコンピュータ上に仮想マシン(VM)を作成します。
- この VM 内に Kubernetes をインストールして設定します。
- コンピュータがクラスタと通信できるようにネットワークを設定します。
このプロセスには数分かかる場合があります。Minikube が動作する際に大量の出力が表示されます。すべてを理解できなくても心配しないでください。最後に「完了!」と表示されるメッセージが表示されるまで待つことが大切です。
最初のデプロイメントの作成
クラスタが稼働しているので、最初の Kubernetes デプロイメントを作成しましょう。デプロイメントは、同一のポッドのグループを管理する Kubernetes オブジェクトです。(心配しないでください。すぐにポッドが何かを説明します!)
単一の NGINX ウェブサーバーコンテナを実行するデプロイメントを作成します。この例では、人気のあるウェブサーバーである NGINX を使用します。
このコマンドを実行します。
kubectl create deployment hello-kubernetes --image=nginx:latest --port=80
これを分解してみましょう。
kubectlは Kubernetes とやり取りするためのコマンドラインツールです。create deploymentは Kubernetes に新しいデプロイメントを作成するように指示します。hello-kubernetesはデプロイメントに与える名前です。--image=nginx:latestは最新バージョンの NGINX Docker イメージを使用したいことを指定します。--port=80はコンテナがポート 80(ウェブトラフィックの標準ポート)で待ち受けることを Kubernetes に伝えます。
このコマンドを実行した後、次のように表示されるはずです。
deployment.apps/hello-kubernetes created
これは、Kubernetes が正常にデプロイメントを作成したことを意味します。では、具体的に何を行ったのでしょうか。
- Kubernetes は NGINX Docker イメージをダウンロードしました。
- ポッド(1 つ以上のコンテナのグループ)を作成し、その中に NGINX コンテナを起動しました。
- ポッドがポート 80 でアクセスできるようにネットワークを設定しました。
デプロイメントの調査
デプロイメントを作成したので、Kubernetes が私たちのために設定したものをもう少し詳しく見てみましょう。
まず、デプロイメントの状態を確認します。
kubectl get deployments
次のような出力が表示されるはずです。
NAME READY UP-TO-DATE AVAILABLE AGE
hello-kubernetes 1/1 1 1 2m
この出力は次のことを教えてくれます。
READY: 1/1 は、1 つの目的のポッドのうち 1 つが準備完了していることを意味します。UP-TO-DATE: 1 は、1 つのポッドが最新のコンフィグレーションを実行していることを意味します。AVAILABLE: 1 は、トラフィックを処理できる 1 つのポッドが利用可能であることを意味します。
次に、デプロイメントが作成したポッドを見てみましょう。
kubectl get pods
次のような出力が表示されるはずです。
NAME READY STATUS RESTARTS AGE
hello-kubernetes-6b89d599b9-x7tpv 1/1 Running 0 3m
ポッド名は正確には異なりますが、「Running」の状態を持つ 1 つのポッドが表示されるはずです。このポッドには NGINX コンテナが含まれています。
実行中のポッドが表示されない場合は、1 分待ってから再度試してください。Kubernetes はまだポッドを作成中か、NGINX イメージをダウンロード中かもしれません。
ポッドに関するより詳細な情報を取得するには、次のコマンドを実行します。
kubectl describe pod hello-kubernetes-6b89d599b9-x7tpv
注意:
kubectl get podsの出力に表示されるポッド名に置き換えてhello-kubernetes-6b89d599b9-x7tpvを使用してください。
このコマンドは大量の情報を出力します。今すべてを理解する必要はありません。注目すべき重要なことは次のとおりです。
Status: 「Running」である必要があります。IP: ポッドの内部 IP アドレスContainers: ポッド内で実行されている NGINX コンテナに関する情報
この出力にエラーが表示された場合、それはポッドの問題を診断するのに役立ちます。
アプリケーションにアクセスする
デプロイメントが稼働しているので、展開した NGINX ウェブサーバーにアクセスしましょう。
通常の Kubernetes 環境では、デプロイメントをネットワークに公開するために Service を作成します。このローカル環境での簡略化のため、代わりにポートフォワーディングを使用します。
このコマンドを実行します。
kubectl port-forward $(kubectl get pods -o name) 8080:80
このコマンドは次のことを行います。
$(kubectl get pods -o name)はポッドの名前を取得します。8080:80は、Kubernetes に対して、ローカルマシンのポート 8080 からポッド内のポート 80 にトラフィックを転送するように指示します。
出力は表示されませんが、コマンドは実行されたままになります。これは正常です!
次に、新しいターミナルウィンドウを開き、次のコマンドを実行します。
curl http://localhost:8080

HTML コンテンツが表示されるはずです。これが NGINX のウェルカムページです!
HTML が表示されない場合:
- ポートフォワーディングコマンドが他のターミナルでまだ実行されていることを確認します。
- curl コマンドを正しく入力したことを確認します。
- curl が機能しない場合は、Web ブラウザで http://localhost:8080 にアクセスしてみてください。
ポートフォワーディングを停止するには、元のターミナルウィンドウに戻り、Ctrl+C を押します。
クリーンアップ
素晴らしい仕事です!Kubernetes 上でアプリケーションを正常に展開してアクセスしました。では、リソースをクリーンアップしましょう。
まず、デプロイメントを削除します。
kubectl delete deployment hello-kubernetes
次のように表示されるはずです。
deployment.apps "hello-kubernetes" deleted
このコマンドは、Kubernetes に対してデプロイメントとそれに関連するすべてのリソース(ポッドも含む)を削除するように指示します。
デプロイメントとポッドが削除されたことを確認します。
kubectl get deployments
kubectl get pods
どちらのコマンドも「デフォルト名前空間にはリソースが見つかりません」と返すはずです。
まだリソースが表示される場合は、少し待ってから再度試してください。Kubernetes がまだ削除中かもしれません。
最後に、Minikube クラスタを停止します。
minikube stop
これにより Minikube 仮想マシンが停止しますが、クラスタの状態はマシン上に保持されます。後で minikube start で再開できます。
Minikube クラスタを完全に削除したい場合は、minikube delete を実行できます。ただし、今のところは必要ありません。
まとめ
おめでとうございます!この実験では、Kubernetes を使って初めての一歩を踏み出しました。以下のことを学びました。
- Minikube を使ってローカルの Kubernetes クラスタを起動する
- kubectl を使ってデプロイメントを作成する
- 作成したデプロイメントとそれが生成するポッドを調査する
- ポートフォワーディングを使って展開したアプリケーションにアクセスする
- リソースをクリーンアップしてクラスタを停止する
これらは、Kubernetes を使った作業の基礎となる基本的なスキルです。学習を続けるにつれて、これらの基本を基にして、より複雑なアプリケーションを作成し、より高度な Kubernetes の概念を理解していきます。
覚えておいてください。Kubernetes は強力で複雑なシステムです。一部の概念がまだ明確でなくても正常です。Kubernetes の学習は旅です。練習を続けることで、徐々に深い理解を築いていけます。Kubernetes の学習の旅で、ご成功を祈ります!


