Hello Minikube

このチュートリアルでは、minikubeを使用して、Kubernetes上でサンプルアプリケーションを動かす方法を紹介します。 このチュートリアルはNGINXを利用してすべての要求をエコーバックするコンテナイメージを提供します。

目標

  • minikubeへのサンプルアプリケーションのデプロイ
  • アプリケーションの実行
  • アプリケーションログの確認

始める前に

このチュートリアルは、minikubeがセットアップ済みであることを前提としています。 インストール手順はminikube startStep 1 を参照してください。

また、kubectlをインストールする必要があります。 インストール手順はツールのインストールを参照してください。

minikubeクラスターの作成

minikube start 

ダッシュボードを開く

Kubernetesダッシュボードを開きます。これには二通りの方法があります:

新しいターミナルを開き、次のコマンドを実行します:

# 新しいターミナルを起動し、以下を実行したままにしますminikube dashboard 

minikube startを実行したターミナルに戻ります。

minikubeが自動的にWebブラウザーを開くことを望まない場合、dashboardサブコマンドを--urlフラグと共に実行します。 minikubeは、お好みのブラウザーで開くことができるURLを出力します。

新しいターミナルを開き、次のコマンドを実行します:

# 新しいターミナルを起動し、以下を実行したままにしますminikube dashboard --url 

URLをコピー&ペーストし、ブラウザーで開きます。 minikube startを実行したターミナルに戻ります。

Deploymentの作成

KubernetesのPodは、コンテナの管理やネットワーキングの目的でまとめられた、1つ以上のコンテナのグループです。このチュートリアルのPodがもつコンテナは1つのみです。KubernetesのDeploymentはPodの状態を確認し、Podのコンテナが停止した場合には再起動します。DeploymentはPodの作成やスケールを管理するために推奨される方法(手段)です。

  1. kubectl createコマンドを使用してPodを管理するDeploymentを作成してください。Podは提供されたDockerイメージを元にコンテナを実行します。

    # Webサーバーを含むテストコンテナイメージを実行するkubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080
  2. Deploymentを確認します:

    kubectl get deployments 

    出力は下記のようになります:

    NAME READY UP-TO-DATE AVAILABLE AGE hello-node 1/1 1 1 1m 

    (Podが利用可能になるまで時間がかかる場合があります。"0/1"と表示された場合は、数秒後にもう一度確認してみてください。)

  3. Podを確認します:

    kubectl get pods 

    出力は下記のようになります:

    NAME READY STATUS RESTARTS AGE hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m 
  4. クラスターイベントを確認します:

    kubectl get events 
  5. kubectlで設定を確認します:

    kubectl config view 
  6. Podで実行されているコンテナのアプリケーションログを確認します(Podの名前はkubectl get podsで取得したものに置き換えてください)。

    kubectl logs hello-node-5f76cf6ccf-br9b5 

    出力は下記のようになります:

    I0911 09:19:26.677397 1 log.go:195] Started HTTP server on port 8080 I0911 09:19:26.677586 1 log.go:195] Started UDP server on port 8081 

Serviceの作成

通常、PodはKubernetesクラスター内部のIPアドレスからのみアクセスすることができます。hello-nodeコンテナをKubernetesの仮想ネットワークの外部からアクセスするためには、KubernetesのServiceとしてPodを公開する必要があります。

  1. kubectl exposeコマンドを使用してPodをインターネットに公開します:

    kubectl expose deployment hello-node --type=LoadBalancer --port=8080

    --type=LoadBalancerフラグはServiceをクラスター外部に公開したいことを示しています。

    テストイメージ内のアプリケーションコードはTCPの8080番ポートのみを待ち受けます。 kubectl exposeで8080番ポート以外を公開した場合、クライアントはそのポートに接続できません。

  2. 作成したServiceを確認します:

    kubectl get services 

    出力は下記のようになります:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m 

    ロードバランサーをサポートするクラウドプロバイダーでは、Serviceにアクセスするための外部IPアドレスが提供されます。 minikubeでは、LoadBalancerタイプはminikube serviceコマンドを使用した接続可能なServiceを作成します。

  3. 次のコマンドを実行します:

    minikube service hello-node 

    アプリケーションとその応答が表示されるブラウザーウィンドウが開きます。

アドオンの有効化

minikubeはビルトインのアドオンがあり、有効化、無効化、あるいはローカルのKubernetes環境に公開することができます。

  1. サポートされているアドオンをリストアップします:

    minikube addons list 

    出力は下記のようになります:

    addon-manager: enabled dashboard: enabled default-storageclass: enabled efk: disabled freshpod: disabled gvisor: disabled helm-tiller: disabled ingress: disabled ingress-dns: disabled logviewer: disabled metrics-server: disabled nvidia-driver-installer: disabled nvidia-gpu-device-plugin: disabled registry: disabled registry-creds: disabled storage-provisioner: enabled storage-provisioner-gluster: disabled 
  2. ここでは例としてmetrics-serverのアドオンを有効化します:

    minikube addons enable metrics-server 

    出力は下記のようになります:

    The 'metrics-server' addon is enabled 
  3. 作成されたPodとサービスを確認します:

    kubectl get pod,svc -n kube-system 

    出力:

    NAME READY STATUS RESTARTS AGE pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m pod/metrics-server-67fb648c5 1/1 Running 0 26s pod/etcd-minikube 1/1 Running 0 34m pod/influxdb-grafana-b29w8 2/2 Running 0 26s pod/kube-addon-manager-minikube 1/1 Running 0 34m pod/kube-apiserver-minikube 1/1 Running 0 34m pod/kube-controller-manager-minikube 1/1 Running 0 34m pod/kube-proxy-rnlps 1/1 Running 0 34m pod/kube-scheduler-minikube 1/1 Running 0 34m pod/storage-provisioner 1/1 Running 0 34m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/metrics-server ClusterIP 10.96.241.45 <none> 80/TCP 26s service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s 
  4. metrics-serverの出力を確認します:

    kubectl top pods 

    出力は下記のようになります:

    NAME CPU(cores) MEMORY(bytes) hello-node-ccf4b9788-4jn97 1m 6Mi 

    次のメッセージが表示された場合は、しばらく待ってから再度実行してください:

    error: Metrics API not available 
  5. metrics-serverを無効化します:

    minikube addons disable metrics-server 

    出力は下記のようになります:

    metrics-server was successfully disabled 

クリーンアップ

クラスターに作成したリソースをクリーンアップします:

kubectl delete service hello-node kubectl delete deployment hello-node 

minikubeクラスターを停止します

minikube stop 

(オプション)minikubeのVMを削除します:

# オプションminikube delete 

Kubernetesの学習で再度minikubeを使用したい場合、minikubeのVMを削除する必要はありません。

まとめ

このページでは、minikubeクラスターを立ち上げて実行するための基本的な部分を説明しました。 これでアプリケーションをデプロイする準備が整いました。

次の項目