以下の記事でMicroK8sをインストールしてみたので、MicroK8s上でアプリケーションを動かしてみたいと思います。
- docker.ioのコンテナイメージを実行する
- オリジナルコンテナイメージを実行する
- docker registryを構築する
- docker registryにオリジナルコンテナイメージを登録する
- オリジナルコンテナイメージを実行する
docker.ioのコンテナイメージを実行する
最初にdocker.ioのコンテナイメージからアプリケーションを実行します。
以下のコマンドで、ベースイメージbusyboxを使って”Hello World”を出力するPodを作成します。
root@microk8s-vm:~# microk8s kubectl run hello --restart=Never --image=busybox -- echo "Hello World"
確認してみると、以下のように”Hello World”を出力していることがわかります。
root@microk8s-vm:~# microk8s kubectl get pods NAME READY STATUS RESTARTS AGE hello 0/1 Completed 0 65s root@microk8s-vm:~# microk8s kubectl logs hello Hello World
ということで、kubernetesと全く同じようにアプリケーションを実行できることが確認できました。
オリジナルコンテナイメージを実行する
次に自身で作成したオリジナルコンテナイメージを以下の構成でMicroK8sで動かします。

docker registryを構築する
以下のコマンドでdocker registryコンテナを作成します。今回は永続ボリュームは付与しません。
root@microk8s-vm:~# microk8s.kubectl run registry --image=registry --port=5000 pod/registry created root@microk8s-vm:~# microk8s.kubectl get pods NAME READY STATUS RESTARTS AGE hello 0/1 Completed 0 6h56m registry 1/1 Running 0 93s
作成したら、MacPCからアクセスできるようにNodePortで公開します。
root@microk8s-vm:~# microk8s.kubectl expose pod registry --type=NodePort --name=registry-service service/registry-service exposed root@microk8s-vm:~# microk8s.kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 20h registry-service NodePort 10.152.183.23 <none> 5000:32147/TCP 8s
docker registryにオリジナルコンテナイメージを登録する
構築したdocker registryにオリジナルコンテナイメージを登録します。オリジナルコンテナイメージは、golangでcssファイルを読み込むで作成したwebコンテナイメージを利用します。
ifconfigコマンドでmultipassのVM IPアドレスを調べて、~/.docker/daemon.json
に以下の内容を追記します。ポート番号はNodePortで公開したポートです。
"insecure-registries":["192.168.64.2:32147"]
dockerを起動し、以下のコマンドでdocker registryにオリジナルコンテナイメージを登録します。
$ docker push 192.168.64.2:32147/web The push refers to repository [192.168.64.2:32147/web] aa26d6c54ca2: Pushed 51b5da98010b: Pushed 6510ca638cc9: Pushed 6e69dbdef94b: Pushed f0c38edb3fff: Pushed ef234633eec2: Pushed 8967306e673e: Pushed 9794a3b3ed45: Pushed 5f77a51ade6a: Pushed e40d297cf5f8: Pushed latest: digest: sha256:860250e45f5851832e2c7632b3e6e1b2c7b89319fdd521bc99262baad6b992cc size: 2421
オリジナルコンテナイメージを実行する
以下のコマンドで登録したオリジナルコンテナイメージを実行します。
root@microk8s-vm:~# microk8s.kubectl run web --image=localhost:32147/web --port=8080 --insecure-skip-tls-verify pod/web created root@microk8s-vm:~# microk8s.kubectl get pods NAME READY STATUS RESTARTS AGE hello 0/1 Completed 0 7h28m registry 1/1 Running 0 33m web 1/1 Running 0 6s
NodePortで公開し、Mac PCからアクセスできるようにします。
root@microk8s-vm:~# microk8s.kubectl expose pod web --type=NodePort --name=web service/web exposed root@microk8s-vm:~# microk8s.kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 20h registry-service NodePort 10.152.183.23 <none> 5000:32147/TCP 26m web NodePort 10.152.183.60 <none> 8080:30162/TCP 29s
192.168.64.2:30162でアクセスしたところ、以下の画面になりました。

冷静に考えると、バックエンドのsearcherとdbを動かしてなかったので、エラーになってました。。。もっと早く気づくべきだった。。
# microk8s.kubectl logs web 2020/06/07 13:19:35 http: panic serving 10.1.2.1:51940: runtime error: invalid memory address or nil pointer dereference goroutine 18 [running]: net/http.(*conn).serve.func1(0xc000096000) /usr/local/go/src/net/http/server.go:1772 +0x139 panic(0x7993a0, 0xb09820) /usr/local/go/src/runtime/panic.go:975 +0x3e3 main.glob..func1(0x890ac0, 0xc0000c0000, 0xc0000a0300) /go/src/web/main.go:36 +0xc6 net/http.HandlerFunc.ServeHTTP(0x81cc60, 0x890ac0, 0xc0000c0000, 0xc0000a0300) /usr/local/go/src/net/http/server.go:2012 +0x44 net/http.(*ServeMux).ServeHTTP(0xb19820, 0x890ac0, 0xc0000c0000, 0xc0000a0300) /usr/local/go/src/net/http/server.go:2387 +0x1a5 net/http.serverHandler.ServeHTTP(0xc000136000, 0x890ac0, 0xc0000c0000, 0xc0000a0300) /usr/local/go/src/net/http/server.go:2807 +0xa3 net/http.(*conn).serve(0xc000096000, 0x891440, 0xc00009c000) /usr/local/go/src/net/http/server.go:1895 +0x86c created by net/http.(*Server).Serve /usr/local/go/src/net/http/server.go:2933 +0x35c
まぁ、今回はKubernetesと同じように動かせることが分かっただけで良しとします。
中途半端になってしまいましたが、以上です!
コメント
コメントは停止中です。