このAWSソリューション実装を理解するために、先ずそもそもKubeFedのクイックスタートを試してみたメモ。
クイックスタート
リポジトリをクローンする。
git clone https://github.com/kubernetes-sigs/kubefed.git cd kubefed/
Kindでクラスターを起動する。
$ kind create cluster Creating cluster "kind" ... ✓ Ensuring node image (kindest/node:v1.20.2) 🖼 ✓ Preparing nodes 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 Set kubectl context to "kind-kind" You can now use your cluster with: kubectl cluster-info --context kind-kind Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂
ノードを確認する。
$ k get node NAME STATUS ROLES AGE VERSION kind-control-plane Ready control-plane,master 3m47s v1.20.2
kubefedをデプロイする。
make deploy.kind
なかなかコマンドが通らない。
$ make deploy.kind (省略) Release "kubefed" does not exist. Installing it now. NAME: kubefed LAST DEPLOYED: Fri Mar 12 18:10:49 2021 NAMESPACE: kube-federation-system STATUS: deployed REVISION: 1 TEST SUITE: None I0312 18:11:13.086691 35295 join.go:148] Defaulting cluster context to joining cluster name kind-kind I0312 18:11:13.086823 35295 join.go:160] Args and flags: name kind-kind, host: kind-kind, host-system-namespace: kube-federation-system, kubeconfig: , cluster-context: kind-kind, secret-name: , dry-run: false I0312 18:11:13.177397 35295 join.go:241] Performing preflight checks. I0312 18:11:13.182509 35295 join.go:247] Creating kube-federation-system namespace in joining cluster I0312 18:11:13.188251 35295 join.go:390] Already existing kube-federation-system namespace I0312 18:11:13.188296 35295 join.go:254] Created kube-federation-system namespace in joining cluster I0312 18:11:13.188313 35295 join.go:412] Creating service account in joining cluster: kind-kind I0312 18:11:13.200502 35295 join.go:422] Created service account: kind-kind-kind-kind in joining cluster: kind-kind I0312 18:11:13.200522 35295 join.go:449] Creating cluster role and binding for service account: kind-kind-kind-kind in joining cluster: kind-kind I0312 18:11:13.253592 35295 join.go:458] Created cluster role and binding for service account: kind-kind-kind-kind in joining cluster: kind-kind I0312 18:11:13.253633 35295 join.go:818] Creating cluster credentials secret in host cluster I0312 18:11:13.272069 35295 join.go:846] Using secret named: kind-kind-kind-kind-token-c6zft I0312 18:11:13.293713 35295 join.go:891] Created secret in host cluster named: kind-kind-p9zzx I0312 18:11:13.384075 35295 join.go:286] Created federated cluster resource
Helmチャートでkube-federation-system
に何かがインストールされている。
$ helm ls -A NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION kubefed kube-federation-system 1 2021-03-12 18:10:49.627911 +0900 JST deployed kubefed-0.0.3
$ k get pod -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-federation-system kubefed-admission-webhook-b559b6d8-vjhgb 1/1 Running 0 4m45s kube-federation-system kubefed-controller-manager-79768548bf-9nnxl 1/1 Running 0 4m25s kube-federation-system kubefed-controller-manager-79768548bf-vbjgx 1/1 Running 0 4m22s kube-system coredns-74ff55c5b-5pzbn 1/1 Running 2 63m kube-system coredns-74ff55c5b-6mc2g 1/1 Running 2 63m kube-system etcd-kind-control-plane 1/1 Running 2 63m kube-system kindnet-69p92 1/1 Running 2 63m kube-system kube-apiserver-kind-control-plane 1/1 Running 2 63m kube-system kube-controller-manager-kind-control-plane 1/1 Running 2 63m kube-system kube-proxy-5sss8 1/1 Running 2 63m kube-system kube-scheduler-kind-control-plane 1/1 Running 2 63m local-path-storage local-path-provisioner-78776bfc44-h25s8 1/1 Running 4 63m
この状態で、クラスター自身がフェデレーションに登録されているがREADYになっていない。
$ kubectl -n kube-federation-system get kubefedcluster NAME AGE READY kind-kind 18m
macOSで、APIエンドポイントの修正スクリプトが上手く機能しなかったので手動で修正する。IPを確認する。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ba641073044b kindest/node:v1.20.2 "/usr/local/bin/entr…" 2 hours ago Up About an hour 127.0.0.1:61763->6443/tcp kind-control-plane $ docker inspect ba641073044b | jq -r '.[].NetworkSettings.Networks[].IPAddress' 172.18.0.2
Editする。
kubectl -n kube-federation-system edit kubefedcluster kind-kind
以下の部分を、
spec: apiEndpoint: https://127.0.0.1:61763
以下に直す。
spec: apiEndpoint: https://172.18.0.2:6443
これでREADYになった。
$ kubectl -n kube-federation-system get kubefedcluster NAME AGE READY kind-kind 36m True
フェデレートされるネームスペースを作成する。
$ kubectl create ns federate-me namespace/federate-me created
ネームスーペースとそのリソースをフェデレートするようにkubefedに伝える。
$ ./bin/kubefedctl federate ns federate-me I0312 18:35:03.302374 38883 federate.go:472] Resource to federate is a namespace. Given namespace will itself be the container for the federated namespace I0312 18:35:03.308846 38883 federate.go:501] Successfully created FederatedNamespace "federate-me/federate-me" from Namespace
フェデレートされるConfigMapを作成する。
$ kubectl -n federate-me create cm my-cm configmap/my-cm created
ConfigMapをフェデレートするようにkubefedに伝える。
$ ./bin/kubefedctl -n federate-me federate configmap my-cm I0312 18:37:13.120185 39381 federate.go:501] Successfully created FederatedConfigMap "federate-me/my-cm" from ConfigMap
リソースを確認する。
$ kubectl -n federate-me get federatedconfigmap NAME AGE my-cm 12m $ kubectl -n federate-me get federatednamespace NAME AGE federate-me 15m
クイックスタートを通したものの、まだよく意味がわからない。