MinikubeのAddonを作る
はじめに
MinikubeのAddonを眺めていたら下記作成手順をみつけたので試しに作ってみます。
開発環境
- Ubuntu 18.04
- Go 1.14
開発
Minikubeのfork
github.comからでもCLIでもよいのでforkします。
YAMLの用意
今回は例としてNginxのDeploymentとService(NodePort)を作成します。
minikube addons open
対応のためkube-system
上に展開します。
apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx name: nginx namespace: kube-system spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx name: nginx ports: - containerPort: 80
apiVersion: v1 kind: Service metadata: labels: app: nginx kubernetes.io/minikube-addons-endpoint: nginx name: nginx namespace: kube-system spec: type: NodePort ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx
minikube addons open
対応のため、ServiceのLabelにはkubernetes.io/minikube-addons-endpoint
をつけておきます。
addonディレクトリの作成
forkしたリポジトリの下にaddon用のディレクトリを作成します。
mkdir deploy/addons/nginx
YAMLの配置
NginxのYAMLを先ほど作ったディレクトリに配置します。
cp ~/deployment.yaml deploy/addons/nginx/ cp ~/service.yaml deploy/addons/nginx/
Minikubeの修正
pkg/addons/config.go
の修正
minikube addons list
実行時に追加したAddonを表示させるために、pkg/addons/config.go
に下記を追記します。
// Addons is a list of all addons var Addons = []*Addon{ { name: "dashboard", set: SetBool, callbacks: []setFn{enableOrDisableAddon}, }, // 略 // 下記を追記 { name: "nginx", set: SetBool, callbacks: []setFn{enableOrDisableAddon}, }, }
pkg/minikube/assets/addons.go
の修正
次はクラスタにコピーするためのManifestファイルの設定のため、pkg/minikube/assets/addons.go
に下記を追加します。
var Addons = map[string]*Addon{ // 略 // 下記を追加 "nginx": NewAddon([]*BinAsset{ MustBinAsset( "deploy/addons/nginx/deployment.yaml", vmpath.GuestAddonsDir, "nginx-deployment.yaml", "0640", false), MustBinAsset( "deploy/addons/nginx/service.yaml", vmpath.GuestAddonsDir, "nginx-service.yaml", "0640", false), }, false, "nginx"), }
MustBinAsset
の引数については下記の通り:
- source filename
- destination directory (typically
vmpath.GuestAddonsDir
) - destination filename
- permissions (typically
0640
) - boolean value representing if template substitution is required (often false)
ビルド
make
するとout
ディレクトリ配下にminikube
のバイナリができます。
疎通
Addonが一覧に表示されるか確認
まずはminikube addons list
コマンドでNginx Addonが表示されているか見てみます。
gashirar:~/minikube$ ./out/minikube addons list |-----------------------------|----------|--------------| | ADDON NAME | PROFILE | STATUS | |-----------------------------|----------|--------------| | dashboard | minikube | disabled | | default-storageclass | minikube | enabled ✅ | | efk | minikube | disabled | | freshpod | minikube | disabled | | gvisor | minikube | disabled | | helm-tiller | minikube | disabled | | ingress | minikube | disabled | | ingress-dns | minikube | disabled | | istio | minikube | disabled | | istio-provisioner | minikube | disabled | | logviewer | minikube | disabled | | metallb | minikube | disabled | | metrics-server | minikube | disabled | | nginx | minikube | disabled | | nvidia-driver-installer | minikube | disabled | | nvidia-gpu-device-plugin | minikube | disabled | | registry | minikube | disabled | | registry-aliases | minikube | disabled | | registry-creds | minikube | disabled | | storage-provisioner | minikube | enabled ✅ | | storage-provisioner-gluster | minikube | disabled | |-----------------------------|----------|--------------|
metrics-server
とnvidia-driver-installer
の間に表示されています。OK。
Addonの有効化
次は実際にAddonを有効化してみます。
gashirar:~/minikube$ ./out/minikube addons enable nginx 🌟 The 'nginx' addon is enabled
gashirar:~/minikube$ ./out/minikube addons list |-----------------------------|----------|--------------| | ADDON NAME | PROFILE | STATUS | |-----------------------------|----------|--------------| | dashboard | minikube | disabled | | default-storageclass | minikube | enabled ✅ | | efk | minikube | disabled | | freshpod | minikube | disabled | | gvisor | minikube | disabled | | helm-tiller | minikube | disabled | | ingress | minikube | disabled | | ingress-dns | minikube | disabled | | istio | minikube | disabled | | istio-provisioner | minikube | disabled | | logviewer | minikube | disabled | | metallb | minikube | disabled | | metrics-server | minikube | disabled | | nginx | minikube | enabled ✅ | | nvidia-driver-installer | minikube | disabled | | nvidia-gpu-device-plugin | minikube | disabled | | registry | minikube | disabled | | registry-aliases | minikube | disabled | | registry-creds | minikube | disabled | | storage-provisioner | minikube | enabled ✅ | | storage-provisioner-gluster | minikube | disabled | |-----------------------------|----------|--------------|
disabled
からenabled
に変わりました。
kubectl
でResourceも見てみます。
gashirar:~/minikube$ kubectl get deploy -n kube-system NAME READY UP-TO-DATE AVAILABLE AGE coredns 2/2 2 2 2m36s nginx 1/1 1 1 73s
gashirar:~/minikube$ kubectl get service -n kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 3m6s nginx NodePort 10.111.85.216 <none> 80:32355/TCP 103s
Deployment
、Service
ともにクラスタ上に展開されています。
Addonで展開されたNginxにアクセス
最後にNginxにアクセスしてみましょう。
今回はminikube addons open
に対応してみたので、そのコマンドで疎通してみます。
gashirar:~/minikube$ ./out/minikube addons open nginx |-------------|-------|-------------|-----------------------------| | NAMESPACE | NAME | TARGET PORT | URL | |-------------|-------|-------------|-----------------------------| | kube-system | nginx | 80 | http://192.168.99.100:32355 | |-------------|-------|-------------|-----------------------------| 🎉 Opening Kubernetes service kube-system/nginx in default browser...
ちゃんとNginxの画面が表示されました。 おつかれさまでした。
まとめ
YAMLの準備と数行のソース書き換えでAddonの追加が出来ました。
ドキュメントの方では最後に
Once you have tested your addon, click on new pull request to send us your PR!
とあるので、興味がある方はどうぞ。