.
├── README.md
├── autoscaler
│ ├── scale.yaml
│ └── workload
│ └── nginx.yaml
├── config
│ └── starship.toml
└── clusterapi
├── kubeadm.yaml
├── ocne.yaml
└── oke.yamlOKEのプロビジョニングについては、こちらの手順をベースに実施してください。 ただし、Worker Nodeのスペックを以下に設定してください。
- Node数: 3
- OCPU: 2
- Memory: 8
ここではv1.5.2をインストールします。
curl -L https://github.com/kubernetes-sigs/cluster-api/releases/download/v1.5.2/clusterctl-linux-amd64 -o clusterctl実行権限とパスを変更します。
sudo install -o root -g root -m 0755 clusterctl /usr/local/bin/clusterctlこれでインストールは完了です。
以下のコマンドが実行できればOKです。
$ clusterctl version
clusterctl version: &version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"3290c5a28ed28c1909713e59e5d481a3e8f68a90", GitTreeState:"clean", BuildDate:"2023-09-26T15:50:41Z", GoVersion:"go1.20.8", Compiler:"gc", Platform:"linux/amd64"}Cluster APIをインストールします。
今回は、OCI上でのKubeadmを利用したクラスタ、OKEクラスタ、Oracle Cloud Native Environmentクラスタを構築するため、KubeadmのControl Plane APIおよびBootstrap API、Cluster API for OCI、Cluster API for OCNEをインストールします。
clusterctl init --infrastructure oci --bootstrap ocne --control-plane ocne --bootstrap kubeadm --control-plane kubeadmこれでManagement Clusterの構築は完了です。
Management ClusterであるOKEから各種クラスタをプロビジョニングできるようにポリシーを設定します。
こちらを参考に以下の動的グループを作成してください。 '
動的グループ名はclusteraapi-dyn-groupとします。
instance.compartment.id = '<コンパートメントOCID>'こちらを参考に以下のポリシーを作成してください。
ポリシーはclusterapi_policyとします。
Allow dynamic-group clusteraapi-dyn-group to manage instance-family in compartment tmm-evaluation
Allow dynamic-group clusteraapi-dyn-group to manage virtual-network-family in compartment tmm-evaluation
Allow dynamic-group clusteraapi-dyn-group to manage load-balancers in compartment tmm-evaluation
Allow dynamic-group clusteraapi-dyn-group to use subnets in compartment tmm-evaluation
Allow dynamic-group clusteraapi-dyn-group to inspect compartments in compartment tmm-evaluation
Allow dynamic-group clusteraapi-dyn-group to use vnics in compartment tmm-evaluation
Allow dynamic-group clusteraapi-dyn-group to use network-security-groups in compartment tmm-evaluation
Allow dynamic-group clusteraapi-dyn-group to use private-ips in compartment tmm-evaluation
Allow dynamic-group clusteraapi-dyn-group to manage public-ips in compartment tmm-evaluation
Allow dynamic-group clusteraapi-dyn-group to use private-ips in compartment tmm-evaluation
Allow dynamic-group clusteraapi-dyn-group to manage cluster-family in compartment tmm-evaluationここでは、この後作成するKubeadmクラスタで利用するWorker Nodeのカスタムイメージを作成します。
カスタムイメージはPackerというツールを利用して実施します。
手順はこちらを参考に実施してください。
とりあえず試したい方は、こちらでカスタムイメージを公開しているので、ご自身の環境にインポートしてください。
インポートの方法はこちらを参考に実施してください。
ここでは、この後で利用する環境変数を設定していきます。
こちらを参考に動的グループを作成します。
env/envファイルのCHANGE ME!!項目を埋めます。
export OCI_REGION="CHANGE ME!!"
export OCI_COMPARTMENT_ID="CHANGE ME!!"
export OCI_MANAGED_NODE_IMAGE_ID="CHANGE ME!!"
export OCI_OCNE_IMAGE="CHANGE ME!!"
export OCI_SSH_KEY="CHANGE ME!!"こちらのページでご自身が利用されるリージョン識別子を取得してください。
OCI_COMPARTMENT_IDはこちらを参考に取得してください。
Kubeadmクラスタ用のカスタムイメージの作成でインポートしたカスタムイメージのOCIDをコンソールから取得してください。
こちらからご自身が利用されるリージョンに紐づくイメージOCIDを取得してください。
Worker NodeにSSHログインするためのSSHキーを設定してください。
こちらは必須です。
例
OCI_SSH_KEY=ssh-rsa AAAAB3NzaC1ycxxxxxxxxxxxxmeGV4+L6j8bB最後に環境変数をエクスポートします。
source env/env.shまずは、OCI Compute上にKubeadmを利用したクラスタを構築します。
以下のコマンドを実行だけで構築できます。
clusterctl generate cluster oke-cluster --from ochacafe-cluster-api/clusterapi/oke.yaml |kubectl apply -f - --server-side以下のコマンドで状況を確認できます。
clusterctl describe cluster oke-clusterプロビジョニング完了までには10分ほどかかります。
プロビジョニングしたクラスタのKubeconfigを取得する場合は以下のコマンドを実行します。
今回のManifestでは、ClusterResourceSetを利用してContainer Network InteerfaceとしてCalico、OCIのCloud Controller Managerも一緒にデプロイしています。
clusterctl get kuebconfig kubeadm-cluster > kubeadm.configkubectl get node --kubeconfig kubeadm-cluster次に、OCI Compute上にOCNEを利用したクラスタを構築します。
以下のコマンドを実行だけで構築できます。
clusterctl generate cluster ocne-cluster --from ochacafe-cluster-api/clusterapi/ocne.yaml |kubectl apply -f - --server-side以下のコマンドで状況を確認できます。
clusterctl describe cluster ocne-clusterプロビジョニングしたクラスタのKubeconfigを取得する場合は以下のコマンドを実行します。
今回のManifestでは、ClusterResourceSetを利用してContainer Network InteerfaceとしてCalico、OCIのCloud Controller Managerも一緒にデプロイしています。
clusterctl get kuebconfig ocne-cluster > ocne.configkubectl get node --kubeconfig ocne-cluster次に、OKEクラスタを構築します。
以下のコマンドを実行だけで構築できます。
clusterctl generate cluster oke-cluster --from ochacafe-cluster-api/clusterapi/oke.yaml |kubectl apply -f -以下のコマンドで状況を確認できます。
clusterctl describe cluster oke-clusterプロビジョニング完了までには10分ほどかかります。 プロビジョニングしたクラスタのKubeconfigを取得する場合は以下のコマンドを実行します。
clusterctl get kuebconfig ocne-cluster > oke.configkubectl get node --kubeconfig oke-clusterここでは、Cluster APIのヘルスチェックの動作確認をします。
今回はKubeadmクラスタのWorker Nodeに対してヘルスチェックの設定をしています。(もちろんControl Planeに対して設定することも可能です)
OCIコンソール画面でCompute一覧を開きます。
先ほど作成したKubeadmクラスタのWorker Nodeインスタンス(kubeadm-cluster-md-0-xxxx)を停止させます。
ただちに電源を切断することで、インスタンスを強制停止します。にチェックを入れて、インスタンスを強制停止をクリックします。
インスタンスが停止されます。
今回はWorker NodeのステータスがReadyでない状態が1分以上継続するとタイムアウトする設定をしているので、1分ほど経過するとインスタンスが自動的に終了します。
インスタンスが終了後に新たにWorker Nodeインスタンスがプロビジョニングされます。
これにより、自動的にクラスタが復旧します。
ここでは、Cluster APIを利用したオートスケールを確認します。
まずは、Management ClusterがWorkload Clusterの状態を確認できるようにKubeconfigをSecretとして登録します。
今回は、Kubeadmクラスタを利用します。
登録するKubeconfigはKubeadmクラスタ作成時に取得したものです。
後ほどCluster Autoscaler用のDeploymentをkube-systemネームスペースにデプロイするため、kube-systemに対して登録します。
kubectl create secret generic kubeconfig --from-file=kubeconfig=kubeadm.config -n kube-systemCluster Autoscaler用のDeploymentをデプロイします。
kubectl apply -f autoscaler/scale.yamlCluster Autoscalerを行うためにNGINXのPodをKubeadmクラスタにデプロイします。
kubectl apply -f autoscaler/workload/nginx.yaml --kubeconfig=kubeadm.configデプロイするとリソース不足により、PendingのPodが発生します。
$ kubectl get pods --kubeconfig=kubeadm.config
NAME READY STATUS RESTARTS AGE
nginx-7bc465bf6f-6v2xz 0/1 Pending 0 25s
nginx-7bc465bf6f-bpk6z 1/1 Running 0 25s
nginx-7bc465bf6f-rbj6t 1/1 Running 0 25s
nginx-7bc465bf6f-t28sl 0/1 Pending 0 25s
nginx-7bc465bf6f-vjd66 1/1 Running 0 25sしばらくすると新たにWorker Nodeが起動してくるのが確認できます。





