Skip to content

Instantly share code, notes, and snippets.

@gqlo
Last active November 16, 2022 12:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gqlo/82c9e0990982e0d2e1ee461c2218a22e to your computer and use it in GitHub Desktop.
Save gqlo/82c9e0990982e0d2e1ee461c2218a22e to your computer and use it in GitHub Desktop.
helper for launching kubevirt guest cluster
#!/bin/bash
#
# helper script to launch kubevirt guest clusters
export KUBEVIRT_CLUSTER_NAME=$1
export KUBEVIRT_CLUSTER_NAMESPACE="clusters-${KUBEVIRT_CLUSTER_NAME}"
export BASE_DOMAIN=$(oc get ingresscontroller -n openshift-ingress-operator default -o yaml | grep domain | awk '{print $2}')
export KUBEVIRT_CLUSTER_BASE_DOMAIN=${KUBEVIRT_CLUSTER_NAME}.${BASE_DOMAIN}
export PULL_SECRET="/root/alias-li/hypershift/pull-secret"
hypershift create cluster \
kubevirt \
--name $KUBEVIRT_CLUSTER_NAME \
--base-domain $BASE_DOMAIN \
--node-pool-replicas=2 \
--memory '6Gi' \
--release-image=quay.io/openshift-release-dev/ocp-release@sha256:b33682f203818fcec713c1c7cbe0b01731c8b64991579ca95d1a6409823c652a \
--pull-secret $PULL_SECRET \
echo "waiting to provision kubevirt guest cluster"
until oc get vms -n $KUBEVIRT_CLUSTER_NAMESPACE | grep -m -1 "$KUBEVIRT_CLUSTER_NAME"; do sleep 5; done &> /dev/null
oc wait --for=condition=Ready --namespace $KUBEVIRT_CLUSTER_NAMESPACE vm --all --timeout=300s
hypershift create kubeconfig --name="$KUBEVIRT_CLUSTER_NAME" > "${KUBEVIRT_CLUSTER_NAME}-kubeconfig"
export HTTPS_NODEPORT=$(oc --kubeconfig "${KUBEVIRT_CLUSTER_NAME}-kubeconfig" get services -n openshift-ingress router-nodeport-default -o wide | awk '{print $5}' | awk -F "443:" '{print $2}' | awk -F "/" '{print $1}' | tr -d '[:space:]')
# create ingress service
oc create -f - <<EOF
apiVersion: v1
kind: Service
metadata:
labels:
app: ${KUBEVIRT_CLUSTER_NAME}
name: apps-ingress
namespace: ${KUBEVIRT_CLUSTER_NAMESPACE}
spec:
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: https-443
port: 443
protocol: TCP
targetPort: $HTTPS_NODEPORT
selector:
kubevirt.io: virt-launcher
sessionAffinity: None
type: ClusterIP
EOF
# create ingress route
oc create -f - <<EOF
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: ${KUBEVIRT_CLUSTER_NAME}-443
namespace: ${KUBEVIRT_CLUSTER_NAMESPACE}
spec:
host: data.apps.$KUBEVIRT_CLUSTER_BASE_DOMAIN
wildcardPolicy: Subdomain
tls:
termination: passthrough
port:
targetPort: https-443
to:
kind: Service
name: apps-ingress
weight: 100
EOF
echo "https_nodeport number=$HTTPS_NODEPORT"
echo "kubevirt cluster name: $KUBEVIRT_CLUSTER_NAME"
echo "kubevirt cluster namespace: $KUBEVIRT_CLUSTER_NAMESPACE"
echo "kubevirt cluster base domain: $KUBEVIRT_CLUSTER_BASE_DOMAIN"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment