Unverified Commit ad4821c5 authored by julienmancuso's avatar julienmancuso Committed by GitHub
Browse files

feat: Cleanup dynamo cloud installation documentation (#2807)


Signed-off-by: default avatarJulien Mancuso <jmancuso@nvidia.com>
parent 87a721a8
# Dynamo Deployment
➡️ View the full [guide](../docs/guides/dynamo_deploy/README.md)
../docs/guides/dynamo_deploy/README.md
\ No newline at end of file
...@@ -15,76 +15,9 @@ See the License for the specific language governing permissions and ...@@ -15,76 +15,9 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
# 🚀 Deploy Dynamo Cloud to Kubernetes # Dynamo Kubernetes Platform Helm Charts
Dynamo Cloud acts as an orchestration layer between the end user and Kubernetes, handling the complexity of deploying your graphs for you.
Before you can deploy your graphs, you need to deploy the Dynamo Runtime and Dynamo Cloud images. This is a one-time action, only necessary the first time you deploy a DynamoGraph.
[See Dynamo Cloud Guide](../../../docs/guides/dynamo_deploy/dynamo_cloud.md) for advanced cases and details on how to install and use Dynamo Cloud. For a quick start follow the steps below.
## 🏗️ Building Docker images for Dynamo Cloud components
You can build and push Docker images for the Dynamo cloud components to any container registry of your choice.
**Important** Make sure you're logged in to your container registry before pushing images. For example:
```bash
docker login <CONTAINER_REGISTRY>
```
#### 🛠️ Build and push images for the Dynamo Cloud platform components
[One-time Action]
You should build the image(s) for the Dynamo Cloud Platform.
If you are a **👤 Dynamo User** you would do this step once.
```bash
export DOCKER_SERVER=<your-docker-server>
export IMAGE_TAG=<TAG>
cd deploy/cloud/operator
earthly --push +docker --DOCKER_SERVER=$DOCKER_SERVER --IMAGE_TAG=$IMAGE_TAG
```
If you are a **🧑‍💻 Dynamo Contributor** you would have to rebuild the dynamo platform images as the code evolves. To do so please look at the [Cloud Guide](../../../docs/guides/dynamo_deploy/dynamo_cloud.md).
### 🚀 Deploying the Dynamo Cloud Platform
1. Set the required environment variables:
```bash
export PROJECT_ROOT=$(pwd)
export DOCKER_USERNAME=<your-docker-username>
export DOCKER_PASSWORD=<your-docker-password>
export DOCKER_SERVER=<your-docker-server>
export IMAGE_TAG=<TAG> # Use the same tag you used when building the images
export NAMESPACE=dynamo-cloud # change this to whatever you want!
export DYNAMO_INGRESS_SUFFIX=dynamo-cloud.com # change this to whatever you want!
```
2. [One-time Action] Create a new kubernetes namespace and set it as your default. Create image pull secrets if needed.
```bash
cd $PROJECT_ROOT/deploy/cloud/helm
kubectl create namespace $NAMESPACE
kubectl config set-context --current --namespace=$NAMESPACE
```
3. Deploy Dynamo Cloud using the Helm chart via the provided deploy script:
To deploy the Dynamo Cloud Platform on Kubernetes, run:
```bash
./deploy.sh --crds
```
if you want guidance during the process, run the deployment script with the `--interactive` flag:
```bash
./deploy.sh --crds --interactive
```
omitting `--crds` will skip the CRDs installation/upgrade. This is useful when installing on a shared cluster as CRDs are cluster-scoped resources.
There are two Helm charts available for the Dynamo Kubernetes Platform:
- [platform](platform/README.md) - This chart installs the complete Dynamo Kubernetes Platform, including the Dynamo Operator, NATS, etcd, Grove, and Kai Scheduler.
- [crds](crds/README.md) - This chart installs the CRDs for the Dynamo Kubernetes Platform.
\ No newline at end of file
...@@ -15,9 +15,6 @@ See the License for the specific language governing permissions and ...@@ -15,9 +15,6 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
# Dynamo Cloud Platform # Dynamo Kubernetes Platform CRDs Helm Chart
This directory contains the infrastructure components required for the Dynamo cloud platform. This chart installs the [CRDs](../../../../docs/guides/dynamo_deploy/api_reference.md) for the Dynamo Kubernetes Platform.
\ No newline at end of file
For detailed documentation on setting up and using the Dynamo Cloud Platform, please refer to:
- [Dynamo Cloud Platform Guide](../../docs/guides/dynamo_deploy/dynamo_cloud.md)
\ No newline at end of file
#!/bin/bash
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. 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.
set -euo pipefail
trap 'echo "Error at line $LINENO. Exiting."' ERR
required_tools=(envsubst kubectl helm)
for tool in "${required_tools[@]}"; do
if ! command -v "$tool" >/dev/null 2>&1; then
echo "Error: Required tool '$tool' is not installed or not in PATH."
exit 1
fi
done
# Use system helm
HELM_CMD=$(which helm)
# Set default values only if not already set
export NAMESPACE="${NAMESPACE:=dynamo-cloud}" # Default namespace
export RELEASE_NAME="${RELEASE_NAME:=${NAMESPACE}}" # Default release name is same as namespace
export DOCKER_USERNAME="${DOCKER_USERNAME:-}" # Default docker username is empty
export DOCKER_PASSWORD="${DOCKER_PASSWORD:-}" # Default docker password is empty
export DOCKER_SERVER="${DOCKER_SERVER:=<your-docker-server>}" # Default docker server
export PIPELINES_DOCKER_SERVER="${PIPELINES_DOCKER_SERVER:=${DOCKER_SERVER}}"
export PIPELINES_DOCKER_USERNAME="${PIPELINES_DOCKER_USERNAME:=${DOCKER_USERNAME}}"
export PIPELINES_DOCKER_PASSWORD="${PIPELINES_DOCKER_PASSWORD:=${DOCKER_PASSWORD}}"
export IMAGE_TAG="${IMAGE_TAG:=latest}" # Default image tag
export DYNAMO_INGRESS_SUFFIX="${DYNAMO_INGRESS_SUFFIX:=dynamo-cloud.com}"
export DOCKER_SECRET_NAME="${DOCKER_SECRET_NAME:=docker-imagepullsecret}"
export INGRESS_ENABLED="${INGRESS_ENABLED:=false}"
export ISTIO_ENABLED="${ISTIO_ENABLED:=false}"
export ISTIO_GATEWAY="${ISTIO_GATEWAY:=istio-system/istio-ingressgateway}"
export INGRESS_CLASS="${INGRESS_CLASS:=nginx}"
export VIRTUAL_SERVICE_SUPPORTS_HTTPS="${VIRTUAL_SERVICE_SUPPORTS_HTTPS:=false}"
export DOCKER_REGISTRY_USE_KUBERNETES_SECRET="${DOCKER_REGISTRY_USE_KUBERNETES_SECRET:=false}"
# Add command line options
INTERACTIVE=false
INSTALL_CRDS=false
YAML_ONLY=false
# Parse command line arguments
while [[ $# -gt 0 ]]; do
key="$1"
case $key in
--interactive)
INTERACTIVE=true
shift
;;
--crds)
INSTALL_CRDS=true
shift
;;
--yaml-only)
YAML_ONLY=true
shift
;;
--help)
echo "Usage: $0 [options]"
echo "Options:"
echo " --interactive Run in interactive mode"
echo " --yaml-only Only generate generated-values.yaml and exit"
echo " --help Show this help message"
echo " --crds Also install the CRDs"
exit 0
;;
*)
echo "Unknown option: $1"
echo "Use --help for usage information."
exit 1
;;
esac
done
if [ "$INTERACTIVE" = true ]; then
source network-config-wizard.sh
fi
# Check if required variables are set
if [ "$DOCKER_SERVER" = "<your-docker-server>" ]; then
echo "Error: Please set your DOCKER_SERVER in the script or via environment variable"
exit 1
fi
# Creates a docker registry secret. Only proceed if both username and password are set
if [[ -n "${DOCKER_USERNAME:-}" && -n "${DOCKER_PASSWORD:-}" ]]; then
echo "Creating/updating Docker registry secret '$DOCKER_SECRET_NAME' in namespace '$NAMESPACE'..."
# Transform docker.io URLs to index.docker.io/v1/
DOCKER_SERVER_FOR_SECRET="$DOCKER_SERVER"
if [[ "$DOCKER_SERVER" == "docker.io" || "$DOCKER_SERVER" == "docker.io/"* ]]; then
DOCKER_SERVER_FOR_SECRET="https://index.docker.io/v1/"
fi
kubectl create secret docker-registry "$DOCKER_SECRET_NAME" \
--docker-username="$DOCKER_USERNAME" \
--docker-password="$DOCKER_PASSWORD" \
--docker-server="$DOCKER_SERVER_FOR_SECRET" \
--namespace "$NAMESPACE" \
--dry-run=client -o yaml | kubectl apply -f -
export DOCKER_REGISTRY_USE_KUBERNETES_SECRET=true
else
echo "DOCKER_USERNAME and/or DOCKER_PASSWORD not set — skipping docker secret creation."
fi
# Function to retry commands
retry_command() {
local -r cmd="$1"
local -r max_attempts=${2:-3}
local -r delay=${3:-5}
local attempt=1
until eval "$cmd"; do
if ((attempt >= max_attempts)); then
echo "Command '$cmd' failed after $attempt attempts"
return 1
fi
echo "Command '$cmd' failed, attempt $attempt of $max_attempts. Retrying in ${delay}s..."
((attempt++))
sleep "$delay"
done
}
# Update the helm repo and build the dependencies
retry_command "$HELM_CMD repo add nats https://nats-io.github.io/k8s/helm/charts/" 5 5 && \
# retry_command "$HELM_CMD repo add bitnami https://charts.bitnami.com/bitnami" 5 5 && \
# retry_command "$HELM_CMD repo add minio https://charts.min.io/" 5 5 && \
retry_command "$HELM_CMD repo update" 5 5
# Generate the values file
echo "Generating values file with:"
echo "NAMESPACE: $NAMESPACE"
echo "RELEASE_NAME: $RELEASE_NAME"
echo "IMAGE_TAG: $IMAGE_TAG"
echo "DOCKER_USERNAME: $DOCKER_USERNAME"
echo "DOCKER_SERVER: $DOCKER_SERVER"
echo "DOCKER_PASSWORD: [HIDDEN]"
echo "PIPELINES_DOCKER_SERVER: $PIPELINES_DOCKER_SERVER"
echo "PIPELINES_DOCKER_USERNAME: $PIPELINES_DOCKER_USERNAME"
echo "PIPELINES_DOCKER_PASSWORD: [HIDDEN]"
echo "DOCKER_SECRET_NAME: $DOCKER_SECRET_NAME"
echo "INGRESS_ENABLED: $INGRESS_ENABLED"
echo "ISTIO_ENABLED: $ISTIO_ENABLED"
echo "INGRESS_CLASS: $INGRESS_CLASS"
echo "ISTIO_GATEWAY: $ISTIO_GATEWAY"
echo "DYNAMO_INGRESS_SUFFIX: $DYNAMO_INGRESS_SUFFIX"
echo "VIRTUAL_SERVICE_SUPPORTS_HTTPS: $VIRTUAL_SERVICE_SUPPORTS_HTTPS"
echo "INSTALL_CRDS: $INSTALL_CRDS"
echo "DOCKER_REGISTRY_USE_KUBERNETES_SECRET: $DOCKER_REGISTRY_USE_KUBERNETES_SECRET"
envsubst '${NAMESPACE} ${RELEASE_NAME} ${DOCKER_USERNAME} ${DOCKER_PASSWORD} ${DOCKER_SERVER} ${IMAGE_TAG} ${DYNAMO_INGRESS_SUFFIX} ${PIPELINES_DOCKER_SERVER} ${PIPELINES_DOCKER_USERNAME} ${PIPELINES_DOCKER_PASSWORD} ${DOCKER_SECRET_NAME} ${INGRESS_ENABLED} ${ISTIO_ENABLED} ${INGRESS_CLASS} ${ISTIO_GATEWAY} ${VIRTUAL_SERVICE_SUPPORTS_HTTPS} ${DOCKER_REGISTRY_USE_KUBERNETES_SECRET}' < dynamo-platform-values.yaml > generated-values.yaml
echo "generated file contents:"
cat generated-values.yaml
echo ""
echo "Generated values file saved as generated-values.yaml"
if [ "$YAML_ONLY" = true ]; then
echo "--yaml-only flag detected; skipping Helm deployment steps."
exit 0
fi
# Build dependencies before installation
echo "Building helm dependencies..."
cd platform
retry_command "$HELM_CMD dep build" 5 5
cd ..
# Install/upgrade the helm chart for the CRDs
if [ "$INSTALL_CRDS" = true ]; then
echo "Installing/upgrading helm chart for the CRDs..."
$HELM_CMD upgrade --install dynamo-crds crds/ --namespace default --wait --atomic
fi
# Build Platform
echo "Building platform..."
$HELM_CMD dep build ./platform/
# Install platform
echo "Installing platform..."
helm upgrade --install dynamo-platform ./platform/ \
--namespace ${NAMESPACE} \
--set "dynamo-operator.controllerManager.manager.image.repository=${DOCKER_SERVER}/dynamo-operator" \
--set "dynamo-operator.controllerManager.manager.image.tag=${IMAGE_TAG}" \
--set "dynamo-operator.imagePullSecrets[0].name=docker-imagepullsecret" \
-f generated-values.yaml
echo "Helm chart deployment complete"
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. 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.
dynamo-operator:
controllerManager:
manager:
image:
repository: ${DOCKER_SERVER}/dynamo-operator
tag: ${IMAGE_TAG}
imagePullSecrets:
- name: ${DOCKER_SECRET_NAME}
dynamo:
ingress:
enabled: ${INGRESS_ENABLED}
className: ${INGRESS_CLASS}
istio:
enabled: ${ISTIO_ENABLED}
gateway: ${ISTIO_GATEWAY}
ingressHostSuffix: ${DYNAMO_INGRESS_SUFFIX}
dockerRegistry:
useKubernetesSecret: ${DOCKER_REGISTRY_USE_KUBERNETES_SECRET}
server: ${PIPELINES_DOCKER_SERVER}
username: ${PIPELINES_DOCKER_USERNAME}
password: ${PIPELINES_DOCKER_PASSWORD}
virtualServiceSupportsHTTPS: ${VIRTUAL_SERVICE_SUPPORTS_HTTPS}
#!/bin/bash
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. 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.
# Colors for output
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# Function to extract domain suffix from hostname
extract_domain_suffix() {
local host="$1"
# If it has at least one dot, extract everything after the first dot
if [[ "$host" == *"."* ]]; then
echo "$host" | sed -E 's/^[^.]+\.(.*)/\1/'
else
# If no dots, return the original
echo "$host"
fi
}
# Function to print section header
print_header() {
echo -e "${BLUE}===================================================${NC}"
echo -e "${BLUE} $1 ${NC}"
echo -e "${BLUE}===================================================${NC}"
}
# Function to check if a command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Check for required commands
print_header "Checking Requirements"
for cmd in kubectl jq; do
if ! command_exists "$cmd"; then
echo -e "${RED}Error: $cmd is not installed or not in PATH${NC}"
exit 1
fi
done
echo -e "${GREEN}✅ All required tools are available${NC}"
# Check if kubectl can access the cluster
echo -e "\n${YELLOW}Checking cluster connectivity...${NC}"
if ! kubectl get nodes &>/dev/null; then
echo -e "${RED}Error: Cannot connect to Kubernetes cluster${NC}"
echo -e "${YELLOW}Please make sure you're connected to your cluster and try again.${NC}"
exit 1
fi
echo -e "${GREEN}✅ Connected to Kubernetes cluster${NC}"
# Initialize variables
ISTIO_INSTALLED=false
INGRESS_INSTALLED=false
CONFIG_TYPE=""
ISTIO_GATEWAY=""
ISTIO_HOST_SUFFIX=""
INGRESS_CLASS=""
INGRESS_HOST_SUFFIX=""
print_header "Detecting Network Components"
# Check for Istio installation
echo -e "${YELLOW}Checking for Istio...${NC}"
if kubectl get crd gateways.networking.istio.io &>/dev/null; then
echo -e "${GREEN}✅ Istio is installed${NC}"
ISTIO_INSTALLED=true
# Get list of gateways
echo -e "${YELLOW}Discovering Istio gateways...${NC}"
GATEWAY_LIST=($(kubectl get gateway --all-namespaces -o jsonpath='{range .items[*]}{.metadata.namespace}/{.metadata.name}{"\n"}{end}' 2>/dev/null))
if [ ${#GATEWAY_LIST[@]} -eq 0 ]; then
echo -e "${YELLOW}No gateways found. Will use default suggestions.${NC}"
GATEWAY_LIST=("istio-system/istio-ingressgateway")
else
echo -e "${GREEN}Found ${#GATEWAY_LIST[@]} gateway(s)${NC}"
fi
# Get host patterns from virtual services
echo -e "${YELLOW}Discovering host patterns from VirtualServices...${NC}"
HOST_PATTERNS=($(kubectl get virtualservices --all-namespaces -o json 2>/dev/null | \
jq -r '.items[].spec.hosts[]?' | grep -v null | grep -v '\*' | \
while read host; do extract_domain_suffix "$host"; done | sort | uniq))
if [ ${#HOST_PATTERNS[@]} -eq 0 ]; then
echo -e "${YELLOW}No host patterns found in VirtualServices.${NC}"
else
echo -e "${GREEN}Found ${#HOST_PATTERNS[@]} host pattern(s)${NC}"
fi
else
echo -e "${YELLOW}Istio is not installed${NC}"
fi
# Check for Ingress controllers
echo -e "\n${YELLOW}Checking for Ingress controllers...${NC}"
INGRESS_CLASSES=($(kubectl get ingressclass -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' 2>/dev/null))
if [ ${#INGRESS_CLASSES[@]} -gt 0 ]; then
echo -e "${GREEN}✅ Ingress controller is installed${NC}"
INGRESS_INSTALLED=true
echo -e "${GREEN}Found ${#INGRESS_CLASSES[@]} IngressClass(es)${NC}"
# Get default IngressClass if available
DEFAULT_CLASS=$(kubectl get ingressclass -o json 2>/dev/null | \
jq -r '.items[] | select(.metadata.annotations."ingressclass.kubernetes.io/is-default-class" == "true") | .metadata.name')
if [ ! -z "$DEFAULT_CLASS" ]; then
echo -e "${GREEN}Default IngressClass: ${DEFAULT_CLASS}${NC}"
fi
# Get host patterns from Ingress resources
echo -e "${YELLOW}Discovering host patterns from Ingress resources...${NC}"
INGRESS_HOST_PATTERNS=($(kubectl get ingress --all-namespaces -o json 2>/dev/null | \
jq -r '.items[].spec.rules[].host?' | grep -v null | grep -v '\*' | \
while read host; do extract_domain_suffix "$host"; done | sort | uniq))
if [ ${#INGRESS_HOST_PATTERNS[@]} -eq 0 ]; then
echo -e "${YELLOW}No host patterns found in Ingress resources.${NC}"
else
echo -e "${GREEN}Found ${#INGRESS_HOST_PATTERNS[@]} host pattern(s)${NC}"
fi
else
echo -e "${YELLOW}No Ingress controller found${NC}"
fi
# Interactive configuration
print_header "Network Configuration Wizard"
# If neither is installed, inform the user
if [ "$ISTIO_INSTALLED" = false ] && [ "$INGRESS_INSTALLED" = false ]; then
echo -e "${RED}Neither Istio nor Ingress controller was detected in your cluster.${NC}"
echo -e "${YELLOW}Please install one of them before running this wizard again.${NC}"
exit 1
fi
# Ask which type to use if both are available
if [ "$ISTIO_INSTALLED" = true ] && [ "$INGRESS_INSTALLED" = true ]; then
echo -e "${CYAN}Both Istio and Ingress controller are available in your cluster.${NC}"
echo -e "${CYAN}Which would you like to use for your application?${NC}"
PS3='Please choose (enter number): '
options=("Istio" "Ingress Controller" "None (Skip network configuration)")
select opt in "${options[@]}"; do
case $opt in
"Istio")
CONFIG_TYPE="istio"
break
;;
"Ingress Controller")
CONFIG_TYPE="ingress"
break
;;
"None (Skip network configuration)")
CONFIG_TYPE="none"
break
;;
*)
echo -e "${RED}Invalid option $REPLY${NC}"
;;
esac
done
elif [ "$ISTIO_INSTALLED" = true ]; then
echo -e "${CYAN}Istio is available in your cluster.${NC}"
read -p "Do you want to use Istio for your application? (y/n): " -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
CONFIG_TYPE="istio"
else
CONFIG_TYPE="none"
fi
elif [ "$INGRESS_INSTALLED" = true ]; then
echo -e "${CYAN}Ingress controller is available in your cluster.${NC}"
read -p "Do you want to use the Ingress for your application? (y/n): " -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
CONFIG_TYPE="ingress"
else
CONFIG_TYPE="none"
fi
fi
echo
# Configure based on selection
if [ "$CONFIG_TYPE" = "istio" ]; then
echo -e "${CYAN}Configuring Istio settings...${NC}"
# Select gateway
if [ ${#GATEWAY_LIST[@]} -gt 0 ]; then
echo -e "${CYAN}Which Istio gateway would you like to use?${NC}"
PS3='Please choose a gateway (enter number): '
select gateway in "${GATEWAY_LIST[@]}" "Enter custom gateway"; do
if [ "$gateway" = "Enter custom gateway" ]; then
read -p "Enter custom gateway (namespace/name): " ISTIO_GATEWAY
break
elif [ ! -z "$gateway" ]; then
ISTIO_GATEWAY=$gateway
break
else
echo -e "${RED}Invalid selection${NC}"
fi
done
else
read -p "Enter Istio gateway (namespace/name, default: istio-system/istio-ingressgateway): " ISTIO_GATEWAY
if [ -z "$ISTIO_GATEWAY" ]; then
ISTIO_GATEWAY="istio-system/istio-ingressgateway"
fi
fi
# Select host suffix
if [ ${#HOST_PATTERNS[@]} -gt 0 ]; then
echo -e "${CYAN}Which host suffix would you like to use?${NC}"
PS3='Please choose a host suffix (enter number): '
select host_suffix in "${HOST_PATTERNS[@]}" "Enter custom host suffix"; do
if [ "$host_suffix" = "Enter custom host suffix" ]; then
read -p "Enter custom host suffix (e.g., example.com): " ISTIO_HOST_SUFFIX
break
elif [ ! -z "$host_suffix" ]; then
ISTIO_HOST_SUFFIX=$host_suffix
break
else
echo -e "${RED}Invalid selection${NC}"
fi
done
else
read -p "Enter host suffix (e.g., example.com): " ISTIO_HOST_SUFFIX
if [ -z "$ISTIO_HOST_SUFFIX" ]; then
read -p "Host suffix is required. Please enter a value: " ISTIO_HOST_SUFFIX
while [ -z "$ISTIO_HOST_SUFFIX" ]; do
read -p "Host suffix is required. Please enter a value: " ISTIO_HOST_SUFFIX
done
fi
fi
# Ask if the Istio gateway supports HTTPS
read -p "Does your Istio gateway support HTTPS? (y/n): " SUPPORTS_HTTPS_REPLY
if [[ "$SUPPORTS_HTTPS_REPLY" =~ ^[Yy]$ ]]; then
export VIRTUAL_SERVICE_SUPPORTS_HTTPS=true
else
export VIRTUAL_SERVICE_SUPPORTS_HTTPS=false
fi
elif [ "$CONFIG_TYPE" = "ingress" ]; then
echo -e "${CYAN}Configuring Ingress settings...${NC}"
# Select IngressClass
if [ ${#INGRESS_CLASSES[@]} -gt 0 ] ; then
echo -e "${CYAN}Which IngressClass would you like to use?${NC}"
PS3='Please choose an IngressClass (enter number): '
select ingress_class in "${INGRESS_CLASSES[@]}" "Enter custom IngressClass"; do
if [ "$ingress_class" = "Enter custom IngressClass" ]; then
read -p "Enter custom IngressClass: " INGRESS_CLASS
break
elif [ ! -z "$ingress_class" ]; then
INGRESS_CLASS=$ingress_class
break
else
echo -e "${RED}Invalid selection${NC}"
fi
done
else
read -p "Enter IngressClass (default: nginx): " INGRESS_CLASS
if [ -z "$INGRESS_CLASS" ]; then
INGRESS_CLASS="nginx"
fi
fi
# Select host suffix
if [ ${#INGRESS_HOST_PATTERNS[@]} -gt 0 ]; then
echo -e "${CYAN}Which host suffix would you like to use?${NC}"
PS3='Please choose a host suffix (enter number): '
select host_suffix in "${INGRESS_HOST_PATTERNS[@]}" "Enter custom host suffix"; do
if [ "$host_suffix" = "Enter custom host suffix" ]; then
read -p "Enter custom host suffix (e.g., example.com): " INGRESS_HOST_SUFFIX
break
elif [ ! -z "$host_suffix" ]; then
INGRESS_HOST_SUFFIX=$host_suffix
break
else
echo -e "${RED}Invalid selection${NC}"
fi
done
else
read -p "Enter host suffix (e.g., example.com): " INGRESS_HOST_SUFFIX
if [ -z "$INGRESS_HOST_SUFFIX" ]; then
read -p "Host suffix is required. Please enter a value: " INGRESS_HOST_SUFFIX
while [ -z "$INGRESS_HOST_SUFFIX" ]; do
read -p "Host suffix is required. Please enter a value: " INGRESS_HOST_SUFFIX
done
fi
fi
fi
# Generate values.yaml snippet
if [ "$CONFIG_TYPE" = "none" ]; then
print_header "Configuration Summary"
echo -e "${YELLOW}You've chosen not to configure network access.${NC}"
echo -e "${YELLOW}Your application will not be exposed outside the cluster.${NC}"
elif [ "$CONFIG_TYPE" = "istio" ]; then
print_header "Configuration Summary"
echo -e "${YELLOW}Istio Configuration:${NC}"
echo -e "Gateway: ${GREEN}$ISTIO_GATEWAY${NC}"
echo -e "Host Suffix: ${GREEN}$ISTIO_HOST_SUFFIX${NC}"
export ISTIO_ENABLED=true
export INGRESS_ENABLED=false
export ISTIO_GATEWAY=$ISTIO_GATEWAY
export DYNAMO_INGRESS_SUFFIX=$ISTIO_HOST_SUFFIX
elif [ "$CONFIG_TYPE" = "ingress" ]; then
print_header "Configuration Summary"
echo -e "${YELLOW}Ingress Configuration:${NC}"
echo -e "IngressClass: ${GREEN}$INGRESS_CLASS${NC}"
echo -e "Host Suffix: ${GREEN}$INGRESS_HOST_SUFFIX${NC}"
export INGRESS_ENABLED=true
export ISTIO_ENABLED=false
export INGRESS_CLASS=$INGRESS_CLASS
export DYNAMO_INGRESS_SUFFIX=$INGRESS_HOST_SUFFIX
fi
print_header "Wizard Complete"
echo -e "${GREEN}Network configuration complete!${NC}"
...@@ -101,7 +101,7 @@ For detailed etcd configuration options beyond `etcd.enabled`, please refer to t ...@@ -101,7 +101,7 @@ For detailed etcd configuration options beyond `etcd.enabled`, please refer to t
## 📚 Additional Resources ## 📚 Additional Resources
- [Dynamo Cloud Deployment Guide](../../../../docs/guides/dynamo_deploy/dynamo_cloud.md) - [Dynamo Cloud Deployment Installation Guide](../../../../docs/guides/dynamo_deploy/installation_guide.md)
- [NATS Documentation](https://docs.nats.io/) - [NATS Documentation](https://docs.nats.io/)
- [etcd Documentation](https://etcd.io/docs/) - [etcd Documentation](https://etcd.io/docs/)
- [Kubernetes Operator Pattern](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) - [Kubernetes Operator Pattern](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/)
......
...@@ -57,7 +57,7 @@ For detailed etcd configuration options beyond `etcd.enabled`, please refer to t ...@@ -57,7 +57,7 @@ For detailed etcd configuration options beyond `etcd.enabled`, please refer to t
## 📚 Additional Resources ## 📚 Additional Resources
- [Dynamo Cloud Deployment Guide](../../../../docs/guides/dynamo_deploy/dynamo_cloud.md) - [Dynamo Cloud Deployment Installation Guide](../../../../docs/guides/dynamo_deploy/installation_guide.md)
- [NATS Documentation](https://docs.nats.io/) - [NATS Documentation](https://docs.nats.io/)
- [etcd Documentation](https://etcd.io/docs/) - [etcd Documentation](https://etcd.io/docs/)
- [Kubernetes Operator Pattern](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) - [Kubernetes Operator Pattern](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/)
......
...@@ -125,9 +125,16 @@ kai-scheduler: ...@@ -125,9 +125,16 @@ kai-scheduler:
# etcd configuration - distributed key-value store for operator state # etcd configuration - distributed key-value store for operator state
# For complete configuration options, see: https://github.com/bitnami/charts/tree/main/bitnami/etcd # For complete configuration options, see: https://github.com/bitnami/charts/tree/main/bitnami/etcd
etcd: etcd:
global:
security:
allowInsecureImages: true
# -- Whether to enable etcd deployment, disable if you want to use an external etcd instance # -- Whether to enable etcd deployment, disable if you want to use an external etcd instance
enabled: true enabled: true
image:
repository: bitnamilegacy/etcd
# Persistent storage configuration for etcd data # Persistent storage configuration for etcd data
persistence: persistence:
# Whether to enable persistent storage (recommended for production) # Whether to enable persistent storage (recommended for production)
......
...@@ -285,8 +285,12 @@ generate-api-docs: crd-ref-docs ## Generate API reference documentation from CRD ...@@ -285,8 +285,12 @@ generate-api-docs: crd-ref-docs ## Generate API reference documentation from CRD
--source-path=api \ --source-path=api \
--config=docs/crd-ref-docs-config.yaml \ --config=docs/crd-ref-docs-config.yaml \
--renderer=markdown \ --renderer=markdown \
--output-path=docs/api_reference.md --output-path=./docs/api_reference.md
@echo "✅ Generated API reference at docs/api_reference.md" @echo "✅ Generated API reference at ./docs/api_reference.md"
# concatenate header.md and api_reference.md
cat docs/header.md ./docs/api_reference.md > ../../../docs/guides/dynamo_deploy/api_reference.md
rm ./docs/api_reference.md
@echo "✅ Concatenated header.md and api_reference.md"
.PHONY: coverage .PHONY: coverage
coverage: test coverage: test
......
...@@ -21,3 +21,7 @@ Built with [Kubebuilder](https://book.kubebuilder.io/), it follows Kubernetes be ...@@ -21,3 +21,7 @@ Built with [Kubebuilder](https://book.kubebuilder.io/), it follows Kubernetes be
``` ```
make make
``` ```
### Install
See [Dynamo Kubernetes Platform Installation Guide](/docs/guides/dynamo_deploy/installation_guide.md) for installation instructions.
...@@ -15,8 +15,6 @@ See the License for the specific language governing permissions and ...@@ -15,8 +15,6 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
# Dynamo CRD API Reference > **⚠️ Important**: This documentation is automatically generated from source code.
> Do not edit this file directly.
For the complete technical API reference for Dynamo Custom Resource Definitions, see:
**📖 [Dynamo CRD API Reference](../../../deploy/cloud/operator/docs/api_reference.md)**
...@@ -20,7 +20,23 @@ limitations under the License. ...@@ -20,7 +20,23 @@ limitations under the License.
High-level guide to Dynamo Kubernetes deployments. Start here, then dive into specific guides. High-level guide to Dynamo Kubernetes deployments. Start here, then dive into specific guides.
## 1. Install Platform First ## 1. Install Platform First
**[Dynamo Kubernetes Platform](dynamo_cloud.md)** - Main installation guide with 3 paths
```bash
# 1. Set environment
export NAMESPACE=dynamo-kubernetes
export RELEASE_VERSION=0.x.x # any version of Dynamo 0.3.2+ listed at https://github.com/ai-dynamo/dynamo/releases
# 2. Install CRDs
helm fetch https://helm.ngc.nvidia.com/nvidia/ai-dynamo/charts/dynamo-crds-${RELEASE_VERSION}.tgz
helm install dynamo-crds dynamo-crds-${RELEASE_VERSION}.tgz --namespace default
# 3. Install Platform
kubectl create namespace ${NAMESPACE}
helm fetch https://helm.ngc.nvidia.com/nvidia/ai-dynamo/charts/dynamo-platform-${RELEASE_VERSION}.tgz
helm install dynamo-platform dynamo-platform-${RELEASE_VERSION}.tgz --namespace ${NAMESPACE}
```
For more details or customization options, see **[Installation Guide for Dynamo Kubernetes Platform](/docs/guides/dynamo_deploy/installation_guide.md)**.
## 2. Choose Your Backend ## 2. Choose Your Backend
...@@ -28,9 +44,9 @@ Each backend has deployment examples and configuration options: ...@@ -28,9 +44,9 @@ Each backend has deployment examples and configuration options:
| Backend | Available Configurations | | Backend | Available Configurations |
|---------|--------------------------| |---------|--------------------------|
| **[vLLM](../../../components/backends/vllm/deploy/README.md)** | Aggregated, Aggregated + Router, Disaggregated, Disaggregated + Router, Disaggregated + Planner | | **[vLLM](/components/backends/vllm/deploy/README.md)** | Aggregated, Aggregated + Router, Disaggregated, Disaggregated + Router, Disaggregated + Planner |
| **[SGLang](../../../components/backends/sglang/deploy/README.md)** | Aggregated, Aggregated + Router, Disaggregated, Disaggregated + Planner, Disaggregated Multi-node | | **[SGLang](/components/backends/sglang/deploy/README.md)** | Aggregated, Aggregated + Router, Disaggregated, Disaggregated + Planner, Disaggregated Multi-node |
| **[TensorRT-LLM](../../../components/backends/trtllm/deploy/README.md)** | Aggregated, Aggregated + Router, Disaggregated, Disaggregated + Router | | **[TensorRT-LLM](/components/backends/trtllm/deploy/README.md)** | Aggregated, Aggregated + Router, Disaggregated, Disaggregated + Router |
## 3. Deploy Your First Model ## 3. Deploy Your First Model
...@@ -63,9 +79,9 @@ The scripts in the `components/<backend>/launch` folder like `agg.sh` demonstrat ...@@ -63,9 +79,9 @@ The scripts in the `components/<backend>/launch` folder like `agg.sh` demonstrat
For detailed technical specifications of Dynamo's Kubernetes resources: For detailed technical specifications of Dynamo's Kubernetes resources:
- **[API Reference](api-reference.md)** - Complete CRD field specifications for `DynamoGraphDeployment` and `DynamoComponentDeployment` - **[API Reference](/docs/guides/dynamo_deploy/api_reference.md)** - Complete CRD field specifications for `DynamoGraphDeployment` and `DynamoComponentDeployment`
- **[Operator Guide](dynamo_operator.md)** - Dynamo operator configuration and management - **[Operator Guide](/docs/guides/dynamo_deploy/dynamo_operator.md)** - Dynamo operator configuration and management
- **[Create Deployment](create_deployment.md)** - Step-by-step deployment creation examples - **[Create Deployment](/docs/guides/dynamo_deploy/create_deployment.md)** - Step-by-step deployment creation examples
### Choosing Your Architecture Pattern ### Choosing Your Architecture Pattern
...@@ -148,7 +164,7 @@ Key customization points include: ...@@ -148,7 +164,7 @@ Key customization points include:
## Additional Resources ## Additional Resources
- **[Examples](../../examples/README.md)** - Complete working examples - **[Examples](/examples/README.md)** - Complete working examples
- **[Create Custom Deployments](create_deployment.md)** - Build your own CRDs - **[Create Custom Deployments](/docs/guides/dynamo_deploy/create_deployment.md)** - Build your own CRDs
- **[Operator Documentation](dynamo_operator.md)** - How the platform works - **[Operator Documentation](/docs/guides/dynamo_deploy/dynamo_operator.md)** - How the platform works
- **[Helm Charts](../../../deploy/helm/README.md)** - For advanced users - **[Helm Charts](/deploy/helm/README.md)** - For advanced users
\ No newline at end of file \ No newline at end of file
<!--
SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. 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.
-->
> **⚠️ Important**: This documentation is automatically generated from source code.
> Do not edit this file directly.
# API Reference # API Reference
## Packages ## Packages
......
...@@ -29,7 +29,7 @@ For the complete technical API reference for Dynamo Custom Resource Definitions, ...@@ -29,7 +29,7 @@ For the complete technical API reference for Dynamo Custom Resource Definitions,
## Installation ## Installation
[See installation steps](dynamo_cloud.md#overview) [See installation steps](installation_guide.md#overview)
## GitOps Deployment with FluxCD ## GitOps Deployment with FluxCD
...@@ -38,7 +38,7 @@ This section describes how to use FluxCD for GitOps-based deployment of Dynamo i ...@@ -38,7 +38,7 @@ This section describes how to use FluxCD for GitOps-based deployment of Dynamo i
### Prerequisites ### Prerequisites
- A Kubernetes cluster with [Dynamo Cloud](dynamo_cloud.md) installed - A Kubernetes cluster with [Dynamo Cloud](installation_guide.md) installed
- [FluxCD](https://fluxcd.io/flux/installation/) installed in your cluster - [FluxCD](https://fluxcd.io/flux/installation/) installed in your cluster
- A Git repository to store your deployment configurations - A Git repository to store your deployment configurations
......
...@@ -145,7 +145,7 @@ dynamo-operator: ...@@ -145,7 +145,7 @@ dynamo-operator:
.... ....
``` ```
You can use it during helm installation (last step of /deploy/cloud/helm/deploy.sh) You can use it during helm installation:
```bash ```bash
helm upgrade --install ${RELEASE} platform/ -f values.yaml --namespace ${NAMESPACE} helm upgrade --install ${RELEASE} platform/ -f values.yaml --namespace ${NAMESPACE}
......
...@@ -97,4 +97,4 @@ For practical examples of Grove-based multinode deployments in action, see the [ ...@@ -97,4 +97,4 @@ For practical examples of Grove-based multinode deployments in action, see the [
For the latest updates on Grove, refer to the [official project on GitHub](https://github.com/NVIDIA/grove). For the latest updates on Grove, refer to the [official project on GitHub](https://github.com/NVIDIA/grove).
Dynamo Cloud also allows you to install Grove and KAI Scheduler as part of the platform installation. See the [Dynamo Cloud Deployment Guide](dynamo_cloud.md) for more details. Dynamo Cloud also allows you to install Grove and KAI Scheduler as part of the platform installation. See the [Dynamo Cloud Deployment Installation Guide](installation_guide.md) for more details.
\ No newline at end of file \ No newline at end of file
...@@ -15,12 +15,14 @@ See the License for the specific language governing permissions and ...@@ -15,12 +15,14 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
# Dynamo Kubernetes Platform # Installation Guide for Dynamo Kubernetes Platform
Deploy and manage Dynamo inference graphs on Kubernetes with automated orchestration and scaling, using the Dynamo Kubernetes Platform. Deploy and manage Dynamo inference graphs on Kubernetes with automated orchestration and scaling, using the Dynamo Kubernetes Platform.
## Quick Start Paths ## Quick Start Paths
Platform is installed using Dynamo Kubernetes Platform [helm chart](../../../deploy/cloud/helm/platform/README.md).
**Path A: Production Install** **Path A: Production Install**
Install from published artifacts on your existing cluster → [Jump to Path A](#path-a-production-install) Install from published artifacts on your existing cluster → [Jump to Path A](#path-a-production-install)
...@@ -39,7 +41,8 @@ helm version # v3.0+ ...@@ -39,7 +41,8 @@ helm version # v3.0+
docker version # Running daemon docker version # Running daemon
# Set your inference runtime image # Set your inference runtime image
export DYNAMO_IMAGE=nvcr.io/nvidia/ai-dynamo/vllm-runtime:0.5.0 export RELEASE_VERSION=0.x.x # any version of Dynamo 0.3.2+ listed at https://github.com/ai-dynamo/dynamo/releases
export DYNAMO_IMAGE=nvcr.io/nvidia/ai-dynamo/vllm-runtime:${RELEASE_VERSION}
# Also available: sglang-runtime, tensorrtllm-runtime # Also available: sglang-runtime, tensorrtllm-runtime
``` ```
...@@ -53,7 +56,7 @@ Install from [NGC published artifacts](https://catalog.ngc.nvidia.com/orgs/nvidi ...@@ -53,7 +56,7 @@ Install from [NGC published artifacts](https://catalog.ngc.nvidia.com/orgs/nvidi
```bash ```bash
# 1. Set environment # 1. Set environment
export NAMESPACE=dynamo-kubernetes export NAMESPACE=dynamo-kubernetes
export RELEASE_VERSION=0.5.0 # any version of Dynamo 0.3.2+ export RELEASE_VERSION=0.x.x # any version of Dynamo 0.3.2+ listed at https://github.com/ai-dynamo/dynamo/releases
# 2. Install CRDs # 2. Install CRDs
helm fetch https://helm.ngc.nvidia.com/nvidia/ai-dynamo/charts/dynamo-crds-${RELEASE_VERSION}.tgz helm fetch https://helm.ngc.nvidia.com/nvidia/ai-dynamo/charts/dynamo-crds-${RELEASE_VERSION}.tgz
...@@ -88,22 +91,20 @@ helm install dynamo-platform dynamo-platform-${RELEASE_VERSION}.tgz --namespace ...@@ -88,22 +91,20 @@ helm install dynamo-platform dynamo-platform-${RELEASE_VERSION}.tgz --namespace
Build and deploy from source for customization. Build and deploy from source for customization.
### Quick Deploy Script
```bash ```bash
# 1. Set environment # 1. Set environment
export NAMESPACE=dynamo-cloud export NAMESPACE=dynamo-cloud
export DOCKER_SERVER=nvcr.io/nvidia/ai-dynamo/ # or your registry export DOCKER_SERVER=nvcr.io/nvidia/ai-dynamo/ # or your registry
export DOCKER_USERNAME='$oauthtoken' export DOCKER_USERNAME='$oauthtoken'
export DOCKER_PASSWORD=<YOUR_NGC_CLI_API_KEY> export DOCKER_PASSWORD=<YOUR_NGC_CLI_API_KEY>
export IMAGE_TAG=0.5.0 export IMAGE_TAG=${RELEASE_VERSION}
# 2. Build operator # 2. Build operator
cd deploy/cloud/operator cd deploy/cloud/operator
earthly --push +docker --DOCKER_SERVER=$DOCKER_SERVER --IMAGE_TAG=$IMAGE_TAG earthly --push +docker --DOCKER_SERVER=$DOCKER_SERVER --IMAGE_TAG=$IMAGE_TAG
cd - cd -
# 3. Create namespace and secrets # 3. Create namespace and secrets to be able to pull the operator image
kubectl create namespace ${NAMESPACE} kubectl create namespace ${NAMESPACE}
kubectl create secret docker-registry docker-imagepullsecret \ kubectl create secret docker-registry docker-imagepullsecret \
--docker-server=${DOCKER_SERVER} \ --docker-server=${DOCKER_SERVER} \
...@@ -111,31 +112,18 @@ kubectl create secret docker-registry docker-imagepullsecret \ ...@@ -111,31 +112,18 @@ kubectl create secret docker-registry docker-imagepullsecret \
--docker-password=${DOCKER_PASSWORD} \ --docker-password=${DOCKER_PASSWORD} \
--namespace=${NAMESPACE} --namespace=${NAMESPACE}
# 4. Deploy # 4. Install CRDs
helm repo add bitnami https://charts.bitnami.com/bitnami helm upgrade --install dynamo-crds ./crds/ --namespace default
./deploy.sh --crds
```
### Manual Steps (Alternative)
<details>
<summary>Click to expand manual installation steps</summary>
**Step 1: Install CRDs** # 5. Install Platform
```bash helm repo add bitnami https://charts.bitnami.com/bitnami
helm install dynamo-crds ./crds/ --namespace default
```
**Step 2: Install Platform**
```bash
helm dep build ./platform/ helm dep build ./platform/
helm install dynamo-platform ./platform/ \ helm upgrade --install dynamo-platform ./platform/ \
--namespace ${NAMESPACE} \ --namespace ${NAMESPACE} \
--set "dynamo-operator.controllerManager.manager.image.repository=${DOCKER_SERVER}/dynamo-operator" \ --set dynamo-operator.controllerManager.manager.image.repository=${DOCKER_SERVER}/dynamo-operator \
--set "dynamo-operator.controllerManager.manager.image.tag=${IMAGE_TAG}" \ --set dynamo-operator.controllerManager.manager.image.tag=${IMAGE_TAG} \
--set "dynamo-operator.imagePullSecrets[0].name=docker-imagepullsecret" --set dynamo-operator.imagePullSecrets[0].name=docker-imagepullsecret
``` ```
</details>
[Verify Installation](#verify-installation) [Verify Installation](#verify-installation)
......
...@@ -7,7 +7,7 @@ This guide provides a walkthrough for collecting and visualizing metrics from Dy ...@@ -7,7 +7,7 @@ This guide provides a walkthrough for collecting and visualizing metrics from Dy
## Prerequisites ## Prerequisites
### Install Dynamo Operator ### Install Dynamo Operator
Before setting up metrics collection, you'll need to have the Dynamo operator installed in your cluster. Follow our [Installation Guide](../dynamo_deploy/dynamo_cloud.md) for detailed instructions on deploying the Dynamo operator. Before setting up metrics collection, you'll need to have the Dynamo operator installed in your cluster. Follow our [Installation Guide](../dynamo_deploy/installation_guide.md) for detailed instructions on deploying the Dynamo operator.
### Install kube-prometheus-stack ### Install kube-prometheus-stack
If you don't have an existing Prometheus setup, you'll likely want to install the kube-prometheus-stack. This is a collection of Kubernetes manifests that includes the Prometheus Operator, Prometheus, Grafana, and other monitoring components in a pre-configured setup. The stack introduces custom resources that make it easy to deploy and manage monitoring in Kubernetes: If you don't have an existing Prometheus setup, you'll likely want to install the kube-prometheus-stack. This is a collection of Kubernetes manifests that includes the Prometheus Operator, Prometheus, Grafana, and other monitoring components in a pre-configured setup. The stack introduces custom resources that make it easy to deploy and manage monitoring in Kubernetes:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment