Skip to content

Commit 542d9f1

Browse files
committed
local up install karmada by helm
Signed-off-by: chaosi-zju <[email protected]>
1 parent bd37e74 commit 542d9f1

File tree

2 files changed

+116
-4
lines changed

2 files changed

+116
-4
lines changed

.github/workflows/cli.yaml .github/workflows/installation.yaml

+44-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: CLI
1+
name: Installation
22
on:
33
# Run this workflow every time a new commit pushed to upstream/fork repository.
44
# Run workflow on fork repository will help contributors find and resolve issues before sending a PR.
@@ -9,8 +9,8 @@ concurrency:
99
group: ${{ github.workflow }}-${{ github.actor }}-${{ github.head_ref || github.run_id }}
1010
cancel-in-progress: true
1111
jobs:
12-
init:
13-
name: init
12+
karmadactl-install:
13+
name: karmadactl-install
1414
runs-on: ubuntu-22.04
1515
strategy:
1616
matrix:
@@ -36,7 +36,7 @@ jobs:
3636
run: |
3737
export CLUSTER_VERSION=kindest/node:${{ matrix.k8s }}
3838
39-
# init e2e environment
39+
# init e2e environment by karmadactl
4040
hack/cli-testing-environment.sh
4141
4242
# run a single e2e
@@ -50,4 +50,44 @@ jobs:
5050
cluster-resources: nodes,namespaces,
5151
namespace-resources: configmaps,pods,svc
5252
artifact-name: logs-${{ matrix.k8s}}
53+
helm-install:
54+
name: helm-install
55+
runs-on: ubuntu-22.04
56+
strategy:
57+
matrix:
58+
# Here support the latest three minor releases of Kubernetes, this can be considered to be roughly
59+
# the same as the End of Life of the Kubernetes release: https://kubernetes.io/releases/
60+
# Please remember to update the CI Schedule Workflow when we add a new version.
61+
k8s: [ v1.25.0, v1.26.0, v1.27.3 ]
62+
steps:
63+
- name: checkout code
64+
uses: actions/checkout@v3
65+
with:
66+
# Number of commits to fetch. 0 indicates all history for all branches and tags.
67+
# We need to guess version via git tags.
68+
fetch-depth: 0
69+
- name: install Go
70+
uses: actions/setup-go@v3
71+
with:
72+
go-version: 1.20.6
73+
- uses: engineerd/[email protected]
74+
with:
75+
version: "v0.20.0"
76+
- name: run helm install test
77+
run: |
78+
export CLUSTER_VERSION=kindest/node:${{ matrix.k8s }}
5379
80+
# init e2e environment by helm
81+
hack/local-up-karmada-helm.sh
82+
83+
# run a single e2e
84+
export KUBECONFIG=~/.kube/karmada-apiserver.config
85+
GO111MODULE=on go install github.com/onsi/ginkgo/v2/ginkgo
86+
ginkgo -v --race --trace -p --focus="[BasicPropagation] propagation testing deployment propagation testing" ./test/e2e/
87+
- uses: chainguard-dev/actions/kind-diag@main
88+
# Only upload logs on failure.
89+
if: ${{ failure() }}
90+
with:
91+
cluster-resources: nodes,namespaces,
92+
namespace-resources: configmaps,pods,svc
93+
artifact-name: logs-${{ matrix.k8s}}

hack/local-up-karmada-helm.sh

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#!/bin/bash
2+
set -ex
3+
4+
## This script deploy karmada control plane to a Kind cluster using helm chart, and then deploy three member clusters.
5+
## Two member clusters are joined in Push mode, using karmadactl join command.
6+
## Another member cluster is joined in Pull mode, using helm chart of karmada-agent.
7+
## After installation, you can access to each cluster by following kubeconfig:
8+
## - karmada-host ~/.kube/karmada-host.config
9+
## - karmada-apiserver ~/.kube/karmada-apiserver.config
10+
## - member1/member2/member3 ~/.kube/members.config
11+
12+
# 1. clean old Kind clusters
13+
kind delete clusters --all; rm -rf ~/.karmada/; rm -rf ~/.kube/*config; rm -rf /etc/karmada
14+
# 2. create karmada-host cluster by Kind
15+
hack/create-cluster.sh karmada-host ~/.kube/karmada-host.config
16+
17+
# (optional) pull images in advance for karmada-host
18+
for img in $(cat charts/karmada/values.yaml | grep -C 1 'repository:' | sed 's/*karmadaImageVersion/latest/g' | awk -F ':' '{print $2}' | sed 's/\"//g' | xargs -n3 | awk '{print $1"/"$2":"$3}'); do docker pull "$img"; kind load docker-image "$img" --name karmada-host; done
19+
20+
# 3. get host network ip (node ip) from kube-apiserver, and then add this ip to values.yaml as SAN of certificate
21+
export KUBECONFIG=~/.kube/karmada-host.config
22+
HOST_IP=$(kubectl get ep kubernetes -o jsonpath='{.subsets[0].addresses[0].ip}')
23+
sed -i'' -e "/localhost/{n;s/ \"127.0.0.1/ \"${HOST_IP}\",\n&/g}" charts/karmada/values.yaml
24+
25+
# 4. install karmada in host cluster by helm
26+
helm install karmada -n karmada-system \
27+
--kubeconfig ~/.kube/karmada-host.config \
28+
--create-namespace \
29+
--dependency-update \
30+
--set apiServer.hostNetwork=true,components={"search,descheduler"} \
31+
./charts/karmada
32+
33+
# 5. export kubeconfig of karmada-apiserver to local path
34+
kubectl get secret -n karmada-system karmada-kubeconfig -o jsonpath={.data.kubeconfig} | base64 -d > ~/.kube/karmada-apiserver.config
35+
KARMADA_APISERVER_ADDR=$(kubectl get ep karmada-apiserver -n karmada-system | tail -n 1 | awk '{print $2}')
36+
sed -i'' -e "s/karmada-apiserver.karmada-system.svc.cluster.local:5443/${KARMADA_APISERVER_ADDR}/g" ~/.kube/karmada-apiserver.config
37+
38+
# 6. create member clusters by Kind
39+
hack/create-cluster.sh member1 ~/.kube/members.config
40+
hack/create-cluster.sh member2 ~/.kube/members.config
41+
hack/create-cluster.sh member3 ~/.kube/members.config
42+
43+
# 7. download karmadactl if not exist
44+
if ! which karmadactl >/dev/null 2>&1; then curl -s https://raw.githubusercontent.com/karmada-io/karmada/master/hack/install-cli.sh | sudo bash; fi
45+
46+
# 8. join member1、member3 to karmada with push mode
47+
karmadactl join member1 --kubeconfig ~/.kube/karmada-apiserver.config --karmada-context karmada-apiserver --cluster-kubeconfig ~/.kube/members.config --cluster-context member1
48+
karmadactl join member3 --kubeconfig ~/.kube/karmada-apiserver.config --karmada-context karmada-apiserver --cluster-kubeconfig ~/.kube/members.config --cluster-context member3
49+
50+
# (optional) pull agent image in advance for member2
51+
docker pull docker.io/karmada/karmada-agent:latest; kind load docker-image docker.io/karmada/karmada-agent:latest --name member2
52+
53+
# 9. get cert from karmada config for agent
54+
set +x
55+
CA_CRT=$(cat ~/.kube/karmada-apiserver.config | grep certificate-authority-data | awk -F ': ' '{print $2}' | base64 -d)
56+
AGENT_CRT=$(cat ~/.kube/karmada-apiserver.config | grep client-certificate-data | awk -F ': ' '{print $2}' | base64 -d)
57+
AGENT_KEY=$(cat ~/.kube/karmada-apiserver.config | grep client-key-data | awk -F ': ' '{print $2}' | base64 -d)
58+
59+
# 10. install karmada-agent in member2 cluster, and then join member2 to karmada with pull mode
60+
helm install karmada-agent -n karmada-system \
61+
--kubeconfig ~/.kube/members.config \
62+
--kube-context member2 \
63+
--create-namespace \
64+
--dependency-update \
65+
--set installMode=agent,agent.clusterName=member2,agent.kubeconfig.server=https://"${KARMADA_APISERVER_ADDR}",agent.kubeconfig.caCrt="${CA_CRT}",agent.kubeconfig.crt="${AGENT_CRT}",agent.kubeconfig.key="${AGENT_KEY}" \
66+
./charts/karmada
67+
68+
# verify: wait for member cluster ready and then print member clusters
69+
while [[ "$(kubectl --kubeconfig ~/.kube/karmada-apiserver.config get cluster -o wide | wc -l)" -ne 4 ]]; do
70+
echo "waiting for member clusters ready..."; sleep 2;
71+
done
72+
kubectl --kubeconfig ~/.kube/karmada-apiserver.config get cluster -o wide

0 commit comments

Comments
 (0)