Coder Social home page Coder Social logo

ycyaoxdu / registration Goto Github PK

View Code? Open in Web Editor NEW

This project forked from open-cluster-management-io/registration

0.0 1.0 0.0 21.46 MB

hub / spoke registration controllers

License: Apache License 2.0

Go 98.74% Makefile 0.93% Dockerfile 0.05% Shell 0.27%

registration's Introduction

Note: Do not edit any file in this repo.

The component is moved to the ocm as this task of consolidating code is going, please follow the CONTRIBUTING Guidence in the ocm to contribute.

Cluster Registration

Contains controllers that support:

Quickstart

Prepare

  1. Clone this repo:
git clone https://github.com/open-cluster-management-io/registration.git && cd registration
  1. Prepare a kind cluster, like:
kind create cluster # if you want to deploy on two clusters, you can exec `kind create cluster --name=<cluster-name> to prepare another cluster`

Note: The Kubernetes cluster needs v1.19 or greater

Deploy

Deploy on one single cluster

  1. Export your kind cluster config, like:
export KUBECONFIG=$HOME/.kube/config
  1. Override the docker image (optional)
export IMAGE_NAME=<your_own_image_name> # export IMAGE_NAME=quay.io/open-cluster-management/registration:latest
  1. Deploy the hub control plane and the registration agent:
make deploy

Deploy on two clusters

  1. Set environment variables.
  • Hub and managed cluster share a kubeconfig file
    export KUBECONFIG=</path/to/kubeconfig>
    export HUB_KUBECONFIG_CONTEXT=<hub-context-name>
    export SPOKE_KUBECONFIG_CONTEXT=<spoke-context-name>
  • Hub and managed cluster use different kubeconfig files.
    export HUB_KUBECONFIG=</path/to/hub_cluster/kubeconfig>
    export SPOKE_KUBECONFIG=</path/to/managed_cluster/kubeconfig>
  1. Set cluster ip if you are deploying on KIND clusters.
export CLUSTER_IP=<host_name/ip_address>:<port> # export CLUSTER_IP=hub-control-plane:6443

If you are not using KIND, you can get the above information with command below.

kubectl --kubeconfig </path/to/hub_cluster/kubeconfig> -n kube-public get configmap cluster-info -o yaml
  1. Override the docker image (optional)
export IMAGE_NAME=<your_own_image_name> # export IMAGE_NAME=quay.io/open-cluster-management/registration:latest
  1. Deploy the hub control plane and the registration agent
make deploy

Approve your cluster

You now have a cluster with registration up and running. The cluster has been registered to the hub.

Next you need to approve your cluster like this:

  1. Approve the managed cluster
kubectl config use-context <hub-context-name>
kubectl patch managedcluster cluster1 -p='{"spec":{"hubAcceptsClient":true}}' --type=merge
  1. Apporve the CSR of the managed clsuter
kubectl get csr -l open-cluster-management.io/cluster-name=cluster1 | grep Pending | awk '{print $1}' | xargs kubectl certificate approve
  1. Finally, you can find the managed cluster is joined and available
kubectl get managedcluster

NAME                HUB ACCEPTED   MANAGED CLUSTER URLS   JOINED   AVAILABLE   AGE
cluster1            true                                  True     True        2m21s

You can find more details for cluster join process from this design doc, and after the registration is deployed, you can try the following features

Cluster Set

  1. Create a cluster set by ManagedClusterSet API
cat << EOF | kubectl apply -f -
apiVersion: cluster.open-cluster-management.io/v1beta2
kind: ManagedClusterSet
metadata:
  name: clusterset1
EOF
  1. Add your cluster to the created cluster
kubectl label managedclusters cluster1 "cluster.open-cluster-management.io/clusterset=clusterset1" --overwrite
  1. Then, you can find there is one managed cluster is selected from the managed cluster set status, e.g:
kubectl get managedclustersets clusterset1 -o jsonpath='{.status.conditions[?(@.type=="ClusterSetEmpty")]}'

{"lastTransitionTime":"2021-08-17T06:18:26Z","message":"1 ManagedClusters selected","reason":"ClustersSelected","status":"False","type":"ClusterSetEmpty"}

You can find more details from the managed cluster set design doc

Cluster Claim

  1. Create a ClusterClaim to claim the ID of this cluster
kubectl config use-context <spoke-context-name>

cat << EOF | kubectl apply -f -
apiVersion: cluster.open-cluster-management.io/v1alpha1
kind: ClusterClaim
metadata:
  name: id.k8s.io
spec:
  value: cluster1
EOF
  1. Then, you can find the claim from the managed cluster status, like:
kubectl config use-context <hub-context-name>

kubectl get managedcluster cluster1 -o jsonpath='{.status.clusterClaims}'

[{"name":"id.k8s.io","value":"cluster1"}]

You can find more details from the cluster claim design doc

Managed Cluster Add-Ons

A managed cluster add-ons is deployed on the managed cluster to extend the capability of managed cluster. Developers can leverage add-on framework to implement their add-ons. The registration provides the management of the lease update and registration for all managed cluster addons, you can find more details from the Managed cluster addons management design doc

Note: The addon-management is in alpha stage, it is not enabled by default, it is controlled by feature gate AddonManagement

Community, discussion, contribution, and support

Check the CONTRIBUTING Doc for how to contribute to the repo.

Communication channels

Slack channel: #open-cluster-mgmt

License

This code is released under the Apache 2.0 license. See the file LICENSE for more information.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.