#!/usr/bin/env bash # Copyright 2015 The Kubernetes Authors. # # 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. readonly root=$(dirname "${BASH_SOURCE}") ## Contains configuration values for the CentOS cluster # The user should have sudo privilege export MASTER=${MASTER:-"centos@172.10.0.11"} export MASTER_IP=${MASTER#*@} # Define all your master nodes, # And separated with blank space like . # The user should have sudo privilege export MASTERS="${MASTERS:-$MASTER}" # length-of # Get the length of specific arg0, could be a space-separate string or array. function length-of() { local len=0 for part in $1; do let ++len done echo $len } # Number of nodes in your cluster. export NUM_MASTERS="${NUM_MASTERS:-$(length-of "$MASTERS")}" # Get default master advertise address: first master node. function default-advertise-address() { # get the first master node local masters_array=(${MASTERS}) local master=${masters_array[0]} echo ${master#*@} } # Define advertise address of masters, could be a load balancer address. # If not provided, the default is ip of first master node. export MASTER_ADVERTISE_ADDRESS="${MASTER_ADVERTISE_ADDRESS:-$(default-advertise-address)}" export MASTER_ADVERTISE_IP="${MASTER_ADVERTISE_IP:-$(getent hosts "${MASTER_ADVERTISE_ADDRESS}" | awk '{print $1; exit}')}" # Define all your minion nodes, # And separated with blank space like . # The user should have sudo privilege export NODES="${NODES:-"centos@172.10.0.12 centos@172.10.0.13"}" # Number of nodes in your cluster. export NUM_NODES="${NUM_NODES:-$(length-of "$NODES")}" # Should be removed when NUM_NODES is deprecated in validate-cluster.sh export NUM_NODES="${NUM_NODES}" # By default, the cluster will use the etcd installed on master. function concat-etcd-servers() { local etcd_servers="" for master in ${MASTERS}; do local master_ip=${master#*@} local prefix="" if [ -n "$etcd_servers" ]; then prefix="${etcd_servers}," fi etcd_servers="${prefix}https://${master_ip}:2379" done echo "$etcd_servers" } export ETCD_SERVERS="$(concat-etcd-servers)" # By default, etcd cluster will use runtime configuration # https://coreos.com/etcd/docs/latest/v2/runtime-configuration.html # Get etc initial cluster and store in ETCD_INITIAL_CLUSTER function concat-etcd-initial-cluster() { local etcd_initial_cluster="" local num_infra=0 for master in ${MASTERS}; do local master_ip="${master#*@}" if [ -n "$etcd_initial_cluster" ]; then etcd_initial_cluster+="," fi etcd_initial_cluster+="infra${num_infra}=https://${master_ip}:2380" let ++num_infra done echo "$etcd_initial_cluster" } export ETCD_INITIAL_CLUSTER="$(concat-etcd-initial-cluster)" CERT_DIR="${CERT_DIR:-${root}/ca-cert}" mkdir -p "${CERT_DIR}" # CERT_DIR path must be absolute. export CERT_DIR="$(cd "${CERT_DIR}"; pwd)" # define the IP range used for service cluster IPs. # according to rfc 1918 ref: https://tools.ietf.org/html/rfc1918 choose a private ip range here. export SERVICE_CLUSTER_IP_RANGE=${SERVICE_CLUSTER_IP_RANGE:-"192.168.3.0/24"} # Optional: Install cluster DNS. ENABLE_CLUSTER_DNS="${KUBE_ENABLE_CLUSTER_DNS:-true}" # DNS_SERVER_IP must be a IP in SERVICE_CLUSTER_IP_RANGE DNS_SERVER_IP=${DNS_SERVER_IP:-"192.168.3.100"} DNS_DOMAIN=${DNS_DOMAIN:-"cluster.local"} # Optional: Install Kubernetes UI ENABLE_CLUSTER_UI="${KUBE_ENABLE_CLUSTER_UI:-true}" # define the IP range used for flannel overlay network, should not conflict with above SERVICE_CLUSTER_IP_RANGE export FLANNEL_NET=${FLANNEL_NET:-"172.16.0.0/16"} # Admission Controllers to invoke prior to persisting objects in cluster. # MutatingAdmissionWebhook should be the last controller that modifies the # request object, otherwise users will be confused if the mutating webhooks' # modification is overwritten. # If we included ResourceQuota, we should keep it at the end of the list to # prevent incrementing quota usage prematurely. export ADMISSION_CONTROL=${ADMISSION_CONTROL:-"NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeClaimResize,DefaultTolerationSeconds,Priority,StorageObjectInUseProtection,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"} # Extra options to set on the Docker command line. # This is useful for setting --insecure-registry for local registries. export DOCKER_OPTS=${DOCKER_OPTS:-""} # Timeouts for process checking on master and minion export PROCESS_CHECK_TIMEOUT=${PROCESS_CHECK_TIMEOUT:-180} # seconds. unset -f default-advertise-address concat-etcd-servers length-of concat-etcd-initial-cluster