Managing your Kubernetes clusters (including public, private, edge, etc) as easily as visiting the Internet

Overview

Clusternet


Managing Your Clusters (including public, private, hybrid, edge, etc) as easily as Visiting the Internet.


Clusternet (Cluster Internet) is an open source add-on that helps you manage thousands of millions of Kubernetes clusters as easily as visiting the Internet. No matter the clusters are running on public cloud, private cloud, hybrid cloud, or at the edge, Clusternet lets you manage/visit them all as if they were running locally. This also help eliminate the need to juggle different management tools for each cluster.

Clusternet will help setup network tunnels in a configurable way, when your clusters are running in a VPC network, at the edge, or behind a firewall.

Clusternet also provides a Kubernetes-styled API, where you can continue using the Kubernetes way, such as KubeConfig, to visit a certain Managed Kubernetes cluster, or a Kubernetes service.

Clusternet is multiple platforms supported now, including

  • darwin/amd64 and darwin/arm64;
  • linux/amd64, linux/arm64, linux/ppc64le, linux/s390x, linux/386 and linux/arm;

Architecture

Clusternet is light-weighted that consists of two components, clusternet-agent and clusternet-hub.

clusternet-agent is responsible for

  • auto-registering current cluster to a parent cluster as a child cluster, which is also been called ManagedCluster;
  • reporting heartbeats of current cluster, including Kubernetes version, running platform, healthz/readyz/livez status, etc;
  • setting up a websocket connection that provides full-duplex communication channels over a single TCP connection to parent cluster;

clusternet-hub is responsible for

  • approving cluster registration requests and creating exclusive resources, such as namespaces, serviceaccounts and RBAC rules, for each child cluster;
  • serving as an aggregated apiserver (AA), which is used to serve as a websocket server that maintain multiple active websocket connections from child clusters;
  • providing Kubernstes-styled API to redirect/proxy/upgrade requests to each child cluster;

Note: Since clusternet-hub is running as an AA, please make sure that parent apiserver could visit the clusternet-hub service.

Concepts

For every Kubernetes cluster that wants to be managed, we call it child cluster. The cluster where child clusters are registerring to, we call it parent cluster.

clusternet-agent runs in child cluster, while clusternet-hub runs in parent cluster.

  • ClusterRegistrationRequest is an object that clusternet-agent creates in parent cluster for child cluster registration.
  • ManagedCluster is an object that clusternet-hub creates in parent cluster after approving ClusterRegistrationRequest.

Building

Building Binaries

Clone the repository, and run

# build for linux/amd64 by default
$ make clusternet-agent clusternet-hub

to build binaries clusternet-agent and clusternet-hub for linux/amd64.

Also you could specify other platforms when building, such as,

# build only clusternet-agent for linux/arm64 and darwin/amd64
# use comma to separate multiple platforms
$ PLATFORMS=linux/arm64,darwin/amd64 make clusternet-agent
# below are all the supported platforms
# PLATFORMS=darwin/amd64,darwin/arm64,linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386,linux/arm

All the built binaries will be placed at _output folder.

Building Docker Images

You can also build docker images. Here docker buildx is used to help build multi-arch container images.

If you're running MacOS, please install Docker Desktop and then check the builder,

$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS  PLATFORMS
default * docker
  default default         running linux/amd64, linux/arm64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

If you're running Linux, please refer to docker buildx docs on the installation.

Note:

For better docker buildx support, it is recommended to use Ubuntu Focal 20.04 (LTS), Debian Bullseye 11 and CentOS 8.

And install deb/rpm package qemu-user-static as well, such as

apt-get install qemu-user-static

or

yum install qemu-user-static
# build for linux/amd64 by default
# container images for clusternet-agent and clusternet-hub
$ make images

Also you could build container images for other platforms, such as arm64,

$ PLATFORMS=linux/amd64,linux/arm64,linux/ppc64le make images
# below are all the supported platforms
# PLATFORMS=linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386,linux/arm

Getting Started

Deploy Clusternet

You need to deploy clusternet-agent and clusternet-hub in child cluster and parent cluster respectively.

For clusternet-hub

kubectl apply -f deploy/hub

And then create a bootstrap token for clusternet-agent,

# this will create a bootstrap token 07401b.f395accd246ae52d
$ kubectl apply -f manifests/samples

For clusternet-agent

First we need to create a secret, which contains token for cluster registration,

# create namespace clusternet-system if not created
$ kubectl create ns clusternet-system
# here we use the token created above
$ PARENTURL=https://192.168.10.10 REGTOKEN=07401b.f395accd246ae52d envsubst < ./deploy/templates/clusternet_agent_secret.yaml | kubectl apply -f -

The PARENTURL above is the apiserver address of the parent cluster that you want to register to.

$ kubectl apply -f deploy/agent

Check Cluster Registrations

# clsrr is an alias for ClusterRegistrationRequest
$ kubectl get clsrr
NAME                                              CLUSTER-ID                             STATUS     AGE
clusternet-dc91021d-2361-4f6d-a404-7c33b9e01118   dc91021d-2361-4f6d-a404-7c33b9e01118   Approved   3d6h
$ kubectl get clsrr clusternet-dc91021d-2361-4f6d-a404-7c33b9e01118 -o yaml
apiVersion: clusters.clusternet.io/v1beta1
kind: ClusterRegistrationRequest
metadata:
  creationTimestamp: "2021-05-24T08:24:40Z"
  generation: 1
  labels:
    clusters.clusternet.io/cluster-id: dc91021d-2361-4f6d-a404-7c33b9e01118
    clusters.clusternet.io/cluster-name: clusternet-cluster-dzqkw
    clusters.clusternet.io/registered-by: clusternet-agent
  name: clusternet-dc91021d-2361-4f6d-a404-7c33b9e01118
  resourceVersion: "553624"
  uid: 8531ee8a-c66a-439e-bb5a-3adacfe58952
spec:
  clusterId: dc91021d-2361-4f6d-a404-7c33b9e01118
  clusterName: clusternet-cluster-dzqkw
  clusterType: EdgeClusterSelfProvisioned
status:
  caCertificate: REDACTED
  dedicatedNamespace: clusternet-dhxfs
  managedClusterName: clusternet-cluster-dzqkw
  result: Approved
  token: REDACTED

After ClusterRegistrationRequest is approved, the status will be updated with corresponding credentials that can be used to access parent cluster if needed. Those credentials have been set with scoped RBAC rules, see blow two rules for details.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    clusters.clusternet.io/rbac-autoupdate: "true"
  creationTimestamp: "2021-05-24T08:25:07Z"
  labels:
    clusters.clusternet.io/bootstrapping: rbac-defaults
    clusters.clusternet.io/cluster-id: dc91021d-2361-4f6d-a404-7c33b9e01118
    clusternet.io/created-by: clusternet-hub
  name: clusternet-dc91021d-2361-4f6d-a404-7c33b9e01118
  resourceVersion: "553619"
  uid: 87db2e72-f4c1-4628-9373-1536ed7fd4af
rules:
  - apiGroups:
      - clusters.clusternet.io
    resources:
      - clusterregistrationrequests
    verbs:
      - create
      - get
  - apiGroups:
      - proxies.clusternet.io
    resourceNames:
      - dc91021d-2361-4f6d-a404-7c33b9e01118
    resources:
      - sockets
    verbs:
      - '*'

and

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  annotations:
    clusters.clusternet.io/rbac-autoupdate: "true"
  creationTimestamp: "2021-05-24T08:25:07Z"
  labels:
    clusters.clusternet.io/bootstrapping: rbac-defaults
    clusternet.io/created-by: clusternet-hub
  name: clusternet-managedcluster-role
  namespace: clusternet-dhxfs
  resourceVersion: "553622"
  uid: 7524b743-57f3-4a45-a6cd-ceb3321fe2ff
rules:
  - apiGroups:
      - '*'
    resources:
      - '*'
    verbs:
      - '*'

Check ManagedCluster Status

# mcls is an alias for ManagedCluster
$ kubectl get mcls -A
NAMESPACE          NAME                       CLUSTER-ID                             CLUSTER-TYPE                 KUBERNETES   READYZ   AGE
clusternet-dhxfs   clusternet-cluster-dzqkw   dc91021d-2361-4f6d-a404-7c33b9e01118   EdgeClusterSelfProvisioned   v1.19.10     true     2d20h
$ kubectl get mcls -n clusternet-dhxfs   clusternet-cluster-dzqkw -o yaml
apiVersion: clusters.clusternet.io/v1beta1
kind: ManagedCluster
metadata:
  creationTimestamp: "2021-05-24T08:25:07Z"
  generation: 1
  labels:
    clusters.clusternet.io/cluster-id: dc91021d-2361-4f6d-a404-7c33b9e01118
    clusters.clusternet.io/cluster-name: clusternet-cluster-dzqkw
    clusternet.io/created-by: clusternet-agent
  name: clusternet-cluster-dzqkw
  namespace: clusternet-dhxfs
  resourceVersion: "555091"
  uid: e7e7fb5f-1a00-4e4e-aa02-2e943e37e4ff
spec:
  clusterId: dc91021d-2361-4f6d-a404-7c33b9e01118
  clusterType: EdgeClusterSelfProvisioned
status:
  healthz: true
  k8sVersion: v1.19.10
  lastObservedTime: "2021-05-24T08:58:30Z"
  livez: true
  platform: linux/amd64
  readyz: true

The status of ManagedCluster is updated by clusternet-agent every 3 minutes for default, which can be configured by flag --cluster-status-update-frequency.

Visit ManagedCluster

You can visit all your managed clusters using the kubeConfig of parent cluster. Only a small modification is needed.

# suppose your parent cluster kubeconfig locates at /home/demo/.kube/config
$ kubectl config view --kubeconfig=/home/demo/.kube/config --minify=true --raw=true > ./config-cluster-dc91021d-2361-4f6d-a404-7c33b9e01118
$ export KUBECONFIG=`pwd`/config-cluster-dc91021d-2361-4f6d-a404-7c33b9e01118
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://10.0.0.10:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: [email protected]
current-context: [email protected]
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
# suppose your child cluster running at http://demo1.cluster.net
$ kubectl config set-cluster `kubectl config get-clusters | grep -v NAME` \
  --server=https://10.0.0.10:6443/apis/proxies.clusternet.io/v1alpha1/sockets/dc91021d-2361-4f6d-a404-7c33b9e01118/http/demo1.cluster.net
# or just use the direct path
$ kubectl config set-cluster `kubectl config get-clusters | grep -v NAME` \
  --server=https://10.0.0.10:6443/apis/proxies.clusternet.io/v1alpha1/sockets/dc91021d-2361-4f6d-a404-7c33b9e01118/direct

What you need is to append /apis/proxies.clusternet.io/v1alpha1/sockets/<CLUSTER-ID>/http/<SERVER-URL> or /apis/proxies.clusternet.io/v1alpha1/sockets/<CLUSTER-ID>/direct at the end of original parent cluster server address.

  • CLUSTER-ID is a UUID for your child cluster, which is auto-populated by clusternet-agent, such as dc91021d-2361-4f6d-a404-7c33b9e01118. You could get this UUID from objects ClusterRegistrationRequest, ManagedCluster, etc. Also this UUID is labeled with key clusters.clusternet.io/cluster-id.
  • SERVER-URL is the apiserver address of your child cluster, it could be localhost, 127.0.0.1 and etc, only if clusternet-agent could access.

Currently Clusternet only support http scheme. If your child clusters are running with https scheme, you could run a local proxy instead, for example,

kubectl proxy --address='10.212.0.7' --accept-hosts='^*$'

Please replace 10.212.0.7 with your real local IP address.

Then you can visit child cluster as usual.

Issues
  • divided resource to child cluster failed

    divided resource to child cluster failed

    $ kubectl  describe desc -n clusternet-6phvq app-demo-generic
    ...
    Status:
      Phase:   Failure
      Reason:  please check whether the advertised apiserver of current child cluster is accessible. Unauthorized
    Events:
      Type     Reason                  Age                    From            Message
      ----     ------                  ----                   ----            -------
      Warning  UnSuccessfullyDeployed  3m31s                  clusternet-hub  failed to deploying Description clusternet-6phvq/app-demo-generic: please check whether the advertised apiserver of current child cluster is accessible. Unauthorized
      Normal   Synced                  3m30s (x2 over 3m31s)  clusternet-hub  Description synced successfully
    
    kind/bug 
    opened by Sad-polar-bear 18
  • Bug report in

    Bug report in "PARENTURL"

    What happened:

    when we execute the step "PARENTURL=https://192.168.10.10 REGTOKEN=07401b.f395accd246ae52d envsubst < ./deploy/templates/clusternet_agent_secret.yaml | kubectl apply -f -", the cmd report that "'PARENTURL' is not recognized as an internal or external command" in the file folder "clusternet-main". And when we execute this command in the subfolder "deploy/agent", the cmd report thet "the system cannot find the path specified."

    What you expected to happen:

    we can create this secret successfully.

    How to reproduce it (as minimally and precisely as possible):

    do everything in "Get Started" step by step.

    Anything else we need to know?:

    Environment:

    • Clusternet version: v.0.2.0
      • Clusternet-agent version (user clusternet-agent --version=json): v.0.2.0
      • Clusternet-hub version (user clusternet-hub --version=json): v.0.2.0
    • Kubernetes version (use kubectl version): v.1.21.3
    • Cloud provider or hardware configuration:
    • OS (e.g: cat /etc/os-release):
    • Kernel (e.g. uname -a):
    • Others:
    kind/bug kind/documentation 
    opened by SLZ0106 8
  • clusterAffinity of Globalization not working

    clusterAffinity of Globalization not working

    What happened:

    I want to override different configs for a subscription according to different labels of mcls, so I created two Globalization and use matchLabels of clusterAffinity field to query different mcls , but clusterAffinity does not work, all overrides of Globalizations merged in target description

    Environment:

    • Clusternet version:
      • Clusternet-agent version (user clusternet-agent --version=json):0.9.1
      • Clusternet-hub version (user clusternet-hub --version=json): 0.9.1
    • Kubernetes version (use kubectl version): k3s 1.22
    • Cloud provider or hardware configuration:
    • OS (e.g: cat /etc/os-release): ubuntu 20.04
    kind/bug kind/feature 
    opened by jasine 7
  • fix cluster and service ip range

    fix cluster and service ip range

    What type of PR is this?

    kind/bug

    What this PR does / why we need it:

    currently, cluster ip range and service ip range is reversed

    following is mcls description

    image

    but the service ip on machine is image

    while cluster pod ip is: image

    kind/bug 
    opened by jasine 7
  • Bug: unable  to

    Bug: unable to "edit" workload in hub cluster

    What would you like to be added:

    (1) kubectl clusternet edit deploy xxxchange a label of deploy or any other change for workload.

    but the desc object will not be updated, and the real deploy in child clusters not updated neither.

    This is a normal case in Day2 , updating an existing workload from hub cluster .

    (2) I manually edit the workload on child cluster, e.g. : edit the deployment. I expect the agent will watch the desc and reconcile that deployment to original state (aka, rollback my manual change) But it didn't happen. KubeFed can achieve this .

    Why is this needed:

    kind/bug 
    opened by panpan0000 7
  • clusternet not working with below error.

    clusternet not working with below error.

    What happened:

    environment: mac os m1, k8s cluster use kind create cluster.

    kubectl get pod -n clusternet-system

    NAME                             READY   STATUS             RESTARTS   AGE
    clusternet-hub-c88875f7c-wkc66   0/1     CrashLoopBackOff   6          6m49s
    

    kubectl apply deploy/hub in mac m1 kindest cluster, clusternet not working with below error.

    kubectl logs pod/clusternet-hub-c88875f7c-wkc66 -n clusternet-system

    Error: unknown flag: --anonymous-auth-supported
    Usage:
      clusternet-hub [flags]
    
    Flags:
          --add-dir-header                                          If true, adds the file directory to the header of the log messages
          --alsologtostderr                                         log to standard error as well as files
          --audit-log-compress                                      If set, the rotated log files will be compressed using gzip.
          --audit-log-format string                                 Format of saved audits. "legacy" indicates 1-line text
    

    What you expected to happen:

    How to reproduce it (as minimally and precisely as possible):

    Anything else we need to know?:

    Environment:

    • Clusternet version:

      • Clusternet-agent version (user clusternet-agent --version=json):
      • Clusternet-hub version clusternet-hub:v0.6.0
    • Kubernetes version (use kubectl version): "v1.21.1"

    • Cloud provider or hardware configuration:

    • OS (e.g: cat /etc/os-release): Mac Darwin

    • Kernel (e.g. uname -a): Darwin MacBook-Air.local 20.6.0 Darwin Kernel Version 20.6.0: Tue Oct 12 18:33:38 PDT 2021; root:xnu-7195.141.8~1/RELEASE_ARM64_T8101 arm64

    • Others:

    kind/question 
    opened by chestarss 6
  • Support add `username`, `password` to repo in HelmChart

    Support add `username`, `password` to repo in HelmChart

    What would you like to be added:

    Support add username, password to repo in HelmChart

    Why is this needed:

    apiVersion: apps.clusternet.io/v1alpha1
    kind: HelmChart
    metadata:
      name: example
      namespace: default
    spec:
      repo: https://private-repo.com/test
      chartPullSecret:
        name: my-private-repo-auth
        namespace: kube-system
      chart: example
      version: 0.0.1
      targetNamespace: abc
    
    apiVersion: v1
    data:
      username: xxx
      password: xxxx
    kind: Secret
    metadata:
      name: my-private-repo-auth
      namespace: kube-system
    type: Opaque
    
    kind/feature 
    opened by silenceper 6
  • clusternet agent  discoverClusterCIDR  failed

    clusternet agent discoverClusterCIDR failed

    What would you like to be added:

    image clusternet-agent failed when running in a kubernetes that apiserver、controller-manager、kube-scheduler run as a docker container or bin

    Why is this needed:

    add param to set cluster cidr、servicecidr ,so clusternet can manage a cluster that apiserver、controller-manager、kube-scheduler run as a docker container or bin,for example rancher rke cluster /k3s cluster

    image

    kind/feature 
    opened by snstaberah 5
  • add replica estimator interface

    add replica estimator interface

    Signed-off-by: Di Xu [email protected]

    What type of PR is this?

    kind/apis kind/feature

    What this PR does / why we need it:

    Which issue(s) this PR fixes:

    Fixes #

    Special notes for your reviewer:

    kind/feature kind/apis 
    opened by dixudx 5
  • clusternet proxy should not response 301 to ask client redirect

    clusternet proxy should not response 301 to ask client redirect

    What happened:

    default go client enable the redirect func, but clusternet proxy will response 301 with a internal IP, which the client can't access.

    企业微信截图_fa053d57-7d90-41aa-ad26-c14ce5ac3772

    What you expected to happen:

    should not response 301.

    How to reproduce it (as minimally and precisely as possible):

    curl -s -f -I -L -k https://{pub_IP}:6443/apis/proxies.clusternet.io/v1alpha1/sockets/xxxxxxxx/proxy/direct

    Anything else we need to know?:

    Environment:

    • Clusternet version:
      • Clusternet-agent version (user clusternet-agent --version=json):
      • Clusternet-hub version (user clusternet-hub --version=json):
    • Kubernetes version (use kubectl version):
    • Cloud provider or hardware configuration:
    • OS (e.g: cat /etc/os-release):
    • Kernel (e.g. uname -a):
    • Others:
    invalid 
    opened by leoryu 5
  • Ability to reconcile/rollback changes in child cluster

    Ability to reconcile/rollback changes in child cluster

    This issue was a part of previous https://github.com/clusternet/clusternet/issues/128

    =================== I'm proposing a way :the agent will watch the desc and reconcile that deployment to original state (aka, rollback any change in child cluster and restore to hub cluster config) hub cluster can override the difference which child cluster made. just like KubeFed. and moreover , when I accidentally delete the deployment from child cluster , I'm looking forward clusternet can restore it back .

    kind/feature 
    opened by panpan0000 5
  • fix scheduler enqueue

    fix scheduler enqueue

    Signed-off-by: Garrybest [email protected]

    What type of PR is this?

    What this PR does / why we need it:

    Which issue(s) this PR fixes:

    Fixes #

    Special notes for your reviewer:

    opened by Garrybest 0
  • aggregate common labels from nodes

    aggregate common labels from nodes

    Signed-off-by: lmxia [email protected]

    What type of PR is this?

    Add feature about aggregate nodes common labels to mcls.

    What this PR does / why we need it:

    Managedcluster's labels precisely represent nodes in child cluster.

    Which issue(s) this PR fixes:

    Fixes #

    Special notes for your reviewer:

    1. Aggreate labels start with node.clusternet.io/
    2. Keep managedclusters existed labels.
    3. Updated 3 minites periodly default.
    kind/feature 
    opened by lmxia 1
  • add docker image select param for make images

    add docker image select param for make images

    What would you like to be added:

    add a param to build specified docker images for single component,such as "make images clusternet-agent"

    Why is this needed:

    now the "make images" will build docker images for clusternet-agent, clusternet-hub and clusternet-scheduler,but in dev we usually only need build one of them; build 3 images takes too long for rapid code test;

    kind/feature 
    opened by snstaberah 0
  • Add managedcluster labels aggregated from child cluster nodes

    Add managedcluster labels aggregated from child cluster nodes

    What would you like to be added:

    Add managedcluster labels aggregated from child cluster nodes.

    Why is this needed:

    So we can schedule according to cluster labels, like geo-location etc.

    It's may be just one-way label( from child nodes to parent mcls ) or two-way label ( from mcls to child nodes), which need more discussion.

    kind/feature 
    opened by lmxia 0
  • override the helm chart

    override the helm chart

    Signed-off-by: danielxxli [email protected]

    What type of PR is this?

    What this PR does / why we need it:

    Which issue(s) this PR fixes: #379

    Fixes #

    Special notes for your reviewer:

    kind/feature 
    opened by DanielXLee 1
Releases(v0.10.0)
  • v0.10.0(Jun 1, 2022)

    This release introduced a new concept predictor. It is a on-going feature, which will be fully available in next release (v0.11.0). With predictor, we could dynamically schedule replicas to child clusters that have the capacity to hold them. Also in this release, we optimized the scheduler framework, making it more adaptable to multiple cluster scenarios. A new feature on cluster-aware Globalization was introduced as well. Meantime, we improved user experience on trying Clusternet with kind and Docker Desktop.

    Changes Since v0.9.1

    Full Changelog: https://github.com/clusternet/clusternet/compare/v0.9.1...v0.10.0

    What's Changed

    New Features & Enhancements

    • Introduced new concept predictor, which can be used to predict containable replicas in each matching child clusters. This is a on-going feature, which will be fully available in next release (v0.11.0). In this release, following tasks were finished,
      • Added replica predictor interface, which can be implemented by external customized predictors. (by @dixudx in https://github.com/clusternet/clusternet/pull/274)
      • Added a extensible framework for predictor server, and a built-in predictor. (by @qianjun1993 in https://github.com/clusternet/clusternet/pull/346, https://github.com/clusternet/clusternet/pull/336)
      • Added a new scheduling plugin predictor. (by @yinsenyan in https://github.com/clusternet/clusternet/pull/354)
      • Bumped default predictor server into clusternet-agent. (by @yinsenyan in https://github.com/clusternet/clusternet/pull/344, by @qianjun1993 in https://github.com/clusternet/clusternet/pull/355)
    • Added extra arg --threadiness for hub. (by @DanielXLee in https://github.com/clusternet/clusternet/pull/314)
    • Added annotation to support skipping validation. (by @dixudx in https://github.com/clusternet/clusternet/pull/317)
    • Optimized scheduler framework for multi-cluster. (by @Garrybest in https://github.com/clusternet/clusternet/pull/322)
    • Cluster-aware overrides from Globalization can be applied now. (by @jasine in https://github.com/clusternet/clusternet/pull/334)
    • Rescheduled subscriptions when binding clusters got a change on labels. (by @DanielXLee in https://github.com/clusternet/clusternet/pull/339, https://github.com/clusternet/clusternet/pull/341)
    • Optimized context usage and shared informer factory in clusternet-agent. (by @dixudx in https://github.com/clusternet/clusternet/pull/356, https://github.com/clusternet/clusternet/pull/357)

    Bug Fixes

    • Fixed inconsistent helm release name. (by @jasine in https://github.com/clusternet/clusternet/pull/309)
    • Fixed incorrect cluster and service ip range in ManagedCluster status. (by @jasine in https://github.com/clusternet/clusternet/pull/311)
    • Removing duplicate module import. (by @yinsenyan in https://github.com/clusternet/clusternet/pull/313)
    • Fixed resource AlreadyExists error for shadow apis (by @dixudx in https://github.com/clusternet/clusternet/pull/316, https://github.com/clusternet/clusternet/pull/330)
    • Fixed empty overrides deserialization. (by @dixudx in https://github.com/clusternet/clusternet/pull/323)
    • Fixed issue on deploying helm charts to target namespace. (by @dixudx in https://github.com/clusternet/clusternet/pull/326)
    • Label apps.clusternet.io/owned-by-description was changed to annotation to avoid label length limit. (by @silenceper in https://github.com/clusternet/clusternet/pull/327)
    • Fixed updating feedInventory with missing resource version. (by @dixudx in https://github.com/clusternet/clusternet/pull/332)
    • Fixed resource controller running more than one. (by @lmxia in https://github.com/clusternet/clusternet/pull/352)
    • Converged resync conditions from upper updates and rolling back. (by @lmxia in https://github.com/clusternet/clusternet/pull/343)
    • Fixed enqueue issue in feedinventory. (by @Garrybest in https://github.com/clusternet/clusternet/pull/340)

    User Experiences

    • Images can be built faster and better. (by @dixudx in https://github.com/clusternet/clusternet/pull/319)
    • Removed default log level (used to be -v 4) to avoid log flooded. (by @dixudx in https://github.com/clusternet/clusternet/pull/320)
    • Added cluster register name for local kind clusters. (by @Garrybest in https://github.com/clusternet/clusternet/pull/321)
    • Used port-mapping endpoints for kind clusters on Docker Desktop Mac. (by @bartdong in https://github.com/clusternet/clusternet/pull/328)

    Security

    • Fixed CVE GHSA-hp87-p4gw-j4gq: An issue in the Unmarshal function in Go-Yaml v3 causes the program to crash when attempting to deserialize invalid input. (by @dixudx in https://github.com/clusternet/clusternet/pull/348)

    New Contributors

    • @jasine made their first contribution in https://github.com/clusternet/clusternet/pull/309
    • @yinsenyan made their first contribution in https://github.com/clusternet/clusternet/pull/313
    • @bartdong made their first contribution in https://github.com/clusternet/clusternet/pull/328
    • @qianjun1993 made their first contribution in https://github.com/clusternet/clusternet/pull/336

    Thanks to all contributors!

    Source code(tar.gz)
    Source code(zip)
    clusternet_0.10.0_checksums.txt(574 bytes)
    clusternet_linux_386.tar.gz(78.33 MB)
    clusternet_linux_amd64.tar.gz(81.83 MB)
    clusternet_linux_arm.tar.gz(76.61 MB)
    clusternet_linux_arm64.tar.gz(75.97 MB)
    clusternet_linux_ppc64le.tar.gz(74.32 MB)
    clusternet_linux_s390x.tar.gz(80.40 MB)
  • v0.9.1(Apr 14, 2022)

    This is a patch version for v0.9.0.

    Changelog

    • 996ba83 fix empty Base UID when populating Localizatios (#308)
    • 68a1c77 use redis for demo (#307)
    • 0873858 fix feedinventories creation (#306)
    • c463121 fix HelmRelease status update error (#305)
    • 15d4a33 register FeedInventory (#304)
    • 37e7e1e add mising soft link to crd FeedInventory (#302)
    Source code(tar.gz)
    Source code(zip)
    clusternet_0.9.1_checksums.txt(574 bytes)
    clusternet_linux_386.tar.gz(78.10 MB)
    clusternet_linux_amd64.tar.gz(81.58 MB)
    clusternet_linux_arm.tar.gz(76.39 MB)
    clusternet_linux_arm64.tar.gz(75.75 MB)
    clusternet_linux_ppc64le.tar.gz(74.10 MB)
    clusternet_linux_s390x.tar.gz(80.18 MB)
  • v0.9.0(Apr 13, 2022)

    This version introduced static diving scheduling which would help splitting workloads into multiple clusters. For example, if you want to deploy a Deployment with a total of 6 replicas to 2 clusters ("cluster-01" with weight 1, "cluster-02" with weight 2), then "cluster-01" will run such a Deployment with 2 replicas, "cluster-02" runs the other 4 replicas. Please learn more from this tutorial. Several new fields spec.overrides and spec.releaseName were introduced for HelmRelease. Multiple bugs were fixed as well, such as crd storage race condition, in-deleting Description rolling back, etc.

    Please use patch version v0.9.1 instead!!!

    Changes Since v0.8.0

    Full Changelog: https://github.com/clusternet/clusternet/compare/v0.8.0...v0.9.0

    What's Changed

    New Features & Enhancements

    • Adding a local script that helps establish a local environment with one parent cluster and 3 child clusters. (by @Garrybest in https://github.com/clusternet/clusternet/pull/251)
    • Adding tests against golang 1.18. (by @dixudx in https://github.com/clusternet/clusternet/pull/270)
    • Introducing new field spec.overrides for HelmRelease. (by @dixudx in https://github.com/clusternet/clusternet/pull/272)
    • Introducing new field spec.releaseName (default to the same value as HelmChart name) in HelmRelease, which is backwards compatible. (by @dixudx in https://github.com/clusternet/clusternet/pull/269)
    • Using /healthz to report the status of managed clusters whose Kubernetes versions are under v1.16. (by @rootdeep in https://github.com/clusternet/clusternet/pull/291)
    • Introducing static dividing scheduling based on cluster weights. (by @Garrybest in https://github.com/clusternet/clusternet/pull/265, https://github.com/clusternet/clusternet/pull/283, https://github.com/clusternet/clusternet/pull/292, https://github.com/clusternet/clusternet/pull/296 and @dixudx in https://github.com/clusternet/clusternet/pull/285, https://github.com/clusternet/clusternet/pull/289, https://github.com/clusternet/clusternet/pull/286, https://github.com/clusternet/clusternet/pull/295, https://github.com/clusternet/clusternet/pull/297). A new CRD FeedInventory was introduced as well.

    Bug Fixes

    • Fixing crd storage race condition (by @dixudx in https://github.com/clusternet/clusternet/pull/260)
    • Fix resource updates syncing issue (by @DanielXLee in https://github.com/clusternet/clusternet/pull/263)
    • Do not rollback in-deleting Description (by @dixudx in https://github.com/clusternet/clusternet/pull/301)
    • Fix apiversion assignments with groupversion (by @dixudx in https://github.com/clusternet/clusternet/pull/290)

    Misc

    • Optimizing ownerReferences with NewControllerRef. (by @dixudx in https://github.com/clusternet/clusternet/pull/294)
    Source code(tar.gz)
    Source code(zip)
    clusternet_0.9.0_checksums.txt(574 bytes)
    clusternet_linux_386.tar.gz(78.09 MB)
    clusternet_linux_amd64.tar.gz(81.58 MB)
    clusternet_linux_arm.tar.gz(76.39 MB)
    clusternet_linux_arm64.tar.gz(75.75 MB)
    clusternet_linux_ppc64le.tar.gz(74.09 MB)
    clusternet_linux_s390x.tar.gz(80.19 MB)
  • v0.8.0(Mar 4, 2022)

    This version mainly introduced OCI-based Helm charts. Clusternet is the first project that supports this feature in multiple cluster management. Also unexpected operations (like deleting, updating) that occurred solely inside a child cluster will be rolled back automatically unless those were made explicitly from parent cluster, which kept applications running more stable in child clusters. Kubernetes v1.23 was fully supported as well.

    Changes Since v0.7.0

    Full Changelog: https://github.com/clusternet/clusternet/compare/v0.7.0...v0.8.0

    What's Changed

    New Features & Enhancements

    • Fully support OCI-based Helm charts (by @dixudx in #247,#255, #224 and @rootdeep in #257). Clusternet is the first project that support this feature in multi-cluster management.
    • Golang version was bumped to 1.17 (by @dixudx in #247,#241)
    • Default timeout 5m0s was applied to helm deployer, which stayed the same with Helm command line (by @dixudx in #225)
    • Alternative label app.kubernetes.io/component was added when finding kube-apiserver pod (by @fangyuchen86 in #227)
    • Collecting and reporting Nvidia GPU statics in child clusters (by @lmxia in #235)
    • Unexpected operations (like deleting, updating) that occurred solely inside a child cluster will be rolled back automatically unless those were made explicitly from parent cluster (by @lmxia in #242). A new feature gate named Recovery was added as well (by @dixudx in #226).

    Bug Fixes

    • Fixing scheduler issue when cluster affinity rules matched no clusters (by @DanielXLee in #239)
    • Fixing nonresource 403 errors (by @dixudx in #248)

    Security Enhancements

    • Upgrading dependency github.com/containerd/containerd to 1.5.10 to mitigate CVE-2022-23648 (by @dixudx in #258)

    Misc

    • Clusternet got a logo 🎉. Thank our designer Zuowei Li.
    • Kubernetes v1.23 was supported as well.

    New Contributors

    • @fangyuchen86 made their first contribution in #227
    • @rootdeep made their first contribution in #257

    Thanks to all contributors in this release.

    Source code(tar.gz)
    Source code(zip)
    clusternet_0.8.0_checksums.txt(574 bytes)
    clusternet_linux_386.tar.gz(78.00 MB)
    clusternet_linux_amd64.tar.gz(81.49 MB)
    clusternet_linux_arm.tar.gz(76.30 MB)
    clusternet_linux_arm64.tar.gz(75.67 MB)
    clusternet_linux_ppc64le.tar.gz(74.01 MB)
    clusternet_linux_s390x.tar.gz(80.07 MB)
  • v0.7.0(Dec 23, 2021)

    The 7th release of Clusternet ! 🦌🦌🦌🎅🎄🎄🎄

    Merry Christmas!

    This version mainly focuses on supporting scheduler framework, fully supporting k3s and improving the stability of deploying applications to child clusters.

    Changes Since v0.6.0

    Full Changelog: https://github.com/clusternet/clusternet/compare/v0.6.0...v0.7.0

    What's Changed

    New Features & Enhancements

    • Adding Clusternet roadmap (by @dixudx in #191)
    • Supporting using helm charts in private repository (by @silenceper in #193)
    • Adding a new component clusternet-scheduler, which is base on scheduler framework (by @dixudx in #204, #217, #221)
    • Taints and tolerations based scheduling are supported as well (by @Garrybest in #203, #210)
    • Supporting running clusternet-hub on k3s (by @dixudx in #209)
    • Configurable clusternet built namespaces, such as clusternet-system, clusternet-reserved (by @dixudx in #205, #211, #216, #219)
    • Rolling back resource changes in child clusters (by @lmxia in #194)
    • kubectl-clusternet plugin v0.5.0 introduced new flags --cluster-id and --child-kubeconfig. This made it easier to visit child clusters through parent cluster using CLI, instead of constructing a complicated and dedicated kubeconfig (by @dixudx in #214)

    Bug Fixes

    • Mitigating Manifest name with hyphens (by @dixudx in #83)
    • Fixing cluster label parsing during registration (by @silenceper in #197)
    • Reconciling Description when HelmChart got changed (by @DanielXLee in #202)
    • Only register resources with the highest priority (by @dixudx in #213)

    Security Enhancements

    • Fixing dependency vulnerability github.com/opencontainers/image-spec (GHSA-77vh-xpmg-72qh) and github.com/containerd/containerd (GHSA-5j5w-g665-5m35) (by @dixudx in #188)
    • Upgrading dependency github.com/opencontainers/runc to v1.0.3 to mitigate vulnerability CVE-2021-43784 (Overflow in netlink bytemsg length field allows attacker to override netlink-based container configuration) (by @dixudx in #198)

    Deprecated APIs

    • Removing deprecated field ManagedCluster.Status.ParentAPIServerURL (by @dixudx in #165)

    New Contributors

    • @lmxia made their first contribution in #194
    • @Garrybest made their first contribution in #203, #210
    Source code(tar.gz)
    Source code(zip)
    clusternet_0.7.0_checksums.txt(574 bytes)
    clusternet_linux_386.tar.gz(76.38 MB)
    clusternet_linux_amd64.tar.gz(78.44 MB)
    clusternet_linux_arm.tar.gz(73.61 MB)
    clusternet_linux_arm64.tar.gz(73.49 MB)
    clusternet_linux_ppc64le.tar.gz(71.63 MB)
    clusternet_linux_s390x.tar.gz(77.99 MB)
  • v0.6.0(Nov 15, 2021)

    🥳🥳🥳 The sixth release of Clusternet comes!

    This version mainly focuses on supporting Kubernetes version skew and improving the stability of deploying applications to child clusters.

    Changes Since v0.5.0

    Full Changelog: https://github.com/clusternet/clusternet/compare/v0.5.0...v0.6.0

    What's Changed

    New Features & Enhancements

    • Codecov was integrated into Clusternet CI. (by @ShirleyDing in #157, by @dixudx in #171)
    • Serviceaccount tokens can be used for cluster registration as well. (by @dixudx in #158)
    • Labels can be customized on cluster registration. (by @silenceper in #179)
    • With #183 (by @dixudx ), visiting child clusters would be not affected anymore, when the kube-apiserver running in parent cluster sets flag --anonymous-auth to false explicitly.
    • Kubernetes compatibility (by @dixudx in #173, #182) had been well improved. The versions of Kubernetes clusters could range from v1.18.x to v1.22.x.
    • Examples on curl with tls certificates was added. (by @dixudx in #169)
    • When a resource, like HelmChart, was not referred as a feed by Subscription/Base any more, redundant uid labels should be pruned. (by @dixudx in #92)

    Bug Fixes

    • clusternet-hub used in-cluster url instead of deprecated ParentAPIServerURL when accessing child clusters. (by @dixudx in #164)
    • Group metrics.k8s.io should be ignored to avoid same resource names with corev1. (by @dixudx in #166)
    • Module clusternet/apis import path restriction was removed. (by @dixudx in #162)
    • Resource deletions would be not blocked when clusters got lost. (by @dixudx in #177)
    • Description would be reconciled when applying failed. (@DanielXLee in #181)
    • Dry-run results would be trimmed before storing (by @dixudx in #170, #178)

    New Contributors

    • @silenceper made their first contribution in #179
    Source code(tar.gz)
    Source code(zip)
    clusternet_0.6.0_checksums.txt(574 bytes)
    clusternet_linux_386.tar.gz(54.82 MB)
    clusternet_linux_amd64.tar.gz(56.33 MB)
    clusternet_linux_arm.tar.gz(52.87 MB)
    clusternet_linux_arm64.tar.gz(52.80 MB)
    clusternet_linux_ppc64le.tar.gz(51.48 MB)
    clusternet_linux_s390x.tar.gz(56.07 MB)
  • v0.5.0(Oct 13, 2021)

    🥳🥳🥳 Clusternet Fifth Release !

    Clusternet (Cluster Internet) is an open source add-on that helps you manage thousands of millions of Kubernetes clusters as easily as visiting the Internet. No matter the clusters are running on public cloud, private cloud, hybrid cloud, or at the edge, Clusternet lets you manage/visit them all as if they were running locally. This also help eliminate the need to juggle different management tools for each cluster.

    Clusternet can also help deploy and coordinate applications to multiple clusters from a single set of APIs in a hosting cluster.

    Changes Since v0.4.0

    Full Changelog: https://github.com/clusternet/clusternet/compare/v0.4.0...v0.5.0

    New Features

    • Implements new ApplyNow that will apply overrides for matched objects immediately, including those are already populated (by @dixudx in #112)
    • Shrinks overrides when deleting Localization or Globalization, which means current superposed overrides will be re-deduced (by @dixudx in #151)
    • Treats scale as a standalone subresource (by @dixudx in #145, #152)
    • When a CRD is created or updated, shadow apis and scheme will be updated accordingly (by @dixudx in #102)
    • Adds cluster lifecycle controller to determine if a cluster gets lost (by @qmhu #100)
    • Supports continue value when listing in chunks (by @dixudx in #131)

    Bug Fixes

    • Prunes feeds in Description that are no longer subscribed (by @dixudx in #143)
    • Enforces syncing HelmRelease when overrides get changed (by @dixudx in #150, #153)
    • Gets child cluster IP range from command or args (by @chenkaiyue in #136)
    • Applies updated resources back to child clusters (by @dixudx in #132 )

    Security Enhancements

    • Remediates security vulnerabilities in dependencies, such as CVE-2021-41103, CVE-2021-30465, CVE-2020-26160 (by @dixudx in #144, #142, #141)

    New Contributors

    • @yiwei-C made their first contribution in https://github.com/clusternet/clusternet/pull/119
    • @Sad-polar-bear made their first contribution in https://github.com/clusternet/clusternet/pull/130
    Source code(tar.gz)
    Source code(zip)
    clusternet_0.5.0_checksums.txt(574 bytes)
    clusternet_linux_386.tar.gz(54.78 MB)
    clusternet_linux_amd64.tar.gz(56.29 MB)
    clusternet_linux_arm.tar.gz(52.84 MB)
    clusternet_linux_arm64.tar.gz(52.76 MB)
    clusternet_linux_ppc64le.tar.gz(51.44 MB)
    clusternet_linux_s390x.tar.gz(55.96 MB)
  • v0.4.0(Sep 6, 2021)

    🎉 🎉 🎉 Clusternet Fourth Release !

    Clusternet (Cluster Internet) is an open source add-on that helps you manage thousands of millions of Kubernetes clusters as easily as visiting the Internet. No matter the clusters are running on public cloud, private cloud, hybrid cloud, or at the edge, Clusternet lets you manage/visit them all as if they were running locally. This also help eliminate the need to juggle different management tools for each cluster.

    Clusternet can also help deploy and coordinate applications to multiple clusters from a single set of APIs in a hosting cluster.

    Changes Since v0.3.0

    New Features

    • provides a two-stage priority based override strategy. Localization and Globalization will define the overrides with priority (ranging from 0 to 1000, default to 500), where lower numbers are considered lower priority. Localization is namespace-scoped resource, while Globalization is cluster-scoped. (by @dixudx in #58,#81 and @qmhu in #61)
      • NOTE: Currently only ApplyLater overrideType is supported, which means these overrides will be applied for all matched objects on next updates (including updates on Subscription, Manifest, HelmChart, etc) or newly created objects.
    • reports cluster/service CIDR and cluster node count in ManagedCluster status (by @DanielXLee in #68)
    • introduces new feature gate FeedInUseProtection to automatically inject finalizer apps.clusternet.io/feed-protection on new objects and removes corresponding feeds from Subscriptions when deleting objects that do not have finalizer apps.clusternet.io/feed-protection (by @dixudx in #77)
    • reconciles and applies resources on agent side - pull mode (by @dixudx in #96)
    • allowing customizing ClusterType on cluster regsitration (by @dixudx in #94)

    Bug Fixes

    • fixes resources listing over all namespaces and filtering over label selectors (by @dixudx in #65, #72)
    • When a new cluster is registered, or clusters are re-matched with updated labels, these clusters should be dispatched with all matching Subscriptions. (by @dixudx in #90)

    Downloading Clusternet v0.4.0

    The common platform binaries are here:

    | OS Arch | Checksum | | -------- | ----------- | | Linux i386 | 887b091e43ec342fc773ea24b86ac431929269e2390d645872cacb4b5c30f921 | | Linux amd64 | f4984b2b900d296423aeff4fcbcc41d6fb693c872a9e43c36a82dfea77134cb9 | | Linux arm | 6bdc655e384de105fc7ac9a66aa9a2c39795b3daae3a8c7f48f8cb6239d71326 | | Linux arm64 | 9945b8229c9953db50505a21b8b97c312b919180f164989415d72de0e56bc14a | | Linux ppc64le | fc070aba3bc5a6bfaf907ea1182cb65465a709a823f34b1042e7914a8212bbab | | Linux s390x | 2363e9012cdaebf0db478f0a93fb1dd94a8ac44d94ed96614ec1568aa3066a43 |

    Source code(tar.gz)
    Source code(zip)
    clusternet-v0.4.0-linux-386.tar.gz(60.49 MB)
    clusternet-v0.4.0-linux-amd64.tar.gz(61.64 MB)
    clusternet-v0.4.0-linux-arm.tar.gz(56.81 MB)
    clusternet-v0.4.0-linux-arm64.tar.gz(57.48 MB)
    clusternet-v0.4.0-linux-ppc64le.tar.gz(56.48 MB)
    clusternet-v0.4.0-linux-s390x.tar.gz(61.90 MB)
  • v0.3.0(Aug 7, 2021)

    🎉 🎉 🎉 Third Release! v0.3.0 !

    Clusternet (Cluster Internet) is an open source add-on that helps you manage thousands of millions of Kubernetes clusters as easily as visiting the Internet. No matter the clusters are running on public cloud, private cloud, hybrid cloud, or at the edge, Clusternet lets you manage/visit them all as if they were running locally. This also help eliminate the need to juggle different management tools for each cluster.

    Clusternet can also help deploy and coordinate applications to multiple clusters from a single set of APIs in a hosting cluster.

    Changes Since v0.2.0

    • use socket transport only when ManagedCluster.Status.UseSocket is true (#30)
    • introduce new kind Localization, Globalization, and Base to apps/v1alpha1 (#23)
    • introduce new Group shadow/v1alpha1, and use feature gate ShadowAPI to enable serving apiserver for shadow apis / GVKs, such as apps/v1, batch/v1, extensions/v1beta1 and etc (#35, #39, #41, #45)
    • deploy objects, such as Deployments, StatefulSet, Namespace, CRDs, etc, with generic deployer (#49, #48, #46)
    • add client-go wrapper and example codes (#43)
    • kubectl plugin kubectl-clusternet

    Downloading Clusternet v0.3.0

    The common platform binaries are here:

    | OS Arch | Checksum | | -------- | ----------- | | MacOS amd64 | 706ca01fe677e0c1ec879f6547e3d54e82994fd6897e20157e575026ca20b762 | | MacOS arm64 | 50b0f20a7945c3bdfed9dd12ab39eff83e9f4bb00a5eeb1e61896407efae8e6e | | Linux i386 | 77d1974b832f9e057cdd0ae233b41c8b9d60ca8c8a7dc62de950427f53fa9759 | | Linux amd64 | eae53a9aaf2ac14fd4690fbac818f40df7765509abb3fa593dcd01328e18cf2b | | Linux arm | d5617c160dd3b2c319edb5b5581a0ac385ea905a36f78a0bbb7c86467812d4dc | | Linux arm64 | 151644b5393a7cc05e63798b0bdca1843ff4f0c18f0396b68a8b2802505d76bd | | Linux ppc64le | 6ecf3aff2c0e85b92872be0e8da1e3271388c0989f335abb866bb78bbf5221ca | | Linux s390x | b656840889b6994f06188e997bc7fd99914c7c7d74249c3201663470b3447cd0 |

    Source code(tar.gz)
    Source code(zip)
    clusternet-v0.3.0-darwin-amd64.tar.gz(49.71 MB)
    clusternet-v0.3.0-darwin-arm64.tar.gz(48.67 MB)
    clusternet-v0.3.0-linux-386.tar.gz(50.82 MB)
    clusternet-v0.3.0-linux-amd64.tar.gz(51.62 MB)
    clusternet-v0.3.0-linux-arm.tar.gz(47.48 MB)
    clusternet-v0.3.0-linux-arm64.tar.gz(48.03 MB)
    clusternet-v0.3.0-linux-ppc64le.tar.gz(47.17 MB)
    clusternet-v0.3.0-linux-s390x.tar.gz(51.77 MB)
  • v0.2.0(Jul 9, 2021)

    :tada: :tada: :tada:Second Release! v0.2.0 !

    Clusternet (Cluster Internet) is an open source add-on that helps you manage thousands of millions of Kubernetes clusters as easily as visiting the Internet. No matter the clusters are running on public cloud, private cloud, hybrid cloud, or at the edge, Clusternet lets you manage/visit them all as if they were running locally. This also help eliminate the need to juggle different management tools for each cluster.

    Clusternet can also help deploy and coordinate applications to multiple clusters from a single set of APIs in a hosting cluster.

    Changes Since v0.1.0

    • Bumps default namespace from edge-system to clusternet-system (#4)
    • Allows using a short-path URL handler for direct child cluster visiting (#3, #18)
    • Adds subresource sockets/proxy (#18)
    • Supports visiting child clusters with RBAC, including serviceaccount tokens, tls certificates (#19)
    • Introduces new api group apps/v1alpha1, which includes HelmChart, Subscription, Description, HelmRelease (#13)
    • Add a new feature gate Deployer to allow clusternet-hub working as a deployer to distribute kinds of resources to a group of clusters (#13)
    • Supports deploying helm charts to multiple clusters (#13)
    • Introduce cluster sync mode, Push, Pull, and Dual (#12)
    • Add a new feature gate AppPusher to fasten seat belt of child clusters (#11). With regard to security of child clusters, deploying applications directly from parent cluster should be limited. A more configurable way is provided here.

    Downloading Clusternet v0.2.0

    The common platform binaries are here:

    | OS Arch | Checksum | | -------- | ----------- | | MacOS amd64 | 633c8b52f4dd67a7a3c4f2be0ecbd4665d3f8c455f76e8a6038ecb6b6e24069b | | MacOS arm64 | 08df33a46bb593c3a5bcf2e23eb2258ed75c8b2167a94666185d4566c05a2b48 | | Linux i386 | f3c78a884b187c0f49dc7f5a04b378b305ef8b04ad9785ee3fac3711d1bee878 | | Linux amd64 | 03979f5653b9fc89a7aa2a157de653d2121922d8ade4f9df9be2779a53d2db51 | | Linux arm | 689423d9e97babcba31d9b609dd46b456c41a9e98a086647583ea8e64f149c55 | | Linux arm64 | 58537016a150b742e3270bcf3bedc93520caae87456a541eecbbca978b9c402c | | Linux ppc64le | 4421ec3a3cb2dd4e7c6e3432ab0280ec87357f7170ab4bd671ad30c4387feb72 | | Linux s390x | a8fabd9dd424f337714f27140e76309acbaa8c39107071a52536de57271d4dc8 |

    Source code(tar.gz)
    Source code(zip)
    clusternet-v0.2.0-darwin-amd64.tar.gz(49.46 MB)
    clusternet-v0.2.0-darwin-arm64.tar.gz(48.41 MB)
    clusternet-v0.2.0-linux-386.tar.gz(50.56 MB)
    clusternet-v0.2.0-linux-amd64.tar.gz(51.34 MB)
    clusternet-v0.2.0-linux-arm.tar.gz(47.23 MB)
    clusternet-v0.2.0-linux-arm64.tar.gz(47.77 MB)
    clusternet-v0.2.0-linux-ppc64le.tar.gz(46.91 MB)
    clusternet-v0.2.0-linux-s390x.tar.gz(51.50 MB)
  • v0.1.0(Jun 8, 2021)

    ⚡ ⚡ ⚡ First Release!

    This is the first release of Clusternet, which is aimed to help manage multiple Kubernetes clusters (including public, private, edge, etc) as easily as visiting the Internet.


    What's In

    Clusternet consists of two components, clusternet-agent and clusternet-hub.

    And Clusternet is multiple platforms supported, including linux/amd64, linux/arm64, linux/s390x, etc.

    clusternet-agent: runing at each child Kubernetes cluster

    • Automatically registers current cluster to a parent cluster as a child cluster
    • Reports heartbeats of current cluster, including Kubernetes version, running platform, healthz/readyz/livez status, etc
    • Sets up a websocket connection with clusternet-hub in the parent cluster to provide full-duplex communication channels over a single TCP connection

    clusternet-hub: running at the parent Kubernetes cluster

    • Runs as an Aggregated Apiserver (AA) that maintains multiple active WebSocket connections between child clusters
    • Approves registration requests from child clusters
    • Creates exclusive set of resources for each child cluster, such as namespaces, service accounts and RBAC rules
    • Proxies all Kubernstes-styled APIs to targeted child cluster
    • Allows to manage all child clusters (running in private cloud, at the edge, etc) with KubeConfig

    Downloading Clusternet v0.1.0

    The common platform binaries are here:

    | OS Arch | Checksum | | -------- | ----------- | | MacOS amd64 | 1594051bf314760f4e24e1aa5724ade82caff19d36be36b9ccfe071e10b29a87 | | MacOS arm64 | 6eb331b649e4e45171038f28227d217d40a9f5244067b9b170796b970139c476 | | Linux i386 | 06ee6a40227bfe6b560078da16d10f89af910fba5aaad3998c2025782412bcef | | Linux amd64 | 45add7008e56e836e27ef8caa66f24c881bf79714fd57238caec9b1490e17d49 | | Linux arm | 7e7f327ab58cfdc180804d136af76dd951bbe8b98741ad687ff9099092e16405 | | Linux arm64 | 2e4708f52e8750294b985e775820cf28b1541512ca80f41aa1900d8ff5851474 | | Linux ppc64le | 610e0301b7eebaa3bc41e842e898fc5ba21c02c823879bc3d4c3d107e71b0a90 | | Linux s390x | c46ea0c3601ed1de260a5cbcc2b6b0526964c8c862d19398b36a8f0fd24b72df |

    Source code(tar.gz)
    Source code(zip)
    clusternet-v0.1.0-darwin-amd64.tar.gz(42.85 MB)
    clusternet-v0.1.0-darwin-arm64.tar.gz(40.51 MB)
    clusternet-v0.1.0-linux-386.tar.gz(42.56 MB)
    clusternet-v0.1.0-linux-amd64.tar.gz(43.08 MB)
    clusternet-v0.1.0-linux-arm.tar.gz(39.52 MB)
    clusternet-v0.1.0-linux-arm64.tar.gz(39.98 MB)
    clusternet-v0.1.0-linux-ppc64le.tar.gz(39.21 MB)
    clusternet-v0.1.0-linux-s390x.tar.gz(43.02 MB)
Owner
Clusternet
Clusternet
Clusternet
PolarDB Stack is a DBaaS implementation for PolarDB-for-Postgres, as an operator creates and manages PolarDB/PostgreSQL clusters running in Kubernetes. It provides re-construct, failover swtich-over, scale up/out, high-available capabilities for each clusters.

PolarDB Stack开源版生命周期 1 系统概述 PolarDB是阿里云自研的云原生关系型数据库,采用了基于Shared-Storage的存储计算分离架构。数据库由传统的Share-Nothing,转变成了Shared-Storage架构。由原来的N份计算+N份存储,转变成了N份计算+1份存储

null 18 Jun 2, 2022
OpenYurt - Extending your native Kubernetes to edge(project under CNCF)

openyurtio/openyurt English | 简体中文 What is NEW! Latest Release: September 26th, 2021. OpenYurt v0.5.0. Please check the CHANGELOG for details. First R

OpenYurt 1.2k Jul 1, 2022
An operator for managing ephemeral clusters in GKE

Test Cluster Operator for GKE This operator provides an API-driven cluster provisioning for integration and performance testing of software that integ

Isovalent 31 Feb 9, 2022
Topology-tester - Application to easily test microservice topologies and distributed tracing including K8s and Istio

Topology Tester The Topology Tester app allows you to quickly build a dynamic mi

Bas van Beek 1 Jan 14, 2022
vcluster - Create fully functional virtual Kubernetes clusters - Each cluster runs inside a Kubernetes namespace and can be started within seconds

Website • Quickstart • Documentation • Blog • Twitter • Slack vcluster - Virtual Clusters For Kubernetes Lightweight & Low-Overhead - Based on k3s, bu

Loft Labs 1.7k Jun 27, 2022
Kubernetes IN Docker - local clusters for testing Kubernetes

kind is a tool for running local Kubernetes clusters using Docker container "nodes".

Kubernetes SIGs 10k Jun 26, 2022
provider-kubernetes is a Crossplane Provider that enables deployment and management of arbitrary Kubernetes objects on clusters

provider-kubernetes provider-kubernetes is a Crossplane Provider that enables deployment and management of arbitrary Kubernetes objects on clusters ty

International Business Machines 2 Jan 5, 2022
Crossplane provider to provision and manage Kubernetes objects on (remote) Kubernetes clusters.

provider-kubernetes provider-kubernetes is a Crossplane Provider that enables deployment and management of arbitrary Kubernetes objects on clusters ty

Crossplane Contrib 47 Jun 25, 2022
Kubernetes IN Docker - local clusters for testing Kubernetes

Please see Our Documentation for more in-depth installation etc. kind is a tool for running local Kubernetes clusters using Docker container "nodes".

Kaisen Linux 0 Feb 14, 2022
Access your Kubernetes Deployment over the Internet

Kubexpose: Access your Kubernetes Deployment over the Internet Kubexpose makes it easy to access a Kubernetes Deployment over a public URL. It's a Kub

Abhishek Gupta 41 Jan 28, 2022
a small form factor OpenShift/Kubernetes optimized for edge computing

Microshift Microshift is OpenShift1 Kubernetes in a small form factor and optimized for edge computing. Edge devices deployed out in the field pose ve

Red Hat Emerging Technologies 340 Jun 24, 2022
Secure Edge Networking Based On Kubernetes And KubeEdge.

What is FabEdge FabEdge is an open source edge networking solution based on kubernetes and kubeedge. It solves the problems including complex network

FabEdge 365 Jun 15, 2022
🐶 Kubernetes CLI To Manage Your Clusters In Style!

K9s - Kubernetes CLI To Manage Your Clusters In Style! K9s provides a terminal UI to interact with your Kubernetes clusters. The aim of this project i

Fernand Galiana 16.9k Jul 4, 2022
Validation of best practices in your Kubernetes clusters

Best Practices for Kubernetes Workload Configuration Fairwinds' Polaris keeps your clusters sailing smoothly. It runs a variety of checks to ensure th

Fairwinds 2.6k Jun 30, 2022
Client extension for interacting with Kubernetes clusters from your k6 tests.

⚠️ This is a proof of concept As this is a proof of concept, it won't be supported by the k6 team. It may also break in the future as xk6 evolves. USE

k6 16 Jun 17, 2022
A pain of glass between you and your Kubernetes clusters.

kube-lock A pain of glass between you and your Kubernetes clusters. Sits as a middle-man between you and kubectl, allowing you to lock and unlock cont

Tom Meadows 4 Jan 28, 2022
Hot-swap Kubernetes clusters while keeping your microservices up and running.

Okra Okra is a Kubernetes controller and a set of CRDs which provide advanced multi-cluster appilcation rollout capabilities, such as canary deploymen

Yusuke Kuoka 43 Jun 13, 2022
kubequery is a Osquery extension that provides SQL based analytics for Kubernetes clusters

kubequery powered by Osquery kubequery is a Osquery extension that provides SQL based analytics for Kubernetes clusters kubequery will be packaged as

Uptycs Inc 68 Jun 30, 2022
Manage large fleets of Kubernetes clusters

Introduction Fleet is GitOps at scale. Fleet is designed to manage up to a million clusters. It's also lightweight enough that it works great for a si

Rancher 1.2k Jun 28, 2022