手軽にKubernetes学習環境を構築する
はじめに
はじめまして。スタッフの平地です。
ウェブシステムデザインプログラムでは、コンテナ技術や仮想化技術なども含めウェブシステムの基盤を支える技術についても扱います。 今回はその中でもKubernetesについてご紹介します。
学習をするためハードルが高いと思われがちなKubernetesですが、今回はminikubeというツールを使って手軽に手元のPCで学習環境を構築する方法を紹介します。
Kubernetesとは?
最近のウェブシステムでは、Dockerなどを初めとしてコンテナ技術を用いた環境を用いることによって開発環境や実行環境を仮想化する技術が注目されています。 コンテナ技術によって、開発者間で開発環境を統一することができたり、作成したアプリケーションをイメージとして配布したりなど様々なメリットが存在します。 コンテナ技術によって仮想化されたアプリケーションを実際に本番サービスとして運用する際に重要となってくるのが、コンテナ上で動くアプリケーションの管理(コンテナオーケストレーション)です。
Kubernetesは元々Googleによって開発された、コンテナ化された複数のアプリケーショを管理するためのシステムです。Kubernetesは分散システムであり、システム全体として負荷に応じたスケーリングや障害発生時のセルフヒーリングといったような仕組みを持っています。 また、Kubernetesを利用することによって、アプリケーションの自動デプロイ(CD)やInfrastructure as Code(IaC)を実現することができます。
今回はGCPやAWSなどが提供するGKEやEKSといったようなマネージドKubernetesを利用することなく、手元の環境だけで手軽にKubernetesの学習環境を構築する方法をご紹介します。
minikubeを用いたKubernetesクラスタの構築
学習用にKubernetesクラスタを構築する方法はいくつかあますが、今回はその中でも手軽なminikubeと呼ばれるツールを用いた方法をご紹介します。
Dockerのインストール
minikubeはデフォルトでDockerを用いて、ホスト上にKubernetesクラスタの構築を行います。 そのため、あらかじめ手元の環境にDockerがインストールされている必要があります。 もし、インストールしていない場合は以下の手順に従ってDockerをインストールしてください。
ここではDocker Desktopを用いてインストールします。 Docker DesktopはWindowsやMac上でDocker環境を構築できるツールです。 公式サイトにアクセスしてお手元の環境に合ったものをインストールしてください。
Macをお使いの場合は、Intel版とApple Chip版の2種類がありますのでご注意ください。 Windowsの場合は、インストール時にWSL2の有効化が必要な場合がありますのでこちらを参考に設定してください。
minikubeのインストール
minikube公式サイトからインストールします。 利用する環境を選択するだけでセットアップ方法が出てきますので、手順に従ってインストールしてください。 Apple Siliconが搭載されているMacを利用している場合はArchitectureをARM64にしてください。
M1 Macの場合は以下のようになります。
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-arm64 $ sudo install minikube-darwin-arm64 /usr/local/bin/minikube
インストール完了後に以下のようにminikube
コマンドが利用できれば大丈夫です。
$ minikube version minikube version: v1.31.1 commit: fd3f3801765d093a485d255043149f92ec0a695f
Kubernetesクラスタの構築
無事にインストールが完了したら、Kubernetesクラスタを構築していきます。 以下のコマンドだけでクラスタを構築できてしまうのがminikubeの凄いところです。
$ minikube start
絵文字付きで状況が表示され、最後の行に
Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
と表示されていたら構築完了です。
$ minikube kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready control-plane 4m v1.27.3
のようにしてみると無事にクラスタが構築できていることが確認できます。
Kubernetesクラスタを使ってみる
せっかくなので実際に構築したクラスタを使って、Webサーバーをデプロイしてみます。
以下のようなファイルを作成してnginx-sample.yaml
として保存してください。
apiVersion: v1 kind: Service metadata: name: nginx-sample spec: selector: app: nginx-sample type: LoadBalancer ports: - port: 3000 targetPort: 80 --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-sample spec: replicas: 1 selector: matchLabels: app: nginx-sample template: metadata: labels: app: nginx-sample spec: containers: - name: nginx-sample image: nginx:1.14.2 ports: - containerPort: 80
次に以下のコマンドを実行します。
$ minikube kubectl -- apply -f nginx-sample.yaml service/nginx-sample created deployment.apps/nginx-sample created
10秒ぐらい待ってから以下のコマンドを実行してみて、podのSTATUSがrunningになってたらデプロイ成功です。
$ minikube kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx-sample-55c84c754b-dqrqn 1/1 Running 0 56s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 77m service/nginx-sample LoadBalancer 10.97.19.75 <pending> 3000:32149/TCP 56s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx-sample 1/1 1 1 56s NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-sample-55c84c754b 1 1 1 56s
実際にWebページが表示されるか確認してみます。 以下のコマンドを実行してください。
$ minikube tunnel ✅ トンネルが無事開始しました 📌 注意: トンネルにアクセスするにはこのプロセスが存続しなければならないため、このターミナルはクローズしないでください ... 🏃 nginx-sample サービス用のトンネルを起動しています。
プロセスが起動している状態で、ブラウザ上でhttp://localhost:3000
にアクセスしてください。無事にWelcome to nginx!
が表示されていたら成功です!
最後に
Kubernetesはハードルが高いと思われがちですが、今回紹介したminkubeのようなツールを使うことで気軽に環境構築することが可能です。 Kubernetesには非常に多くの活用方法があるので、興味があれば是非学習してみてください! minikubeのサイトやKubernetes公式サイトにも色々な情報が掲載が掲載されています。
参考
[1]. Kubernetes 「Kubernetes」
[2]. minikube 「minikube start | minikube」