diff --git a/artifacts/opensearch/karmada-opensearch-dashboards.yaml b/artifacts/opensearch/karmada-opensearch-dashboards.yaml new file mode 100644 index 000000000..97591220c --- /dev/null +++ b/artifacts/opensearch/karmada-opensearch-dashboards.yaml @@ -0,0 +1,46 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: karmada-opensearch-dashboards + name: karmada-opensearch-dashboards + namespace: karmada-system +spec: + replicas: 1 + selector: + matchLabels: + app: karmada-opensearch-dashboards + template: + metadata: + labels: + app: karmada-opensearch-dashboards + spec: + containers: + - env: + - name: DISABLE_SECURITY_DASHBOARDS_PLUGIN + value: "true" + - name: OPENSEARCH_HOSTS + value: '["http://karmada-opensearch:9200"]' + image: opensearchproject/opensearch-dashboards:2.0.0 + imagePullPolicy: IfNotPresent + name: karmada-opensearch-dashboards + ports: + - containerPort: 5601 + protocol: TCP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: karmada-opensearch-dashboards + name: karmada-opensearch-dashboards + namespace: karmada-system +spec: + ports: + - name: http + port: 5601 + protocol: TCP + targetPort: 5601 + selector: + app: karmada-opensearch-dashboards + type: ClusterIP diff --git a/artifacts/opensearch/karmada-opensearch.yaml b/artifacts/opensearch/karmada-opensearch.yaml new file mode 100644 index 000000000..e9c10db7f --- /dev/null +++ b/artifacts/opensearch/karmada-opensearch.yaml @@ -0,0 +1,68 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: karmada-opensearch + name: karmada-opensearch + namespace: karmada-system +spec: + replicas: 1 + selector: + matchLabels: + app: karmada-opensearch + template: + metadata: + labels: + app: karmada-opensearch + spec: + containers: + - env: + - name: DISABLE_INSTALL_DEMO_CONFIG + value: "true" + - name: DISABLE_SECURITY_PLUGIN + value: "true" + - name: OPENSEARCH_JAVA_OPTS + value: -Xms512m -Xmx512m + - name: bootstrap.memory_lock + value: "true" + - name: cluster.name + value: opensearch-cluster + - name: discovery.type + value: single-node + - name: node.name + value: karmada-opensearch + image: opensearchproject/opensearch:2.0.0 + name: karmada-opensearch + ports: + - containerPort: 9200 + name: client + - containerPort: 9600 + name: analyzer + volumeMounts: + - mountPath: /usr/share/opensearch/data + name: karmada-opensearch + securityContext: + fsGroup: 1000 + runAsGroup: 1000 + runAsUser: 1000 + volumes: + - emptyDir: {} + name: karmada-opensearch +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app: karmada-opensearch + name: karmada-opensearch + namespace: karmada-system +spec: + ports: + - name: client + port: 9200 + targetPort: 9200 + - name: analyzer + port: 9600 + targetPort: 9600 + selector: + app: karmada-opensearch diff --git a/hack/deploy-karmada-opensearch.sh b/hack/deploy-karmada-opensearch.sh new file mode 100755 index 000000000..adb384c64 --- /dev/null +++ b/hack/deploy-karmada-opensearch.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +set -o errexit +set -o nounset + +REPO_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. +source "${REPO_ROOT}"/hack/util.sh +function usage() { + echo "This script will deploy karmada-opensearch on host cluster" + echo "Usage: hack/deploy-karmada-opensearch.sh >" + echo "Example: hack/deploy-karmada-opensearch.sh ~/.kube/config karmada-host" +} + +if [[ $# -ne 2 ]]; then + usage + exit 1 +fi + +# check kube config file existence +if [[ ! -f "${1}" ]]; then + echo -e "ERROR: failed to get kubernetes config file: '${1}', not existed.\n" + usage + exit 1 +fi +HOST_CLUSTER_KUBECONFIG=$1 + +# check context existence +if ! kubectl config get-contexts "${2}" --kubeconfig="${HOST_CLUSTER_KUBECONFIG}" > /dev/null 2>&1; +then + echo -e "ERROR: failed to get context: '${2}' not in ${HOST_CLUSTER_KUBECONFIG}. \n" + usage + exit 1 +fi +HOST_CLUSTER_NAME=$2 + +# install opensearch to host cluster +if [ -n "${KUBECONFIG+x}" ];then + CURR_KUBECONFIG=$KUBECONFIG # backup current kubeconfig +fi + + # switch to host cluster +TEMP_PATH=$(mktemp -d) +cp $HOST_CLUSTER_KUBECONFIG $TEMP_PATH/kubeconfig +export KUBECONFIG="$TEMP_PATH/kubeconfig" +kubectl config use-context "${HOST_CLUSTER_NAME}" +echo "using kubeconfig: "$KUBECONFIG + +# deploy karmada opensearch +kubectl apply -f "${REPO_ROOT}/artifacts/opensearch/karmada-opensearch.yaml" +kubectl apply -f "${REPO_ROOT}/artifacts/opensearch/karmada-opensearch-dashboards.yaml" + +# make sure all karmada-opensearch components are ready +util::wait_pod_ready "${KARMADA_OPENSEARCH_LABEL}" "${KARMADA_SYSTEM_NAMESPACE}" +util::wait_pod_ready "${KARMADA_OPENSEARCH_DASHBOARDS_LABEL}" "${KARMADA_SYSTEM_NAMESPACE}" + +# recover the kubeconfig before installing opensearch if necessary +if [ -n "${CURR_KUBECONFIG+x}" ];then + export KUBECONFIG="${CURR_KUBECONFIG}" +else + unset KUBECONFIG +fi + +function print_success() { + echo "Opensearch is deployed successfully." + echo "You can access the opensearch at http://karmada-opensearch.karmada-system.svc:9200" +} + +print_success diff --git a/hack/util.sh b/hack/util.sh index b705afaee..8f1c1c586 100755 --- a/hack/util.sh +++ b/hack/util.sh @@ -17,6 +17,8 @@ KARMADA_WEBHOOK_LABEL="karmada-webhook" AGENT_POD_LABEL="karmada-agent" INTERPRETER_WEBHOOK_EXAMPLE_LABEL="karmada-interpreter-webhook-example" KARMADA_SEARCH_LABEL="karmada-search" +KARMADA_OPENSEARCH_LABEL="karmada-opensearch" +KARMADA_OPENSEARCH_DASHBOARDS_LABEL="karmada-opensearch-dashboards" KARMADA_GO_PACKAGE="github.com/karmada-io/karmada"