概要
自宅にて複数のk8sクラスターを管理するため, Open Cluster Managementを導入した記録をまとめる.
hub clusterには既存の自宅k8sクラスターを, managed clusterにはJetson Orin Nano Developer Kit上に構築したk3sを使用する.
Open Cluster Managementのバージョンは, 2026/5/6時点で最新であるv1.2.1を使用する.
背景
現在自宅には放置されているJetson Orin Nano Developer Kitやラズベリーパイが複数台存在する.
これらは将来的にはk8sを導入する予定であるが, 既存の自宅k8sクラスターとはcpuアーキテクチャが異なるため, 通常のノード追加ではない方法で統一的に構成管理をしたい.
Open Cluster Managementというちょうど良さそうなOSSが存在しているため, これを導入し検証する.
Open Cluster Managementとは
マルチクラスターによるオーケストレーションを行うためのプラットフォームツール.
CNCFプロジェクトのSandboxステージに位置している.
以下の2つのコンポーネントによって, kubernetesのコントロールプレーンとkubeletの関係と類似した, ハブ&スポークアーキテクチャをとっている.
- Hub Cluster:複数のクラスターを管理する, コントロールプレーンに当たるクラスター
- klusterlet: 管理対象となるクラスターで稼働するコンポーネント. hubクラスターへpull型で通信し, 自身のクラスターが期待される状態となるように動作する
図は以下より引用
https://open-cluster-management.io/docs/concepts/architecture/
また, アドオンを追加できるようになっており, 機能拡張が簡単にできるようになっている.
構成
- hub cluster: 自宅k8sクラスター(on Proxmox)
- CPUアーキテクチャ: x86_64系
- その他: kubeadmにて構築
- manged cluster: k3s (on Jetson Orin Nano Developer Kit)
- CPUアーキテクチャ: arm64系
以降、hub clusterのことをhubクラスター, managed clusterのことをmanagedクラスターと表記する.
準備
前提条件
Jetson Orin Nano Developer Kitへのk3s導入
managedクラスターとするため, k3sをJetson Orin Nano Develoer kit(以下, Jetsonと呼称する)へと導入する.
JetsonへのOSのインストールは公式ガイドに従い完了しているものとする.
以下コマンドにてk3sをインストールする.
curl -sfL https://get.k3s.io | sh -s - --disable servicelb --write-kubeconfig-mode 644
Nvidia GPU系の設定については, 今回の構築対象外とする.
補足: disable servicelbの理由について
nvidiaの以下のフォーラムの回答によると,
Kubernetes on Jetson Orin Nanos
Currently, we are not able to use iptables-nft on JetPack 6 due to some kernel configuration issues.
But it’s expected to work if we can fallback to the iptables-legacy.
との文言が見られる. 現在のJetPack 6ではiptables-nftが動作しないため, iptables-legacyを使用することとなっているそう.
ただし, それでも期待どおりの動作はしておらず, 最終的に本フォーラムではservicelbを無効化する方向で回避している.
今回の構築でも同様の問題が発生したため, こちらの対応に倣うこととする.
導入手順
getting startedを参考に, clusteradmを使用して導入してみる.
clusteradmのインストール
hub/managed共通で, 以下のコマンドを実行する.
curl -L https://raw.githubusercontent.com/open-cluster-management-io/clusteradm/main/install.sh | bash
hubクラスターの構築
hubクラスターを構築するため, hubクラスターへのkubectlコンフィグが有効な状態でclusteradm initを実行する.
出力
$ clusteradm init
[WARNING HubApiServer check]: Hub Api Server is a domain name, maybe you should set HostAlias in klusterlet
Preflight check: HubApiServer check Passed with 1 warnings and 0 errors
Preflight check: cluster-info check Passed with 0 warnings and 0 errors
The multicluster hub control plane has been initialized successfully!
You can now register cluster(s) to the hub control plane. Log onto those cluster(s) and run the following command:
clusteradm join --hub-token eyJhbGciOiJSUzI1NiIsImtpZCI6IlZLd2x0QmxpYUo0WXV2V2k2S2dHaWkwclZRWFRzZ1lRaGJLak82ZHJPZUEifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzc4MDgxMzQ1LCJpYXQiOjE3NzgwNzc3NDUsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiM2ZhYTM5ZjctNzQ4Yy00YTU5LWJkNjctMDE5ZWQwOTgzNDMwIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJvcGVuLWNsdXN0ZXItbWFuYWdlbWVudCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZ2VudC1yZWdpc3RyYXRpb24tYm9vdHN0cmFwIiwidWlkIjoiNzEzMWVhNzctNjllYi00NTY4LWJlY2YtMDEwZDhkYjc0MjZmIn19LCJuYmYiOjE3NzgwNzc3NDUsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpvcGVuLWNsdXN0ZXItbWFuYWdlbWVudDphZ2VudC1yZWdpc3RyYXRpb24tYm9vdHN0cmFwIn0.15ZUrT_G8irjCu7AdE1VSK2fhQMp05XkYiYfCkpyicQpGFh80crKAEtO37u7pPceXisW99Fca13qTT3cb4Cv8c9CDzv-85Qolm9nlr_2mkCN5dpEVcFXoG5u5VN1HeE6KcCrdADgOKnXuQCSWmBd_5rLMDPqB-V-v57zky0HjqtDv-JEuM84HTB6eNe08ZkNgENnqyx9wFamBRKB_cHX8_5vDQ6PgFwdAKB2-dhUrAnCGOK6cU0UYKiHCm4clT2l0D4S3S8POJoPsO0DTOW35WfevFIr14LS_EotAshunDYdEBtJtSkWnOA7R0B-BKHj5hWZf-o8KThWlij9_EwbfQ --hub-apiserver https://k8sapiserver.cluster.orenet.net:6443 --cluster-name <cluster_name>
Replace <cluster_name> with a cluster name of your choice. For example, cluster1.
今回の環境では[WARNING HubApiServer check]: Hub Api Server is a domain name, maybe you should set HostAlias in klusterlet warningが出ているが, hubクラスターのkube-apiserverに対してDNSでホスト名を割り振っており, managedクラスター側からも同名で解決できるため, 無視してよい.
この時点で, 以下のnamespaceが作成されている
- open-cluster-management
- open-cluster-management-hub
各Namespace内のpod
$ kubectl get pod -n open-cluster-management
NAME READY STATUS RESTARTS AGE
cluster-manager-85649f7-5xqws 1/1 Running 0 51m
cluster-manager-85649f7-ljhfr 1/1 Running 0 51m
cluster-manager-85649f7-z8gnn 1/1 Running 0 51m
kubectl get pod -n open-cluster-management-hub
NAME READY STATUS RESTARTS AGE
cluster-manager-addon-manager-controller-854575bdbc-54rp6 1/1 Running 0 51m
cluster-manager-addon-webhook-6c6d558d49-dhpsm 1/1 Running 0 51m
cluster-manager-placement-controller-cc66c478b-tv4nl 1/1 Running 0 51m
cluster-manager-registration-controller-5c856f966d-w46j5 1/1 Running 0 51m
cluster-manager-registration-webhook-b869d896b-pvc4w 1/1 Running 0 51m
cluster-manager-work-webhook-6ccc65647c-z2cdr 1/1 Running 0 51m
ちなみに, マニフェストとして直接インストールされるものは, clusteradm init --dry-runを実行することで確認できる.
マニフェストをざっと眺めた感じでは, 直接作られるのはopen-cluster-managementのnamespaceの方で, open-cluster-management-hubの方はcluster-managerから間接的に作成されているように見える.
init時点でのカスタムリソースの生成状況
$ kubectl get crd | grep 'open-cluster-management' | awk '{print $1}' | while read crd; do echo "# ${crd}"; kubectl get $crd -A ; echo ""; done
# addondeploymentconfigs.addon.open-cluster-management.io
No resources found
# addonplacementscores.cluster.open-cluster-management.io
No resources found
# addontemplates.addon.open-cluster-management.io
No resources found
# clustermanagementaddons.addon.open-cluster-management.io
No resources found
# clustermanagers.operator.open-cluster-management.io
NAME AGE
cluster-manager 94m
# managedclusteraddons.addon.open-cluster-management.io
No resources found
# managedclusters.cluster.open-cluster-management.io
No resources found
# managedclustersetbindings.cluster.open-cluster-management.io
No resources found
# managedclustersets.cluster.open-cluster-management.io
NAME EMPTY AGE
default True 94m
global True 94m
# manifestworkreplicasets.work.open-cluster-management.io
No resources found
# manifestworks.work.open-cluster-management.io
No resources found
# placementdecisions.cluster.open-cluster-management.io
No resources found
# placements.cluster.open-cluster-management.io
No resources found
managedクラスターの追加
k3sの場合, kubeconfigの場所が通常の$HOME/.kube/configではなく'/etc/rancher/k3s/k3s.yaml'に存在しているため, clusteradm実行時に読み込めるように環境変数とする.
$ export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
hubクラスターでのclusteradm init時に出力されたコマンドを, managedクラスター側で実行する(managedクラスター名はjetson1とする).
$ clusteradm join --hub-token eyJhbGciOiJSUzI1NiIsImtpZCI6IlZLd2x0QmxpYUo0WXV2V2k2S2dHaWkwclZRWFRzZ1lRaGJLak82ZHJPZUEifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzc4MDg3MTExLCJpYXQiOjE3NzgwODM1MTEsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiOTJlOWQzZTctYjBkNy00ZmNkLWI0NDYtMjNiNTliZTg2NWExIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJvcGVuLWNsdXN0ZXItbWFuYWdlbWVudCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZ2VudC1yZWdpc3RyYXRpb24tYm9vdHN0cmFwIiwidWlkIjoiNzEzMWVhNzctNjllYi00NTY4LWJlY2YtMDEwZDhkYjc0MjZmIn19LCJuYmYiOjE3NzgwODM1MTEsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpvcGVuLWNsdXN0ZXItbWFuYWdlbWVudDphZ2VudC1yZWdpc3RyYXRpb24tYm9vdHN0cmFwIn0.T323h_R8WJUhxViBb-HvatPZAzSKwoMjBnWP10DH1_q6MbkcH-OW6Ff7Fu_RdF-X8jxehR75ix8R8gVkjwyDVILpmpFLSALe5Isrr8OElVPhjt342Ay3BpIX9FHJdKgZNjG86ALsrbvbJQoIk3DACA0YWUzX-uVj0snAwUzlbAszbBr2f-jEzg3eVrSxdXZLEc8Rc7FJ_DgSFjVQ5xn7QYPffMaCxvb3wIMrQMLnEIeYngWkPbOL_NhgF1ASi1WsNOechl0aiLBBw_gjg51SdRcmm8H6AgoARRmJOCfEYLVJHGYVPdZ_t3EoFR_qHKoJz9kdlK-Ovi5TcMN70T1MXA --hub-apiserver https://k8sapiserver.cluster.orenet.net:6443 --cluster-name jetson1
W0507 01:25:45.609246 11151 exec.go:249] Failed looking for cluster endpoint for the registering klusterlet: configmaps "cluster-info" not found
Preflight check: HubKubeconfig check Passed with 0 warnings and 0 errors
Preflight check: DeployMode Check Passed with 0 warnings and 0 errors
Preflight check: ClusterName Check Passed with 0 warnings and 0 errors
Please log onto the hub cluster and run the following command:
clusteradm accept --clusters jetson1
This is not needed when the ManagedClusterAutoApproval feature is enabled
hubクラスター側でのcsr承認
hubクラスター側で, csrを確認する.
$ kubectl get csr
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
jetson1-rg294 3m20s kubernetes.io/kube-apiserver-client system:serviceaccount:open-cluster-management:agent-registration-bootstrap 365d Pending
bootstrap用のagentによってリクエストされたcsrがPendingとなっていることが確認できる.
csrを署名するだけであればkubectl certificate approveでも実施できるが, ここは公式に従って以下のコマンドを実施する.
実行結果
$ clusteradm accept --clusters jetson1
Starting approve csrs for the cluster jetson1
CSR jetson1-rg294 approved
hubAcceptsClient already set for managed cluster jetson1
Your managed cluster jetson1 has joined the Hub successfully. Visit https://open-cluster-management.io/scenarios or https://github.com/open-cluster-management-io/OCM/tree/main/solutions for next steps.
managedクラスターのapprove後のpod状態
kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-c4dbffb5f-5xrf8 1/1 Running 0 170m
kube-system helm-install-traefik-4wzzs 0/1 Completed 2 170m
kube-system helm-install-traefik-crd-dfnbw 0/1 Completed 0 170m
kube-system local-path-provisioner-5c4dc5d66d-57lk2 1/1 Running 0 170m
kube-system metrics-server-786d997795-vzsvz 1/1 Running 0 170m
kube-system traefik-9bcdbbd9-4vhdf 1/1 Running 0 169m
open-cluster-management-agent klusterlet-registration-agent-8499bdc786-xnfv4 1/1 Running 0 21m
open-cluster-management-agent klusterlet-work-agent-68fb7bc644-2xvmk 1/1 Running 0 49s
open-cluster-management klusterlet-6fc7fff4dd-5xnzp 1/1 Running 0 24m
こちらも, clusteradm joinコマンドに--dry-runオプションをつけて出力させたマニフェストを確認したところ, カスタムリソースであるklusterletによってklusterlet-xxx-agentはデプロイされているように見える.
hubクラスターの状態
managedクラスターと同名のjetson1namespaceができている(この時点では中身はまだ何もない).
$ kubectl get ns jetson1
NAME STATUS AGE
jetson1 Active 33m
動作確認
clusteradm getコマンドで構成を確認してみる.
以下, 特にことわりが無い場合, hubクラスターからの実行結果である.
addon: 初期状態では何もない.
$ clusteradm get addon
<ClusterManagementAddon>
clusterset: デフォルトでdefalutとglobalが作成されるようになっており, 今回追加したjetson1はその両方に所属している.
ドキュメント(ManagedClusterSet)によると, RBAC的な観点で複数クラスターを束ねる概念らしい.
$ clusteradm get clustersets
<ManagedClusterSet>
└── <default>
│ ├── <BoundNamespace>
│ ├── <Status> 1 ManagedClusters selected
│ ├── <Clusters> [jetson1]
│ ├── <ManagedNamespaces> []
└── <global>
└── <BoundNamespace>
└── <Status> 1 ManagedClusters selected
└── <Clusters> [jetson1]
└── <ManagedNamespaces> []
clusters: managedクラスターの情報が表示されている. クラスターのバージョンやキャパシティ等がわかる.
$ clusteradm get clusters
<ManagedCluster>
└── <jetson1>
└── <KubernetesVersion> v1.35.4+k3s1
└── <Capacity>
│ ├── <Cpu> 6
│ ├── <Memory> 7802780Ki
└── <Accepted> true
└── <Available> True
└── <ClusterSet> default
hub-info: hubクラスターにインストールされているオペレーター, 各リソースのコントローラー, CRDのバージョンがわかる.
$ clusteradm get hub-info
Registration Operator:
Controller: (3/3) quay.io/open-cluster-management/registration-operator:v1.2.1
CustomResourceDefinition:
(installed) clustermanagers.operator.open-cluster-management.io [*v1]
Components:
AddOn Manager:
Controller: (1/1) quay.io/open-cluster-management/addon-manager:v1.2.1
Registration:
Controller: (1/1) quay.io/open-cluster-management/registration:v1.2.1
Webhook: (1/1) quay.io/open-cluster-management/registration:v1.2.1
Work:
Webhook: (1/1) quay.io/open-cluster-management/work:v1.2.1
Placement:
Controller: (1/1) quay.io/open-cluster-management/placement:v1.2.1
CustomResourceDefinition:
(installed) addontemplates.addon.open-cluster-management.io [*v1alpha1]
(installed) clustermanagementaddons.addon.open-cluster-management.io [*v1alpha1|v1beta1]
(installed) managedclusteraddons.addon.open-cluster-management.io [*v1alpha1|v1beta1]
(installed) managedclusters.cluster.open-cluster-management.io [*v1]
(installed) managedclustersets.cluster.open-cluster-management.io [*v1beta2]
(installed) manifestworks.work.open-cluster-management.io [*v1]
(installed) managedclustersetbindings.cluster.open-cluster-management.io [*v1beta2]
(installed) manifestworkreplicasets.work.open-cluster-management.io [*v1alpha1]
(installed) placementdecisions.cluster.open-cluster-management.io [*v1beta1]
(installed) placements.cluster.open-cluster-management.io [*v1beta1]
(installed) addondeploymentconfigs.addon.open-cluster-management.io [*v1alpha1|v1beta1]
(installed) addonplacementscores.cluster.open-cluster-management.io [*v1alpha1]
klusterlet-info: hubクラスターで実行したところ, klusterletが無いためエラー.
$ clusteradm get klusterlet-info
Error: managed cluster oriented command should not running against non-managed cluster
managedクラスター側でも実行してみたが, 別のエラーが発生.
$ clusteradm get klusterlet-info
Error: failed to list GroupVersion: cluster.open-cluster-management.io/v1alpha1
kubectl getだと取得できるので一旦無視.
$ kubectl get klusterlet
NAME AGE
klusterlet 2d2h
placements: 初期状態では何もない. ドキュメント(Placement)を眺めた感じでは, 前述のclustersetとは異なり, スケジューリング上で制御をかけるためにグループ化を行う概念らしい.
$ clusteradm get placements
<Placement>
token: joinするためのトークンと, join用のコマンドが出力される.
$ clusteradm get token
token=eyJhbGciOiJSUzI1NiIsImtpZCI6IlZLd2x0QmxpYUo0WXV2V2k2S2dHaWkwclZRWFRzZ1lRaGJLak82ZHJPZUEifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzc4MjY3NzIwLCJpYXQiOjE3NzgyNjQxMjAsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiZTNiY2E5MzMtODY4Ni00NTkzLWI0N2UtMmU5Yjc3OTM4YmI2Iiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJvcGVuLWNsdXN0ZXItbWFuYWdlbWVudCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZ2VudC1yZWdpc3RyYXRpb24tYm9vdHN0cmFwIiwidWlkIjoiNzEzMWVhNzctNjllYi00NTY4LWJlY2YtMDEwZDhkYjc0MjZmIn19LCJuYmYiOjE3NzgyNjQxMjAsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpvcGVuLWNsdXN0ZXItbWFuYWdlbWVudDphZ2VudC1yZWdpc3RyYXRpb24tYm9vdHN0cmFwIn0.ATdEJr7M_5olOv32Y0sDH8qQS7k7xY92UMI58aeKU86p6lQfLCZwfL3Noqjtq4kfNdqGFNzpgijzb2BxFvVOGcIHA5knPFkicSGO-rACllo2-cTiCmDRtln0b9B948m8jnI3wiAiV7V3DkVqRoYVzseiKHcPf3KMfceyn4ClgHhP4ccLTkfjWXPetq5B4RSktc87SNB3pfoTI6r3A5Yh1rN97fYFSIc8UWqaElwzr_6LiPPDJh-y_2XTDFyHuQ0j0rT1WP1gGUjXPq7ZiCpkMtHeu_Ho9Bh4LTvOSov1SQDfNlwZxLtJVYZgCEHkJb9zkFhms898ocCugx_8GKbkZQ
please log on spoke and run:
clusteradm join --hub-token eyJhbGciOiJSUzI1NiIsImtpZCI6IlZLd2x0QmxpYUo0WXV2V2k2S2dHaWkwclZRWFRzZ1lRaGJLak82ZHJPZUEifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzc4MjY3NzIwLCJpYXQiOjE3NzgyNjQxMjAsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiZTNiY2E5MzMtODY4Ni00NTkzLWI0N2UtMmU5Yjc3OTM4YmI2Iiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJvcGVuLWNsdXN0ZXItbWFuYWdlbWVudCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZ2VudC1yZWdpc3RyYXRpb24tYm9vdHN0cmFwIiwidWlkIjoiNzEzMWVhNzctNjllYi00NTY4LWJlY2YtMDEwZDhkYjc0MjZmIn19LCJuYmYiOjE3NzgyNjQxMjAsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpvcGVuLWNsdXN0ZXItbWFuYWdlbWVudDphZ2VudC1yZWdpc3RyYXRpb24tYm9vdHN0cmFwIn0.ATdEJr7M_5olOv32Y0sDH8qQS7k7xY92UMI58aeKU86p6lQfLCZwfL3Noqjtq4kfNdqGFNzpgijzb2BxFvVOGcIHA5knPFkicSGO-rACllo2-cTiCmDRtln0b9B948m8jnI3wiAiV7V3DkVqRoYVzseiKHcPf3KMfceyn4ClgHhP4ccLTkfjWXPetq5B4RSktc87SNB3pfoTI6r3A5Yh1rN97fYFSIc8UWqaElwzr_6LiPPDJh-y_2XTDFyHuQ0j0rT1WP1gGUjXPq7ZiCpkMtHeu_Ho9Bh4LTvOSov1SQDfNlwZxLtJVYZgCEHkJb9zkFhms898ocCugx_8GKbkZQ --hub-apiserver https://k8sapiserver.cluster.orenet.net:6443 --cluster-name <cluster_name>
works: マネージドクラスターにデプロイするためのマニフェストを内包したカスタムリソース. getする際はクラスターを指定する必要あり.
$ clusteradm get works --cluster jetson1
<ManifestWork>
workの追加
せっかくなので, manifestworkを経由してmanagedクラスターにリソースをデプロイしてみる.
以下マニフェストを用意する(namespace + deployment)
---
apiVersion: v1
kind: Namespace
metadata:
name: test-ns
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
namespace: test-ns
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx:1.29.8-alpine3.23
hubクラスターに対して, 以下を実行する. ちなみに, dry-runオプションが機能しておらず, 素通りした.
(dry-runで通常のマニフェストからmanifestworksのマニフェストを吐き出してくれることを期待したが, そうはなってくれないらしい)
$ clusteradm create work test-deploy -f test.yaml --cluster jetson1
create work test-deploy in cluster jetson1
apply状況確認したところ, deploymentがデプロイに失敗していた.
$ clusteradm get works --cluster jetson1
<ManifestWork>
└── <jetson1>
└── <test-deploy>
└── <Number of Manifests> 2
└── <Applied> True
└── <Available> True
└── <Resources>
└── <deployments>
│ ├── <test-ns/nginx> applied
└── <namespaces>
└── <test-ns> applied
managedクラスター上でも確認 -> ちゃんとデプロイされていた.
$ kubectl get deployments.apps -n test-ns
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 45s
まとめ
今回は, Open Cluster Managementを自宅k8sとjetson+k3sの組み合わせに対してデプロイし, hubクラスターから子クラスターへリソースのデプロイを行った.
次回は, アドオンの検証を行う.
