@@ -769,14 +769,235 @@ affinity:
769769 topologyKey : topology.kubernetes.io/zone
770770
771771secondaryWorkload :
772- enabled : false
773- postfix : " od"
772+ enabled : true
773+ postfix : " sec" # Default postfix for secondary workload resources
774+ fullnameOverride : " " # Override the full name of secondary workload resources
775+
776+ # Replica configuration
774777 replicaCount : 1
775- affinity : {}
776- tolerations : []
778+
779+ # Deployment configuration
780+ deploymentLabels :
781+ environment : " production"
782+ team : " backend"
783+ component : " secondary"
784+
785+ deploymentAnnotations :
786+ deployment.kubernetes.io/revision : " 1"
787+ example.com/deployment-type : " secondary"
788+
789+ # Pod configuration
790+ podLabels :
791+ workload : " secondary"
792+ version : " v2"
793+
794+ podAnnotations :
795+ sidecar.istio.io/inject : " true"
796+ prometheus.io/scrape : " true"
797+
798+ # Custom match labels for deployment selector
799+ customMatchLabels :
800+ app : " my-secondary-app"
801+ version : " v2"
802+
803+ # Custom pod labels for service selector
804+ customPodLabels :
805+ app : " my-secondary-app"
806+ tier : " backend"
807+
808+ # Container configuration
809+ containerName : " secondary-container" # Custom container name
810+ ContainerPort : # Optional, inherits from primary if not specified
811+ - name : http
812+ port : 8080
813+ servicePort : 80
814+ targetPort : 8080
815+ - name : metrics
816+ port : 9090
817+ servicePort : 9090
818+
819+ # Affinity and tolerations
820+ affinity :
821+ podAntiAffinity :
822+ requiredDuringSchedulingIgnoredDuringExecution :
823+ - labelSelector :
824+ matchExpressions :
825+ - key : workload
826+ operator : In
827+ values :
828+ - primary
829+ topologyKey : kubernetes.io/hostname
830+
831+ tolerations :
832+ - key : " secondary-workload"
833+ operator : " Equal"
834+ value : " true"
835+ effect : " NoSchedule"
836+
837+ # Autoscaling configuration
777838 autoscaling :
778839 enabled : true
779840 MinReplicas : 1
780- MaxReplicas : 2
781- TargetCPUUtilizationPercentage : 90
782- TargetMemoryUtilizationPercentage : 80
841+ MaxReplicas : 5
842+ TargetCPUUtilizationPercentage : 70
843+ TargetMemoryUtilizationPercentage : 80
844+ behavior :
845+ scaleDown :
846+ stabilizationWindowSeconds : 300
847+ policies :
848+ - type : Percent
849+ value : 50
850+ periodSeconds : 60
851+ scaleUp :
852+ stabilizationWindowSeconds : 60
853+ policies :
854+ - type : Percent
855+ value : 100
856+ periodSeconds : 15
857+ extraMetrics :
858+ - type : Resource
859+ resource :
860+ name : memory
861+ target :
862+ type : Utilization
863+ averageUtilization : 80
864+
865+ # KEDA Autoscaling configuration
866+ kedaAutoscaling :
867+ enabled : true
868+ inherit : false # Set to true to inherit all KEDA config from primary workload
869+ name : " secondary-workload-keda"
870+ envSourceContainerName : " secondary-container"
871+ cooldownPeriod : 300
872+ minReplicaCount : 1
873+ maxReplicaCount : 10
874+ idleReplicaCount : 0
875+ pollingInterval : 30
876+ labels :
877+ keda.component : " secondary"
878+ annotations :
879+ keda.autoscaler : " custom"
880+ fallback :
881+ failureThreshold : 3
882+ replicas : 2
883+ advanced :
884+ restoreToOriginalReplicaCount : true
885+ horizontalPodAutoscalerConfig :
886+ behavior :
887+ scaleDown :
888+ stabilizationWindowSeconds : 300
889+ triggers :
890+ - type : prometheus
891+ name : secondary_cpu_usage
892+ metadata :
893+ serverAddress : http://prometheus:9090
894+ metricName : cpu_usage_secondary
895+ threshold : ' 70'
896+ query : avg(cpu_usage{workload="secondary"})
897+ authenticationRef :
898+ name : keda-trigger-auth-prometheus
899+ triggerAuthentication :
900+ enabled : true
901+ name : " secondary-trigger-auth"
902+ spec :
903+ secretTargetRef :
904+ - parameter : username
905+ name : prometheus-secret
906+ key : username
907+ - parameter : password
908+ name : prometheus-secret
909+ key : password
910+
911+ # Service configuration
912+ service :
913+ enabled : true
914+ type : ClusterIP # Can be ClusterIP, NodePort, LoadBalancer
915+ annotations :
916+ service.beta.kubernetes.io/aws-load-balancer-type : " nlb"
917+ example.com/service-type : " secondary"
918+ extraSpec :
919+ sessionAffinity : ClientIP
920+ loadBalancerIP : " " # For LoadBalancer type
921+ loadBalancerSourceRanges : [] # For LoadBalancer type
922+ sessionAffinity :
923+ enabled : true
924+ sessionAffinityConfig :
925+ clientIP :
926+ timeoutSeconds : 10800
927+
928+ # Istio configuration
929+ istio :
930+ virtualService :
931+ enabled : true
932+ name : " secondary-workload-vs"
933+ labels :
934+ istio.component : " secondary"
935+ annotations :
936+ istio.io/description : " Secondary workload virtual service"
937+ gateways :
938+ - istio-system/secondary-gateway
939+ hosts :
940+ - " secondary-api.example.com"
941+ - " api-v2.example.com"
942+ http :
943+ - match :
944+ - uri :
945+ prefix : " /api/v2"
946+ - headers :
947+ version :
948+ exact : " v2"
949+ route :
950+ - destination :
951+ host : " secondary-workload-service.default.svc.cluster.local"
952+ port :
953+ number : 80
954+ timeout : 30s
955+ retries :
956+ attempts : 3
957+ perTryTimeout : 10s
958+ retryOn : " 5xx,reset,connect-failure,refused-stream"
959+ headers :
960+ request :
961+ set :
962+ x-workload-version : " v2"
963+ response :
964+ set :
965+ x-served-by : " secondary-workload"
966+
967+ destinationRule :
968+ enabled : true
969+ name : " secondary-workload-dr"
970+ labels :
971+ istio.component : " secondary"
972+ annotations :
973+ istio.io/description : " Secondary workload destination rule"
974+ subsets :
975+ - name : v2
976+ labels :
977+ version : v2
978+ - name : canary
979+ labels :
980+ track : canary
981+ trafficPolicy :
982+ loadBalancer :
983+ simple : LEAST_CONN
984+ connectionPool :
985+ tcp :
986+ maxConnections : 100
987+ http :
988+ http1MaxPendingRequests : 50
989+ maxRequestsPerConnection : 10
990+ circuitBreaker :
991+ consecutiveErrors : 3
992+ interval : 30s
993+ baseEjectionTime : 30s
994+ outlierDetection :
995+ consecutive5xxErrors : 3
996+ interval : 30s
997+ baseEjectionTime : 30s
998+
999+ # User-friendly configuration fields
1000+ virtualServiceName : " my-secondary-vs" # Direct VirtualService name input
1001+ virtualServiceHosts : # Direct hosts input
1002+ - " secondary.myapp.com"
1003+ - " v2.myapp.com"
0 commit comments