mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Added configurable etcd initial-cluster-state to kube-up script.
Added configurable etcd initial-cluster-state to kube-up script. This allows creation of multi-master cluster from scratch. This is a cherry-pick of #41320 from 1.5 branch.
This commit is contained in:
		@@ -787,6 +787,11 @@ EOF
 | 
				
			|||||||
    if [ -n "${INITIAL_ETCD_CLUSTER:-}" ]; then
 | 
					    if [ -n "${INITIAL_ETCD_CLUSTER:-}" ]; then
 | 
				
			||||||
      cat >>$file <<EOF
 | 
					      cat >>$file <<EOF
 | 
				
			||||||
INITIAL_ETCD_CLUSTER: $(yaml-quote ${INITIAL_ETCD_CLUSTER})
 | 
					INITIAL_ETCD_CLUSTER: $(yaml-quote ${INITIAL_ETCD_CLUSTER})
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    if [ -n "${INITIAL_ETCD_CLUSTER_STATE:-}" ]; then
 | 
				
			||||||
 | 
					      cat >>$file <<EOF
 | 
				
			||||||
 | 
					INITIAL_ETCD_CLUSTER_STATE: $(yaml-quote ${INITIAL_ETCD_CLUSTER_STATE})
 | 
				
			||||||
EOF
 | 
					EOF
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    if [ -n "${ETCD_QUORUM_READ:-}" ]; then
 | 
					    if [ -n "${ETCD_QUORUM_READ:-}" ]; then
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -475,6 +475,7 @@ num_nodes: $(echo "${NUM_NODES:-}" | sed -e "s/'/''/g")
 | 
				
			|||||||
e2e_storage_test_environment: '$(echo "$E2E_STORAGE_TEST_ENVIRONMENT" | sed -e "s/'/''/g")'
 | 
					e2e_storage_test_environment: '$(echo "$E2E_STORAGE_TEST_ENVIRONMENT" | sed -e "s/'/''/g")'
 | 
				
			||||||
kube_uid: '$(echo "${KUBE_UID}" | sed -e "s/'/''/g")'
 | 
					kube_uid: '$(echo "${KUBE_UID}" | sed -e "s/'/''/g")'
 | 
				
			||||||
initial_etcd_cluster: '$(echo "${INITIAL_ETCD_CLUSTER:-}" | sed -e "s/'/''/g")'
 | 
					initial_etcd_cluster: '$(echo "${INITIAL_ETCD_CLUSTER:-}" | sed -e "s/'/''/g")'
 | 
				
			||||||
 | 
					initial_etcd_cluster_state: '$(echo "${INITIAL_ETCD_CLUSTER_STATE:-}" | sed -e "s/'/''/g")'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
hostname: $(hostname -s)
 | 
					hostname: $(hostname -s)
 | 
				
			||||||
enable_default_storage_class: '$(echo "$ENABLE_DEFAULT_STORAGE_CLASS" | sed -e "s/'/''/g")'
 | 
					enable_default_storage_class: '$(echo "$ENABLE_DEFAULT_STORAGE_CLASS" | sed -e "s/'/''/g")'
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,6 +53,10 @@ function replicate-master-instance() {
 | 
				
			|||||||
  kube_env="$(echo "${kube_env}" | grep -v "INITIAL_ETCD_CLUSTER")"
 | 
					  kube_env="$(echo "${kube_env}" | grep -v "INITIAL_ETCD_CLUSTER")"
 | 
				
			||||||
  kube_env="$(echo -e "${kube_env}\nINITIAL_ETCD_CLUSTER: '${existing_master_replicas},${REPLICA_NAME}'")"
 | 
					  kube_env="$(echo -e "${kube_env}\nINITIAL_ETCD_CLUSTER: '${existing_master_replicas},${REPLICA_NAME}'")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Substitute INITIAL_ETCD_CLUSTER_STATE
 | 
				
			||||||
 | 
					  kube_env="$(echo "${kube_env}" | grep -v "INITIAL_ETCD_CLUSTER_STATE")"
 | 
				
			||||||
 | 
					  kube_env="$(echo -e "${kube_env}\nINITIAL_ETCD_CLUSTER_STATE: 'existing'")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ETCD_CA_KEY="$(echo "${kube_env}" | grep "ETCD_CA_KEY" |  sed "s/^.*: '//" | sed "s/'$//")"
 | 
					  ETCD_CA_KEY="$(echo "${kube_env}" | grep "ETCD_CA_KEY" |  sed "s/^.*: '//" | sed "s/'$//")"
 | 
				
			||||||
  ETCD_CA_CERT="$(echo "${kube_env}" | grep "ETCD_CA_CERT" |  sed "s/^.*: '//" | sed "s/'$//")"
 | 
					  ETCD_CA_CERT="$(echo "${kube_env}" | grep "ETCD_CA_CERT" |  sed "s/^.*: '//" | sed "s/'$//")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -689,6 +689,9 @@ function prepare-etcd-manifest {
 | 
				
			|||||||
  local etcd_protocol="http"
 | 
					  local etcd_protocol="http"
 | 
				
			||||||
  local etcd_creds=""
 | 
					  local etcd_creds=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if [[ -n "${INITIAL_ETCD_CLUSTER_STATE:-}" ]]; then
 | 
				
			||||||
 | 
					    cluster_state="${INITIAL_ETCD_CLUSTER_STATE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
  if [[ -n "${ETCD_CA_KEY:-}" && -n "${ETCD_CA_CERT:-}" && -n "${ETCD_PEER_KEY:-}" && -n "${ETCD_PEER_CERT:-}" ]]; then
 | 
					  if [[ -n "${ETCD_CA_KEY:-}" && -n "${ETCD_CA_CERT:-}" && -n "${ETCD_PEER_KEY:-}" && -n "${ETCD_PEER_CERT:-}" ]]; then
 | 
				
			||||||
    etcd_creds=" --peer-trusted-ca-file /etc/srv/kubernetes/etcd-ca.crt --peer-cert-file /etc/srv/kubernetes/etcd-peer.crt --peer-key-file /etc/srv/kubernetes/etcd-peer.key -peer-client-cert-auth "
 | 
					    etcd_creds=" --peer-trusted-ca-file /etc/srv/kubernetes/etcd-ca.crt --peer-cert-file /etc/srv/kubernetes/etcd-peer.crt --peer-key-file /etc/srv/kubernetes/etcd-peer.key -peer-client-cert-auth "
 | 
				
			||||||
    etcd_protocol="https"
 | 
					    etcd_protocol="https"
 | 
				
			||||||
@@ -698,7 +701,6 @@ function prepare-etcd-manifest {
 | 
				
			|||||||
    etcd_host="etcd-${host}=${etcd_protocol}://${host}:$3"
 | 
					    etcd_host="etcd-${host}=${etcd_protocol}://${host}:$3"
 | 
				
			||||||
    if [[ -n "${etcd_cluster}" ]]; then
 | 
					    if [[ -n "${etcd_cluster}" ]]; then
 | 
				
			||||||
      etcd_cluster+=","
 | 
					      etcd_cluster+=","
 | 
				
			||||||
      cluster_state="existing"
 | 
					 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    etcd_cluster+="${etcd_host}"
 | 
					    etcd_cluster+="${etcd_host}"
 | 
				
			||||||
  done
 | 
					  done
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,6 +48,11 @@ function replicate-master-instance() {
 | 
				
			|||||||
  # Substitute INITIAL_ETCD_CLUSTER to enable etcd clustering.
 | 
					  # Substitute INITIAL_ETCD_CLUSTER to enable etcd clustering.
 | 
				
			||||||
  kube_env="$(echo "${kube_env}" | grep -v "INITIAL_ETCD_CLUSTER")"
 | 
					  kube_env="$(echo "${kube_env}" | grep -v "INITIAL_ETCD_CLUSTER")"
 | 
				
			||||||
  kube_env="$(echo -e "${kube_env}\nINITIAL_ETCD_CLUSTER: '${existing_master_replicas},${REPLICA_NAME}'")"
 | 
					  kube_env="$(echo -e "${kube_env}\nINITIAL_ETCD_CLUSTER: '${existing_master_replicas},${REPLICA_NAME}'")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Substitute INITIAL_ETCD_CLUSTER_STATE
 | 
				
			||||||
 | 
					  kube_env="$(echo "${kube_env}" | grep -v "INITIAL_ETCD_CLUSTER_STATE")"
 | 
				
			||||||
 | 
					  kube_env="$(echo -e "${kube_env}\nINITIAL_ETCD_CLUSTER_STATE: 'existing'")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ETCD_CA_KEY="$(echo "${kube_env}" | grep "ETCD_CA_KEY" |  sed "s/^.*: '//" | sed "s/'$//")"
 | 
					  ETCD_CA_KEY="$(echo "${kube_env}" | grep "ETCD_CA_KEY" |  sed "s/^.*: '//" | sed "s/'$//")"
 | 
				
			||||||
  ETCD_CA_CERT="$(echo "${kube_env}" | grep "ETCD_CA_CERT" |  sed "s/^.*: '//" | sed "s/'$//")"
 | 
					  ETCD_CA_CERT="$(echo "${kube_env}" | grep "ETCD_CA_CERT" |  sed "s/^.*: '//" | sed "s/'$//")"
 | 
				
			||||||
  create-etcd-certs "${REPLICA_NAME}" "${ETCD_CA_CERT}" "${ETCD_CA_KEY}"
 | 
					  create-etcd-certs "${REPLICA_NAME}" "${ETCD_CA_CERT}" "${ETCD_CA_KEY}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -452,6 +452,9 @@ prepare_etcd_manifest() {
 | 
				
			|||||||
  local etcd_protocol="http"
 | 
					  local etcd_protocol="http"
 | 
				
			||||||
  local etcd_creds=""
 | 
					  local etcd_creds=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if [[ -n "${INITIAL_ETCD_CLUSTER_STATE:-}" ]]; then
 | 
				
			||||||
 | 
					    cluster_state="${INITIAL_ETCD_CLUSTER_STATE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
  if [[ -n "${ETCD_CA_KEY:-}" && -n "${ETCD_CA_CERT:-}" && -n "${ETCD_PEER_KEY:-}" && -n "${ETCD_PEER_CERT:-}" ]]; then
 | 
					  if [[ -n "${ETCD_CA_KEY:-}" && -n "${ETCD_CA_CERT:-}" && -n "${ETCD_PEER_KEY:-}" && -n "${ETCD_PEER_CERT:-}" ]]; then
 | 
				
			||||||
    etcd_creds=" --peer-trusted-ca-file /etc/srv/kubernetes/etcd-ca.crt --peer-cert-file /etc/srv/kubernetes/etcd-peer.crt --peer-key-file /etc/srv/kubernetes/etcd-peer.key -peer-client-cert-auth "
 | 
					    etcd_creds=" --peer-trusted-ca-file /etc/srv/kubernetes/etcd-ca.crt --peer-cert-file /etc/srv/kubernetes/etcd-peer.crt --peer-key-file /etc/srv/kubernetes/etcd-peer.key -peer-client-cert-auth "
 | 
				
			||||||
    etcd_protocol="https"
 | 
					    etcd_protocol="https"
 | 
				
			||||||
@@ -461,7 +464,6 @@ prepare_etcd_manifest() {
 | 
				
			|||||||
    etcd_host="etcd-${host}=${etcd_protocol}://${host}:$3"
 | 
					    etcd_host="etcd-${host}=${etcd_protocol}://${host}:$3"
 | 
				
			||||||
    if [[ -n "${etcd_cluster}" ]]; then
 | 
					    if [[ -n "${etcd_cluster}" ]]; then
 | 
				
			||||||
      etcd_cluster+=","
 | 
					      etcd_cluster+=","
 | 
				
			||||||
      cluster_state="existing"
 | 
					 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    etcd_cluster+="${etcd_host}"
 | 
					    etcd_cluster+="${etcd_host}"
 | 
				
			||||||
  done
 | 
					  done
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,22 +4,20 @@
 | 
				
			|||||||
  {% set etcd_protocol = 'https' -%}
 | 
					  {% set etcd_protocol = 'https' -%}
 | 
				
			||||||
  {% set etcd_creds = '--peer-trusted-ca-file /srv/kubernetes/etcd-ca.crt --peer-cert-file /srv/kubernetes/etcd-peer.crt --peer-key-file /srv/kubernetes/etcd-peer.key -peer-client-cert-auth' -%}
 | 
					  {% set etcd_creds = '--peer-trusted-ca-file /srv/kubernetes/etcd-ca.crt --peer-cert-file /srv/kubernetes/etcd-peer.crt --peer-key-file /srv/kubernetes/etcd-peer.key -peer-client-cert-auth' -%}
 | 
				
			||||||
{% endif -%}
 | 
					{% endif -%}
 | 
				
			||||||
{% set cluster_state = 'new' -%}
 | 
					 | 
				
			||||||
{% set hostname = pillar.get('hostname', '') -%}
 | 
					{% set hostname = pillar.get('hostname', '') -%}
 | 
				
			||||||
 | 
					{% set cluster_state = (pillar.get('initial_etcd_cluster_state') or 'new') -%}
 | 
				
			||||||
{% set etcd_cluster_array = (pillar.get('initial_etcd_cluster') or hostname).split(',') -%}
 | 
					{% set etcd_cluster_array = (pillar.get('initial_etcd_cluster') or hostname).split(',') -%}
 | 
				
			||||||
{% set etcd_cluster = '' -%}
 | 
					{% set etcd_cluster = '' -%}
 | 
				
			||||||
{# We use vars dictionary to pass variables set inside the for loop, because jinja defines new variables inside the for loop that hide variables from the outside. #}
 | 
					{# We use vars dictionary to pass variables set inside the for loop, because jinja defines new variables inside the for loop that hide variables from the outside. #}
 | 
				
			||||||
{% set vars = {'etcd_cluster': '', 'cluster_state': cluster_state} -%}
 | 
					{% set vars = {'etcd_cluster': ''} -%}
 | 
				
			||||||
{% for host in etcd_cluster_array -%}
 | 
					{% for host in etcd_cluster_array -%}
 | 
				
			||||||
  {% if etcd_cluster != '' -%}
 | 
					  {% if etcd_cluster != '' -%}
 | 
				
			||||||
    {% set cluster_state = 'existing' -%}
 | 
					 | 
				
			||||||
    {% set etcd_cluster = etcd_cluster ~ ',' -%}
 | 
					    {% set etcd_cluster = etcd_cluster ~ ',' -%}
 | 
				
			||||||
  {% endif -%}
 | 
					  {% endif -%}
 | 
				
			||||||
  {% set etcd_cluster = etcd_cluster ~ 'etcd-' ~ host ~ '=' ~ etcd_protocol ~'://' ~ host ~ ':' ~ server_port -%}
 | 
					  {% set etcd_cluster = etcd_cluster ~ 'etcd-' ~ host ~ '=' ~ etcd_protocol ~'://' ~ host ~ ':' ~ server_port -%}
 | 
				
			||||||
  {% do vars.update({'etcd_cluster': etcd_cluster, 'cluster_state': cluster_state}) -%}
 | 
					  {% do vars.update({'etcd_cluster': etcd_cluster}) -%}
 | 
				
			||||||
{% endfor -%}
 | 
					{% endfor -%}
 | 
				
			||||||
{% set etcd_cluster = vars.etcd_cluster -%}
 | 
					{% set etcd_cluster = vars.etcd_cluster -%}
 | 
				
			||||||
{% set cluster_state = vars.cluster_state -%}
 | 
					 | 
				
			||||||
{% set quota_bytes = '' -%}
 | 
					{% set quota_bytes = '' -%}
 | 
				
			||||||
{% if pillar.get('storage_backend', 'etcd3') == 'etcd3' -%}
 | 
					{% if pillar.get('storage_backend', 'etcd3') == 'etcd3' -%}
 | 
				
			||||||
  {% set quota_bytes = '--quota-backend-bytes=4294967296' -%}
 | 
					  {% set quota_bytes = '--quota-backend-bytes=4294967296' -%}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user