config-common.sh 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. #!/usr/bin/env bash
  2. # Copyright 2016 The Kubernetes Authors.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. # Returns the total number of Linux and Windows nodes in the cluster.
  16. #
  17. # Vars assumed:
  18. # NUM_NODES
  19. # NUM_WINDOWS_NODES
  20. function get-num-nodes {
  21. echo "$((${NUM_NODES} + ${NUM_WINDOWS_NODES}))"
  22. }
  23. # Vars assumed:
  24. # NUM_NODES
  25. # NUM_WINDOWS_NODES
  26. function get-master-size {
  27. local suggested_master_size=1
  28. if [[ "$(get-num-nodes)" -gt "5" ]]; then
  29. suggested_master_size=2
  30. fi
  31. if [[ "$(get-num-nodes)" -gt "10" ]]; then
  32. suggested_master_size=4
  33. fi
  34. if [[ "$(get-num-nodes)" -gt "100" ]]; then
  35. suggested_master_size=8
  36. fi
  37. if [[ "$(get-num-nodes)" -gt "250" ]]; then
  38. suggested_master_size=16
  39. fi
  40. if [[ "$(get-num-nodes)" -gt "500" ]]; then
  41. suggested_master_size=32
  42. fi
  43. if [[ "$(get-num-nodes)" -gt "3000" ]]; then
  44. suggested_master_size=64
  45. fi
  46. echo "${suggested_master_size}"
  47. }
  48. # Vars assumed:
  49. # NUM_NODES
  50. # NUM_WINDOWS_NODES
  51. function get-master-root-disk-size() {
  52. local suggested_master_root_disk_size="20GB"
  53. if [[ "$(get-num-nodes)" -gt "500" ]]; then
  54. suggested_master_root_disk_size="100GB"
  55. fi
  56. if [[ "$(get-num-nodes)" -gt "3000" ]]; then
  57. suggested_master_root_disk_size="500GB"
  58. fi
  59. echo "${suggested_master_root_disk_size}"
  60. }
  61. # Vars assumed:
  62. # NUM_NODES
  63. # NUM_WINDOWS_NODES
  64. function get-master-disk-size() {
  65. local suggested_master_disk_size="20GB"
  66. if [[ "$(get-num-nodes)" -gt "500" ]]; then
  67. suggested_master_disk_size="100GB"
  68. fi
  69. if [[ "$(get-num-nodes)" -gt "3000" ]]; then
  70. suggested_master_disk_size="200GB"
  71. fi
  72. echo "${suggested_master_disk_size}"
  73. }
  74. function get-node-ip-range {
  75. if [[ -n "${NODE_IP_RANGE:-}" ]]; then
  76. >&2 echo "Using user provided NODE_IP_RANGE: ${NODE_IP_RANGE}"
  77. echo "${NODE_IP_RANGE}"
  78. return
  79. fi
  80. local suggested_range="10.40.0.0/22"
  81. if [[ "$(get-num-nodes)" -gt 1000 ]]; then
  82. suggested_range="10.40.0.0/21"
  83. fi
  84. if [[ "$(get-num-nodes)" -gt 2000 ]]; then
  85. suggested_range="10.40.0.0/20"
  86. fi
  87. if [[ "$(get-num-nodes)" -gt 4000 ]]; then
  88. suggested_range="10.40.0.0/19"
  89. fi
  90. echo "${suggested_range}"
  91. }
  92. function get-cluster-ip-range {
  93. local suggested_range="10.64.0.0/14"
  94. if [[ "$(get-num-nodes)" -gt 1000 ]]; then
  95. suggested_range="10.64.0.0/13"
  96. fi
  97. if [[ "$(get-num-nodes)" -gt 2000 ]]; then
  98. suggested_range="10.64.0.0/12"
  99. fi
  100. if [[ "$(get-num-nodes)" -gt 4000 ]]; then
  101. suggested_range="10.64.0.0/11"
  102. fi
  103. echo "${suggested_range}"
  104. }
  105. # Calculate ip alias range based on max number of pods.
  106. # Let pow be the smallest integer which is bigger or equal to log2($1 * 2).
  107. # (32 - pow) will be returned.
  108. #
  109. # $1: The number of max pods limitation.
  110. function get-alias-range-size() {
  111. for pow in {0..31}; do
  112. if (( 1 << $pow >= $1 * 2 )); then
  113. echo $((32 - pow))
  114. return 0
  115. fi
  116. done
  117. }
  118. # NOTE: Avoid giving nodes empty scopes, because kubelet needs a service account
  119. # in order to initialize properly.
  120. NODE_SCOPES="${NODE_SCOPES:-monitoring,logging-write,storage-ro}"
  121. # Root directory for Kubernetes files on Windows nodes.
  122. WINDOWS_K8S_DIR="C:\etc\kubernetes"
  123. # Directory where Kubernetes binaries will be installed on Windows nodes.
  124. WINDOWS_NODE_DIR="${WINDOWS_K8S_DIR}\node\bin"
  125. # Directory where Kubernetes log files will be stored on Windows nodes.
  126. WINDOWS_LOGS_DIR="${WINDOWS_K8S_DIR}\logs"
  127. # Directory where CNI binaries will be stored on Windows nodes.
  128. WINDOWS_CNI_DIR="${WINDOWS_K8S_DIR}\cni"
  129. # Directory where CNI config files will be stored on Windows nodes.
  130. WINDOWS_CNI_CONFIG_DIR="${WINDOWS_K8S_DIR}\cni\config"
  131. # Pod manifests directory for Windows nodes on Windows nodes.
  132. WINDOWS_MANIFESTS_DIR="${WINDOWS_K8S_DIR}\manifests"
  133. # Directory where cert/key files will be stores on Windows nodes.
  134. WINDOWS_PKI_DIR="${WINDOWS_K8S_DIR}\pki"
  135. # Path for kubelet config file on Windows nodes.
  136. WINDOWS_KUBELET_CONFIG_FILE="${WINDOWS_K8S_DIR}\kubelet-config.yaml"
  137. # Path for kubeconfig file on Windows nodes.
  138. WINDOWS_KUBECONFIG_FILE="${WINDOWS_K8S_DIR}\kubelet.kubeconfig"
  139. # Path for bootstrap kubeconfig file on Windows nodes.
  140. WINDOWS_BOOTSTRAP_KUBECONFIG_FILE="${WINDOWS_K8S_DIR}\kubelet.bootstrap-kubeconfig"
  141. # Path for kube-proxy kubeconfig file on Windows nodes.
  142. WINDOWS_KUBEPROXY_KUBECONFIG_FILE="${WINDOWS_K8S_DIR}\kubeproxy.kubeconfig"