From f4336c9336008e11927d192e905ac6161bd2a4c7 Mon Sep 17 00:00:00 2001 From: Alexander Hughes Date: Mon, 21 Dec 2020 12:45:08 -0500 Subject: [PATCH] Documentation for dev env setup This change: - Updates the README with an explanation of SIP and ViNO, and steps to setting up a development environment for ViNO using the Airship charts/tools/gate/deploy-k8s.sh script - Updates the Dockerfile to create a working ViNO image - Updates the management Deployment to use the new image, and only pull that image if it is not present Signed-off-by: Alexander Hughes Change-Id: I6fbdd3302d49a65f05b20ec9593f500df23f1b33 --- Dockerfile | 5 +- Makefile | 15 +++- README.md | 120 +++++++++++++++++++++++++++++- config/manager/kustomization.yaml | 5 ++ config/manager/manager.yaml | 3 +- 5 files changed, 141 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 74eb9d7..1e0f53a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ # Build the manager binary -FROM golang:1.13 as builder +FROM gcr.io/gcp-runtimes/go1-builder:1.13 as builder + +ENV PATH "/usr/local/go/bin:$PATH" WORKDIR /workspace # Copy the Go Modules manifests @@ -14,6 +16,7 @@ COPY main.go main.go COPY api/ api/ COPY controllers/ controllers/ + # Build RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -a -o manager main.go diff --git a/Makefile b/Makefile index 660164d..23904b8 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ - # Image URL to use all building/pushing image targets -IMG ?= controller:latest +# IMG ?= controller:latest +IMG ?= quay.io/airshipit/vino + # Produce CRDs that work back to Kubernetes 1.11 (no version conversion) CRD_OPTIONS ?= "crd:trivialVersions=true" @@ -17,6 +18,11 @@ else GOBIN=$(shell go env GOBIN) endif +# Docker proxy flags +DOCKER_PROXY_FLAGS := --build-arg http_proxy=$(HTTP_PROXY) +DOCKER_PROXY_FLAGS += --build-arg https_proxy=$(HTTPS_PROXY) +DOCKER_PROXY_FLAGS += --build-arg NO_PROXY=$(NO_PROXY) + all: manager # Run tests @@ -61,8 +67,9 @@ generate: controller-gen $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..." # Build the docker image -docker-build: test - docker build . -t ${IMG} +# If DOCKER_PROXY_FLAGS values are empty, we are fine with that +docker-build: + docker build ${DOCKER_PROXY_FLAGS} . -t ${IMG} # Push the docker image docker-push: diff --git a/README.md b/README.md index 35342ac..0c8f11e 100644 --- a/README.md +++ b/README.md @@ -1 +1,119 @@ -# vino \ No newline at end of file +# ViNO Cluster Operator + +[![Docker Repository on Quay](https://quay.io/repository/airshipit/vino/status "Docker Repository on Quay")](https://quay.io/repository/airshipit/vino) + +## Overview + +The lifecycle of the Virtual Machines and their relationship to the Kubernetes cluster will be +managed using two operators: vNode-Operator(ViNO), and the Support Infra Provider Operator (SIP). + + +## Description + +ViNO is responsible for setting up VM infrastructure, such as: + +- per-node vino pod: + * libvirt init, e.g. + * setup vm-infra bridge + * provisioning tftp/dhcp definition + * libvirt launch + * sushi pod +- libvirt domains +- networking +- bmh objects, with labels: + * location - i.e. `rack: 8` and `node: rdm8r008c002` - should follow k8s semi-standard + * vm role - i.e. `node-type: worker` + * vm flavor - i.e `node-flavor: foobar` + * networks - i.e. `networks: [foo, bar]` + and the details for ViNO can be found [here](https://hackmd.io/KSu8p4QeTc2kXIjlrso2eA) + +The Cluster Support Infrastructure Provider, or SIP, is responsible for the lifecycle of: +- identifying the correct `BareMetalHost` resources to label (or unlabel) based on scheduling + constraints. +- extract IP address information from `BareMetalHost` objects to use in the creation of supporting + infrastructure. +- creating support infra for the tenant k8s cluster: + * load balancers (for tenant Kubernetes API) + * jump pod to access the cluster and nodes via ssh + * an OIDC provider for the tenant cluster, i.e. Dex + * potentially more in the future + +## Development Environment + +### Pre-requisites + +#### Install Golang 1.15+ + +ViNO is a project written in Go, and the make targets used to deploy ViNO leverage both Go and +Kustomize commands which require Golang be installed. + +For detailed installation instructions, please see the [Golang installation guide](https://golang.org/doc/install). + +#### Install Kustomize v3.2.3+ + +In order to apply manifests to your cluster via Make targets we suggest the use of Kustomize. + +For detailed installation instructions, please see the [Kustomize installation guide](https://kubectl.docs.kubernetes.io/installation/kustomize/). + +#### Proxy Setup + +If your organization requires development behind a proxy server, you will need to define the +following environment variables with your organization's information: + +``` +HTTP_PROXY=http://username:password@host:port +HTTPS_PROXY=http://username:password@host:port +NO_PROXY="localhost,127.0.0.1,10.96.0.0/12" +PROXY=http://username:password@host:port +USE_PROXY=true +``` + +10.96.0.0/12 is the Kubernetes service CIDR. + +### Deploy ViNO + +Airship projects often have to deploy Kubernetes, with common requirements such as supporting +network policies or working behind corporate proxies. To that end the community maintains a +Kubernetes deployment script and is the suggested way of deploying your Kubernetes cluster for +development purposes. + +#### Deploy Kubernetes + +``` +# curl -Lo deploy-k8s.sh https://opendev.org/airship/charts/raw/branch/master/tools/gate/deploy-k8s.sh +# chmod +x deploy-k8s.sh +# sudo ./deploy-k8s.sh +``` + +#### Deploy ViNO + +Once your cluster is up and running, you'll need to build the ViNO image to use, and to deploy the +operator on your cluster: + +``` +# make docker-build +# make deploy +``` + +Once these steps are completed, you should have a working cluster with ViNO deployed on top of it: + +``` +# kubectl get pods --all-namespaces +NAMESPACE NAME READY STATUS RESTARTS AGE +kube-system calico-kube-controllers-7985fc4dd6-6q5l4 1/1 Running 0 3h7m +kube-system calico-node-lqzxp 1/1 Running 0 3h7m +kube-system coredns-f9fd979d6-gbdzl 1/1 Running 0 3h7m +kube-system etcd-ubuntu-virtualbox 1/1 Running 0 3h8m +kube-system kube-apiserver-ubuntu-virtualbox 1/1 Running 0 3h8m +kube-system kube-controller-manager-ubuntu-virtualbox 1/1 Running 0 3h8m +kube-system kube-proxy-ml4gd 1/1 Running 0 3h7m +kube-system kube-scheduler-ubuntu-virtualbox 1/1 Running 0 3h8m +kube-system storage-provisioner 1/1 Running 0 3h8m +vino-system vino-controller-manager-788b994c74-sbf26 2/2 Running 0 25m +``` + +## Get in Touch + +For any questions on the ViNo, or other Airship projects, we encourage you to join the community on +Slack/IRC or by participating in the mailing list. Please see this [Wiki](https://wiki.openstack.org/wiki/Airship#Get_in_Touch) for +contact information, and the community meeting schedules. \ No newline at end of file diff --git a/config/manager/kustomization.yaml b/config/manager/kustomization.yaml index 5c5f0b8..6623eec 100644 --- a/config/manager/kustomization.yaml +++ b/config/manager/kustomization.yaml @@ -1,2 +1,7 @@ resources: - manager.yaml +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +images: +- name: controller + newName: quay.io/airshipit/vino diff --git a/config/manager/manager.yaml b/config/manager/manager.yaml index b6c85a5..e535184 100644 --- a/config/manager/manager.yaml +++ b/config/manager/manager.yaml @@ -27,7 +27,8 @@ spec: - /manager args: - --enable-leader-election - image: controller:latest + image: quay.io/airshipit/vino + imagePullPolicy: IfNotPresent name: manager resources: limits: