前回の投稿では、Kubernetes クラスターのサービス検出において、どのように CoreDNS を Kube-DNS の代わりに使用できるのかを示しました。そのブログ記事には、Google Container Engine(GKE)を使用する際に Kube-DNS を置き換えることに関する問題についての脚注があります。同様の問題は、開発者に非常に便利なローカル Kubernetes 環境である minikube でも起こりました。
Kube-DNS を置き換えようとすると、そのサービスを CoreDNS に向けるよう変更してからしばらくすると、変更が元に戻されることがわかります。これは、Minikube にはインストール済みのアドオンの構成状態を定期的に確認するアドオンマネージャーがあり、Kube-DNS がそれらのアドオンの 1 つであるためです。
幸いなことに、これは Minikube では非常に簡単に解決できます。minikube
コマンドを使用すると、Minikube のインストール済みのプラグインを変更できます。したがって、前回のブログ記事で説明されている kubectl apply -f
を実行する前に、kube-dns
アドオンを無効にする必要があります。
$ minikube addons list
- dashboard: enabled
- default-storageclass: enabled
- kube-dns: enabled
- heapster: disabled
- ingress: disabled
- registry-creds: disabled
- addon-manager: enabled
$ minikube addons disable kube-dns
kube-dns was successfully disabled
$ minikube addons list
- heapster: disabled
- ingress: disabled
- registry-creds: disabled
- addon-manager: enabled
- dashboard: enabled
- default-storageclass: enabled
- kube-dns: disabled
次に、coredns.yaml
を適用し、アドオンを無効にしただけでは自動的に削除されない、kube-dns
ReplicationController
を削除できます。
$ kubectl apply -f coredns.yaml
serviceaccount "coredns" configured
clusterrole "system:coredns" configured
clusterrolebinding "system:coredns" configured
configmap "coredns" configured
deployment "coredns" configured
service "kube-dns" configured
$ kubectl get -n kube-system pods
NAME READY STATUS RESTARTS AGE
coredns-980047985-g2748 1/1 Running 1 36m
kube-addon-manager-minikube 1/1 Running 0 9d
kube-dns-v20-qzvr2 3/3 Running 0 1m
kubernetes-dashboard-ks1jp 1/1 Running 0 9d
$ kubectl delete -n kube-system rc kube-dns-v20
replicationcontroller "kube-dns-v20" deleted
$
これで、CoreDNS が起動して実行されており、アドオンマネージャーによって上書きされることはありません。