Commit 14de559f authored by David José Araújo Ferreira's avatar David José Araújo Ferreira
Browse files

NGINX and redeployall

default variables set

code refactoring

NATS cluster complete

Startup Probe failling in NATS cluster mode

Cockroach cluster operator and NATS cluster mode

Update

Update scheduling policy for CRDB

NATS cluster mode

Testing CRDB cluster with node affinity

Revert "Testing dynamic node resources"

This reverts commit 856eb479.

Testing dynamic node resources

NGINX and redeployall

Update my_deploy.sh

Update nginx_ingress_http.yaml

Redeploy all fixed

Add redeploy all feature
parent 503a17bd
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -18,6 +18,11 @@
# Read deployment settings
########################################################################################################################

# ----- Redeploy All ------------------------------------------------------------

# If not already set, enables all components redeployment
export REDEPLOYALL=${REDEPLOYALL:-""}


# ----- TeraFlowSDN ------------------------------------------------------------

@@ -102,6 +107,15 @@ export NATS_EXT_PORT_CLIENT=${NATS_EXT_PORT_CLIENT:-"4222"}
# If not already set, set the external port NATS HTTP Mgmt GUI interface will be exposed to.
export NATS_EXT_PORT_HTTP=${NATS_EXT_PORT_HTTP:-"8222"}

# TESTING
# If not already set, set NATS installation mode. Accepted values are: 'single' and 'cluster'.
# - If NATS_DEPLOY_MODE is "single", NATS is deployed in single node mode. It is convenient for
#   development and testing purposes and should fit in a VM. IT SHOULD NOT BE USED IN PRODUCTION ENVIRONMENTS.
# - If NATS_DEPLOY_MODE is "cluster", NATS is deployed in cluster mode, and an entire NATS cluster
#   with 3 replicas (set by default) will be deployed. It is convenient for production and
#   provides scalability features.
export NATS_DEPLOY_MODE=${NATS_DEPLOY_MODE:-"single"}

# If not already set, disable flag for re-deploying NATS from scratch.
# WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE MESSAGE BROKER INFORMATION!
# If NATS_REDEPLOY is "YES", the message broker will be dropped while checking/deploying NATS.
+8 −3
Original line number Diff line number Diff line
@@ -18,6 +18,11 @@
# Read deployment settings
########################################################################################################################

# ----- Redeploy All ------------------------------------------------------------
# If not already set, enables all components redeployment
export REDEPLOYALL=${REDEPLOYALL:-""}


# If not already set, set the namespace where CockroackDB will be deployed.
export CRDB_NAMESPACE=${CRDB_NAMESPACE:-"crdb"}

@@ -223,7 +228,7 @@ function crdb_deploy_cluster() {
    kubectl create namespace ${CRDB_NAMESPACE}
    echo

    echo "CockroachDB"
    echo "CockroachDB (cluster-mode)"
    echo ">>> Checking if CockroachDB is deployed..."
    if kubectl get --namespace ${CRDB_NAMESPACE} statefulset/cockroachdb &> /dev/null; then
        echo ">>> CockroachDB is present; skipping step."
@@ -360,7 +365,7 @@ function crdb_drop_database_cluster() {
}

if [ "$CRDB_DEPLOY_MODE" == "single" ]; then
    if [ "$CRDB_REDEPLOY" == "YES" ]; then
    if [ "$CRDB_REDEPLOY" == "YES" ] || [ "$REDEPLOYALL" == "YES" ]; then
        crdb_undeploy_single
    fi

@@ -370,7 +375,7 @@ if [ "$CRDB_DEPLOY_MODE" == "single" ]; then
        crdb_drop_database_single
    fi
elif [ "$CRDB_DEPLOY_MODE" == "cluster" ]; then
    if [ "$CRDB_REDEPLOY" == "YES" ]; then
    if [ "$CRDB_REDEPLOY" == "YES" ] || [ "$REDEPLOYALL" == "YES" ]; then
        crdb_undeploy_cluster
    fi

+111 −8
Original line number Diff line number Diff line
@@ -18,6 +18,10 @@
# Read deployment settings
########################################################################################################################

# ----- Redeploy All ------------------------------------------------------------
# If not already set, enables all components redeployment
export REDEPLOYALL=${REDEPLOYALL:-""}

# If not already set, set the namespace where NATS will be deployed.
export NATS_NAMESPACE=${NATS_NAMESPACE:-"nats"}

@@ -27,16 +31,32 @@ export NATS_EXT_PORT_CLIENT=${NATS_EXT_PORT_CLIENT:-"4222"}
# If not already set, set the external port NATS HTTP Mgmt GUI interface will be exposed to.
export NATS_EXT_PORT_HTTP=${NATS_EXT_PORT_HTTP:-"8222"}

# TESTING
# If not already set, set NATS installation mode. Accepted values are: 'single' and 'cluster'.
# - If NATS_DEPLOY_MODE is "single", NATS is deployed in single node mode. It is convenient for
#   development and testing purposes and should fit in a VM. IT SHOULD NOT BE USED IN PRODUCTION ENVIRONMENTS.
# - If NATS_DEPLOY_MODE is "cluster", NATS is deployed in cluster mode, and an entire NATS cluster
#   with 3 replicas (set by default) will be deployed. It is convenient for production and
#   provides scalability features.
export NATS_DEPLOY_MODE=${NATS_DEPLOY_MODE:-"single"}

# If not already set, disable flag for re-deploying NATS from scratch.
# WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE MESSAGE BROKER INFORMATION!
# If NATS_REDEPLOY is "YES", the message broker will be dropped while checking/deploying NATS.
export NATS_REDEPLOY=${NATS_REDEPLOY:-""}


########################################################################################################################
# Automated steps start here
########################################################################################################################

# Constants
TMP_FOLDER="./tmp"
NATS_MANIFESTS_PATH="manifests/nats"

# Create a tmp folder for files modified during the deployment
TMP_MANIFESTS_FOLDER="${TMP_FOLDER}/${NATS_NAMESPACE}/manifests"
mkdir -p $TMP_MANIFESTS_FOLDER

function nats_deploy_single() {
    echo "NATS Namespace"
    echo ">>> Create NATS Namespace (if missing)"
@@ -47,17 +67,84 @@ function nats_deploy_single() {
    helm3 repo add nats https://nats-io.github.io/k8s/helm/charts/
    echo

    echo "Install NATS (single-node)"
    echo ">>> Checking if NATS is deployed..."
    if kubectl get --namespace ${NATS_NAMESPACE} statefulset/${NATS_NAMESPACE} &> /dev/null; then
        echo ">>> NATS is present; skipping step."
    else
        echo ">>> Deploy NATS"
        helm3 install ${NATS_NAMESPACE} nats/nats --namespace ${NATS_NAMESPACE} --set nats.image=nats:2.9-alpine

        echo ">>> Waiting NATS statefulset to be created..."
        while ! kubectl get --namespace ${NATS_NAMESPACE} statefulset/${NATS_NAMESPACE} &> /dev/null; do
            printf "%c" "."
            sleep 1
        done

        # Wait for statefulset condition "Available=True" does not work
        # Wait for statefulset condition "jsonpath='{.status.readyReplicas}'=3" throws error:
        #   "error: readyReplicas is not found"
        # Workaround: Check the pods are ready
        #echo ">>> NATS statefulset created. Waiting for readiness condition..."
        #kubectl wait --namespace  ${NATS_NAMESPACE} --for=condition=Available=True --timeout=300s statefulset/nats
        #kubectl wait --namespace ${NATS_NAMESPACE} --for=jsonpath='{.status.readyReplicas}'=3 --timeout=300s \
        #    statefulset/nats
        echo ">>> NATS statefulset created. Waiting NATS pods to be created..."
        while ! kubectl get --namespace ${NATS_NAMESPACE} pod/${NATS_NAMESPACE}-0 &> /dev/null; do
            printf "%c" "."
            sleep 1
        done
        kubectl wait --namespace ${NATS_NAMESPACE} --for=condition=Ready --timeout=300s pod/${NATS_NAMESPACE}-0
    fi
    echo

    echo "NATS Port Mapping"
    echo ">>> Expose NATS Client port (4222->${NATS_EXT_PORT_CLIENT})"
    NATS_PORT_CLIENT=$(kubectl --namespace ${NATS_NAMESPACE} get service ${NATS_NAMESPACE} -o 'jsonpath={.spec.ports[?(@.name=="client")].port}')
    PATCH='{"data": {"'${NATS_EXT_PORT_CLIENT}'": "'${NATS_NAMESPACE}'/'${NATS_NAMESPACE}':'${NATS_PORT_CLIENT}'"}}'
    kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"

    PORT_MAP='{"containerPort": '${NATS_EXT_PORT_CLIENT}', "hostPort": '${NATS_EXT_PORT_CLIENT}'}'
    CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
    PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
    kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
    echo

    echo ">>> Expose NATS HTTP Mgmt GUI port (8222->${NATS_EXT_PORT_HTTP})"
    NATS_PORT_HTTP=$(kubectl --namespace ${NATS_NAMESPACE} get service ${NATS_NAMESPACE} -o 'jsonpath={.spec.ports[?(@.name=="monitor")].port}')
    PATCH='{"data": {"'${NATS_EXT_PORT_HTTP}'": "'${NATS_NAMESPACE}'/'${NATS_NAMESPACE}':'${NATS_PORT_HTTP}'"}}'
    kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"

    PORT_MAP='{"containerPort": '${NATS_EXT_PORT_HTTP}', "hostPort": '${NATS_EXT_PORT_HTTP}'}'
    CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
    PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
    kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
    echo
}


function nats_deploy_cluster() {
    echo "NATS Namespace"
    echo ">>> Create NATS Namespace (if missing)"
    kubectl create namespace ${NATS_NAMESPACE}
    echo

    echo "Add NATS Helm Chart"
    helm3 repo add nats https://nats-io.github.io/k8s/helm/charts/
    echo

    echo "Upgrade NATS Helm Chart"
    helm3 repo update nats
    echo

    echo "Install NATS (single-node)"
    echo "Install NATS (cluster-mode)"
    echo ">>> Checking if NATS is deployed..."
    if kubectl get --namespace ${NATS_NAMESPACE} statefulset/${NATS_NAMESPACE} &> /dev/null; then
        echo ">>> NATS is present; skipping step."
    else
        echo ">>> Deploy NATS"
        helm3 install ${NATS_NAMESPACE} nats/nats --namespace ${NATS_NAMESPACE} --set nats.image=nats:2.9-alpine
        cp "${NATS_MANIFESTS_PATH}/cluster.yaml" "${TMP_MANIFESTS_FOLDER}/nats_cluster.yaml"
        helm3 install ${NATS_NAMESPACE} nats/nats --namespace ${NATS_NAMESPACE} -f "${TMP_MANIFESTS_FOLDER}/nats_cluster.yaml"
    
        echo ">>> Waiting NATS statefulset to be created..."
        while ! kubectl get --namespace ${NATS_NAMESPACE} statefulset/${NATS_NAMESPACE} &> /dev/null; do
@@ -78,7 +165,17 @@ function nats_deploy_single() {
            printf "%c" "."
            sleep 1
        done
        while ! kubectl get --namespace ${NATS_NAMESPACE} pod/${NATS_NAMESPACE}-1 &> /dev/null; do
            printf "%c" "."
            sleep 1
        done
        while ! kubectl get --namespace ${NATS_NAMESPACE} pod/${NATS_NAMESPACE}-2 &> /dev/null; do
            printf "%c" "."
            sleep 1
        done
        kubectl wait --namespace ${NATS_NAMESPACE} --for=condition=Ready --timeout=300s pod/${NATS_NAMESPACE}-0
        kubectl wait --namespace ${NATS_NAMESPACE} --for=condition=Ready --timeout=300s pod/${NATS_NAMESPACE}-1
        kubectl wait --namespace ${NATS_NAMESPACE} --for=condition=Ready --timeout=300s pod/${NATS_NAMESPACE}-2
    fi
    echo

@@ -110,7 +207,7 @@ function nats_deploy_single() {
    echo
}

function nats_undeploy_single() {
function nats_undeploy() {
    echo "NATS"
    echo ">>> Checking if NATS is deployed..."
    if kubectl get --namespace ${NATS_NAMESPACE} statefulset/${NATS_NAMESPACE} &> /dev/null; then
@@ -127,8 +224,14 @@ function nats_undeploy_single() {
    echo
}

if [ "$NATS_REDEPLOY" == "YES" ]; then
    nats_undeploy_single
if [ "$NATS_REDEPLOY" == "YES" ] || [ "$REDEPLOYALL" == "YES" ]; then
    nats_undeploy
fi

if [ "$NATS_DEPLOY_MODE" == "single" ]; then
    nats_deploy_single
elif [ "$NATS_DEPLOY_MODE" == "cluster" ]; then
    nats_deploy_cluster
else
    echo "Unsupported value: NATS_DEPLOY_MODE=$NATS_DEPLOY_MODE"
fi
 No newline at end of file
+5 −1
Original line number Diff line number Diff line
@@ -18,6 +18,10 @@
# Read deployment settings
########################################################################################################################

# ----- Redeploy All ------------------------------------------------------------
# If not already set, enables all components redeployment
export REDEPLOYALL=${REDEPLOYALL:-""}

# If not already set, set the namespace where QuestDB will be deployed.
export QDB_NAMESPACE=${QDB_NAMESPACE:-"qdb"}

@@ -177,7 +181,7 @@ function qdb_drop_tables() {
    echo
}

if [ "$QDB_REDEPLOY" == "YES" ]; then
if [ "$QDB_REDEPLOY" == "YES" ] || [ "$REDEPLOYALL" == "YES" ]; then
    qdb_undeploy
fi

+17 −19
Original line number Diff line number Diff line
@@ -33,11 +33,13 @@ spec:
  resources:
    requests:
      # This is intentionally low to make it work on local k3d clusters.
      cpu: 4
      memory: 4Gi
      # TESTING
      cpu: 1 #4
      memory: 500Mi #4Gi
    limits:
      cpu: 8
      memory: 8Gi
      # TESTING
      cpu: 1 #8
      memory: 1Gi #8Gi
  tlsEnabled: true
  # You can set either a version of the db or a specific image name
  # cockroachDBVersion: v22.2.8
@@ -52,18 +54,14 @@ spec:
  # disabled by default. To enable please see the operator.yaml file.

  # The affinity field will accept any podSpec affinity rule.
  # affinity:
  #   podAntiAffinity:
  #      preferredDuringSchedulingIgnoredDuringExecution:
  #      - weight: 100
  #        podAffinityTerm:
  #          labelSelector:
  #            matchExpressions:
  #            - key: app.kubernetes.io/instance
  #              operator: In
  #              values:
  #              - cockroachdb
  #          topologyKey: kubernetes.io/hostname
  # TESTING: Force one pod per node, if possible
  topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: kubernetes.io/hostname  
    whenUnsatisfiable: ScheduleAnyway
    labelSelector:
      matchLabels:
        app.kubernetes.io/instance: cockroachdb

  # nodeSelectors used to match against
  # nodeSelector:
Loading