diff --git a/hack/build.sh b/hack/build.sh index 82d5d36c..a189769f 100755 --- a/hack/build.sh +++ b/hack/build.sh @@ -66,4 +66,4 @@ function build_binary_for_platform() { set +x } -build_binary "$@" \ No newline at end of file +build_binary "$@" diff --git a/hack/deploy-agent-and-estimator.sh b/hack/deploy-agent-and-estimator.sh deleted file mode 100755 index 5b99243f..00000000 --- a/hack/deploy-agent-and-estimator.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/bash -# Copyright 2021 The Karmada 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. - - -set -euo pipefail - -cd "$(dirname "${BASH_SOURCE[0]}")" -SHELL_FOLDER=$(pwd) -REPO_ROOT=$(cd ../ && pwd) - -source "${REPO_ROOT}"/hack/util/init.sh && util:init:init_scripts - -function usage() { - echo "This script will deploy karmada-agent in member cluster and karmada-scheduler-estimator of the cluster in karmada-host." - echo "Usage: hack/deploy-agent-and-estimator.sh " - echo "Example: hack/deploy-agent-and-estimator.sh ~/.kube/karmada.config karmada-host ~/.kube/karmada.config karmada-apiserver ~/.kube/members.config member1" - echo "Parameters:" - echo " KARMADA_HOST_KUBECONFIG path to karmada-host kubeconfig" - echo " KARMADA_HOST context-name in KARMADA_HOST_KUBECONFIG" - echo " KARMADA_APISERVER_KUBECONFIG path to karmada-apiserver kubeconfig" - echo " KARMADA_APISERVER context-name in KARMADA_APISERVER_KUBECONFIG" - echo " MEMBER_CLUSTER_KUBECONFIG path to member-cluster kubeconfig" - echo " MEMBER_CLUSTER context-name in MEMBER_CLUSTER_KUBECONFIG" -} - -if [[ $# -ne 6 ]]; then - usage - exit 1 -fi - - -KARMADA_HOST_KUBECONFIG=${1} -KARMADA_HOST=${2} -KARMADA_APISERVER_KUBECONFIG=${3} -KARMADA_APISERVER=${4} -MEMBER_CLUSTER_KUBECONFIG=${5} -MEMBER_CLUSTER=${6} - -INFO "Check kubeconfig and context-name for ${KARMADA_HOST}" -check_karmada_host_result=$(util::verify::check_kubeconfig_and_context "${KARMADA_HOST_KUBECONFIG}" "${KARMADA_HOST}"; echo $?) -if [[ ${check_karmada_host_result} -eq 0 ]]; then - NOTICE "Kubeconfig check for ${KARMADA_HOST} - PASSED" -else - ERROR "Kubeconfig check for ${KARMADA_HOST} - NOT PASSED" - ERROR "Please check the existence of kubeconfig[${KARMADA_HOST_KUBECONFIG}] and validity of context[${KARMADA_HOST}]" - exit 1 -fi - -INFO "Check kubeconfig and context-name for ${KARMADA_APISERVER}" -check_karmada_apiserver_result=$(util::verify::check_kubeconfig_and_context "${KARMADA_APISERVER_KUBECONFIG}" "${KARMADA_APISERVER}"; echo $?) -if [[ ${check_karmada_apiserver_result} -eq 0 ]]; then - NOTICE "Kubeconfig check for ${KARMADA_APISERVER} - PASSED" -else - ERROR "Kubeconfig check for ${KARMADA_APISERVER} - NOT PASSED" - ERROR "Please check the existence of kubeconfig[${KARMADA_APISERVER_KUBECONFIG}] and validity of context[${KARMADA_APISERVER}]" - exit 1 -fi - -INFO "Check kubeconfig and context-name for ${MEMBER_CLUSTER}" -check_member_cluster_result=$(util::verify::check_kubeconfig_and_context "${MEMBER_CLUSTER_KUBECONFIG}" "${MEMBER_CLUSTER}"; echo $?) -if [[ ${check_member_cluster_result} -eq 0 ]]; then - NOTICE "Kubeconfig check for ${MEMBER_CLUSTER} - PASSED" -else - ERROR "Kubeconfig check for ${MEMBER_CLUSTER} - NOT PASSED" - ERROR "Please check the existence of kubeconfig[${MEMBER_CLUSTER_KUBECONFIG}] and validity of context[${MEMBER_CLUSTER}]" - exit 1 -fi - - -"${REPO_ROOT}"/hack/deploy-scheduler-estimator.sh \ - "${KARMADA_HOST_KUBECONFIG}" "${KARMADA_HOST}" \ - "${MEMBER_CLUSTER_KUBECONFIG}" "${MEMBER_CLUSTER}" -"${REPO_ROOT}"/hack/deploy-karmada-agent.sh \ - "${KARMADA_APISERVER_KUBECONFIG}" "${KARMADA_APISERVER}" \ - "${MEMBER_CLUSTER_KUBECONFIG}" "${MEMBER_CLUSTER}" diff --git a/hack/deploy-k8s-metrics-server.sh b/hack/deploy-k8s-metrics-server.sh deleted file mode 100755 index ec0fb180..00000000 --- a/hack/deploy-k8s-metrics-server.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/bash -# Copyright 2021 The Karmada 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. - - -set -euo pipefail - -cd "$(dirname "${BASH_SOURCE[0]}")" -SHELL_FOLDER=$(pwd) -REPO_ROOT=$(cd ../ && pwd) - -source "${REPO_ROOT}"/hack/util/init.sh && util:init:init_scripts - -function usage() { - echo "This script will deploy metrics-server in member clusters." - echo "Usage: hack/deploy-k8s-metrics-server.sh " - echo "Example: hack/deploy-k8s-metrics-server.sh ~/.kube/members.config member1" - echo "Parameters:" - echo " MEMBER_CLUSTER_KUBECONFIG path to member-cluster kubeconfig" - echo " MEMBER_CLUSTER context-name in MEMBER_CLUSTER_KUBECONFIG" -} - -TEMP_PATH=$(mktemp -d) -trap '{ rm -rf ${TEMP_PATH}; }' EXIT - -if [[ $# -ne 2 ]]; then - usage - exit 1 -fi - - -MEMBER_CLUSTER_KUBECONFIG=${1} -MEMBER_CLUSTER=${2} -INFO "Check kubeconfig and context-name for ${MEMBER_CLUSTER}" -check_member_cluster_result=$(util::verify::check_kubeconfig_and_context "${MEMBER_CLUSTER_KUBECONFIG}" "${MEMBER_CLUSTER}"; echo $?) -if [[ ${check_member_cluster_result} -eq 0 ]]; then - NOTICE "Kubeconfig check for ${MEMBER_CLUSTER} - PASSED" -else - ERROR "Kubeconfig check for ${MEMBER_CLUSTER} - NOT PASSED" - ERROR "Please check the existence of kubeconfig[${MEMBER_CLUSTER_KUBECONFIG}] and validity of context[${MEMBER_CLUSTER}]" - exit 1 -fi - -# here we prepare metrics-server@v0.6.3 yaml files, if you want to upgrade, you can download it, -# and replace it metrics-server.yaml manually undert the artifacts dir -# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.3/components.yaml -INFO "Prepare metrics-server.yaml in ${TEMP_PATH}" -metrics_server_path="${TEMP_PATH}"/metrics-server.yaml -cp "${REPO_ROOT}/artifacts/metrics-server.yaml" "${metrics_server_path}" - -INFO "Replace variable in metrics-server.yaml" -sed -i'' -e 's/args:/args:\n - --kubelet-insecure-tls=true/' "${metrics_server_path}" - -# deploy metrics-server in member cluster -INFO "Apply metrics-server.yaml in cluster ${MEMBER_CLUSTER}" -kubectl --kubeconfig="${MEMBER_CLUSTER_KUBECONFIG}" --context="${MEMBER_CLUSTER}" apply -f "${metrics_server_path}" | while IFS= read -r line; do - INFO "$line" -done diff --git a/hack/deploy-karmada-agent.sh b/hack/deploy-karmada-agent.sh deleted file mode 100755 index f8c1bc04..00000000 --- a/hack/deploy-karmada-agent.sh +++ /dev/null @@ -1,125 +0,0 @@ -#!/bin/bash -# Copyright 2021 The Karmada 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. - - -set -euo pipefail - -cd "$(dirname "${BASH_SOURCE[0]}")" -SHELL_FOLDER=$(pwd) -REPO_ROOT=$(cd ../ && pwd) - -source "${REPO_ROOT}"/hack/util/init.sh && util:init:init_scripts - -function usage() { - echo "This script will deploy karmada agent to a cluster." - echo "Usage: hack/deploy-karmada-agent.sh " - echo "Example: hack/deploy-karmada-agent.sh ~/.kube/karmada.config karmada-apiserver ~/.kube/members.config member1" - echo "Parameters:" - echo " KARMADA_APISERVER_KUBECONFIG path to karmada-apiserver kubeconfig" - echo " KARMADA_APISERVER context-name in KARMADA_APISERVER_KUBECONFIG" - echo " MEMBER_CLUSTER_KUBECONFIG path to member-cluster kubeconfig" - echo " MEMBER_CLUSTER context-name in MEMBER_CLUSTER_KUBECONFIG" -} - -if [[ $# -ne 4 ]]; then - usage - exit 1 -fi - -KARMADA_APISERVER_KUBECONFIG=${1} -KARMADA_APISERVER=${2} -MEMBER_CLUSTER_KUBECONFIG=${3} -MEMBER_CLUSTER=${4} -INFO "Deploy karmada-agent on cluster ${MEMBER_CLUSTER}" -DEBUG "Deploy parameters:" -DEBUG "KARMADA_APISERVER_KUBECONFIG:${KARMADA_APISERVER_KUBECONFIG}" -DEBUG "KARMADA_APISERVER:${KARMADA_APISERVER}" -DEBUG "MEMBER_CLUSTER_KUBECONFIG:${MEMBER_CLUSTER_KUBECONFIG}" -DEBUG "MEMBER_CLUSTER:${MEMBER_CLUSTER}" - -INFO "Check kubeconfig and context-name for ${KARMADA_APISERVER}" -check_karmada_apiserver_result=$(util::verify::check_kubeconfig_and_context "${KARMADA_APISERVER_KUBECONFIG}" "${KARMADA_APISERVER}"; echo $?) -if [[ ${check_karmada_apiserver_result} -eq 0 ]]; then - NOTICE "Kubeconfig check for ${KARMADA_APISERVER} - PASSED" -else - ERROR "Kubeconfig check for ${KARMADA_APISERVER} - NOT PASSED" - ERROR "Please check the existence of kubeconfig[${KARMADA_APISERVER_KUBECONFIG}] and validity of context[${KARMADA_APISERVER}]" - exit 1 -fi - -INFO "Check kubeconfig and context-name for ${MEMBER_CLUSTER}" -check_member_cluster_result=$(util::verify::check_kubeconfig_and_context "${MEMBER_CLUSTER_KUBECONFIG}" "${MEMBER_CLUSTER}"; echo $?) -if [[ ${check_member_cluster_result} -eq 0 ]]; then - NOTICE "Kubeconfig check for ${MEMBER_CLUSTER} - PASSED" -else - ERROR "Kubeconfig check for ${MEMBER_CLUSTER} - NOT PASSED" - ERROR "Please check the existence of kubeconfig[${MEMBER_CLUSTER_KUBECONFIG}] and validity of context[${MEMBER_CLUSTER}]" - exit 1 -fi - -function karmada_apiserver_kubectl() { - kubectl --kubeconfig="${KARMADA_APISERVER_KUBECONFIG}" --context="${KARMADA_APISERVER}" "$@" -} - -function member_cluster_kubectl() { - kubectl --kubeconfig="${MEMBER_CLUSTER_KUBECONFIG}" --context="${MEMBER_CLUSTER}" "$@" -} - - -AGENT_IMAGE_PULL_POLICY=${IMAGE_PULL_POLICY:-IfNotPresent} - -INFO "Create namespace for karmada agent" -member_cluster_kubectl apply -f "${REPO_ROOT}/artifacts/agent/namespace.yaml" - -INFO "Create serviceaccount, clusterrole and clusterrolebinding for karmada agent" -member_cluster_kubectl apply -f "${REPO_ROOT}/artifacts/agent/serviceaccount.yaml" -member_cluster_kubectl apply -f "${REPO_ROOT}/artifacts/agent/clusterrole.yaml" -member_cluster_kubectl apply -f "${REPO_ROOT}/artifacts/agent/clusterrolebinding.yaml" - -INFO "Create secret for karmada agent" -member_cluster_kubectl create secret generic karmada-kubeconfig --from-file=karmada-kubeconfig="${KARMADA_APISERVER_KUBECONFIG}" -n "${KARMADA_SYSTEM_NAMESPACE}" - -# extract api endpoint of member cluster -# shellcheck disable=SC2086 -#member_cluster=$(member_cluster_kubectl config view -o jsonpath='{.contexts[?(@.name == "'${MEMBER_CLUSTER}'")].context.cluster}') -# shellcheck disable=SC2086 -member_cluster_api_endpoint=$(member_cluster_kubectl config view -o jsonpath='{.clusters[?(@.name == "'${MEMBER_CLUSTER}'")].cluster.server}') - -# deploy karmada agent -TEMP_PATH=$(mktemp -d) -trap '{ rm -rf ${TEMP_PATH}; }' EXIT - -INFO "Prepare artifacts for karmada agent in ${TEMP_PATH}" -karmada_agent_path="${TEMP_PATH}"/karmada-agent.yaml -cp "${REPO_ROOT}"/artifacts/agent/karmada-agent.yaml "${karmada_agent_path}" - -INFO "Replace variables in karmada-agent.yaml" -sed -i'' -e "s/{{KARMADA_VERSION}}/${KARMADA_VERSION}/g" "${karmada_agent_path}" -sed -i'' -e "s/{{karmada_context}}/${KARMADA_APISERVER}/g" "${karmada_agent_path}" -sed -i'' -e "s/{{member_cluster_name}}/${MEMBER_CLUSTER}/g" "${karmada_agent_path}" -sed -i'' -e "s/{{image_pull_policy}}/${AGENT_IMAGE_PULL_POLICY}/g" "${karmada_agent_path}" -sed -i'' -e "s|{{member_cluster_api_endpoint}}|${member_cluster_api_endpoint}|g" "${karmada_agent_path}" - -INFO "Apply karmada-agent.yaml on cluster ${MEMBER_CLUSTER}" -DEBUG "MEMBER_CLUSTER_KUBECONFIG:${MEMBER_CLUSTER_KUBECONFIG}" -DEBUG "MEMBER_CLUSTER:${MEMBER_CLUSTER}" -DEBUG "karmada_agent_path:${karmada_agent_path}" -member_cluster_kubectl apply -f "${karmada_agent_path}" - -INFO "Wait for karmada-agent is ready" -util::misc::wait_pod_ready \ - "${MEMBER_CLUSTER_KUBECONFIG}" "${MEMBER_CLUSTER}" \ - "${AGENT_POD_LABEL}" "${KARMADA_SYSTEM_NAMESPACE}" -INFO "Karmada-agent is ready" diff --git a/hack/deploy-karmada.sh b/hack/deploy-karmada.sh deleted file mode 100755 index 328c4e7b..00000000 --- a/hack/deploy-karmada.sh +++ /dev/null @@ -1,402 +0,0 @@ -#!/bin/bash -set -euo pipefail - -cd "$(dirname "${BASH_SOURCE[0]}")" -SHELL_FOLDER=$(pwd) -REPO_ROOT=$(cd ../ && pwd) -source "${REPO_ROOT}"/hack/util/init.sh && util:init:init_scripts - -function usage() { - echo "This script deploys karmada control plane components to a given cluster." - echo "Note: This script is an internal script and is not intended used by end-users." - echo "Usage: hack/deploy-karmada.sh [KARMADA_HOST_CLUSTER_TYPE]" - echo "Example: hack/deploy-karmada.sh ~/.kube/config karmada-host karmada-apiserver local" - echo "Parameters:" - echo " KARMADA_HOST_KUBECONFIG path to karmada-host kubeconfig" - echo " KARMADA_HOST context-name in KARMADA_HOST_KUBECONFIG" - echo " KARMADA_APISERVER context-name for karmada-apiserver," - echo " this script will append karmada-apiserver kubeconfig to KARMADA_HOST_KUBECONFIG" - echo " KARMADA_HOST_CLUSTER_TYPE The type of your cluster that will install Karmada. Optional values are 'local' and 'remote'," - echo " 'local' is default, as that is for the local environment, i.e. for the cluster created by kind." - echo " And if you want to install karmada to a standalone cluster, set it as 'remote'" -} - -if [[ $# -ne 3 && $# -ne 4 ]]; then - usage - exit 1 -fi - - -# parse from arguments -KARMADA_HOST_KUBECONFIG=${1} -KARMADA_HOST=${2} -KARMADA_APISERVER=${3} -# KARMADA_HOST_CLUSTER_TYPE can be 'local'/'remote' -# default value of KARMADA_HOST_CLUSTER_TYPE is local, i.e. cluster created by kind. -KARMADA_HOST_CLUSTER_TYPE=${4:-"local"} -# after karmada deployed, the kubeconfig for karmada apiserver will be append to KARMADA_HOST_KUBECONFIG -# by invoking util::misc::append_client_kubeconfig, so we use KARMADA_KUBECONFIG_PATH as an alias to KARMADA_HOST_KUBECONFIG -KARMADA_KUBECONFIG_PATH=${KARMADA_HOST_KUBECONFIG} - - - -# variable define -CERT_DIR=${CERT_DIR:-${DEFAULT_CERT_DIR}} -ROOT_CA_FILE=${CERT_DIR}/ca.crt -ROOT_CA_KEY=${CERT_DIR}/ca.key - -# whether create a 'LoadBalancer' type service for karmada apiserver -LOAD_BALANCER=${LOAD_BALANCER:-false} -KARMADA_APISERVER_SECURE_PORT=${KARMADA_APISERVER_SECURE_PORT:-5443} - -ARTIFACTS_DIR="${REPO_ROOT}"/artifacts - -# execute kubectl cmd on ${KARMADA_HOST} -# NOTICE: -# karmada_host_kubectl will use global variable ${KARMADA_KUBECONFIG_PATH} and ${KARMADA_HOST} -# this function can used only if -# util::verify::check_kubeconfig_and_context "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" passed -function karmada_host_kubectl() { - kubectl --kubeconfig="${KARMADA_KUBECONFIG_PATH}" --context="${KARMADA_HOST}" "$@" -} - -# execute kubectl cmd on ${KARMADA_APISERVER} -# NOTICE: -# karmada_apiserver_kubectl will use global variable ${KARMADA_KUBECONFIG_PATH} and ${KARMADA_APISERVER} -# this function can used only if -# util::verify::check_kubeconfig_and_context "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_APISERVER}" passed -function karmada_apiserver_kubectl() { - kubectl --kubeconfig="${KARMADA_KUBECONFIG_PATH}" --context="${KARMADA_APISERVER}" "$@" -} - - -INFO "Check necessary clis" -for cli in "openssl" "cfssl" "cfssljson" "nslookup"; do - cli_check_result=$(util::verify::check_cmd ${cli}; echo $?) - if [[ ${cli_check_result} -eq 0 ]]; then - NOTICE "CLI check: '${cli}' existence check - PASSED" - else - ERROR "CLI check: '${cli}' existence check - NOT PASSED" - ERROR "It seems that '${cli}' is not installed on your machine, please install '${cli}' follow the instructions provided by $(util::misc::print_install_tips ${cli})" - exit 1 - fi -done - - -INFO "Check kubeconfig and context-name for ${KARMADA_HOST}" -check_karmada_host_result=$(util::verify::check_kubeconfig_and_context "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}"; echo $?) -if [[ ${check_karmada_host_result} -eq 0 ]]; then - NOTICE "Kubeconfig check for ${KARMADA_HOST} - PASSED" -else - ERROR "Kubeconfig check for ${KARMADA_HOST} - NOT PASSED" - ERROR "Please check the existence of kubeconfig[${KARMADA_KUBECONFIG_PATH}] and validity of context[${KARMADA_HOST}]" - exit 1 -fi - -# Use x.x.x.8 IP address, which is the same CIDR with the node address of the Kind cluster, -# as the loadBalancer service address of component karmada-interpreter-webhook-example. -apiserver_ip=$(util::misc::get_apiserver_ip_from_kubeconfig "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}") -interpreter_webhook_example_service_external_ip_prefix=$(echo "${apiserver_ip}" | awk -F. '{printf "%s.%s.%s",$1,$2,$3}') -interpreter_webhook_example_service_external_ip_address=${interpreter_webhook_example_service_external_ip_prefix}.8 - -# KARMADA_APISERVER_SERVICE_TYPE is the service type of karmada API Server, -# For connectivity, it will be different when KARMADA_HOST_CLUSTER_TYPE is different. -# When KARMADA_HOST_CLUSTER_TYPE=local, we will create a ClusterIP type Service. And when -# When KARMADA_HOST_CLUSTER_TYPE=remote, we directly use hostNetwork to access Karmada API Server outside the -# karmada-host cluster. Of course, you can create a LoadBalancer service by setting $LOAD_BALANCER=true -KARMADA_APISERVER_SERVICE_TYPE="ClusterIP" -if [ "${KARMADA_HOST_CLUSTER_TYPE}" = "local" ]; then - # local mode - KARMADA_APISERVER_IP=${apiserver_ip} -else - # remote mode - # KARMADA_APISERVER_IP will be got when Karmada API Server is ready - if [ "${LOAD_BALANCER}" = true ]; then - KARMADA_APISERVER_SERVICE_TYPE="LoadBalancer" - fi - # make sure HOST_CLUSTER_TYPE is in local and remote - KARMADA_HOST_CLUSTER_TYPE="remote" -fi - - -INFO "Clean outdated cert dir" -mkdir -p "${CERT_DIR}" &>/dev/null || mkdir -p "${CERT_DIR}" -rm -f "${CERT_DIR}/*" &>/dev/null || rm -f "${CERT_DIR}/*" - - -# prepare artifacts -# for debug -# TEMP_PATH="/tmp/tmp.IfZpx6WpRn" -# mkdir -p ${TEMP_PATH} -TEMP_PATH=$(mktemp -d) -trap '{ rm -rf ${TEMP_PATH}; }' EXIT -INFO "Prepare artifacts in path: ${TEMP_PATH}" -cp -rf "${REPO_ROOT}"/artifacts/deploy "${TEMP_PATH}" -# ${DEPLOY_DIR} has the same files as ${REPO_ROOT}"/artifacts/deploy -DEPLOY_DIR="${TEMP_PATH}"/deploy - - -INFO "Prepare cert in path: ${CERT_DIR}" - -INFO "Create CA signers" -DEBUG "Create CA[ca] signers" -util::misc::create_signing_certkey \ - "" "${CERT_DIR}" \ - "ca" "karmada" '"client auth","server auth"' -DEBUG "Create CA[front-proxy-ca] signers" -util::misc::create_signing_certkey \ - "" "${CERT_DIR}" \ - "front-proxy-ca" "front-proxy-ca" '"client auth","server auth"' -DEBUG "Create CA[etcd-ca] signers" -util::misc::create_signing_certkey \ - "" "${CERT_DIR}" \ - "etcd-ca" "etcd-ca" '"client auth","server auth"' - -INFO "Sign certificates" -util::misc::create_certkey \ - "" "${CERT_DIR}" \ - "ca" "karmada" "system:admin" "system:masters" \ - "kubernetes.default.svc" "*.etcd.karmada-system.svc.cluster.local" "*.karmada-system.svc.cluster.local" "*.karmada-system.svc" "localhost" "127.0.0.1" "${interpreter_webhook_example_service_external_ip_address}" -util::misc::create_certkey \ - "" "${CERT_DIR}" \ - "ca" "apiserver" "karmada-apiserver" "" \ - "*.etcd.karmada-system.svc.cluster.local" "*.karmada-system.svc.cluster.local" "*.karmada-system.svc" "localhost" "127.0.0.1" "${apiserver_ip}" -util::misc::create_certkey \ - "" "${CERT_DIR}" \ - "front-proxy-ca" "front-proxy-client" "front-proxy-client" "" \ - "kubernetes.default.svc" "*.etcd.karmada-system.svc.cluster.local" "*.karmada-system.svc.cluster.local" "*.karmada-system.svc" "localhost" "127.0.0.1" -util::misc::create_certkey \ - "" "${CERT_DIR}" \ - "etcd-ca" "etcd-server" "etcd-server" "" \ - "kubernetes.default.svc" "*.etcd.karmada-system.svc.cluster.local" "*.karmada-system.svc.cluster.local" "*.karmada-system.svc" "localhost" "127.0.0.1" -util::misc::create_certkey \ - "" "${CERT_DIR}" \ - "etcd-ca" "etcd-client" "etcd-client" "" \ - "*.etcd.karmada-system.svc.cluster.local" "*.karmada-system.svc.cluster.local" "*.karmada-system.svc" "localhost" "127.0.0.1" - -INFO "Create namespace on ${KARMADA_HOST}" -karmada_host_kubectl apply -f "${DEPLOY_DIR}"/namespace.yaml | INFO - - -INFO "Encode certificates" -karmada_ca=$(base64 < "${ROOT_CA_FILE}" | tr -d '\r\n') -karmada_ca_key=$(base64 < "${ROOT_CA_KEY}" | tr -d '\r\n') -karmada_crt=$(base64 < "${CERT_DIR}/karmada.crt" | tr -d '\r\n') -karmada_key=$(base64 < "${CERT_DIR}/karmada.key" | tr -d '\r\n') -karmada_apiserver_crt=$(base64 < "${CERT_DIR}/apiserver.crt" | tr -d '\r\n') -karmada_apiserver_key=$(base64 < "${CERT_DIR}/apiserver.key" | tr -d '\r\n') -front_proxy_ca_crt=$(base64 < "${CERT_DIR}/front-proxy-ca.crt" | tr -d '\r\n') -front_proxy_client_crt=$(base64 < "${CERT_DIR}/front-proxy-client.crt" | tr -d '\r\n') -front_proxy_client_key=$(base64 < "${CERT_DIR}/front-proxy-client.key" | tr -d '\r\n') -etcd_ca_crt=$(base64 < "${CERT_DIR}/etcd-ca.crt" | tr -d '\r\n') -etcd_server_crt=$(base64 < "${CERT_DIR}/etcd-server.crt" | tr -d '\r\n') -etcd_server_key=$(base64 < "${CERT_DIR}/etcd-server.key" | tr -d '\r\n') -etcd_client_crt=$(base64 < "${CERT_DIR}/etcd-client.crt" | tr -d '\r\n') -etcd_client_key=$(base64 < "${CERT_DIR}/etcd-client.key" | tr -d '\r\n') - - -INFO "Replace variables and apply to cluster" -karmada_cert_secret_path="${DEPLOY_DIR}"/karmada-cert-secret.yaml -secret_path="${DEPLOY_DIR}"/secret.yaml -karmada_webhook_cert_secret_path="${DEPLOY_DIR}"/karmada-webhook-cert-secret.yaml -for secret_file in ${karmada_cert_secret_path} ${secret_path} ${karmada_webhook_cert_secret_path}; do - INFO "Replace variables for ${secret_file}" - sed -i'' -e "s/{{ca_crt}}/${karmada_ca}/g" "${secret_file}" - sed -i'' -e "s/{{ca_key}}/${karmada_ca_key}/g" "${secret_file}" - sed -i'' -e "s/{{client_crt}}/${karmada_crt}/g" "${secret_file}" - sed -i'' -e "s/{{client_key}}/${karmada_key}/g" "${secret_file}" - sed -i'' -e "s/{{apiserver_crt}}/${karmada_apiserver_crt}/g" "${secret_file}" - sed -i'' -e "s/{{apiserver_key}}/${karmada_apiserver_key}/g" "${secret_file}" - sed -i'' -e "s/{{front_proxy_ca_crt}}/${front_proxy_ca_crt}/g" "${secret_file}" - sed -i'' -e "s/{{front_proxy_client_crt}}/${front_proxy_client_crt}/g" "${secret_file}" - sed -i'' -e "s/{{front_proxy_client_key}}/${front_proxy_client_key}/g" "${secret_file}" - sed -i'' -e "s/{{etcd_ca_crt}}/${etcd_ca_crt}/g" "${secret_file}" - sed -i'' -e "s/{{etcd_server_crt}}/${etcd_server_crt}/g" "${secret_file}" - sed -i'' -e "s/{{etcd_server_key}}/${etcd_server_key}/g" "${secret_file}" - sed -i'' -e "s/{{etcd_client_crt}}/${etcd_client_crt}/g" "${secret_file}" - sed -i'' -e "s/{{etcd_client_key}}/${etcd_client_key}/g" "${secret_file}" - sed -i'' -e "s/{{server_key}}/${karmada_key}/g" "${secret_file}" - sed -i'' -e "s/{{server_certificate}}/${karmada_crt}/g" "${secret_file}" - - INFO "Apply ${secret_file} on ${KARMADA_HOST}" - karmada_host_kubectl apply -f "${secret_file}" | INFO -done - - -# deploy etcd -INFO "Start deploy etcd on ${KARMADA_HOST}" -karmada_host_kubectl apply -f "${REPO_ROOT}"/artifacts/deploy/karmada-etcd.yaml | while IFS= read -r line; do - INFO "$line" -done -INFO "Wait for etcd is ready" -util::misc::wait_pod_ready \ - "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" \ - "${ETCD_POD_LABEL}" "${KARMADA_SYSTEM_NAMESPACE}" -INFO "Etcd is ready" - -INFO "Replace variables in yaml files" -for k8s_resource_file in $(find "${DEPLOY_DIR}" -maxdepth 1 -type f | grep -e "\.yaml$"); do - sed -i'' -e "s/{{KARMADA_VERSION}}/${KARMADA_VERSION}/g" "${k8s_resource_file}" -done -sed -i'' -e "s/{{service_type}}/${KARMADA_APISERVER_SERVICE_TYPE}/g" "${DEPLOY_DIR}"/karmada-apiserver.yaml - -INFO "Create apiserver service on ${KARMADA_HOST}" -karmada_host_kubectl apply -f "${DEPLOY_DIR}"/karmada-apiserver.yaml | while IFS= read -r line; do - INFO "$line" -done -INFO "Wait for karmada-apiserver is ready" -util::misc::wait_pod_ready \ - "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" \ - "${APISERVER_POD_LABEL}" "${KARMADA_SYSTEM_NAMESPACE}" -INFO "Karmada-apiserver is ready" - -# get Karmada apiserver IP at remote mode -if [ "${KARMADA_HOST_CLUSTER_TYPE}" = "remote" ]; then - case $KARMADA_APISERVER_SERVICE_TYPE in - 'ClusterIP') - KARMADA_APISERVER_IP=$(karmada_host_kubectl get pod -l app=karmada-apiserver -n "${KARMADA_SYSTEM_NAMESPACE}" -o=jsonpath='{.items[0].status.podIP}') - ;; - 'LoadBalancer') - if util::misc::wait_service_external_ip "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" "karmada-apiserver" "${KARMADA_SYSTEM_NAMESPACE}"; then - INFO "Get service external IP: ${SERVICE_EXTERNAL_IP}, wait to check network connectivity" - KARMADA_APISERVER_IP=$(util::misc::get_load_balancer_ip) || KARMADA_APISERVER_IP='' - else - ERROR "Wait service external IP timeout, please check the load balancer IP of service: karmada-apiserver" - exit 1 - fi - ;; - esac -fi - - -if [[ -n "${KARMADA_APISERVER_IP}" ]]; then - INFO "Karmada API Server's IP is: ${KARMADA_APISERVER_IP}, host cluster type is: ${KARMADA_HOST_CLUSTER_TYPE}" -else - ERROR "Failed to get Karmada API server IP after creating service 'karmada-apiserver' (host cluster type: ${KARMADA_HOST_CLUSTER_TYPE}), please verify." - exit 1 -fi - - -# write karmada api server config to kubeconfig file -INFO "Append ${KARMADA_APISERVER} context to ${KARMADA_KUBECONFIG_PATH}" -util::misc::append_client_kubeconfig \ - "${KARMADA_KUBECONFIG_PATH}" \ - "${CERT_DIR}/karmada.crt" "${CERT_DIR}/karmada.key" \ - "${KARMADA_APISERVER_IP}" "${KARMADA_APISERVER_SECURE_PORT}" "${KARMADA_APISERVER}" - - - -INFO "Check kubeconfig and context-name for ${KARMADA_HOST}" -check_karmada_apiserver_result=$(util::verify::check_kubeconfig_and_context "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_APISERVER}"; echo $?) -if [[ ${check_karmada_apiserver_result} -eq 0 ]]; then - NOTICE "Kubeconfig check for ${KARMADA_APISERVER} - PASSED" -else - ERROR "Kubeconfig check for ${KARMADA_APISERVER} - NOT PASSED" - ERROR "Please check the existence of kubeconfig[${KARMADA_KUBECONFIG_PATH}] and validity of context[${KARMADA_APISERVER}]" - exit 1 -fi - -INFO "Create namespace on ${KARMADA_APISERVER}" -karmada_apiserver_kubectl apply -f "${DEPLOY_DIR}"/namespace.yaml | INFO - -INFO "Create kube-controller-manager on ${KARMADA_HOST}" -karmada_host_kubectl apply -f "${DEPLOY_DIR}/kube-controller-manager.yaml" | INFO - -INFO "Create aggregated-apiserver on ${KARMADA_HOST}" -karmada_host_kubectl apply -f "${DEPLOY_DIR}/karmada-aggregated-apiserver.yaml" | INFO -INFO "Wait for aggregated-apiserver is ready" -util::misc::wait_pod_ready \ - "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" \ - "${KARMADA_AGGREGATION_APISERVER_LABEL}" "${KARMADA_SYSTEM_NAMESPACE}" -INFO "Aggregated-apiserver is ready" - - -INFO "Create karmada-search on ${KARMADA_HOST}" -karmada_host_kubectl apply -f "${DEPLOY_DIR}/karmada-search.yaml" | INFO -INFO "Wait for karmada-search is ready" -util::misc::wait_pod_ready \ - "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" \ - "${KARMADA_SEARCH_LABEL}" "${KARMADA_SYSTEM_NAMESPACE}" -INFO "Karmada-search is ready" - -INFO "Create karmada-metrics-adapter on ${KARMADA_HOST}" -karmada_host_kubectl apply -f "${DEPLOY_DIR}/karmada-metrics-adapter.yaml" | INFO -INFO "Wait for karmada-metrics-adapter is ready" -util::misc::wait_pod_ready \ - "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" \ - "${KARMADA_METRICS_ADAPTER_LABEL}" "${KARMADA_SYSTEM_NAMESPACE}" -INFO "Karmada-metrics-adapter is ready" - - -crd_dir="${DEPLOY_DIR}/"_crds -util::misc::fill_cabundle "${ROOT_CA_FILE}" "${crd_dir}"/patches/webhook_in_resourcebindings.yaml -util::misc::fill_cabundle "${ROOT_CA_FILE}" "${crd_dir}"/patches/webhook_in_clusterresourcebindings.yaml -karmada_apiserver_kubectl apply -k "${crd_dir}" - -# render the caBundle in these apiservice with root ca, then karmada-apiserver can use caBundle to verify corresponding AA's server-cert -util::misc::fill_cabundle "${ROOT_CA_FILE}" "${DEPLOY_DIR}/karmada-aggregated-apiserver-apiservice.yaml" -util::misc::fill_cabundle "${ROOT_CA_FILE}" "${DEPLOY_DIR}/karmada-metrics-adapter-apiservice.yaml" -util::misc::fill_cabundle "${ROOT_CA_FILE}" "${DEPLOY_DIR}/karmada-search-apiservice.yaml" - - -# deploy webhook configurations on karmada apiserver -sed -i'' -e "s/{{caBundle}}/${karmada_ca}/g" "${DEPLOY_DIR}/webhook-configuration.yaml" -karmada_apiserver_kubectl apply -f "${DEPLOY_DIR}/webhook-configuration.yaml" | INFO - - -# deploy APIService on karmada apiserver for karmada-aggregated-apiserver -karmada_apiserver_kubectl apply -f "${DEPLOY_DIR}"/karmada-aggregated-apiserver-apiservice.yaml | INFO -# make sure apiservice for v1alpha1.cluster.karmada.io is Available -util::verify::wait_apiservice_ready \ - "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_APISERVER}" \ - "${KARMADA_AGGREGATION_APISERVER_LABEL}" - -# deploy APIService on karmada apiserver for karmada-search -karmada_apiserver_kubectl apply -f "${DEPLOY_DIR}"/karmada-search-apiservice.yaml | INFO -# make sure apiservice for v1alpha1.search.karmada.io is Available -util::verify::wait_apiservice_ready \ - "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_APISERVER}" \ - "${KARMADA_SEARCH_LABEL}" - -# deploy APIService on karmada apiserver for karmada-metrics-adapter -karmada_apiserver_kubectl apply -f "${DEPLOY_DIR}"/karmada-metrics-adapter-apiservice.yaml | INFO -# make sure apiservice for karmada metrics adapter is Available -util::verify::wait_apiservice_ready \ - "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_APISERVER}" \ - "${KARMADA_METRICS_ADAPTER_LABEL}" - -# grant the admin clusterrole read and write permissions for Karmada resources -karmada_apiserver_kubectl apply -f "${DEPLOY_DIR}/admin-clusterrole-aggregation.yaml" | INFO - -# deploy cluster proxy rbac for admin -karmada_apiserver_kubectl apply -f "${DEPLOY_DIR}/cluster-proxy-admin-rbac.yaml" | INFO - -karmada_apiserver_address=https://"${KARMADA_APISERVER_IP}":"${KARMADA_APISERVER_SECURE_PORT}" -sed -i'' -e "s/{{ca_crt}}/${karmada_ca}/g" "${DEPLOY_DIR}"/bootstrap-token-configuration.yaml -sed -i'' -e "s|{{apiserver_address}}|${karmada_apiserver_address}|g" "${DEPLOY_DIR}"/bootstrap-token-configuration.yaml -karmada_apiserver_kubectl apply -f "${DEPLOY_DIR}"/bootstrap-token-configuration.yaml - - - -# deploy controller-manager on host cluster -karmada_host_kubectl apply -f "${DEPLOY_DIR}"/karmada-controller-manager.yaml | INFO -# deploy scheduler on host cluster -karmada_host_kubectl apply -f "${DEPLOY_DIR}"/karmada-scheduler.yaml | INFO -# deploy descheduler on host cluster -karmada_host_kubectl apply -f "${DEPLOY_DIR}"/karmada-descheduler.yaml | INFO -# deploy webhook on host cluster -karmada_host_kubectl apply -f "${DEPLOY_DIR}"/karmada-webhook.yaml | INFO - -# make sure all karmada control plane components are ready -util::misc::wait_pod_ready \ - "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" \ - "${KARMADA_CONTROLLER_LABEL}" "${KARMADA_SYSTEM_NAMESPACE}" -util::misc::wait_pod_ready \ - "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" \ - "${KARMADA_SCHEDULER_LABEL}" "${KARMADA_SYSTEM_NAMESPACE}" -util::misc::wait_pod_ready \ - "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" \ - "${KUBE_CONTROLLER_POD_LABEL}" "${KARMADA_SYSTEM_NAMESPACE}" -util::misc::wait_pod_ready \ - "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" \ - "${KARMADA_WEBHOOK_LABEL}" "${KARMADA_SYSTEM_NAMESPACE}" diff --git a/hack/deploy-scheduler-estimator.sh b/hack/deploy-scheduler-estimator.sh deleted file mode 100755 index b9cb1a9b..00000000 --- a/hack/deploy-scheduler-estimator.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/bash -# Copyright 2021 The Karmada 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. - - -set -euo pipefail - -cd "$(dirname "${BASH_SOURCE[0]}")" -SHELL_FOLDER=$(pwd) -REPO_ROOT=$(cd ../ && pwd) - -source "${REPO_ROOT}"/hack/util/init.sh && util:init:init_scripts - -function usage() { - echo "This script will deploy karmada-scheduler-estimator of a cluster." - echo "Usage: hack/deploy-scheduler-estimator.sh " - echo "Example: hack/deploy-scheduler-estimator.sh ~/.kube/karmada.config karmada-host ~/.kube/members.config member1" - echo "Parameters:" - echo " KARMADA_HOST_KUBECONFIG path to karmada-host kubeconfig" - echo " KARMADA_HOST context-name in KARMADA_HOST_KUBECONFIG" - echo " MEMBER_CLUSTER_KUBECONFIG path to member-cluster kubeconfig" - echo " MEMBER_CLUSTER context-name in MEMBER_CLUSTER_KUBECONFIG" -} - -if [[ $# -ne 4 ]]; then - usage - exit 1 -fi -KARMADA_HOST_KUBECONFIG=${1} -KARMADA_HOST=${2} -MEMBER_CLUSTER_KUBECONFIG=${3} -MEMBER_CLUSTER=${4} - - -INFO "Check kubeconfig and context-name for ${KARMADA_HOST}" -check_karmada_host_result=$(util::verify::check_kubeconfig_and_context "${KARMADA_HOST_KUBECONFIG}" "${KARMADA_HOST}"; echo $?) -if [[ ${check_karmada_host_result} -eq 0 ]]; then - NOTICE "Kubeconfig check for ${KARMADA_HOST} - PASSED" -else - ERROR "Kubeconfig check for ${KARMADA_HOST} - NOT PASSED" - ERROR "Please check the existence of kubeconfig[${KARMADA_HOST_KUBECONFIG}] and validity of context[${KARMADA_HOST}]" - exit 1 -fi - -INFO "Check kubeconfig and context-name for ${MEMBER_CLUSTER}" -check_member_cluster_result=$(util::verify::check_kubeconfig_and_context "${MEMBER_CLUSTER_KUBECONFIG}" "${MEMBER_CLUSTER}"; echo $?) -if [[ ${check_member_cluster_result} -eq 0 ]]; then - NOTICE "Kubeconfig check for ${MEMBER_CLUSTER} - PASSED" -else - ERROR "Kubeconfig check for ${MEMBER_CLUSTER} - NOT PASSED" - ERROR "Please check the existence of kubeconfig[${MEMBER_CLUSTER_KUBECONFIG}] and validity of context[${MEMBER_CLUSTER}]" - exit 1 -fi - -function karmada_host_kubectl() { - kubectl --kubeconfig="${KARMADA_HOST_KUBECONFIG}" --context="${KARMADA_HOST}" "$@" -} - -function member_cluster_kubectl() { - kubectl --kubeconfig="${MEMBER_CLUSTER_KUBECONFIG}" --context="${MEMBER_CLUSTER}" "$@" -} - - -TEMP_PATH="$(mktemp -d)" -trap '{ rm -rf ${TEMP_PATH}; }' EXIT - - -MEMBER_CLUSTER_KUBECONFIG_FILE_NAME="$(basename "${MEMBER_CLUSTER_KUBECONFIG}")" -MEMBER_CLUSTER_KUBECONFIG_TEMP_PATH="${TEMP_PATH}/${MEMBER_CLUSTER_KUBECONFIG_FILE_NAME}" -MEMBER_CLUSTER_KUBECONFIG_SECRET="${MEMBER_CLUSTER}-kubeconfig" - - - - -# --minify will generate minified kubeconfig file with required context -# --flatten will embed certificate -member_cluster_kubectl config view --minify --flatten > "${MEMBER_CLUSTER_KUBECONFIG_TEMP_PATH}" - -# check whether the kubeconfig secret has been created before -if ! karmada_host_kubectl get secrets -n "${KARMADA_SYSTEM_NAMESPACE}" | grep "${MEMBER_CLUSTER_KUBECONFIG_SECRET}"; then - # create secret - karmada_host_kubectl create secret generic "${MEMBER_CLUSTER_KUBECONFIG_SECRET}" "--from-file=${MEMBER_CLUSTER_KUBECONFIG_SECRET}=${MEMBER_CLUSTER_KUBECONFIG_TEMP_PATH}" -n "${KARMADA_SYSTEM_NAMESPACE}" -fi - -# deploy scheduler estimator -INFO "Prepare and replace variables for karmada-scheduler-estimator.yaml" -karmada_scheduler_estimator_path="${TEMP_PATH}"/karmada-scheduler-estimator.yaml -cp "${REPO_ROOT}"/artifacts/deploy/karmada-scheduler-estimator.yaml "${karmada_scheduler_estimator_path}" -sed -i'' -e "s/{{member_cluster_name}}/${MEMBER_CLUSTER}/g" "${karmada_scheduler_estimator_path}" -sed -i'' -e "s/{{KARMADA_VERSION}}/${KARMADA_VERSION}/g" "${karmada_scheduler_estimator_path}" -# shellcheck disable=SC2002 -cat "${karmada_scheduler_estimator_path}" | DEBUG - - -INFO "Apply karmada-scheduler-estimator.yaml on cluster ${KARMADA_HOST}" -karmada_host_kubectl apply -f "${karmada_scheduler_estimator_path}" - -function print_success() { - echo "Karmada scheduler estimator of cluster ${MEMBER_CLUSTER} has been deployed." - echo "Note: To enable scheduler estimator, please deploy other scheduler estimators of all clusters." - echo " After that, specify the option '--enable-scheduler-estimator=true' of karmada-scheduler." -} - -print_success diff --git a/hack/local-down-karmada.sh b/hack/local-down-karmada.sh deleted file mode 100755 index f47e93f9..00000000 --- a/hack/local-down-karmada.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/bash -# Copyright 2022 The Karmada 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. - - -set -euo pipefail - -cd "$(dirname "${BASH_SOURCE[0]}")" -SHELL_FOLDER=$(pwd) -REPO_ROOT=$(cd ../ && pwd) - -source "${REPO_ROOT}"/hack/util/init.sh && util:init:init_scripts - -function usage() { - echo "This script will clean resources created by local-up-karmada.sh." - echo "Usage: hack/local-down-karmada.sh [-k] [-h]" - echo "Parameters:" - echo " k: keep the local images" - echo " h: print help information" -} - -ALL_IMAGES=("${DEFAULT_IMAGES[@]}") - -keep_images="false" -while getopts 'kh' OPT; do - case $OPT in - k) keep_images="true";; - h) - usage - exit 0 - ;; - ?) - usage - exit 1 - ;; - esac -done - -# step1、step2 share the same process as `util::misc::delete_necessary_resources`, may be reuse util::misc::delete_necessary_resources in the future, but more logs info here, keep it now. -KARMADA_HOST=${KARMADA_HOST:-"${DEFAULT_KARMADA_HOST_CONTEXT}"} -CLUSTER1=${CLUSTER1:-"member1"} -CLUSTER2=${CLUSTER2:-"member2"} -CLUSTER3=${CLUSTER3:-"member3"} - - -#step1 remove kind clusters -INFO "Start removing kind clusters" -kind delete cluster --name "${KARMADA_HOST}" -kind delete cluster --name "${CLUSTER1}" -kind delete cluster --name "${CLUSTER2}" -kind delete cluster --name "${CLUSTER3}" -INFO "Remove kind clusters successfully." - -#step2. remove kubeconfig -INFO "Start removing kubeconfig" -KARMADA_KUBECONFIG_PATH=${KARMADA_KUBECONFIG_PATH:-"${DEFAULT_KARMADA_KUBECONFIG_PATH}"} -MEMBER_CLUSTER_KUBECONFIG_PATH=${MEMBER_CLUSTER_KUBECONFIG:-"${DEFAULT_MEMBER_CLUSTER_KUBECONFIG_PATH}"} -if [ -f "${KARMADA_KUBECONFIG_PATH}" ] ; then - rm "${KARMADA_KUBECONFIG_PATH}" - INFO "Remove kubeconfig ${KARMADA_KUBECONFIG_PATH} successfully." -fi -if [ -f "${MEMBER_CLUSTER_KUBECONFIG_PATH}" ] ; then - rm "${MEMBER_CLUSTER_KUBECONFIG_PATH}" - INFO "Remove kubeconfig ${MEMBER_CLUSTER_KUBECONFIG_PATH} successfully." -fi -INFO "Remove kubeconfig successfully." - -#step3. remove docker images -INFO "Start removing images" -if [[ "${keep_images}" == "false" ]] ; then - for image in "${ALL_IMAGES[@]}"; do - docker rmi "${image}" || true - done - INFO "Remove images successfully." -else - INFO "Skip removing images as required." -fi - -INFO "Local Karmada is removed successfully." diff --git a/hack/local-up-karmada.sh b/hack/local-up-karmada.sh deleted file mode 100755 index ea0a5c82..00000000 --- a/hack/local-up-karmada.sh +++ /dev/null @@ -1,272 +0,0 @@ -#!/bin/bash -# Copyright 2021 The Karmada 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. - - -set -euo pipefail - -cd "$(dirname "${BASH_SOURCE[0]}")" -SHELL_FOLDER=$(pwd) -REPO_ROOT=$(cd ../ && pwd) - -source "${REPO_ROOT}"/hack/util/init.sh && util:init:init_scripts -# for debug, need to be controlled by options -# LOG_LEVEL_DEBUG -# variable define -# minimal test environment consists of a master cluster, and the other three member clusters -# master cluster: a kubernetes cluster just like other clusters, apart from that, the karmada control plane will -# be installed in this kubernetes cluster. -# member cluster: member1~member3 will be served as member clusters, but member1~2 will be served in the push mode, -# while member3 will be served in the pull mode. - -## cluster variables -KARMADA_HOST=${KARMADA_HOST:-"karmada-host"} -KARMADA_APISERVER=${KARMADA_APISERVER:-"karmada-apiserver"} -CLUSTER1=${CLUSTER1:-"member1"} -CLUSTER2=${CLUSTER2:-"member2"} -CLUSTER3=${CLUSTER3:-"member3"} - -## kubeconfig variables -## kubeconfig for control plane, including host kubernetes cluster and karmada control plane -KUBECONFIG_DIR=${KUBECONFIG_DIR:-"${HOME}/.kube"} -KARMADA_KUBECONFIG_PATH=${KARMADA_KUBECONFIG_PATH:-"${KUBECONFIG_DIR}/karmada.config"} -MEMBER_CLUSTER_KUBECONFIG_PATH=${MEMBER_CLUSTER_KUBECONFIG_PATH:-"${KUBECONFIG_DIR}/members.config"} - -### kubeconfig for member clusters -### these config files will be stored in ${KUBECONFIG_DIR} with prefix(${MEMBER_CLUSTER_KUBECONFIG_PREFIX}) temporarily, -### and be merged into to a single kubeconfig file finally. -MEMBER_CLUSTER_KUBECONFIG_PREFIX="member-tmp" -MEMBER_CLUSTER_KUBECONFIG_DIR_PREFIX="${KUBECONFIG_DIR}/${MEMBER_CLUSTER_KUBECONFIG_PREFIX}" -CLUSTER1_KUBECONFIG_PATH="${MEMBER_CLUSTER_KUBECONFIG_DIR_PREFIX}-${CLUSTER1}.config" -CLUSTER2_KUBECONFIG_PATH="${MEMBER_CLUSTER_KUBECONFIG_DIR_PREFIX}-${CLUSTER2}.config" -CLUSTER3_KUBECONFIG_PATH="${MEMBER_CLUSTER_KUBECONFIG_DIR_PREFIX}-${CLUSTER3}.config" - -## cluster version variables -REGISTRY=${REGISTRY:-"${DEFAULT_REGISTRY}"} -CLUSTER_VERSION=${CLUSTER_VERSION:-"${DEFAULT_CLUSTER_VERSION}"} -CLUSTER_IMAGE="${REGISTRY}/kindest/node:${CLUSTER_VERSION}" - -## log variables -LOG_DIR=${LOG_DIR:-"/tmp/karmada"} - -ALL_IMAGES=("${DEFAULT_IMAGES[@]}") - -# specify host_ip address -HOST_IP_ADDRESS=${1:-} - - -ALL_CLUSTERS=( - "${KARMADA_HOST}" - "${CLUSTER1}" - "${CLUSTER2}" - "${CLUSTER3}" -) -MEMBER_CLUSTERS=( - "${CLUSTER1}" - "${CLUSTER2}" - "${CLUSTER3}" -) -PUSH_MODE_CLUSTERS=( - "${CLUSTER1}" - "${CLUSTER2}" -) -PULL_MODE_CLUSTERS=( - "${CLUSTER3}" -) - -# check prerequirements -INFO "Check bootstrap os/arch" -bs_os=$(util::misc::get_os_name) -bs_arch=$(util::misc::get_os_arch) -if util::verify::check_os_and_arch "${bs_os}" "${bs_arch}"; then - NOTICE "Bootstrap os/arch check - PASSED" -else - ERROR "Bootstrap os/arch check - NOT PASSED" - ERROR "Sorry, Karmada installation does not support ${bs_os}/${bs_arch} at the moment" - exit 1 -fi - -INFO "Check necessary clis" -for cli in "docker" "kind" "kubectl" "karmadactl"; do - cli_check_result=0 - if [[ ${cli} == "docker" ]]; then - cli_check_result=$(util::verify::check_docker ${cli}; echo $?) - else - cli_check_result=$(util::verify::check_cmd ${cli}; echo $?) - fi - - if [[ ${cli_check_result} -eq 0 ]]; then - NOTICE "CLI check: '${cli}' existence check - PASSED" - else - ERROR "CLI check: '${cli}' existence check - NOT PASSED" - ERROR "It seems that '${cli}' is not installed on your machine, please install '${cli}' follow the instructions provided by $(util::misc::print_install_tips ${cli})" - exit 1 - fi -done - -# start all k8s clusters with help of kind, including one control plane and three member clusters -INFO "Delete necessary resources" -util::misc::delete_necessary_resources \ - "${KARMADA_KUBECONFIG_PATH},${MEMBER_CLUSTER_KUBECONFIG_PATH}" \ - "${KARMADA_HOST},${CLUSTER1},${CLUSTER2},${CLUSTER3}" \ - "${LOG_DIR}" - -TEMP_PATH=$(mktemp -d) -trap '{ rm -rf ${TEMP_PATH}; }' EXIT - -ARTIFACTS_DIR="${REPO_ROOT}/artifacts" -KIND_CLUSTER_CONFIG_DIR="${ARTIFACTS_DIR}/kindClusterConfig" -INFO "Prepare kindClusterConfig in path: ${TEMP_PATH}" -for kind_config_file in "karmada-host.yaml" "member1.yaml" "member2.yaml"; do - cp -f "${KIND_CLUSTER_CONFIG_DIR}/${kind_config_file}" "${TEMP_PATH}/${kind_config_file}" - sed -i'' -e "s/{{host_ipaddress}}/${HOST_IP_ADDRESS}/g" "${TEMP_PATH}/${kind_config_file}" -done - -INFO "Start host cluster" -if [[ -n "${HOST_IP_ADDRESS}" ]]; then # If bind the port of clusters(karmada-host, member1 and member2) to the host IP - util::verify::ip_address "${HOST_IP_ADDRESS}" - util::misc::create_cluster \ - "${KARMADA_HOST}" \ - "${KARMADA_KUBECONFIG_PATH}" \ - "${CLUSTER_IMAGE}" \ - "${LOG_DIR}" \ - "${TEMP_PATH}"/karmada-host.yaml -else - util::misc::create_cluster \ - "${KARMADA_HOST}" \ - "${KARMADA_KUBECONFIG_PATH}" \ - "${CLUSTER_IMAGE}" \ - "${LOG_DIR}" -fi - -INFO "Waiting for the host cluster to be ready..." -util::verify::check_clusters_ready "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" -INFO "Host cluster already started" - -INFO "Start member clusters" -util::misc::create_cluster \ - "${CLUSTER1}" \ - "${CLUSTER1_KUBECONFIG_PATH}" \ - "${CLUSTER_IMAGE}" \ - "${LOG_DIR}" \ - "${TEMP_PATH}"/member1.yaml -util::misc::create_cluster \ - "${CLUSTER2}" \ - "${CLUSTER2_KUBECONFIG_PATH}" \ - "${CLUSTER_IMAGE}" \ - "${LOG_DIR}" \ - "${TEMP_PATH}"/member2.yaml -util::misc::create_cluster \ - "${CLUSTER3}" \ - "${CLUSTER3_KUBECONFIG_PATH}" \ - "${CLUSTER_IMAGE}" \ - "${LOG_DIR}" -INFO "Start member clusters finished" - -INFO "Waiting for the member clusters to be ready..." -for cluster in "${MEMBER_CLUSTERS[@]}"; do - INFO "Wait for member cluster ${cluster} to be ready..." - cluster_kubeconfig_path="${MEMBER_CLUSTER_KUBECONFIG_DIR_PREFIX}-${cluster}.config" - util::verify::check_clusters_ready "${cluster_kubeconfig_path}" "${cluster}" - NOTICE "Member cluster ${cluster} is ready..." -done - -# load components images to kind cluster, the image will be loaded regardless of whether it will be used for simplicity. -for cluster in "${ALL_CLUSTERS[@]}"; do - INFO "Start loading image in cluster[${cluster}]" - for image in "${ALL_IMAGES[@]}"; do - DEBUG "Loading image ${image} into ${cluster}" - kind load docker-image "${image}" --name="${cluster}" -v -1 - DEBUG "Loading image ${image} into ${cluster} successfully" - done - INFO "Load image in cluster[${cluster}] finished" -done - - -# install karmada control plane components -INFO "Deploy karmada control plane components" -"${REPO_ROOT}"/hack/deploy-karmada.sh "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" "${KARMADA_APISERVER}" - -# wait until the member cluster ready and join member clusters -# connecting networks between karmada-host, member1 and member2 clusters -# join push mode member clusters -INFO "Connecting cluster networks..." -INFO "Connect ${CLUSTER1}<-->${CLUSTER2}" -util::misc::add_routes "${CLUSTER1}" "${CLUSTER2_KUBECONFIG_PATH}" "${CLUSTER2}" -util::misc::add_routes "${CLUSTER2}" "${CLUSTER1_KUBECONFIG_PATH}" "${CLUSTER1}" - -INFO "Connect ${KARMADA_HOST}<-->${CLUSTER1}" -util::misc::add_routes "${KARMADA_HOST}" "${CLUSTER1_KUBECONFIG_PATH}" "${CLUSTER1}" -util::misc::add_routes "${CLUSTER1}" "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" - -INFO "Connect ${KARMADA_HOST}<-->${CLUSTER2}" -util::misc::add_routes "${KARMADA_HOST}" "${CLUSTER2_KUBECONFIG_PATH}" "${CLUSTER2}" -util::misc::add_routes "${CLUSTER2}" "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" -INFO "Cluster networks connected" - - -for push_cluster in "${PUSH_MODE_CLUSTERS[@]}"; do - cluster_kubeconfig_path="${MEMBER_CLUSTER_KUBECONFIG_DIR_PREFIX}-${push_cluster}.config" - karmadactl join \ - --kubeconfig "${KARMADA_KUBECONFIG_PATH}" \ - --karmada-context="${KARMADA_APISERVER}" \ - --cluster-kubeconfig="${cluster_kubeconfig_path}" \ - --cluster-context="${push_cluster}" \ - "${push_cluster}" - - "${REPO_ROOT}"/hack/deploy-scheduler-estimator.sh \ - "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" \ - "${cluster_kubeconfig_path}" "${push_cluster}" -done - -# deploy karmada agent in pull mode member clusters -"${REPO_ROOT}"/hack/deploy-agent-and-estimator.sh \ - "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_HOST}" \ - "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_APISERVER}" \ - "${CLUSTER3_KUBECONFIG_PATH}" "${CLUSTER3}" - - -# deploy metrics-server in member clusters -for cluster in "${MEMBER_CLUSTERS[@]}"; do - INFO "Deploy k8s metrics server in ${cluster}" - cluster_kubeconfig_path="${MEMBER_CLUSTER_KUBECONFIG_DIR_PREFIX}-${cluster}.config" - "${REPO_ROOT}"/hack/deploy-k8s-metrics-server.sh "${cluster_kubeconfig_path}" "${cluster}" - - # wait all of clusters member1, member2 and member3 status is ready - INFO "Wait cluster ${cluster} join/register status ready" - util::misc::wait_cluster_ready "${KARMADA_KUBECONFIG_PATH}" "${KARMADA_APISERVER}" "${cluster}" -done - -# merge temporary kubeconfig of member clusters by kubectl -# variable define in scripts will not make effect to parent shell thread -export KUBECONFIG=$(find "${KUBECONFIG_DIR}" -maxdepth 1 -type f | grep "${MEMBER_CLUSTER_KUBECONFIG_PREFIX}" | tr '\n' ':') -kubectl config view --flatten > "${MEMBER_CLUSTER_KUBECONFIG_PATH}" -for tmp_config_file in $(find "${KUBECONFIG_DIR}" -maxdepth 1 -type f | grep "${MEMBER_CLUSTER_KUBECONFIG_PREFIX}"); do - DEBUG "Remove ${tmp_config_file}" - rm -f "${tmp_config_file}" -done - -function print_success() { - echo -e "$KARMADA_GREETING" - echo "Local Karmada is running." - echo -e "\nTo start using your karmada, run:" - echo -e " export KUBECONFIG=${KARMADA_KUBECONFIG_PATH}" - echo "Please use 'kubectl config use-context ${KARMADA_HOST}/${KARMADA_APISERVER}' to switch the host and control plane cluster." - echo -e "\nTo manage your member clusters, run:" - echo -e " export KUBECONFIG=${MEMBER_CLUSTER_KUBECONFIG_PATH}" - echo "Please use 'kubectl config use-context ${CLUSTER1}/${CLUSTER2}/${CLUSTER3}' to switch to the different member cluster." -} - -print_success - diff --git a/hack/util/constant.sh b/hack/util/constant.sh index d7cd6929..12083c76 100644 --- a/hack/util/constant.sh +++ b/hack/util/constant.sh @@ -74,4 +74,3 @@ KARMADA_GREETING=' ░░░░░ ░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░░░░░░ ░░░░░ ░░░░░ ------------------------------------------------------------------------------------------------------ ' - diff --git a/hack/util/git.sh b/hack/util/git.sh index 753fcb0c..0262d1ef 100644 --- a/hack/util/git.sh +++ b/hack/util/git.sh @@ -26,4 +26,3 @@ function util::git::version_ldflags() { -X github.com/karmada-io/dashboard/pkg/environment.buildDate=${BUILDDATE}" echo "$LDFLAGS" } - diff --git a/hack/util/misc.sh b/hack/util/misc.sh index fd03b195..d9036295 100644 --- a/hack/util/misc.sh +++ b/hack/util/misc.sh @@ -509,4 +509,4 @@ function util::misc::fill_cabundle() { # shellcheck disable=SC2002,SC2155 local ca_string=$(cat "${ca_file}" | base64 | tr "\n" " "|sed s/[[:space:]]//g) sed -i'' -e "s/{{caBundle}}/${ca_string}/g" "${conf}" -} \ No newline at end of file +} diff --git a/hack/version.sh b/hack/version.sh index 2685d30f..7fc2786f 100755 --- a/hack/version.sh +++ b/hack/version.sh @@ -22,4 +22,4 @@ REPO_ROOT=$(cd ../ && pwd) source "${REPO_ROOT}"/hack/util/init.sh && util:init:init_scripts -util::git::get_version \ No newline at end of file +util::git::get_version