// Copyright (c) 2020-2026 Tigera, Inc. All rights reserved. // 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. package common // GetExpectedTyphaScale will return the number of Typhas needed for the number of nodes. // // Nodes Replicas // // 1-2 1 // 3-4 2 // <200 3 // >400 4 // >600 5 // >800 6 // >1000 7 // ... // >2000 12 // ... // >3600 20 func GetExpectedTyphaScale(nodes int) int { maxNodesPerTypha := 200 // This gives a count of how many 200s so we need 1+ this number to get at least // 1 typha for every 200 nodes. typhas := (nodes / maxNodesPerTypha) + 1 // We add one more to ensure there is always 1 extra for high availability purposes. typhas += 1 // We have a couple special cases for small clusters. We want to ensure that we run one fewer // Typha instances than there are nodes, so that there is room for rescheduling. We also want // to ensure we have at least two, where possible, so that we have redundancy. if nodes <= 2 { // For one and two node clusters, we only need a single typha. typhas = 1 } else if nodes <= 4 { // For three and four node clusters, we can run an additional typha. typhas = 2 } else if typhas < 3 { // For clusters with more than 4 nodes, make sure we have a minimum of three for redundancy. typhas = 3 } return typhas }