mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 12:18:16 +00:00 
			
		
		
		
	[Federation] Do not build separate binaries for federation control plane components, hyperkube should be sufficient.
Also build the hyperkube docker image on-the-fly. This is only a temporary fix until the proposal in issue https://github.com/kubernetes/kubernetes/issues/28630 is implemented. Also, the new build/deployment method completely obviates this step. We use debian image instead of busybox and do not build hyperkube as a static binary yet. Wait until PR https://github.com/kubernetes/kubernetes/pull/26028 is merged to build static hyperkube binaries.
This commit is contained in:
		@@ -106,8 +106,6 @@ kube::build::get_docker_wrapped_binaries() {
 | 
				
			|||||||
          kube-controller-manager,busybox
 | 
					          kube-controller-manager,busybox
 | 
				
			||||||
          kube-scheduler,busybox
 | 
					          kube-scheduler,busybox
 | 
				
			||||||
          kube-proxy,gcr.io/google_containers/debian-iptables-amd64:v3
 | 
					          kube-proxy,gcr.io/google_containers/debian-iptables-amd64:v3
 | 
				
			||||||
          federation-apiserver,busybox
 | 
					 | 
				
			||||||
          federation-controller-manager,busybox
 | 
					 | 
				
			||||||
        );;
 | 
					        );;
 | 
				
			||||||
    "arm")
 | 
					    "arm")
 | 
				
			||||||
        local targets=(
 | 
					        local targets=(
 | 
				
			||||||
@@ -115,8 +113,6 @@ kube::build::get_docker_wrapped_binaries() {
 | 
				
			|||||||
          kube-controller-manager,armel/busybox
 | 
					          kube-controller-manager,armel/busybox
 | 
				
			||||||
          kube-scheduler,armel/busybox
 | 
					          kube-scheduler,armel/busybox
 | 
				
			||||||
          kube-proxy,gcr.io/google_containers/debian-iptables-arm:v3
 | 
					          kube-proxy,gcr.io/google_containers/debian-iptables-arm:v3
 | 
				
			||||||
          federation-apiserver,armel/busybox
 | 
					 | 
				
			||||||
          federation-controller-manager,armel/busybox
 | 
					 | 
				
			||||||
        );;
 | 
					        );;
 | 
				
			||||||
    "arm64")
 | 
					    "arm64")
 | 
				
			||||||
        local targets=(
 | 
					        local targets=(
 | 
				
			||||||
@@ -124,8 +120,6 @@ kube::build::get_docker_wrapped_binaries() {
 | 
				
			|||||||
          kube-controller-manager,aarch64/busybox
 | 
					          kube-controller-manager,aarch64/busybox
 | 
				
			||||||
          kube-scheduler,aarch64/busybox
 | 
					          kube-scheduler,aarch64/busybox
 | 
				
			||||||
          kube-proxy,gcr.io/google_containers/debian-iptables-arm64:v3
 | 
					          kube-proxy,gcr.io/google_containers/debian-iptables-arm64:v3
 | 
				
			||||||
          federation-apiserver,aarch64/busybox
 | 
					 | 
				
			||||||
          federation-controller-manager,aarch64/busybox
 | 
					 | 
				
			||||||
        );;
 | 
					        );;
 | 
				
			||||||
    "ppc64le")
 | 
					    "ppc64le")
 | 
				
			||||||
        local targets=(
 | 
					        local targets=(
 | 
				
			||||||
@@ -133,8 +127,6 @@ kube::build::get_docker_wrapped_binaries() {
 | 
				
			|||||||
          kube-controller-manager,ppc64le/busybox
 | 
					          kube-controller-manager,ppc64le/busybox
 | 
				
			||||||
          kube-scheduler,ppc64le/busybox
 | 
					          kube-scheduler,ppc64le/busybox
 | 
				
			||||||
          kube-proxy,gcr.io/google_containers/debian-iptables-ppc64le:v3
 | 
					          kube-proxy,gcr.io/google_containers/debian-iptables-ppc64le:v3
 | 
				
			||||||
          federation-apiserver,ppc64le/busybox
 | 
					 | 
				
			||||||
          federation-controller-manager,ppc64le/busybox
 | 
					 | 
				
			||||||
        );;
 | 
					        );;
 | 
				
			||||||
  esac
 | 
					  esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1553,8 +1545,6 @@ function kube::release::docker::release() {
 | 
				
			|||||||
    "kube-scheduler"
 | 
					    "kube-scheduler"
 | 
				
			||||||
    "kube-proxy"
 | 
					    "kube-proxy"
 | 
				
			||||||
    "hyperkube"
 | 
					    "hyperkube"
 | 
				
			||||||
    "federation-apiserver"
 | 
					 | 
				
			||||||
    "federation-controller-manager"
 | 
					 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  local docker_push_cmd=("${DOCKER[@]}")
 | 
					  local docker_push_cmd=("${DOCKER[@]}")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,6 +52,7 @@ KUBE_PLATFORM=${KUBE_PLATFORM:-linux}
 | 
				
			|||||||
KUBE_ARCH=${KUBE_ARCH:-amd64}
 | 
					KUBE_ARCH=${KUBE_ARCH:-amd64}
 | 
				
			||||||
KUBE_BUILD_STAGE=${KUBE_BUILD_STAGE:-release-stage}
 | 
					KUBE_BUILD_STAGE=${KUBE_BUILD_STAGE:-release-stage}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					source "${KUBE_ROOT}/build/common.sh"
 | 
				
			||||||
source "${KUBE_ROOT}/cluster/common.sh"
 | 
					source "${KUBE_ROOT}/cluster/common.sh"
 | 
				
			||||||
source "${KUBE_ROOT}/hack/lib/util.sh"
 | 
					source "${KUBE_ROOT}/hack/lib/util.sh"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -66,11 +67,11 @@ function create-federation-api-objects {
 | 
				
			|||||||
(
 | 
					(
 | 
				
			||||||
    : "${FEDERATION_PUSH_REPO_BASE?Must set FEDERATION_PUSH_REPO_BASE env var}"
 | 
					    : "${FEDERATION_PUSH_REPO_BASE?Must set FEDERATION_PUSH_REPO_BASE env var}"
 | 
				
			||||||
    export FEDERATION_APISERVER_DEPLOYMENT_NAME="federation-apiserver"
 | 
					    export FEDERATION_APISERVER_DEPLOYMENT_NAME="federation-apiserver"
 | 
				
			||||||
    export FEDERATION_APISERVER_IMAGE_REPO="${FEDERATION_PUSH_REPO_BASE}/federation-apiserver"
 | 
					    export FEDERATION_APISERVER_IMAGE_REPO="${FEDERATION_PUSH_REPO_BASE}/hyperkube"
 | 
				
			||||||
    export FEDERATION_APISERVER_IMAGE_TAG="${FEDERATION_IMAGE_TAG:-$(cat ${KUBE_ROOT}/_output/${KUBE_BUILD_STAGE}/server/${KUBE_PLATFORM}-${KUBE_ARCH}/kubernetes/server/bin/federation-apiserver.docker_tag)}"
 | 
					    export FEDERATION_APISERVER_IMAGE_TAG="${FEDERATION_IMAGE_TAG:-$(cat ${KUBE_ROOT}/_output/${KUBE_BUILD_STAGE}/server/${KUBE_PLATFORM}-${KUBE_ARCH}/kubernetes/server/bin/federation-apiserver.docker_tag)}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    export FEDERATION_CONTROLLER_MANAGER_DEPLOYMENT_NAME="federation-controller-manager"
 | 
					    export FEDERATION_CONTROLLER_MANAGER_DEPLOYMENT_NAME="federation-controller-manager"
 | 
				
			||||||
    export FEDERATION_CONTROLLER_MANAGER_IMAGE_REPO="${FEDERATION_PUSH_REPO_BASE}/federation-controller-manager"
 | 
					    export FEDERATION_CONTROLLER_MANAGER_IMAGE_REPO="${FEDERATION_PUSH_REPO_BASE}/hyperkube"
 | 
				
			||||||
    export FEDERATION_CONTROLLER_MANAGER_IMAGE_TAG="${FEDERATION_IMAGE_TAG:-$(cat ${KUBE_ROOT}/_output/${KUBE_BUILD_STAGE}/server/${KUBE_PLATFORM}-${KUBE_ARCH}/kubernetes/server/bin/federation-controller-manager.docker_tag)}"
 | 
					    export FEDERATION_CONTROLLER_MANAGER_IMAGE_TAG="${FEDERATION_IMAGE_TAG:-$(cat ${KUBE_ROOT}/_output/${KUBE_BUILD_STAGE}/server/${KUBE_PLATFORM}-${KUBE_ARCH}/kubernetes/server/bin/federation-controller-manager.docker_tag)}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if [[ -z "${FEDERATION_DNS_PROVIDER:-}" ]]; then
 | 
					    if [[ -z "${FEDERATION_DNS_PROVIDER:-}" ]]; then
 | 
				
			||||||
@@ -267,58 +268,64 @@ function create-federation-apiserver-certs {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Required
 | 
					# Required
 | 
				
			||||||
# FEDERATION_PUSH_REPO_BASE: the docker repo where federated images will be pushed
 | 
					# FEDERATION_PUSH_REPO_BASE: the docker repo where federated images will be pushed
 | 
				
			||||||
 | 
					# FEDERATION_IMAGE_TAG: the tag of the image to be pushed
 | 
				
			||||||
# Optional
 | 
					 | 
				
			||||||
# FEDERATION_IMAGE_TAG: push all federated images with this tag. Used for ci testing
 | 
					 | 
				
			||||||
function push-federation-images {
 | 
					function push-federation-images {
 | 
				
			||||||
    : "${FEDERATION_PUSH_REPO_BASE?Must set FEDERATION_PUSH_REPO_BASE env var}"
 | 
					    : "${FEDERATION_PUSH_REPO_BASE?Must set FEDERATION_PUSH_REPO_BASE env var}"
 | 
				
			||||||
    local FEDERATION_BINARIES=${FEDERATION_BINARIES:-"federation-apiserver federation-controller-manager"}
 | 
					    : "${FEDERATION_IMAGE_TAG?Must set FEDERATION_IMAGE_TAG env var}"
 | 
				
			||||||
 | 
					    local FEDERATION_BINARIES=${FEDERATION_BINARIES:-"hyperkube"}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    local imageFolder="${KUBE_ROOT}/_output/${KUBE_BUILD_STAGE}/server/${KUBE_PLATFORM}-${KUBE_ARCH}/kubernetes/server/bin"
 | 
					    local bin_dir="${KUBE_ROOT}/_output/${KUBE_BUILD_STAGE}/server/${KUBE_PLATFORM}-${KUBE_ARCH}/kubernetes/server/bin"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if [[ ! -d "$imageFolder" ]];then
 | 
					    if [[ ! -d "${bin_dir}" ]];then
 | 
				
			||||||
	echo "${imageFolder} does not exist! Run make quick-release or make release"
 | 
					        echo "${bin_dir} does not exist! Run make quick-release or make release"
 | 
				
			||||||
        exit 1
 | 
					        exit 1
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for binary in $FEDERATION_BINARIES;do
 | 
					    for binary in ${FEDERATION_BINARIES}; do
 | 
				
			||||||
	local imageFile="${imageFolder}/${binary}.tar"
 | 
					        local bin_path="${bin_dir}/${binary}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if [[ ! -f "$imageFile" ]];then
 | 
					        if [[ ! -f "${bin_path}" ]]; then
 | 
				
			||||||
	    echo "${imageFile} does not exist!"
 | 
					            echo "${bin_path} does not exist!"
 | 
				
			||||||
            exit 1
 | 
					            exit 1
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	echo "Load: ${imageFile}"
 | 
					        local docker_build_path="${bin_path}.dockerbuild"
 | 
				
			||||||
	# Load the image. Trust we know what it's called, as docker load provides no help there :(
 | 
					        local docker_file_path="${docker_build_path}/Dockerfile"
 | 
				
			||||||
	docker load < "${imageFile}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local srcImageTag="$(cat ${imageFolder}/${binary}.docker_tag)"
 | 
					        rm -rf ${docker_build_path}
 | 
				
			||||||
	local dstImageTag="${FEDERATION_IMAGE_TAG:-$srcImageTag}"
 | 
					        mkdir -p ${docker_build_path}
 | 
				
			||||||
	local srcImageName="${FEDERATION_IMAGE_REPO_BASE}/${binary}:${srcImageTag}"
 | 
					 | 
				
			||||||
	local dstImageName="${FEDERATION_PUSH_REPO_BASE}/${binary}:${dstImageTag}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	echo "Tag: ${srcImageName} --> ${dstImageName}"
 | 
					        ln "${bin_path}" "${docker_build_path}/${binary}"
 | 
				
			||||||
	docker tag -f "$srcImageName" "$dstImageName"
 | 
					        printf " FROM debian:jessie \n ADD ${binary} /usr/local/bin/${binary}\n" > ${docker_file_path}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	echo "Push: $dstImageName"
 | 
					        local docker_image_tag="${FEDERATION_PUSH_REPO_BASE}/${binary}:${FEDERATION_IMAGE_TAG}"
 | 
				
			||||||
	if [[ "${FEDERATION_PUSH_REPO_BASE}" == "gcr.io/"* ]];then
 | 
					
 | 
				
			||||||
 | 
					        # Build the docker image on-the-fly.
 | 
				
			||||||
 | 
					        #
 | 
				
			||||||
 | 
					        # NOTE: This is only a temporary fix until the proposal in issue
 | 
				
			||||||
 | 
					        # https://github.com/kubernetes/kubernetes/issues/28630 is implemented.
 | 
				
			||||||
 | 
					        # Also, the new turn up mechanism completely obviates this step.
 | 
				
			||||||
 | 
					        #
 | 
				
			||||||
 | 
					        # TODO(madhusudancs): Remove this code when the new turn up mechanism work
 | 
				
			||||||
 | 
					        # is merged.
 | 
				
			||||||
 | 
					        kube::log::status "Building docker image ${docker_image_tag} from the binary"
 | 
				
			||||||
 | 
					        docker build -q -t "${docker_image_tag}" ${docker_build_path} >/dev/null
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        rm -rf ${docker_build_path}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        kube::log::status "Pushing ${docker_image_tag}"
 | 
				
			||||||
 | 
					        if [[ "${FEDERATION_PUSH_REPO_BASE}" == "gcr.io/"* ]]; then
 | 
				
			||||||
            echo " -> GCR repository detected. Using gcloud"
 | 
					            echo " -> GCR repository detected. Using gcloud"
 | 
				
			||||||
	    gcloud docker push "$dstImageName"
 | 
					            gcloud docker push "${docker_image_tag}"
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
	    docker push "$dstImageName"
 | 
					            docker push "${docker_image_tag}"
 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	echo "Remove: $srcImageName"
 | 
					 | 
				
			||||||
	docker rmi "$srcImageName"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if [[ "$srcImageName" != "dstImageName" ]];then
 | 
					 | 
				
			||||||
	    echo "Remove: $dstImageName"
 | 
					 | 
				
			||||||
	    docker rmi "$dstImageName"
 | 
					 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        kube::log::status "Deleting docker image ${docker_image_tag}"
 | 
				
			||||||
 | 
					        docker rmi "${docker_image_tag}" 2>/dev/null || true
 | 
				
			||||||
    done
 | 
					    done
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function cleanup-federation-api-objects {
 | 
					function cleanup-federation-api-objects {
 | 
				
			||||||
  # Delete all resources with the federated-cluster label.
 | 
					  # Delete all resources with the federated-cluster label.
 | 
				
			||||||
  $host_kubectl delete pods,svc,rc,deployment,secret -lapp=federated-cluster
 | 
					  $host_kubectl delete pods,svc,rc,deployment,secret -lapp=federated-cluster
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,8 @@ spec:
 | 
				
			|||||||
      - name: apiserver
 | 
					      - name: apiserver
 | 
				
			||||||
        image: {{.FEDERATION_APISERVER_IMAGE_REPO}}:{{.FEDERATION_APISERVER_IMAGE_TAG}}
 | 
					        image: {{.FEDERATION_APISERVER_IMAGE_REPO}}:{{.FEDERATION_APISERVER_IMAGE_TAG}}
 | 
				
			||||||
        command:
 | 
					        command:
 | 
				
			||||||
        - /usr/local/bin/federation-apiserver
 | 
					        - /usr/local/bin/hyperkube
 | 
				
			||||||
 | 
					        - federation-apiserver
 | 
				
			||||||
        - --bind-address=0.0.0.0
 | 
					        - --bind-address=0.0.0.0
 | 
				
			||||||
        - --etcd-servers=http://localhost:2379
 | 
					        - --etcd-servers=http://localhost:2379
 | 
				
			||||||
        - --service-cluster-ip-range={{.FEDERATION_SERVICE_CIDR}}
 | 
					        - --service-cluster-ip-range={{.FEDERATION_SERVICE_CIDR}}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,8 @@ spec:
 | 
				
			|||||||
          mountPath: /etc/ssl/certs
 | 
					          mountPath: /etc/ssl/certs
 | 
				
			||||||
        image: {{.FEDERATION_CONTROLLER_MANAGER_IMAGE_REPO}}:{{.FEDERATION_CONTROLLER_MANAGER_IMAGE_TAG}}
 | 
					        image: {{.FEDERATION_CONTROLLER_MANAGER_IMAGE_REPO}}:{{.FEDERATION_CONTROLLER_MANAGER_IMAGE_TAG}}
 | 
				
			||||||
        command:
 | 
					        command:
 | 
				
			||||||
        - /usr/local/bin/federation-controller-manager
 | 
					        - /usr/local/bin/hyperkube
 | 
				
			||||||
 | 
					        - federation-controller-manager
 | 
				
			||||||
        - --master=https://{{.FEDERATION_APISERVER_DEPLOYMENT_NAME}}:443
 | 
					        - --master=https://{{.FEDERATION_APISERVER_DEPLOYMENT_NAME}}:443
 | 
				
			||||||
        - --dns-provider={{.FEDERATION_DNS_PROVIDER}}
 | 
					        - --dns-provider={{.FEDERATION_DNS_PROVIDER}}
 | 
				
			||||||
        - --dns-provider-config={{.FEDERATION_DNS_PROVIDER_CONFIG}}
 | 
					        - --dns-provider-config={{.FEDERATION_DNS_PROVIDER_CONFIG}}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,8 +37,6 @@ kube::golang::server_targets() {
 | 
				
			|||||||
    cmd/kubelet
 | 
					    cmd/kubelet
 | 
				
			||||||
    cmd/kubemark
 | 
					    cmd/kubemark
 | 
				
			||||||
    cmd/hyperkube
 | 
					    cmd/hyperkube
 | 
				
			||||||
    federation/cmd/federation-apiserver
 | 
					 | 
				
			||||||
    federation/cmd/federation-controller-manager
 | 
					 | 
				
			||||||
    plugin/cmd/kube-scheduler
 | 
					    plugin/cmd/kube-scheduler
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
  if [ -n "${KUBERNETES_CONTRIB:-}" ]; then
 | 
					  if [ -n "${KUBERNETES_CONTRIB:-}" ]; then
 | 
				
			||||||
@@ -175,8 +173,6 @@ readonly KUBE_STATIC_LIBRARIES=(
 | 
				
			|||||||
  kube-scheduler
 | 
					  kube-scheduler
 | 
				
			||||||
  kube-proxy
 | 
					  kube-proxy
 | 
				
			||||||
  kubectl
 | 
					  kubectl
 | 
				
			||||||
  federation-apiserver
 | 
					 | 
				
			||||||
  federation-controller-manager
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
kube::golang::is_statically_linked_library() {
 | 
					kube::golang::is_statically_linked_library() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -197,8 +197,13 @@ kube::util::gen-docs() {
 | 
				
			|||||||
  "${genkubedocs}" "${dest}/docs/admin/" "kube-proxy"
 | 
					  "${genkubedocs}" "${dest}/docs/admin/" "kube-proxy"
 | 
				
			||||||
  "${genkubedocs}" "${dest}/docs/admin/" "kube-scheduler"
 | 
					  "${genkubedocs}" "${dest}/docs/admin/" "kube-scheduler"
 | 
				
			||||||
  "${genkubedocs}" "${dest}/docs/admin/" "kubelet"
 | 
					  "${genkubedocs}" "${dest}/docs/admin/" "kubelet"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # We don't really need federation-apiserver and federation-controller-manager
 | 
				
			||||||
 | 
					  # binaries to generate the docs. We just pass their names to decide which docs
 | 
				
			||||||
 | 
					  # to generate. The actual binary for running federation is hyperkube.
 | 
				
			||||||
  "${genfeddocs}" "${dest}/docs/admin/" "federation-apiserver"
 | 
					  "${genfeddocs}" "${dest}/docs/admin/" "federation-apiserver"
 | 
				
			||||||
  "${genfeddocs}" "${dest}/docs/admin/" "federation-controller-manager"
 | 
					  "${genfeddocs}" "${dest}/docs/admin/" "federation-controller-manager"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  mkdir -p "${dest}/docs/man/man1/"
 | 
					  mkdir -p "${dest}/docs/man/man1/"
 | 
				
			||||||
  "${genman}" "${dest}/docs/man/man1/"
 | 
					  "${genman}" "${dest}/docs/man/man1/"
 | 
				
			||||||
  mkdir -p "${dest}/docs/yaml/kubectl/"
 | 
					  mkdir -p "${dest}/docs/yaml/kubectl/"
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user