0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Open Cluster Managementを導入してみた

0
Last updated at Posted at 2026-05-08

概要

自宅にて複数の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型で通信し, 自身のクラスターが期待される状態となるように動作する

image.png

図は以下より引用
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: デフォルトでdefalutglobalが作成されるようになっており, 今回追加した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)

test.yaml
---
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クラスターから子クラスターへリソースのデプロイを行った.

次回は, アドオンの検証を行う.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?