目的
自作アプリを登録しているプライベートレジストリからminikubeにデプロイして動作させたい。
図にすると下記のようなイメージ。
目標
- minikubeへのデプロイ
- minikubeへのサービス登録
- minikube上で動作するアプリへのアクセス確認
やってみた
minikubeへのデプロイ
プライベートレジストリの作成方法は前回の記事を参照。
Podを管理するDeploymentを作成。
192.168.0.17はプライベートレジストリが動作しているホストマシンのIPアドレス。
$ kubectl create deployment tomsan --image=192.168.0.17:5000/sample/tomsan:1.0
作成したDeploymentとPodを確認。
$ kube get deployments NAME READY UP-TO-DATE AVAILABLE AGE tomsan 1/1 1 1 66s
$ kube get pods NAME READY STATUS RESTARTS AGE tomsan-788bfc748c-dwskl 1/1 Running 0 97s
minikube上にデプロイできた。
サービス登録
デプロイしたアプリに外部からアクセスできるようにサービスを作成。
$ kubectl expose deployment tomsan --type=LoadBalancer --port=8080 service/tomsan exposed
作成したサービスを確認。
$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 40m tomsan LoadBalancer 10.106.240.54 <pending> 8080:30549/TCP 68s
接続可能なサービスを作成
$ minikube service tomsan |-----------|--------|-------------|---------------------------| | NAMESPACE | NAME | TARGET PORT | URL | |-----------|--------|-------------|---------------------------| | default | tomsan | 8080 | http://192.168.49.2:30549 | |-----------|--------|-------------|---------------------------| 🏃 Starting tunnel for service tomsan. |-----------|--------|-------------|------------------------| | NAMESPACE | NAME | TARGET PORT | URL | |-----------|--------|-------------|------------------------| | default | tomsan | | http://127.0.0.1:58873 | |-----------|--------|-------------|------------------------| 🎉 Opening service default/tomsan in default browser...
ホストマシンからcurlコマンドでデプロイしたアプリにアクセスできることを確認できた。
$ curl http://localhost:58873/Sample/hello Hello World update223%
注意点
insecure-registryオプションが必要
プライベートリポジトリからのコンテナイメージをpullする際に、httpsで通信をしないようにするために、minikubeの起動時にinsecure-registryオプションの設定が必要。
insecure-registryオプションの値はプライベートレジストリのIPアドレス:ポート番号 を指定。
minikube start --insecure-registry=192.168.0.17:5000
クラスタの再作成をしないとオプションが反映されない
insecure-registryオプションを指定して起動してもオプションが反映されない可能性がある。
その場合は、minikube delete
でクラスタを削除して起動する必要がある。
insecure-registryが設定されているかどうかは、minikube ssh
でクラスタに接続し、docker info
で確認できる。
感想
実際に手を動かしてみたが、かなり手間取ってしまった。
特にminikubeにプライベートリポジトリからコンテナイメージをpullしてデプロイする部分はHTTPSの設定やハンドブックに書いてあることを試してみたが、うまくいかず。
minikube delete で環境を再作成しないとオプションが反映されなかったのは、落とし穴だった。
実際に、手を動かしてみないと分からないことが多いので、今後もPod間の接続などを試してみようと思う。