From b890a6dec3d699a07929a0059e9a471949e70583 Mon Sep 17 00:00:00 2001 From: kranthi Date: Tue, 21 Jun 2022 19:45:10 +0530 Subject: [PATCH] kind.sh on macos including calico --- .github/workflows/scripts-validatation.yml | 19 +- kind.zip | Bin 0 -> 26142 bytes kind/controller-cluster.yaml | 5 +- kind/kind.sh | 105 ++++- kind/macos-kind.sh | 425 +++++++++++++++++++++ kind/worker-cluster.yaml | 4 + 6 files changed, 545 insertions(+), 13 deletions(-) create mode 100644 kind.zip create mode 100755 kind/macos-kind.sh diff --git a/.github/workflows/scripts-validatation.yml b/.github/workflows/scripts-validatation.yml index c610d49..cdcbb1b 100644 --- a/.github/workflows/scripts-validatation.yml +++ b/.github/workflows/scripts-validatation.yml @@ -53,9 +53,21 @@ jobs: sudo sed -i "s|CONTROLLER=.*|CONTROLLER=$CONTROLLER_CLUSTER|" kind.env sudo sed -i "s|WORKERS=.*|WORKERS=${{secrets.WORKER_CLUSTER}}|" kind.env sudo sed -i "s|KIND_K8S_VERSION=.*|KIND_K8S_VERSION=$KIND_K8S_VERSION|" kind.env - sudo sed -i "s|REPO=.*|REPO=${{secrets.HELM_REPO}}|" kind.env - sudo cat kind.env - + sudo sed -i "s|REPO=.*|REPO=$HELM_REPO|" kind.env + + # Print Kubernetes Clusters + sudo echo "Clusters Prefix: $CLUSTER_PREFIX" + sudo echo "Kubernetes Clusters: $(sudo echo "$CONTROLLER_CLUSTER & ${{secrets.WORKER_CLUSTER}}")" + + # Print Node Count per Cluster + sudo echo "Node Count per Cluster: 1 Control-Plane & 1 Worker" + + # Print Kind Kubernetes Versions + sudo echo "Kind Kubernetes Version: $KIND_K8S_VERSION" + + # Print Helm Repo + sudo echo "kubeslice helm repo: $HELM_REPO" + # A script that will configure multiple kind clusters and interconnect them with KubeSlice sudo bash kind.sh @@ -63,3 +75,4 @@ jobs: CLUSTER_PREFIX: '"kind-"' CONTROLLER_CLUSTER: '("controller")' KIND_K8S_VERSION: '"--image=kindest/node:v1.22.7"' + HELM_REPO: "https://kubeslice.github.io/charts" diff --git a/kind.zip b/kind.zip new file mode 100644 index 0000000000000000000000000000000000000000..ac1abb3eaa2ca6792ff2c1202e011b568837ca0a GIT binary patch literal 26142 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 literal 0 HcmV?d00001 diff --git a/kind/controller-cluster.yaml b/kind/controller-cluster.yaml index 6404afc..47f2e95 100644 --- a/kind/controller-cluster.yaml +++ b/kind/controller-cluster.yaml @@ -8,6 +8,9 @@ networking: # You may choose a specific port but probably don't need to in most cases. # Using a random port makes it easier to spin up multiple clusters. apiServerPort: 6443 + # By default kind takes kindnet CNI but we are disabling this to use netpol feature + disableDefaultCNI: true # disable kindnet + podSubnet: 192.168.0.0/16 # set to Calico's default subnet nodes: - role: control-plane image: kindest/node:v1.20.15@sha256:393bb9096c6c4d723bb17bceb0896407d7db581532d11ea2839c80b28e5d8deb @@ -18,4 +21,4 @@ nodes: kind: JoinConfiguration nodeRegistration: kubeletExtraArgs: - node-labels: "kubeslice.io/node-type=gateway" + node-labels: "kubeslice.io/node-type=gateway" \ No newline at end of file diff --git a/kind/kind.sh b/kind/kind.sh index f6cf3d2..c3c66b9 100755 --- a/kind/kind.sh +++ b/kind/kind.sh @@ -151,11 +151,84 @@ if [ "$VERBOSE" == true ]; then set -o xtrace fi +function wait_for_pods { + for ns in "$namespace"; do + for pod in $(kubectl get pods -n $ns | grep -v NAME | awk '{ print $1 }'); do + counter=0 + echo kubectl get pod $pod -n $ns + kubectl get pod $pod -n $ns + while [[ $(kubectl get pods $pod -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}' -n $ns) != True ]]; do + sleep 1 + let counter=counter+1 + + if ((counter == $sleep)); then + echo "POD $pod failed to start in $sleep seconds" + kubectl get events -n $ns --sort-by='.lastTimestamp' + echo "Exiting" + + exit -1 + fi + done + done + done +} + +# Install Calico in Controller... +echo Switch to controller context and Install Calico... +kubectx $PREFIX$CONTROLLER +kubectx + +echo Install the Tigera Calico operator... +kubectl create -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml + +echo Install the custom resource definitions manifest... +kubectl create -f https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml +sleep 120 + +echo "Check for Calico namespaces, pods" +kubectl get ns +kubectl get pods -n calico-system +echo "Wait for Calico to be Running" +namespace=calico-system +sleep=900 +wait_for_pods + +kubectl get pods -n calico-system + +# Install Calico in Worker... +for WORKER in ${WORKERS[@]}; do + + # Install Calico in Worker... + echo Switch to worker context and Install Calico... + kubectx $PREFIX$WORKER + kubectx + + echo Install the Tigera Calico operator... + kubectl create -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml + + echo Install the custom resource definitions manifest... + kubectl create -f https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml + sleep 120 + + echo "Check for Calico namespaces, pods" + kubectl get ns + kubectl get pods -n calico-system + echo "Wait for Calico to be Running" + namespace=calico-system + sleep=900 + wait_for_pods + + kubectl get pods -n calico-system + +done + # Helm repo access echo Setting up helm... helm repo remove kubeslice helm repo add kubeslice $REPO helm repo update +helm repo list +helm search repo kubeslice # Controller setup... echo Switch to controller context and set it up... @@ -167,7 +240,9 @@ helm install cert-manager kubeslice/cert-manager --namespace cert-manager --cre echo "Check for cert-manager pods" kubectl get pods -n cert-manager echo "Wait for cert-manager to be Running" -sleep 30 +namespace=cert-manager +sleep=60 +wait_for_pods kubectl get pods -n cert-manager @@ -191,16 +266,18 @@ helm install kubeslice-controller kubeslice/kubeslice-controller -f controller-c echo Check for status... kubectl get pods -n kubeslice-controller echo "Wait for kubeslice-controller-manager to be Running" -sleep 90 +namespace=kubeslice-controller +sleep=180 +wait_for_pods kubectl get pods -n kubeslice-controller echo kubectl apply -f project.yaml -n kubeslice-controller kubectl apply -f project.yaml -n kubeslice-controller -sleep 10 +sleep 30 -echo kubectl get project -n kubeslice-avesha -kubectl get project -n kubeslice-avesha +echo kubectl get project -n kubeslice-controller +kubectl get project -n kubeslice-controller echo kubectl get sa -n kubeslice-avesha kubectl get sa -n kubeslice-avesha @@ -264,8 +341,12 @@ for WORKER in ${WORKERS[@]}; do echo Check for status... kubectl get pods -n kubeslice-system echo "Wait for kubeslice-system to be Running" - sleep 60 + namespace=kubeslice-system + sleep=300 + wait_for_pods kubectl get pods -n kubeslice-system + # Iperf Namespace + echo Create Iperf Namespace kubectl create ns iperf done @@ -288,12 +369,14 @@ echo kubectl apply -f $SFILE -n kubeslice-avesha kubectl apply -f $SFILE -n kubeslice-avesha echo "Wait for vl3(slice) and gateway pod to be Running in worker clusters" -sleep 120 echo "Final status check..." for WORKER in ${WORKERS[@]}; do echo $PREFIX$WORKER kubectx $PREFIX$WORKER + namespace=kubeslice-system + sleep=240 + wait_for_pods kubectx kubectl get pods -n kubeslice-system done @@ -307,7 +390,9 @@ kubectx kubectl apply -f iperf-sleep.yaml -n iperf echo "Wait for iperf to be Running" -sleep 60 +namespace=iperf +sleep=120 +wait_for_pods kubectl get pods -n iperf # Switch to kind-worker-2 context @@ -317,7 +402,9 @@ for WORKER in ${WORKERS[@]}; do kubectx kubectl apply -f iperf-server.yaml -n iperf echo "Wait for iperf to be Running" - sleep 60 + namespace=iperf + sleep=120 + wait_for_pods kubectl get pods -n iperf fi done diff --git a/kind/macos-kind.sh b/kind/macos-kind.sh new file mode 100755 index 0000000..0b7edcf --- /dev/null +++ b/kind/macos-kind.sh @@ -0,0 +1,425 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2022 Avesha, Inc. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +ENV=kind.env +CLEAN=false +VERBOSE=false + +# First, check args +while getopts "eenvccleanhhelpvverbose--" opt; do + case "$opt" in + e | env) + if [[ $2 == '' ]]; then + exit 1; + fi + echo "Passed environment file is: '$2'" + ENV=$2 + shift 2 + ;; + c | clean) + CLEAN=true + shift + ;; + h | help) + echo "Usage is:" + echo " bash kind.sh []" + echo " " + echo " -c | --clean: delete all clusters" + echo " -e | --env : Specify custom environment details" + echo " -h | --help: Print this message" + shift + exit 0 + ;; + v | verbose) + VERBOSE=true + ;; + --) shift; + break + ;; + esac +done + +if [[ ( $@ -ne '' )]]; then + exit 1; +fi + +# Pull in the specified environemnt +source $ENV + +# Setup kind multicluster with KubeSlice +CONTROLLER_TEMPLATE="controller.template.yaml" +WORKER_TEMPLATE="worker.template.yaml" +SLICE_TEMPLATE="slice.template.yaml" +REGISTRATION_TEMPLATE="clusters-registration.template.yaml" + +CLUSTERS=($CONTROLLER) +CLUSTERS+=(${WORKERS[*]}) + +clean() { + echo Cleaning up all clusters + for CLUSTER in ${CLUSTERS[@]}; do + echo kind delete cluster --name $CLUSTER + kind delete cluster --name $CLUSTER + done +} + +# Check for requirements +echo Checking for required tools... +ERR=0 +which kind > /dev/null +if [ $? -ne 0 ]; then + echo Error: kind is required and was not found + ERR=$((ERR+1)) +fi +which kubectl > /dev/null +if [ $? -ne 0 ]; then + echo Error: kubectl is required and was not found + ERR=$((ERR+1)) +fi +which kubectx > /dev/null +if [ $? -ne 0 ]; then + echo Error: kubectx is required and was not found + ERR=$((ERR+1)) +fi +which helm > /dev/null +if [ $? -ne 0 ]; then + echo Error: helm is required and was not found + ERR=$((ERR+1)) +fi +which docker > /dev/null +if [ $? -ne 0 ]; then + echo Error: docker is required and was not found + ERR=$((ERR+1)) +fi +which colima > /dev/null +if [ $? -ne 0 ]; then + echo Error: colima is required and was not found + echo Run command colima start --cpu 4 --memory 8 + echo To create VM with 4CPU, 8GiB memory and 10GiB storage + ERR=$((ERR+1)) +fi + +if [ $ERR -ne 0 ]; then + echo Exiting due to missing required tools + exit 0 # Done until all requirements are met +else + echo Requirement checking passed +fi + +# See if we're being asked to cleanup +if [ "$CLEAN" == true ]; then + clean + exit 0 +fi + +# Create kind clusters +echo Create the Controller cluster +echo kind create cluster --name $CONTROLLER --config controller-cluster.yaml $KIND_K8S_VERSION +kind create cluster --name $CONTROLLER --config controller-cluster.yaml $KIND_K8S_VERSION + +echo Create the Worker clusters +for CLUSTER in ${WORKERS[@]}; do + echo Creating cluster $CLUSTER + echo kind create cluster --name $CLUSTER --config worker-cluster.yaml $KIND_K8S_VERSION + kind create cluster --name $CLUSTER --config worker-cluster.yaml $KIND_K8S_VERSION + # Make sure the cluster context exists + kubectl cluster-info --context $PREFIX$CLUSTER +done + +# See if we're being asked to be chatty +if [ "$VERBOSE" == true ]; then + # Log all the commands (w/o having to echo them) + set -o xtrace +fi + +function wait_for_pods { + for ns in "$namespace"; do + for pod in $(kubectl get pods -n $ns | grep -v NAME | awk '{ print $1 }'); do + counter=0 + echo kubectl get pod $pod -n $ns + kubectl get pod $pod -n $ns + while [[ $(kubectl get pods $pod -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}' -n $ns) != True ]]; do + sleep 1 + let counter=counter+1 + + if ((counter == $sleep)); then + echo "POD $pod failed to start in $sleep seconds" + kubectl get events -n $ns --sort-by='.lastTimestamp' + echo "Exiting" + + exit -1 + fi + done + done + done +} + +# Install Calico in Controller... +echo Switch to controller context and Install Calico... +kubectx $PREFIX$CONTROLLER +kubectx + +echo Install the Tigera Calico operator... +kubectl create -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml + +echo Install the custom resource definitions manifest... +kubectl create -f https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml +sleep 120 + +echo "Check for Calico namespaces, pods" +kubectl get ns +kubectl get pods -n calico-system +echo "Wait for Calico to be Running" +namespace=calico-system +sleep=600 +wait_for_pods + +kubectl get pods -n calico-system + +# Install Calico in Worker... +for WORKER in ${WORKERS[@]}; do + + # Install Calico in Worker... + echo Switch to worker context and Install Calico... + kubectx $PREFIX$WORKER + kubectx + + echo Install the Tigera Calico operator... + kubectl create -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml + + echo Install the custom resource definitions manifest... + kubectl create -f https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml + sleep 120 + + echo "Check for Calico namespaces, pods" + kubectl get ns + kubectl get pods -n calico-system + echo "Wait for Calico to be Running" + namespace=calico-system + sleep=900 + wait_for_pods + + kubectl get pods -n calico-system + +done + +# Helm repo access +echo Setting up helm... +helm repo remove kubeslice +helm repo add kubeslice $REPO +helm repo update +helm repo list +helm search repo kubeslice + +# Controller setup... +echo Switch to controller context and set it up... +kubectx $PREFIX$CONTROLLER +kubectx + +helm install cert-manager kubeslice/cert-manager --namespace cert-manager --create-namespace --set installCRDs=true + +echo "Check for cert-manager pods" +kubectl get pods -n cert-manager +echo "Wait for cert-manager to be Running" +namespace=cert-manager +sleep=60 +wait_for_pods + +kubectl get pods -n cert-manager + +# Install kubeslice-controller kubeslice/kubeslice-controller +# First, get the controller's endpoint (sed removes the colors encoded in the cluster-info output) +INTERNALIP=`kubectl get nodes -o wide | grep master | awk '{ print $6 }'` +CONTROLLER_ENDPOINT=$INTERNALIP:6443 +echo CONTROLLEREndPoint is: $CONTROLLER_ENDPOINT + +DECODE_CONTROLLER_ENDPOINT=`echo -n https://$CONTROLLER_ENDPOINT | base64` +echo Endpoint after base64 is: $DECODE_CONTROLLER_ENDPOINT + +# Make a controller values yaml from the controller template yaml +CFILE=$CONTROLLER-config.yaml +cp $CONTROLLER_TEMPLATE $CFILE +sed -i '' "s/ENDPOINT/$CONTROLLER_ENDPOINT/g" $CFILE + +echo "Install the kubeslice-controller" +helm install kubeslice-controller kubeslice/kubeslice-controller -f controller-config.yaml --namespace kubeslice-controller --create-namespace $CONTROLLER_VERSION + +echo Check for status... +kubectl get pods -n kubeslice-controller +echo "Wait for kubeslice-controller-manager to be Running" +namespace=kubeslice-controller +sleep=180 +wait_for_pods + +kubectl get pods -n kubeslice-controller + +echo kubectl apply -f project.yaml -n kubeslice-controller +kubectl apply -f project.yaml -n kubeslice-controller +sleep 30 + +echo kubectl get project -n kubeslice-controller +kubectl get project -n kubeslice-controller + +echo kubectl get sa -n kubeslice-avesha +kubectl get sa -n kubeslice-avesha + +# Clusters registration setup +# Make a clusters-registration.yaml from the clusters-registration.template.yaml +REGFILE=clusters-registration.yaml +echo "Register clusters" +for WORKER in ${WORKERS[@]}; do + cp $REGISTRATION_TEMPLATE $REGFILE + sed -i '' "s/WORKER/$WORKER/g" $REGFILE + kubectl apply -f clusters-registration.yaml -n kubeslice-avesha +done + +echo kubectl get clusters -n kubeslice-avesha +kubectl get clusters -n kubeslice-avesha + +# Worker setup +# Get secret info from controller... +for WORKER in ${WORKERS[@]}; do + + kubectx $PREFIX$CONTROLLER + + SECRET=`kubectl get secrets -n kubeslice-avesha| grep $WORKER | awk '{print $1}'` + echo Secret for worker $WORKER is: $SECRET + + # Don't use endpoint from the secrets file... use the one we created above + echo "Readable ENDPOINT is: " $DECODE_CONTROLLER_ENDPOINT + + NAMESPACE=`kubectl get secrets $SECRET -o yaml -n kubeslice-avesha | grep -m 1 " namespace" | awk '{print $2}'` + NAMESPACE=`echo -n $NAMESPACE` + CACRT=`kubectl get secrets $SECRET -o yaml -n kubeslice-avesha | grep -m 1 " ca.crt" | awk '{print $2}'` + CACRT=`echo -n $CACRT` + TOKEN=`kubectl get secrets $SECRET -o yaml -n kubeslice-avesha | grep -m 1 " token" | awk '{print $2}'` + TOKEN=`echo -n $TOKEN` + CLUSTERNAME=`echo -n $WORKER` + + if [ "$VERBOSE" == true ]; then + echo Namespace $NAMESPACE + echo Endpoint $ENDPOINT + echo Ca.crt $CACRT + echo Token $TOKEN + echo ClusterName $CLUSTERNAME + fi + + # Convert the template info a .yaml for this worker + WFILE=$WORKER.config.yaml + cp $WORKER_TEMPLATE $WFILE + sed -i '' "s/NAMESPACE/$NAMESPACE/g" $WFILE + sed -i '' "s/ENDPOINT/$DECODE_CONTROLLER_ENDPOINT/g" $WFILE + sed -i '' "s/CACRT/$CACRT/g" $WFILE + sed -i '' "s/TOKEN/$TOKEN/g" $WFILE + sed -i '' "s/WORKERNAME/$CLUSTERNAME/g" $WFILE + + + # Switch to worker context + kubectx $PREFIX$WORKER + WORKERNODEIP=`kubectl get nodes -o wide | grep $WORKER-worker | head -1 | awk '{ print $6 }'` + sed -i '' "s/NODEIP/$WORKERNODEIP/g" $WFILE + helm install kubeslice-worker kubeslice/kubeslice-worker -f $WFILE --namespace kubeslice-system --create-namespace $WORKER_VERSION + echo Check for status... + kubectl get pods -n kubeslice-system + echo "Wait for kubeslice-system to be Running" + namespace=kubeslice-system + sleep=300 + wait_for_pods + kubectl get pods -n kubeslice-system + # Iperf Namespace + echo Create Iperf Namespace + kubectl create ns iperf +done + +sleep 120 +echo Switch to controller context and configure slices... +kubectx $PREFIX$CONTROLLER +kubectx + +# Slice setup +# Make a slice.yaml from the slice.template.yaml +SFILE=slice.yaml +cp $SLICE_TEMPLATE $SFILE +for WORKER in ${WORKERS[@]}; do + sed -i '' "s/- WORKER/- $WORKER/g" $SFILE + sed -i '' '14i\ +\ +' $SFILE + sed -i '' '14i\ + - WORKER' $SFILE +done +sed -i '' '/- WORKER/d' $SFILE + +echo kubectl apply -f $SFILE -n kubeslice-avesha +kubectl apply -f $SFILE -n kubeslice-avesha + +echo "Wait for vl3(slice) and gateway pod to be Running in worker clusters" + +echo "Final status check..." +for WORKER in ${WORKERS[@]}; do + echo $PREFIX$WORKER + kubectx $PREFIX$WORKER + namespace=kubeslice-system + sleep=240 + wait_for_pods + kubectx + kubectl get pods -n kubeslice-system +done + + +# Iperf setup +echo Setup Iperf +# Switch to kind-worker-1 context +kubectx $PREFIX${WORKERS[0]} +kubectx + +kubectl apply -f iperf-sleep.yaml -n iperf +echo "Wait for iperf to be Running" +namespace=iperf +sleep=300 +wait_for_pods +kubectl get pods -n iperf + +# Switch to kind-worker-2 context +for WORKER in ${WORKERS[@]}; do + if [[ $WORKER -ne ${WORKERS[0]} ]]; then + kubectx $PREFIX$WORKER + kubectx + kubectl apply -f iperf-server.yaml -n iperf + echo "Wait for iperf to be Running" + namespace=iperf + sleep=300 + wait_for_pods + kubectl get pods -n iperf + fi +done + +# Switch to worker context +kubectx $PREFIX${WORKERS[0]} +kubectx + +sleep 120 +# Check Iperf connectity from iperf sleep to iperf server +IPERF_CLIENT_POD=`kubectl get pods -n iperf | grep iperf-sleep | awk '{ print$1 }'` + +kubectl exec -it $IPERF_CLIENT_POD -c iperf -n iperf -- iperf -c iperf-server.iperf.svc.slice.local -p 5201 -i 1 -b 10Mb; +if [ $? -ne 0 ]; then + echo '***Error: Connectivity between clusters not succesful!' + ERR=$((ERR+1)) +fi + +# Return status +exit $ERR diff --git a/kind/worker-cluster.yaml b/kind/worker-cluster.yaml index c56dd3a..48ed88d 100644 --- a/kind/worker-cluster.yaml +++ b/kind/worker-cluster.yaml @@ -1,5 +1,9 @@ kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 +networking: + # By default kind takes kindnet CNI but we are disabling this to use netpol feature + disableDefaultCNI: true # disable kindnet + podSubnet: 192.168.0.0/16 # set to Calico's default subnet nodes: - role: control-plane image: kindest/node:v1.20.15@sha256:393bb9096c6c4d723bb17bceb0896407d7db581532d11ea2839c80b28e5d8deb