Giter Club home page Giter Club logo

hyperconverged-cluster-operator's Introduction

Build Status Go Report Card Coverage Status

Hyperconverged Cluster Operator

A unified operator deploying and controlling KubeVirt and several adjacent operators:

This operator is typically installed from the Operator Lifecycle Manager (OLM), and creates operator CustomResources (CRs) for its underlying operators as can be seen in the diagram below. Use it to obtain an opinionated deployment of KubeVirt and its helper operators.

Installing HCO using kustomize (Openshift OLM Only)

To install the default community HyperConverged Cluster Operator, along with its underlying components, run:

$ curl -L https://api.github.com/repos/kubevirt/hyperconverged-cluster-operator/tarball/master | \
tar --strip-components=1 -xvzf - kubevirt-hyperconverged-cluster-operator-*/deploy/kustomize

$ ./deploy/kustomize/deploy_kustomize.sh

The deployment is completed when HCO custom resource reports its condition as Available.

For more explanation and advanced options for HCO deployment using kustomize, refer to kustomize deployment documentation.

Installing Unreleased Bundles Using Marketplace

The hyperconverged cluster operator will publish the lastest bundles to quay/kubevirt-hyperconvered/hco-operatohub before publishing to operatorhub.io.

Make the unreleased bundles available in Marketplace by adding the app registry:

# Remove the hco-bundle from the community-operators sources
$ kubectl get operatorsource -n openshift-marketplace community-operators -o yaml | sed "s/hco-operatorhub,//" | kubectl apply -f -

# Add the unreleases bundle source
$ curl https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/master/tools/quay-registry.sh | bash -s $QUAY_USERNAME $QUAY_PASSWORD

Using the HCO without OLM or Marketplace

Run the following script to apply the HCO operator:

$ curl https://raw.githubusercontent.com/kubevirt/hyperconverged-cluster-operator/master/deploy/deploy.sh | bash

Developer Workflow

If you want to make changes to the HCO, here's how you can test your changes through OLM.

Build the HCO container using the Makefile recipes make container-build and make container-push with vars IMAGE_REGISTRY, REGISTRY_NAMESPACE, and CONTAINER_TAG to direct it's location.

To use the HCO's container, we'll use a registry image to serve metadata to OLM. Build and push the HCO's registry image.

# e.g. quay.io, docker.io
export IMAGE_REGISTRY=<image_registry>
export REGISTRY_NAMESPACE=<container_org>
export CONTAINER_TAG=example

# builds the registry image and pushes it to 
# $IMAGE_REGISTRY/$REGISTRY_NAMESPACE/hco-container-registry:$CONTAINER_TAG
make bundleRegistry

Create the namespace for the HCO.

kubectl create ns kubevirt-hyperconverged

Create an OperatorGroup.

cat <<EOF | kubectl create -f -
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
  name: hco-operatorgroup
  namespace: kubevirt-hyperconverged
spec:
  targetNamespaces:
  - "kubevirt-hyperconverged"
EOF

Create a CatalogSource and a Subscription.

If OLM Operator and Catalog Operator run in a namespace different than openshift-marketplace, replace openshift-marketplace with it in the CatalogSource and Subscription below.

cat <<EOF | kubectl create -f -
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
  name: hco-catalogsource
  namespace: openshift-marketplace
spec:
  sourceType: grpc
  image: $IMAGE_REGISTRY/$REGISTRY_NAMESPACE/hco-container-registry:$CONTAINER_TAG
  displayName: KubeVirt HyperConverged
  publisher: Red Hat
EOF
cat <<EOF | kubectl create -f -
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: hco-subscription
  namespace: kubevirt-hyperconverged
spec:
  channel: "1.2.0"
  name: kubevirt-hyperconverged
  source: hco-catalogsource
  sourceNamespace: openshift-marketplace
EOF

Create an HCO CustomResource, which creates the KubeVirt CR, launching KubeVirt, CDI, Network-addons, VM import and SSP.

kubectl create -f deploy/hco.cr.yaml -n kubevirt-hyperconverged

Create a Cluster & Launch the HCO

  1. Choose the provider
#For k8s cluster:
$ export KUBEVIRT_PROVIDER="k8s-1.17"
#For okd cluster:
$ export KUBEVIRT_PROVIDER="okd-4.1"
  1. Navigate to the project's directory
$ cd <path>/hyperconverged-cluster-operator
  1. Remove an old cluster
$ make cluster-down
  1. Create a new cluster
$ make cluster-up
  1. Clean previous HCO deployment and re-deploy HCO
    (When making a change, execute only this command - no need to repeat steps 1-3)
$ make cluster-sync

Command-Line Tool

Use ./cluster/kubectl.sh as the command-line tool.

For example:

$ ./cluster/kubectl.sh get pods --all-namespaces

hyperconverged-cluster-operator's People

Contributors

annastopel avatar arachmani avatar dankenigsberg avatar djzager avatar ffromani avatar github-actions[bot] avatar guy9050 avatar hco-bot avatar irosenzw avatar ksimon1 avatar lukas-bednar avatar lveyde avatar mareklibra avatar marsik avatar maya-r avatar mosermichael avatar nunnatsa avatar omeryahud avatar orenc1 avatar oshoval avatar phoracek avatar pkliczewski avatar rmohr avatar rwsu avatar slintes avatar stu-gott avatar tiraboschi avatar tripledes avatar yanirq avatar zcahana avatar

Watchers

 avatar

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.