WEBSYSスタッフ日誌

国立大学法人電気通信大学社会人履修証明プログラムWEBSYSの公式スタッフブログです。単なる学び直しで終わらせません!最新情報を発信いたしますので、フォローをお願いします。ご不明点等についてはメール、DM📩にてお気軽にお問い合わせ下さい。

手軽にKubernetes学習環境を構築する

はじめに

はじめまして。スタッフの平地です。

ウェブシステムデザインプログラムでは、コンテナ技術や仮想化技術なども含めウェブシステムの基盤を支える技術についても扱います。 今回はその中でもKubernetesについてご紹介します。

学習をするためハードルが高いと思われがちなKubernetesですが、今回はminikubeというツールを使って手軽に手元のPCで学習環境を構築する方法を紹介します。

Kubernetesとは?

最近のウェブシステムでは、Dockerなどを初めとしてコンテナ技術を用いた環境を用いることによって開発環境や実行環境を仮想化する技術が注目されています。 コンテナ技術によって、開発者間で開発環境を統一することができたり、作成したアプリケーションをイメージとして配布したりなど様々なメリットが存在します。 コンテナ技術によって仮想化されたアプリケーションを実際に本番サービスとして運用する際に重要となってくるのが、コンテナ上で動くアプリケーションの管理(コンテナオーケストレーション)です。

Kubernetesは元々Googleによって開発された、コンテナ化された複数のアプリケーショを管理するためのシステムです。Kubernetesは分散システムであり、システム全体として負荷に応じたスケーリングや障害発生時のセルフヒーリングといったような仕組みを持っています。 また、Kubernetesを利用することによって、アプリケーションの自動デプロイ(CD)やInfrastructure as Code(IaC)を実現することができます。

今回はGCPAWSなどが提供するGKEやEKSといったようなマネージドKubernetesを利用することなく、手元の環境だけで手軽にKubernetesの学習環境を構築する方法をご紹介します。

minikubeを用いたKubernetesクラスタの構築

学習用にKubernetesクラスタを構築する方法はいくつかあますが、今回はその中でも手軽なminikubeと呼ばれるツールを用いた方法をご紹介します。

Dockerのインストール

minikubeはデフォルトでDockerを用いて、ホスト上にKubernetesクラスタの構築を行います。 そのため、あらかじめ手元の環境にDockerがインストールされている必要があります。 もし、インストールしていない場合は以下の手順に従ってDockerをインストールしてください。

ここではDocker Desktopを用いてインストールします。 Docker DesktopはWindowsMac上で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]. KubernetesKubernetes
[2]. minikube 「minikube start | minikube