ローカルでビルドしたimageをminikubeで使う

(2018-02-01)

$ minikube version
minikube version: v0.25.0

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.2", GitCommit:"5fa2db2bd46ac79e5e00a4e6ed24191080aa463b", GitTreeState:"clean", BuildDate:"2018-01-18T21:11:08Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"darwin/amd64"}

$ kubectl config current-context
minikube

$ minikube status
minikube: Running
cluster: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100

dockerコマンドがminikube VM内で動いているdocker daemonを参照するようにする。

$ minikube docker-env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/sambaiz/.minikube/certs"

$ eval $(minikube docker-env)
$ docker info --format '{{json .Name}}'
"minikube"

ビルドするDockerfile。nginxが立ち上がるだけ。

FROM nginx

何もタグを付けない(:latest)とcreate時にDockerレジストリからpullしにいって失敗してしまうため、タグ付きでビルドする。

$ docker build -t my/myapp:1.0 .
$ docker images my/myapp
my/myapp   1.0   3f8a4339aadd   5 weeks ago   108 MB

deploymentとservice。

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: my-app
  labels:
    app: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my/myapp:1.0
        ports:
        - containerPort: 80
apiVersion: v1
kind: Service
metadata:
 name: my-app
 labels:
   app: my-app
spec:
 type: NodePort
 ports:
 - port: 80
   nodePort: 30001
 selector:
   app: my-app
$ kubectl create -f deployment.yml 
$ kubectl create -f service.yml 
$ kubectl get pods
NAME                      READY     STATUS    RESTARTS   AGE
my-app-5f8c46bf95-xjvrg   1/1       Running   0          11s

ビルドしたimageでpodが動いていることを確認。

$ curl $(minikube service my-app --url)
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...