Docker DesktopでKubernetesを使ってnginxを動作させる

環境

Docker Desktop fo Mac: 2.3.0.2
Docker Engine: 19.03.8
Kubernetes: v1.16.5

目的

Docker DesktopでKubernetesを使ってnginxコンテナを動かせるようになる。

流れ

  • Docker DesktopでKubernetesを有効化する
  • Podの作成
  • Serviceの作成
  • 作成したnginxにアクセス

Docker DesktopでKubernetesを有効化する

Docker DesktopでKubernetesを有効にすると、Kubernetesクラスタとマスターノードが構築される。

// クラスタ上の全てのノードを表示
$ kubectl get nodes
NAME             STATUS   ROLES    AGE   VERSION
docker-desktop   Ready    master   97s   v1.16.6-beta.0

Podの作成

nginxコンテナ1つを含むPodを作成。

$ kubectl run my-nginx --image nginx:latest
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/my-nginx created

my-nginxというDepoloymentリソースが作成される。 通常はマニフェストファイルでPodを作成するが、kubectl run でも作成できる。

// 作成されたDeploymentを確認
$ kubectl get deployment
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
my-nginx   1/1     1            1           2m36s

// 作成されたPodを確認
$ kubectl get pod
NAME                        READY   STATUS    RESTARTS   AGE
my-nginx-667764d77b-8krjp   1/1     Running   0          3m25s

// 作成されたコンテナを確認。
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
5d69c57dbef0        nginx               "/docker-entrypoint.…"   3 minutes ago       Up 3 minutes                            k8s_my-nginx_my-nginx-667764d77b-8krjp_default_56654cce-42f3-4314-a1e8-cad388f85a40_0

Serviceの作成

Podに対してクラスタ外部からアクセスするためにはServiceを作成する必要がある。

$ kubectl expose deployment my-nginx --port 80 --type NodePort
service/my-nginx exposed

deploymentにmy-nginx、ポート番号に80、--typeオプションにNodePortを指定している。 Serviceの一覧を見ると、my-nginxが作成され、ポート番号31916でアクセスできることが分かる。

$ kubectl get service
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        25m
my-nginx     NodePort    10.103.77.36   <none>        80:31916/TCP   5s

作成したnginxにアクセス

http://localhost:31916 にアクセスするとnginxのホーム画面が表示される!

今回作ったリソースが不要になったらDeployment, Serviceを削除する。

$ kubectl delete deployment my-nginx
deployment.apps "my-nginx" deleted
$ kubectl delete service my-nginx
service "my-nginx" deleted