😀

hello-minikube

2020/05/06に公開

はじめに

hello-minikube をやってみた。

簡単かと思いきや、2020/4/28 のコミット で誤記が埋め込まれていて混乱した。

イメージがHello worldを表示するものからHTTP Requestをechoするだけのものに変わっていて、何一つHello Worldが絶対出てこない手順になっている…。

前提条件

k8sのコンテナ管理の構成

hello-minikube をやる前に、k8sの管理するコンテナの構成を確認する。
hello-minikubeはとにかく jargon が多く、そのままだと理解不能なので。

stack-container-orchestration (1).png

  • Deployment
    1つ以上のReplicaSetの集合。k8sのデプロイの最大単位。
  • ReplicaSet
    1つ以上に複製されたPodの集合。
  • Pod
    1つ以上のコンテナの集合。k8sのデプロイの最小単位。
  • Service
    外部からk8sの管理するコンテナにアクセスする最小単位。エンドポイント。
  • Node
    VMまたは物理サーバ。k8sのデプロイ先の最小単位。1つのPodは必ず1つの
    Nodeにデプロイされる。
  • Volume
    永続データを保持するデータ領域。
  • Secret
    認証関係のデータを保持するデータ領域。パスワード等。

Minikubeクラスタの作成

  1. minikubeを起動する。

    $ minikube start
    😄  Ubuntu 18.04 上の minikube v1.9.2
    ✨  Using the docker driver based on existing profile
    👍  Starting control plane node m01 in cluster minikube
    🚜  Pulling base image ...
    🔄  Restarting existing docker container for "minikube" ...
    🐳  Docker 19.03.2 で Kubernetes v1.18.0 を準備しています...
        ▪ kubeadm.pod-network-cidr=10.244.0.0/16
    E0506 10:06:08.828823    8108 kubeadm.go:331] Overriding stale ClientConfig host https://172.17.0.3:8443 with https://172.17.0.2:8443
    🌟  アドオンを有効化しています: default-storageclass, storage-provisioner
    🏄  Done! kubectl is now configured to use "minikube"
    

    絵文字がいっぱい出てきてうざい。

  2. ブラウザーでkubernetesダッシュボードを開く。

    $ minikube dashboard
    🔌  ダッシュボードを有効化しています...
    🤔  Verifying dashboard health ...
    🚀  プロキシを起動しています...
    🤔  Verifying proxy health ...
    
    🎉  Opening http://127.0.0.1:45967/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
    既存のブラウザ セッションで開いています。
    

    絵文字がいっぱい出てきて(以下略)

    画面はこんな感じ。

    dashboard

Deploymentの作成

まずは、デプロイの最大単位であるDeployを作る。ReplicaSetやPodは、Deployment作成時にk8sが自動生成するようなので気にしなくて良い。

  1. createコマンドを使用してDeploymentを作成する。

    $ kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
    deployment.apps/hello-node created
    
  2. Deploymentを確認する。

    deployment

Serviceの作成

次に、Serviceを作成して、クライアントからアクセスできるようにする。

  1. exposeコマンドでPodを公開する。

    kubectl expose deployment hello-node --type=LoadBalancer --port=8080
    
  2. サービスをブラウザで表示する。

    minikube service hello-node
    

    hello world

  3. サービスをcurlから実行する。

    $ echo hogehoge | curl http://172.17.0.2:32053/ -d @-
    CLIENT VALUES:
    client_address=172.18.0.1
    command=POST
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://172.17.0.2:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    content-length=8
    content-type=application/x-www-form-urlencoded
    host=172.17.0.2:32053
    user-agent=curl/7.58.0
    BODY:
    hogehoge
    

クリーンアップ

最後に、後始末。作ったServiceとDeploymentを削除する。
ReplicaSetやPodは、Deployment削除時にk8sが自動削除するようなので気にしなくて良い。

$ kubectl delete service hello-node
service "hello-node" deleted
$ kubectl delete deployment hello-node
deployment.apps "hello-node" deleted

dashboard

Discussion