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/

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 今すぐ読む

エンベーダー編集部

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

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

関連記事