diff --git a/hack/aks/Makefile b/hack/aks/Makefile index d0ce352528..7c4d8c0d18 100644 --- a/hack/aks/Makefile +++ b/hack/aks/Makefile @@ -33,6 +33,18 @@ CLUSTER ?= $(USER)-$(REGION) GROUP ?= $(CLUSTER) VNET ?= $(CLUSTER) +# BYO CNI cluster configuration +CNI_TYPE ?= cilium +CNS_VERSION ?= v1.5.38 +AZURE_IPAM_VERSION ?= v0.3.0 +CNS_IMAGE_REPO ?= MCR +CILIUM_DIR ?= 1.14 +CILIUM_VERSION_TAG ?= v1.14.8 +CILIUM_IMAGE_REGISTRY ?= acnpublic.azurecr.io +IPV6_HP_BPF_VERSION ?= v0.0.3 +DUALSTACK ?= false +REPO_ROOT ?= $(shell git rev-parse --show-toplevel) + # Long Term Support (LTS) ifeq ($(LTS),true) LTS_ARGS=--k8s-support-plan AKSLongTermSupport --tier premium @@ -109,6 +121,16 @@ vars: ## Show the input vars configured for the cluster commands @echo K8S_VER=$(K8S_VER) @echo LTS_ARGS=$(if $(LTS_ARGS),$(LTS_ARGS),$(LTS)) @echo COMMON_AKS_FIELDS=$(COMMON_AKS_FIELDS) + @echo CNI_TYPE=$(CNI_TYPE) + @echo CNS_VERSION=$(CNS_VERSION) + @echo AZURE_IPAM_VERSION=$(AZURE_IPAM_VERSION) + @echo CNS_IMAGE_REPO=$(CNS_IMAGE_REPO) + @echo CILIUM_DIR=$(CILIUM_DIR) + @echo CILIUM_VERSION_TAG=$(CILIUM_VERSION_TAG) + @echo CILIUM_IMAGE_REGISTRY=$(CILIUM_IMAGE_REGISTRY) + @echo IPV6_HP_BPF_VERSION=$(IPV6_HP_BPF_VERSION) + @echo DUALSTACK=$(DUALSTACK) + @echo REPO_ROOT=$(REPO_ROOT) ##@ SWIFT Infra @@ -413,3 +435,110 @@ restart-vmss: ## Restarts the nodes in the cluster scale-nodes: ## Scales the nodes in the cluster $(AZCLI) aks nodepool scale --resource-group $(GROUP) --cluster-name $(CLUSTER) --name $(NODEPOOL) --node-count $(NODE_COUNT) + +##@ BYO CNI Automation + +byocni-cluster-up: ## Create complete BYO CNI cluster with CNS and CNI (default: Cilium) + @echo "Creating BYO CNI cluster with CNS and $(CNI_TYPE)..." + @echo "Variables: CLUSTER=$(CLUSTER), CNS_VERSION=$(CNS_VERSION), CNI_TYPE=$(CNI_TYPE)" + @$(MAKE) validate-cni-type +ifeq ($(CNI_TYPE),azurecni) + @$(MAKE) overlay-up +else + @$(MAKE) overlay-byocni-nokubeproxy-up +endif + @echo "Cluster created successfully. Deploying CNS..." + @$(MAKE) deploy-cns + @echo "CNS deployed successfully. Deploying $(CNI_TYPE)..." +ifeq ($(CNI_TYPE),cilium) + @$(MAKE) deploy-cilium +else ifeq ($(CNI_TYPE),azurecni) + @echo "Azure CNI is already configured in the cluster. No additional CNI deployment needed." +else + @echo "Warning: CNI_TYPE=$(CNI_TYPE) not supported yet." + @echo "Available CNI types: cilium, azurecni" + @exit 1 +endif + @echo "BYO CNI cluster setup completed successfully!" + +validate-cni-type: ## Validate the CNI type +ifeq ($(CNI_TYPE),cilium) + @echo "✓ CNI type validation passed: $(CNI_TYPE)" +else ifeq ($(CNI_TYPE),azurecni) + @echo "✓ CNI type validation passed: $(CNI_TYPE)" +else + @echo "✗ Error: CNI_TYPE=$(CNI_TYPE) is not supported." + @echo "Available CNI types: cilium, azurecni" + @echo "Example: make byocni-cluster-up CNI_TYPE=cilium" + @echo "Example: make byocni-cluster-up CNI_TYPE=azurecni" + @exit 1 +endif + +deploy-cns: ## Deploy CNS to the cluster + @echo "Deploying CNS with version $(CNS_VERSION)..." + cd $(REPO_ROOT) && sudo -E env "PATH=$$PATH" make test-load \ + CNS_ONLY=true \ + CNS_VERSION=$(CNS_VERSION) \ + AZURE_IPAM_VERSION=$(AZURE_IPAM_VERSION) \ + INSTALL_CNS=true \ + INSTALL_OVERLAY=true \ + CNS_IMAGE_REPO=$(CNS_IMAGE_REPO) + +deploy-cilium: ## Deploy Cilium to the cluster + @echo "Deploying Cilium $(CILIUM_VERSION_TAG) from directory v$(CILIUM_DIR)..." + @if [ ! -d "$(REPO_ROOT)/test/integration/manifests/cilium/v$(CILIUM_DIR)" ]; then \ + echo "Error: Cilium directory v$(CILIUM_DIR) not found."; \ + echo "Available versions: $$(ls $(REPO_ROOT)/test/integration/manifests/cilium/ | grep '^v' | tr '\n' ' ')"; \ + exit 1; \ + fi +ifeq ($(DUALSTACK),true) + @echo "Deploying Cilium with dual-stack configuration..." + kubectl apply -f $(REPO_ROOT)/test/integration/manifests/cilium/v$(CILIUM_DIR)/cilium-config/cilium-config-dualstack.yaml +else + kubectl apply -f $(REPO_ROOT)/test/integration/manifests/cilium/v$(CILIUM_DIR)/cilium-config/cilium-config.yaml +endif + kubectl apply -f $(REPO_ROOT)/test/integration/manifests/cilium/v$(CILIUM_DIR)/cilium-operator/files + kubectl apply -f $(REPO_ROOT)/test/integration/manifests/cilium/v$(CILIUM_DIR)/cilium-agent/files + @export CILIUM_VERSION_TAG=$(CILIUM_VERSION_TAG) && \ + export CILIUM_IMAGE_REGISTRY=$(CILIUM_IMAGE_REGISTRY) && \ + export IPV6_HP_BPF_VERSION=$(IPV6_HP_BPF_VERSION) && \ + envsubst '$${CILIUM_VERSION_TAG},$${CILIUM_IMAGE_REGISTRY},$${IPV6_HP_BPF_VERSION}' < $(REPO_ROOT)/test/integration/manifests/cilium/v$(CILIUM_DIR)/cilium-operator/templates/deployment.yaml | kubectl apply -f - && \ + envsubst '$${CILIUM_VERSION_TAG},$${CILIUM_IMAGE_REGISTRY},$${IPV6_HP_BPF_VERSION}' < $(REPO_ROOT)/test/integration/manifests/cilium/v$(CILIUM_DIR)/cilium-agent/templates/daemonset.yaml | kubectl apply -f - + +byocni-cluster-vars: ## Show variables for BYO CNI cluster setup + @echo "=== BYO CNI Cluster Configuration ===" + @echo "Basic cluster settings:" + @echo " CLUSTER=$(CLUSTER)" + @echo " GROUP=$(GROUP)" + @echo " REGION=$(REGION)" + @echo " SUB=$(SUB)" + @echo " VNET=$(VNET)" + @echo " VM_SIZE=$(VM_SIZE)" + @echo "" + @echo "CNI configuration:" + @echo " CNI_TYPE=$(CNI_TYPE)" + @echo "" + @echo "CNS configuration:" + @echo " CNS_VERSION=$(CNS_VERSION)" + @echo " AZURE_IPAM_VERSION=$(AZURE_IPAM_VERSION)" + @echo " CNS_IMAGE_REPO=$(CNS_IMAGE_REPO) (MCR/ACR - affects CNS image paths)" + @echo "" + @echo "Cilium configuration:" + @echo " CILIUM_DIR=$(CILIUM_DIR)" + @echo " CILIUM_VERSION_TAG=$(CILIUM_VERSION_TAG)" + @echo " CILIUM_IMAGE_REGISTRY=$(CILIUM_IMAGE_REGISTRY)" + @echo " IPV6_HP_BPF_VERSION=$(IPV6_HP_BPF_VERSION)" + @echo " DUALSTACK=$(DUALSTACK)" + @echo "" + @echo "Image registry options:" + @echo " - MCR: mcr.microsoft.com/containernetworking" + @echo " - ACR: acnpublic.azurecr.io (default for Cilium)" + @echo " - Custom: your-registry.azurecr.io/path" + @echo "" + @echo "Repository root:" + @echo " REPO_ROOT=$(REPO_ROOT)" + @echo "" + @echo "Example usage:" + @echo " make byocni-cluster-up CLUSTER=my-cluster SUB=" + @echo " make byocni-cluster-up CLUSTER=my-cluster SUB= CNI_TYPE=azurecni" + @echo " make byocni-cluster-up CLUSTER=my-cluster SUB= CNS_VERSION=v1.6.0 CILIUM_DIR=1.16 CILIUM_VERSION_TAG=v1.16.5" diff --git a/hack/aks/README.md b/hack/aks/README.md index 7e3e89ffa8..b0fb717182 100644 --- a/hack/aks/README.md +++ b/hack/aks/README.md @@ -45,4 +45,100 @@ AKS Clusters windows-nodepool-up Add windows node pool down Delete the cluster vmss-restart Restart the nodes of the cluster + +BYO CNI Automation + byocni-cluster-up Create complete BYO CNI cluster with CNS and CNI (default: Cilium) + deploy-cns Deploy CNS to the cluster + deploy-cilium Deploy Cilium to the cluster + byocni-cluster-vars Show variables for BYO CNI cluster setup + validate-cni-type Validate the CNI type +``` + +## BYO CNI Cluster Automation + +The Makefile now includes automated setup for complete BYO CNI clusters with CNS and CNI deployment. + +### Quick Start + +Create a BYO CNI cluster with Cilium (default): +```bash +make byocni-cluster-up CLUSTER=my-cluster SUB= +``` + +Create a BYO CNI cluster with Azure CNI: +```bash +make byocni-cluster-up CLUSTER=my-cluster SUB= CNI_TYPE=azurecni +``` + +### Customization + +All parameters are configurable: +```bash +make byocni-cluster-up \ + CLUSTER=my-cilium-cluster \ + SUB= \ + VM_SIZE=Standard_D2s_v3 \ + CNS_VERSION=v1.6.0 \ + CILIUM_DIR=1.16 \ + CILIUM_VERSION_TAG=v1.16.5 \ + CILIUM_IMAGE_REGISTRY=mcr.microsoft.com/containernetworking +``` + +Using different image repositories: +```bash +# Using MCR for both CNS and Cilium +make byocni-cluster-up \ + CLUSTER=my-cluster \ + SUB= \ + CNS_IMAGE_REPO=MCR \ + CILIUM_IMAGE_REGISTRY=mcr.microsoft.com/containernetworking + +# Using ACR for CNS and custom registry for Cilium +make byocni-cluster-up \ + CLUSTER=my-cluster \ + SUB= \ + CNS_IMAGE_REPO=ACR \ + CILIUM_IMAGE_REGISTRY=my-registry.azurecr.io/cilium +``` + +### Available Configuration + +- `CNI_TYPE`: cilium, azurecni (default: cilium) +- `VM_SIZE`: Node VM size (default: Standard_B2s) +- `CNS_VERSION`: CNS version to deploy (default: v1.5.38) +- `AZURE_IPAM_VERSION`: Azure IPAM version (default: v0.3.0) +- `CNS_IMAGE_REPO`: CNS image repository - MCR or ACR (default: MCR) + - MCR: Uses Microsoft Container Registry paths + - ACR: Uses Azure Container Registry paths +- `CILIUM_DIR`: Cilium version directory - 1.12, 1.13, 1.14, 1.16, 1.17 (default: 1.14) +- `CILIUM_VERSION_TAG`: Cilium image tag (default: v1.14.8) +- `CILIUM_IMAGE_REGISTRY`: Cilium image registry (default: acnpublic.azurecr.io) + - Can be set to mcr.microsoft.com/containernetworking for MCR + - Or custom registry URL +- `IPV6_HP_BPF_VERSION`: IPv6 HP BPF version for dual stack (default: v0.0.3) +- `DUALSTACK`: Enable dual-stack configuration (default: false) + +View all configuration variables: +```bash +make byocni-cluster-vars +``` + +### Workflow + +The `byocni-cluster-up` target orchestrates the complete setup workflow: + +**For Cilium CNI (default):** +1. **Cluster Creation**: Uses `overlay-byocni-nokubeproxy-up` to create AKS cluster without CNI +2. **CNS Deployment**: Uses root makefile `test-load` target with CNS-specific parameters +3. **CNI Deployment**: Deploys Cilium using manifests from `test/integration/manifests/cilium/` + +**For Azure CNI:** +1. **Cluster Creation**: Uses `overlay-up` to create AKS cluster with Azure CNI pre-configured +2. **CNS Deployment**: Uses root makefile `test-load` target with CNS-specific parameters +3. **CNI Configuration**: Azure CNI is already configured - no additional deployment needed + +Individual steps can also be run separately: +```bash +make deploy-cns +make deploy-cilium ```