1. ホーム
  2. 記事一覧
  3. Kubernetes初心者向けハンズオン Mac M1,M2で実施

2024.02.10

Kubernetes初心者向けハンズオン Mac M1,M2で実施

この記事では、最新のApple Silicon(M1, M2, M3チップ)を搭載したMacやMacBookを使用して、Kubernetesの基本を学び、手を動かしながら実際に体験する方法をステップバイステップでご紹介します。もちろん、LinuxやWindowsでも実施可能です。

Kubernetesとは何か?

Kubernetesは、コンテナ化されたアプリケーションのデプロイメント、スケーリング、管理を自動化するオープンソースのシステムです。Googleによって開発され、Cloud Native Computing Foundation (CNCF) に寄贈されました。複数のホスト上でコンテナを効率的に運用することを可能にし、大規模なアプリケーションの運用を容易にします。

なぜKubernetesが必要なのか?

近年、アプリケーション開発とデプロイメントのプロセスは、マイクロサービスアーキテクチャやコンテナ技術の採用によって大きく変化しました。これらの技術は、アプリケーションを小さく独立した部分に分割して開発し、各部分をコンテナとしてパッケージ化することで、アプリケーションの柔軟性、拡張性、ポータビリティを向上させます。しかし、これら多数のコンテナを効率的に運用し、スケールするには、自動化された管理システムが必要になります。ここでKubernetesが登場します。

Kubernetesとコンテナオーケストレーション

Kubernetesはコンテナオーケストレーションの一形態で、コンテナのライフサイクルを管理します。コンテナオーケストレーションとは、複数のコンテナをまとめて管理する技術です。アプリケーションのデプロイ、スケーリング、更新、可用性保証などを自動化し、これらのプロセスを簡単かつ効率的に行うことができます。Kubernetesを使用することで、エンジニアとオペレーションチームはコンテナの運用にかかる手間を大幅に削減し、より速く信頼性の高いアプリケーションの提供を実現できます。

Kubernetesがコンテナ管理を革新している方法

  • 自動スケーリング

    アプリケーションの負荷に基づいて、コンテナの数を自動的に増減させることができます。

  • 自己修復能力

    障害が発生したコンテナを自動的に再起動し、定義された状態を維持します。

  • ロードバランシング

    複数のコンテナインスタンスへのトラフィックを自動的に分散します。

  • サービスディスカバリー

    コンテナ間での通信を容易にし、各サービスを簡単に検出できるようにします。

  • 環境一貫性の保証

    開発、テスト、本番環境間での環境差異を最小限に抑えます。

Kubernetesは、コンテナ化されたアプリケーションの運用を簡素化し、効率化する強力なツールです。初めてKubernetesに触れる方でも、ハンズオンを通じて基本的な操作を学び、Kubernetesの提供する多様な機能と利点を実感することができます。苦手意識を持たず、まずは触ってみてください。

Kubernetesの基本コンセプト

Kubernetes(略してK8s)は、いくつかのコンピューターを使ってアプリを動かすためのツールです。このツールは、アプリを「コンテナ」と呼ばれる小さなパーツに分けて、それらを上手に管理・運用する手助けをしてくれます。

主なパーツって何?

引用元: クラスターのアーキテクチャ

  • ポッド (Pods)

    ポッドはアプリの最小の部品で、1つまたは複数のコンテナを含んでいます。これらはチームのメンバーのように協力して動きます。一つの目的のために、それぞれが異なる役割を担いながらも、一緒に仕事を進める感じです。

  • サービス (Services)

    サービスは、ポッドに簡単にアクセスできるようにするための「住所」みたいなものです。ポッドがどこにあるか心配する必要がなくなります。

  • デプロイメント (Deployments)

    デプロイメントは、アプリを更新したり、必要な数だけアプリを動かしたりするときに役立ちます。例えるなら、スマートフォンのアプリ更新機能のように、新しいバージョンをスムーズに導入して、常に最適な状態を保ちます。また、アプリのコピーを増やしたり減らしたりして、使用状況に合わせて調整することができます。

  • レプリカセット (ReplicaSets)

    レプリカセットは、アプリのコピーが常に指定した数だけ動いていることを保証します。「バックアップ」のように、一つがダウンしても大丈夫なようにします。

Kubernetesはどうやって動くの?

Kubernetesには、「マスターノード」と「ワーカーノード」という2種類のコンピューターがあります。

  • マスターノード

    このコンピューターは、指揮を取る役割を持ちます。何をどこで動かすかを決めたり、クラスター全体を見守ったりします。

  • ワーカーノード

    こちらのコンピューターは、実際にアプリを動かす場所です。マスターノードの指示に従って、アプリのポッドを動かしたり管理したりします。

Kubernetesが便利な理由

Kubernetesを使うと、アプリを簡単にスケールアップやスケールダウンできます。また、アプリの更新が簡単になり、万が一エラーがあっても自動で修正してくれるため、安心して運用できます。さらに、コンピューターが複数あっても、まるで1つの大きなコンピューターのように扱えるため、管理が楽になります。

Kubernetesを使うと、エンジニアとしてアプリのコードに集中でき、インフラの面倒な部分はKubernetesがうまくやってくれます。これが、Kubernetesが世界中で人気の理由です。

ハンズオン Minikubeを使ってKubernetesを体験

ローカルでKubernetesを動かすことができるMinikubeを使って、簡単なアプリをデプロイするハンズオンを実施します。KubernetesでNginx Webサーバーをデプロイし、サービスを公開してアクセスする基本的な操作について実践的な理解を深めることができます。

事前準備 必要なツール

  • Minikube
  • kubectl(Kubernetesのコマンドラインツール)
    • Macのインストールコマンドbrew install kubectl
  • Docker(オプションで、ローカルのコンテナランタイムとして使用)
    • Docker Desktopは、Docker公式サイトからダウンロードしてインストールできます。
    • 起動することを忘れないようにしてください。

Linuxユーザー向けのkubectlインストール方法

Linuxでkubectlをインストールする一般的な方法は、以下のコマンドを使用することです。

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version --client

詳細なインストール手順については、Kubernetesの公式ドキュメントを参照してください。 Install and Set Up kubectl on Linux.

Windowsユーザー向けのkubectlインストール方法

Windowsにkubectlをインストールするには、以下のPowerShellコマンドを使用する方法があります。

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/windows/amd64/kubectl.exe"
Move-Item .\kubectl.exe C:\some-directory-in-your-PATH\kubectl.exe

C:\some-directory-in-your-PATH\kubectl.exeの部分は、kubectl.exeを移動させたいPATH内のディレクトリに適宜変更してください。そして、そのディレクトリがシステムのPATH環境変数に含まれていることを確認してください。

詳細なインストール手順については、Kubernetesの公式ドキュメントを参照してください。 Install and Set Up kubectl on Windows.

ステップバイステップガイド

1. Minikubeのインストール

Macbook(Intel/M1/M2/M3)の場合、Homebrewを使用してインストールできます。

brew install minikube

WindowsやLinuxを使用しているときは、公式のMinikubeページからインストールガイドに従って、Minikubeをインストールします。

https://minikube.sigs.k8s.io/docs/start/

2. Minikubeクラスタの起動

ターミナルで以下のコマンドを実行して、Minikubeクラスタを起動します。

# デフォルトのvirtualboxでは動かないため、dockerを使用します。
minikube start --driver=docker

3. kubectlの設定

Minikubeは自動的にkubectlの設定を行います。以下のコマンドでクラスタの状態を確認できます。

kubectl get nodes
# 出力内容
NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   66s   v1.28.3

4.Nginxのデプロイメント

Nginx Webサーバーをデプロイします。

kubectl create deployment nginx --image=nginx
# 結果
deployment.apps/nginx created

5. アプリケーションへのアクセスを設定

デプロイしたNginxに外部からアクセスできるように、Serviceを作成します。

kubectl expose deployment nginx --type=NodePort --port=80
# 結果
service/nginx exposed

6. アプリケーションへアクセス

MinikubeのServiceを通じて、デプロイしたNginxにアクセスします。

minikube service nginx
|-----------|-------|-------------|---------------------------|
| NAMESPACE | NAME  | TARGET PORT |            URL            |
|-----------|-------|-------------|---------------------------|
| default   | nginx |          80 | http://192.168.49.2:31545 |
|-----------|-------|-------------|---------------------------|
nginx サービス用のトンネルを起動しています。
|-----------|-------|-------------|------------------------|
| NAMESPACE | NAME  | TARGET PORT |          URL           |
|-----------|-------|-------------|------------------------|
| default   | nginx |             | http://127.0.0.1:65192 |
|-----------|-------|-------------|------------------------|
デフォルトブラウザーで default/nginx サービスを開いています...
Docker ドライバーを darwin 上で使用しているため、実行するにはターミナルを開く必要があります。

このコマンドは自動的にブラウザを開き、Nginxのウェブページにリダイレクトします。この画面のまま動かなくなるので、Ctrl+Cを押すと、再度マンドを入力できるようになります。

ハンズオン2 アプリケーションのスケーリング

ポッド数を増やす

デプロイメント名がnginxで、ポッド数を3に増やしたい場合、以下のコマンドを使用します。

kubectl scale deployment/nginx --replicas=3
# ポッド数を確認すると、次のように表示されます。
kubectl get pods  
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7854ff8877-6zspg   1/1     Running   0          5s
nginx-7854ff8877-hcwfr   1/1     Running   0          5s
nginx-7854ff8877-rmf57   1/1     Running   0          80m

このコマンドはnginxデプロイメントのポッド数を3にスケーリングします。

ポッド数を減らす

同じデプロイメントのポッド数を1に減らすには、以下のコマンドを使用します。

kubectl scale deployment/nginx --replicas=1
# ポッド数を確認すると、次のように表示されます。
kubectl get pods                           
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7854ff8877-rmf57   1/1     Running   0          81m

ハンズオン3 アップデートとロールバック

アプリケーションのアップデート

デプロイメントnginxで使用されるコンテナイメージを新しいバージョンにアップデートするには、以下のコマンドを使用します。

kubectl set image deployment/nginx nginx=nginx:1.19.0

この例では、nginxデプロイメント内のnginxコンテナのイメージをnginx:1.19.0に更新しています。

アップデートのロールバック

アップデート後に問題が発生した場合、最後の変更をロールバックして元の状態に戻すには、以下のコマンドを使用します。

kubectl rollout undo deployment/nginx

このコマンドは、nginxデプロイメントに対する最後のアップデートを元に戻します。

ハンズオン4 環境のクリーンアップ

クリーンアップは、ハンズオンを終えた後にKubernetesクラスター内のリソースを整理し、不要なリソースを削除する重要なステップです。これにより、クラスターをクリーンな状態に保ち、リソースの無駄遣いを防ぐことができます。

クリーンアップ手順

以下のコマンドを使用して、デプロイメントとそれに関連するサービスを削除します。

デプロイメントの削除

デプロイメントを削除するには、以下のコマンドを使用します。例としてnginxデプロイメントを削除する場合のコマンドを示します。

kubectl delete deployment nginx

このコマンドは、nginxという名前のデプロイメントと、それによって管理されていたポッドをクラスターから削除します。

サービスの削除

サービスを削除するには、以下のコマンドを使用します。例としてnginxサービスを削除する場合のコマンドを示します。

kubectl delete service nginx
# サービスを確認すると、次のように表示されます。
kubectl get svc                      
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   96m

このコマンドは、nginxという名前のサービスをクラスターから削除します。サービスを削除すると、そのサービスを通じて行われていた外部からのアクセスが不可能になります。

Minikubeクラスタの停止

ハンズオンが完了し、Minikubeクラスタが不要になった場合は、クラスタを停止することができます。これにより、クラスタの実行に使用されていたリソースが解放されます。

minikube stop
# 次のように表示されれば、正常に停止しています。
「minikube」ノードを停止しています...
 SSH 経由で「minikube」の電源をオフにしています...
1 台のノードが停止しました。

このコマンドはMinikubeクラスタの実行を停止します。後で再度クラスタを使用したい場合は、minikube startコマンドで再開できます。

まとめ

このハンズオンでは、Kubernetesの基本を学び、実際にMinikubeを使用してローカルKubernetesクラスターをセットアップしました。Nginxのデプロイメントの作成から、アプリケーションへのアクセス設定、スケーリング、アップデート、そしてクリーンアップまでの一連のプロセスを通じて、Kubernetesでのアプリケーション管理の基本的な流れを体験しました。この記事を通じて、K8sはそんなに難しくない、むしろ楽しいと思っていただければ幸いです。

参考情報

https://kubernetes.io/docs/home/

https://minikube.sigs.k8s.io/docs/start/

https://nginx.org/en/docs/

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事