Merge "Enable CI for SIP"
This commit is contained in:
commit
634b0ba835
25
Makefile
25
Makefile
@ -1,13 +1,19 @@
|
|||||||
|
# Docker Image Options
|
||||||
|
DOCKER_REGISTRY ?= quay.io
|
||||||
|
DOCKER_FORCE_CLEAN ?= true
|
||||||
|
DOCKER_IMAGE_NAME ?= sip
|
||||||
|
DOCKER_IMAGE_PREFIX ?= airshipit
|
||||||
|
DOCKER_IMAGE_TAG ?= latest
|
||||||
|
DOCKER_TARGET_STAGE ?= release
|
||||||
|
PUBLISH ?= false
|
||||||
|
|
||||||
# Image URL to use all building/pushing image targets
|
# Image URL to use all building/pushing image targets
|
||||||
#IMG ?= controller:latest
|
#IMG ?= controller:latest
|
||||||
IMG ?= quay.io/airshipit/sip
|
IMG ?= $(DOCKER_REGISTRY)/$(DOCKER_IMAGE_PREFIX)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)
|
||||||
|
|
||||||
# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
|
# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
|
||||||
CRD_OPTIONS ?= "crd:trivialVersions=true"
|
CRD_OPTIONS ?= "crd:trivialVersions=true"
|
||||||
|
|
||||||
# Name of the kind cluster that will be created by kind-create target
|
|
||||||
KIND_CLUSTER_NAME ?= sip-cluster
|
|
||||||
|
|
||||||
TOOLBINDIR := tools/bin
|
TOOLBINDIR := tools/bin
|
||||||
|
|
||||||
# linting
|
# linting
|
||||||
@ -26,6 +32,9 @@ DOCKER_PROXY_FLAGS := --build-arg http_proxy=$(HTTP_PROXY)
|
|||||||
DOCKER_PROXY_FLAGS += --build-arg https_proxy=$(HTTPS_PROXY)
|
DOCKER_PROXY_FLAGS += --build-arg https_proxy=$(HTTPS_PROXY)
|
||||||
DOCKER_PROXY_FLAGS += --build-arg NO_PROXY=$(NO_PROXY)
|
DOCKER_PROXY_FLAGS += --build-arg NO_PROXY=$(NO_PROXY)
|
||||||
|
|
||||||
|
kubernetes:
|
||||||
|
./tools/deployment/install-k8s.sh
|
||||||
|
|
||||||
all: manager
|
all: manager
|
||||||
|
|
||||||
# Run tests
|
# Run tests
|
||||||
@ -78,14 +87,6 @@ docker-build:
|
|||||||
docker-push:
|
docker-push:
|
||||||
docker push ${IMG}
|
docker push ${IMG}
|
||||||
|
|
||||||
# Create kind cluster
|
|
||||||
kind-create:
|
|
||||||
kind create cluster --name ${KIND_CLUSTER_NAME}
|
|
||||||
|
|
||||||
# Build docker container and load it into running kind cluster
|
|
||||||
kind-load-image: docker-build
|
|
||||||
kind load docker-image ${IMG} --name ${KIND_CLUSTER_NAME}
|
|
||||||
|
|
||||||
# find or download controller-gen
|
# find or download controller-gen
|
||||||
# download controller-gen if necessary
|
# download controller-gen if necessary
|
||||||
controller-gen:
|
controller-gen:
|
||||||
|
68
README.md
68
README.md
@ -72,36 +72,68 @@ SIPCluster CR will exists within the Control phase for a Tenant cluster.
|
|||||||
|
|
||||||
## Development environment
|
## Development environment
|
||||||
|
|
||||||
### Kind kubernetes cluster
|
### Pre-requisites
|
||||||
Fastest way to set up a k8s cluster for development env is to use kind to set it up
|
|
||||||
|
|
||||||
#### Install kind on linux (amd64 arch)
|
#### Install Golang 1.15+
|
||||||
|
|
||||||
|
SIP is a project written in Go, and the make targets used to deploy SIP 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:
|
||||||
|
|
||||||
```
|
```
|
||||||
# curl -Lo kind https://kind.sigs.k8s.io/dl/v0.9.0/kind-linux-amd64
|
HTTP_PROXY=http://username:password@host:port
|
||||||
# sudo install -m 755 --owner=root --group=root kind /usr/local/bin
|
HTTPS_PROXY=http://username:password@host:port
|
||||||
# rm kind
|
NO_PROXY="localhost,127.0.0.1,10.96.0.0/12"
|
||||||
|
PROXY=http://username:password@host:port
|
||||||
|
USE_PROXY=true
|
||||||
```
|
```
|
||||||
|
|
||||||
More information on how to install kind binary can be found be found [here](https://kind.sigs.k8s.io/docs/user/quick-start/#installation)
|
10.96.0.0/12 is the Kubernetes service CIDR.
|
||||||
|
|
||||||
#### Create k8s cluster with kind
|
#### Deploy kubernetes using minikube and create k8s cluster
|
||||||
|
|
||||||
```
|
```
|
||||||
# make kind-create
|
# ./tools/deployment/install-k8s.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Deploy SIP
|
||||||
|
|
||||||
|
```
|
||||||
|
# make docker-build
|
||||||
# kubectl get nodes
|
# kubectl get nodes
|
||||||
```
|
|
||||||
|
|
||||||
### Deploy SIP operator on top of kind cluster
|
|
||||||
kind-load-image target will build docker image from the current state of your local
|
|
||||||
git repository and upload it to kind cluster to be available for kubelet.
|
|
||||||
|
|
||||||
```
|
|
||||||
# make kind-load-image
|
|
||||||
# make deploy
|
# make deploy
|
||||||
```
|
```
|
||||||
|
|
||||||
Now you have a working k8s cluster with sip installed on it with your changes to SIP operator
|
By now, you should have a working cluster with ViNO deployed on top of it.
|
||||||
|
|
||||||
|
```
|
||||||
|
kubectl get pods -A
|
||||||
|
NAMESPACE NAME READY STATUS RESTARTS AGE
|
||||||
|
kube-system calico-kube-controllers-744cfdf676-428vp 1/1 Running 0 4h30m
|
||||||
|
kube-system calico-node-pgr4k 1/1 Running 0 4h30m
|
||||||
|
kube-system coredns-f9fd979d6-qk2dc 1/1 Running 0 4h30m
|
||||||
|
kube-system etcd-govino 1/1 Running 0 4h30m
|
||||||
|
kube-system kube-apiserver-govino 1/1 Running 0 4h30m
|
||||||
|
kube-system kube-controller-manager-govino 1/1 Running 0 4h30m
|
||||||
|
kube-system kube-proxy-6wx46 1/1 Running 0 4h30m
|
||||||
|
kube-system kube-scheduler-govino 1/1 Running 0 4h30m
|
||||||
|
kube-system storage-provisioner 1/1 Running 0 4h30m
|
||||||
|
sipcluster-system sipcluster-controller-manager-59c7dddcb-65lcb 2/2 Running 0 3h47m
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Deliver SIP CRs to kubernetes
|
### Deliver SIP CRs to kubernetes
|
||||||
|
|
||||||
|
23
playbooks/integration-tests.yaml
Normal file
23
playbooks/integration-tests.yaml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
- hosts: ubuntu-bionic
|
||||||
|
tasks:
|
||||||
|
- name: Run ensure-docker
|
||||||
|
include_role:
|
||||||
|
name: ensure-docker
|
||||||
|
- name: Install Dependent Packages
|
||||||
|
apt:
|
||||||
|
pkg:
|
||||||
|
- debconf
|
||||||
|
- make
|
||||||
|
- wget
|
||||||
|
- snapd
|
||||||
|
become: yes
|
||||||
|
- name: Set up requirements for kubernetes
|
||||||
|
include_role:
|
||||||
|
name: clear-firewall
|
||||||
|
- name: Install kubernetes and Deploy Sip
|
||||||
|
shell: |
|
||||||
|
set -xe;
|
||||||
|
./tools/deployment/install-k8s.sh
|
||||||
|
./tools/deployment/deploy-sip.sh
|
||||||
|
args:
|
||||||
|
chdir: "{{ zuul.project.src_dir }}"
|
9
tools/deployment/deploy-sip.sh
Executable file
9
tools/deployment/deploy-sip.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -xe
|
||||||
|
sudo snap install kustomize && sudo snap install go --classic
|
||||||
|
make docker-build
|
||||||
|
kubectl wait --for=condition=Ready pods --all -A --timeout=180s
|
||||||
|
make deploy
|
||||||
|
#Wait for sip controller manager Pod.
|
||||||
|
kubectl wait -n sipcluster-system pod -l control-plane=controller-manager --for=condition=ready --timeout=240s
|
||||||
|
kubectl get po -A
|
105
tools/deployment/install-k8s.sh
Executable file
105
tools/deployment/install-k8s.sh
Executable file
@ -0,0 +1,105 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
: ${KUBE_VERSION:="v1.19.2"}
|
||||||
|
: ${MINIKUBE_VERSION:="v1.16.0"}
|
||||||
|
: ${UPSTREAM_DNS_SERVER:="8.8.4.4"}
|
||||||
|
: ${DNS_DOMAIN:="cluster.local"}
|
||||||
|
: ${CALICO_VERSION:="v3.17"}
|
||||||
|
: ${CNI_MANIFEST_PATH:="/tmp/calico.yaml"}
|
||||||
|
|
||||||
|
export DEBCONF_NONINTERACTIVE_SEEN=true
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
|
||||||
|
|
||||||
|
sudo apt-key fingerprint 0EBFCD88
|
||||||
|
|
||||||
|
sudo add-apt-repository \
|
||||||
|
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
|
||||||
|
$(lsb_release -cs) \
|
||||||
|
stable"
|
||||||
|
|
||||||
|
sudo -E apt-get update
|
||||||
|
|
||||||
|
sudo -E apt-get install -y \
|
||||||
|
docker-ce \
|
||||||
|
docker-ce-cli \
|
||||||
|
containerd.io \
|
||||||
|
socat \
|
||||||
|
jq \
|
||||||
|
util-linux \
|
||||||
|
nfs-common \
|
||||||
|
bridge-utils \
|
||||||
|
iptables \
|
||||||
|
conntrack \
|
||||||
|
libffi-dev
|
||||||
|
|
||||||
|
# Prepare tmpfs for etcd
|
||||||
|
sudo mkdir -p /data
|
||||||
|
sudo mount -t tmpfs -o size=512m tmpfs /data
|
||||||
|
|
||||||
|
# Download calico manifest
|
||||||
|
if [ ! -f "$CNI_MANIFEST_PATH" ]; then
|
||||||
|
curl -Ss https://docs.projectcalico.org/"${CALICO_VERSION}"/manifests/calico.yaml -o ${CNI_MANIFEST_PATH}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install minikube and kubectl
|
||||||
|
URL="https://storage.googleapis.com"
|
||||||
|
sudo -E curl -sSLo /usr/local/bin/minikube "${URL}"/minikube/releases/"${MINIKUBE_VERSION}"/minikube-linux-amd64
|
||||||
|
sudo -E curl -sSLo /usr/local/bin/kubectl "${URL}"/kubernetes-release/release/"${KUBE_VERSION}"/bin/linux/amd64/kubectl
|
||||||
|
sudo -E chmod +x /usr/local/bin/minikube
|
||||||
|
sudo -E chmod +x /usr/local/bin/kubectl
|
||||||
|
|
||||||
|
export CHANGE_MINIKUBE_NONE_USER=true
|
||||||
|
export MINIKUBE_IN_STYLE=false
|
||||||
|
|
||||||
|
sudo -E minikube start \
|
||||||
|
--kubernetes-version="${KUBE_VERSION}" \
|
||||||
|
--embed-certs=true \
|
||||||
|
--interactive=false \
|
||||||
|
--driver=none \
|
||||||
|
--wait=apiserver,system_pods,node_ready \
|
||||||
|
--wait-timeout=6m0s \
|
||||||
|
--network-plugin=cni \
|
||||||
|
--cni=${CNI_MANIFEST_PATH} \
|
||||||
|
--extra-config=kube-proxy.mode=ipvs \
|
||||||
|
--extra-config=controller-manager.allocate-node-cidrs=true \
|
||||||
|
--extra-config=controller-manager.cluster-cidr=192.168.0.0/16 \
|
||||||
|
--extra-config=kubeadm.pod-network-cidr=192.168.0.0/16 \
|
||||||
|
--extra-config=kubelet.resolv-conf=/run/systemd/resolve/resolv.conf
|
||||||
|
|
||||||
|
kubectl get nodes -o wide
|
||||||
|
kubectl get pod -A
|
||||||
|
|
||||||
|
cat <<EOF | kubectl replace -f -
|
||||||
|
apiVersion: v1
|
||||||
|
data:
|
||||||
|
Corefile: |
|
||||||
|
.:53 {
|
||||||
|
errors
|
||||||
|
health {
|
||||||
|
lameduck 5s
|
||||||
|
}
|
||||||
|
ready
|
||||||
|
kubernetes ${DNS_DOMAIN} in-addr.arpa ip6.arpa {
|
||||||
|
pods insecure
|
||||||
|
fallthrough in-addr.arpa ip6.arpa
|
||||||
|
ttl 30
|
||||||
|
}
|
||||||
|
prometheus :9153
|
||||||
|
forward . ${UPSTREAM_DNS_SERVER} {
|
||||||
|
max_concurrent 1000
|
||||||
|
}
|
||||||
|
cache 30
|
||||||
|
loop
|
||||||
|
reload
|
||||||
|
loadbalance
|
||||||
|
}
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: coredns
|
||||||
|
namespace: kube-system
|
||||||
|
EOF
|
||||||
|
|
||||||
|
kubectl wait --for=condition=Ready pods --all -A --timeout=180s
|
@ -8,3 +8,8 @@
|
|||||||
- name: git_mirror_credentials
|
- name: git_mirror_credentials
|
||||||
secret: airship_sip_airshipit_github_secret
|
secret: airship_sip_airshipit_github_secret
|
||||||
pass-to-parent: true
|
pass-to-parent: true
|
||||||
|
- job:
|
||||||
|
name: airship-deploy-sip
|
||||||
|
run: playbooks/integration-tests.yaml
|
||||||
|
description: Deploys kubernetes and sip
|
||||||
|
timeout: 9600
|
@ -1,10 +1,10 @@
|
|||||||
- project:
|
- project:
|
||||||
check:
|
check:
|
||||||
jobs:
|
jobs:
|
||||||
- noop
|
- airship-deploy-sip
|
||||||
gate:
|
gate:
|
||||||
jobs:
|
jobs:
|
||||||
- noop
|
- airship-deploy-sip
|
||||||
post:
|
post:
|
||||||
jobs:
|
jobs:
|
||||||
- airship-sip-upload-git-mirror
|
- airship-sip-upload-git-mirror
|
Loading…
x
Reference in New Issue
Block a user