{"id":21126439,"url":"https://github.com/lreimer/hands-on-karmada","last_synced_at":"2025-03-14T11:43:04.534Z","repository":{"id":262448571,"uuid":"886814502","full_name":"lreimer/hands-on-karmada","owner":"lreimer","description":"Demo repository for Karmada showcase and conference talk.","archived":false,"fork":false,"pushed_at":"2024-11-13T14:03:49.000Z","size":89,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-05T15:02:15.556Z","etag":null,"topics":["fluxcd","karmada","kubernetes","qaware","showcase"],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lreimer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-11T16:48:13.000Z","updated_at":"2024-11-21T09:17:27.000Z","dependencies_parsed_at":"2024-11-12T14:21:50.028Z","dependency_job_id":"dd2aecc9-7436-4144-91ed-db0e54ef1a4f","html_url":"https://github.com/lreimer/hands-on-karmada","commit_stats":null,"previous_names":["lreimer/hands-on-karmada"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lreimer%2Fhands-on-karmada","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lreimer%2Fhands-on-karmada/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lreimer%2Fhands-on-karmada/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lreimer%2Fhands-on-karmada/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lreimer","download_url":"https://codeload.github.com/lreimer/hands-on-karmada/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243573168,"owners_count":20312879,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fluxcd","karmada","kubernetes","qaware","showcase"],"created_at":"2024-11-20T04:41:51.827Z","updated_at":"2025-03-14T11:43:04.513Z","avatar_url":"https://github.com/lreimer.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hands-on Karmada\n\nDemo repository for Karmada showcase and conference talk.\n\n## Demo Instructions\n\n### Infrastructure Provisioning\n\n```bash\n# we need some CLI tools\nbrew install --cask google-cloud-sdk\nbrew install eksctl\n\n# create member-01 cluster on GCP\nmake create-gke-member-01\nmake bootstrap-flux2-member-01\n\n# create member-02 cluster on AWS\nmake create-eks-member-02\nmake bootstrap-flux2-member-02\n\n# create member-03 cluster on GCP\nmake create-gke-member-03\nmake bootstrap-flux2-member-03\n\n# create member-04 cluster on AWS\nmake create-eks-member-04\nmake bootstrap-flux2-member-04\n\n# create member-05 cluster on GCP\nmake create-gke-member-05\nmake bootstrap-flux2-member-05\n\n```\n\n### Bootstrapping Karmada Fleet\n\n```bash\n# make sure the Karmada kubectl CLI is present\nk krew install karmada\nk karmada --help\n\n# bootstrap the Karmada control plane\nk ctx rancher-desktop\nk karmada init --karmada-data=$PWD/.karmada --karmada-pki=$PWD/.karmada/pki --karmada-apiserver-advertise-address=127.0.0.1 --etcd-storage-mode=emptyDir --cert-external-ip=127.0.0.1\ncat examples/kubectl-karmada-init.log\n\n# check all components are running and control plane is up\nk get all -n karmada-system\nk --kubeconfig $PWD/.karmada/karmada-apiserver.config get all \nk --kubeconfig $PWD/.karmada/karmada-apiserver.config get clusters\n\n# join the member clusters\nk karmada --kubeconfig $PWD/.karmada/karmada-apiserver.config join gke-member-01 \\\n    --cluster-kubeconfig=$HOME/.kube/config \\\n    --cluster-context=gke_cloud-native-experience-lab_europe-north1_gke-member-01 \\\n    --cluster-provider=gcp --cluster-region=europe-north1\n\nk karmada --kubeconfig $PWD/.karmada/karmada-apiserver.config join eks-member-02 \\\n    --cluster-kubeconfig=$HOME/.kube/config \\\n    --cluster-context=mario-leander.reimer@eks-member-02.eu-north-1.eksctl.io \\\n    --cluster-provider=aws --cluster-region=eu-north-1\n\nk karmada --kubeconfig $PWD/.karmada/karmada-apiserver.config join gke-member-03 \\\n    --cluster-kubeconfig=$HOME/.kube/config \\\n    --cluster-context=gke_cloud-native-experience-lab_europe-west1_gke-member-03 \\\n    --cluster-provider=gcp --cluster-region=europe-west1\n\nk karmada --kubeconfig $PWD/.karmada/karmada-apiserver.config join eks-member-04 \\\n    --cluster-kubeconfig=$HOME/.kube/config \\\n    --cluster-context=mario-leander.reimer@eks-member-04.eu-central-1.eksctl.io \\\n    --cluster-provider=aws --cluster-region=eu-central-1\n\nk --kubeconfig $PWD/.karmada/karmada-apiserver.config get clusters\nk --kubeconfig $PWD/.karmada/karmada-apiserver.config get cluster gke-member-01 -o yaml\nk --kubeconfig $PWD/.karmada/karmada-apiserver.config get cluster eks-member-02 -o yaml\nk --kubeconfig $PWD/.karmada/karmada-apiserver.config get cluster gke-member-03 -o yaml\nk --kubeconfig $PWD/.karmada/karmada-apiserver.config get cluster eks-member-04 -o yaml\n\nk karmada --kubeconfig $PWD/.karmada/karmada-apiserver.config join gke-member-05 \\\n    --cluster-kubeconfig=$HOME/.kube/config \\\n    --cluster-context=gke_cloud-native-experience-lab_us-east1_gke-member-05 \\\n    --cluster-provider=gcp --cluster-region=us-east1\n\nk --kubeconfig $PWD/.karmada/karmada-apiserver.config get clusters\nk --kubeconfig $PWD/.karmada/karmada-apiserver.config get cluster gke-member-05 -o yaml\n```\n\n### Hello Karmada Nginx\n\n```bash\n# create deployment in Karmada control plane only\nKUBECONFIG=$PWD/.karmada/karmada-apiserver.config k apply -f examples/nginx-deployment.yaml\nKUBECONFIG=$PWD/.karmada/karmada-apiserver.config k get all\nKUBECONFIG=$PWD/.karmada/karmada-apiserver.config k karmada get deploy\n\nKUBECONFIG=$PWD/.karmada/karmada-apiserver.config k apply -f examples/propagationpolicy-static-weight.yaml\nKUBECONFIG=$PWD/.karmada/karmada-apiserver.config k karmada get deploy\nKUBECONFIG=$PWD/.kube/gke-member-01.config k get pods\nKUBECONFIG=$PWD/.kube/gke-member-03.config k get pods\n\nKUBECONFIG=$PWD/.karmada/karmada-apiserver.config k apply -f examples/nginx-overridepolicy-weight.yaml\nKUBECONFIG=$PWD/.karmada/karmada-apiserver.config k karmada get deploy\nKUBECONFIG=$PWD/.kube/gke-member-01.config k get pods\nKUBECONFIG=$PWD/.kube/gke-member-01.config k describe deploy nginx\n\n# more demos\nKUBECONFIG=$PWD/.karmada/karmada-apiserver.config k apply -f examples/propagationpolicy-dynamic-weight.yaml\nKUBECONFIG=$PWD/.karmada/karmada-apiserver.config k apply -f examples/propagationpolicy-region-field.yaml\n```\n\n### Cluster Failover and Workload Rebalancer\n\n```bash\n# make sure to enable the karmada-descheduler\nk karmada addons enable karmada-descheduler --karmada-kubeconfig=$PWD/.karmada/karmada-apiserver.config\n\nexport KUBECONFIG=$PWD/.karmada/karmada-apiserver.config \n\nk apply -f examples/nginx-deployment.yaml\nk apply -f examples/propagationpolicy-dynamic-weight.yaml\nk karmada get deploy\n\n# taint cluster to simulate cluster fail-over\nk karmada taint clusters gke-member-03 workload-rebalancer-test:NoExecute\nk karmada taint clusters gke-member-03 workload-rebalancer-test:NoExecute-\n\nk apply -f examples/nginx-workload-rebalancer.yaml\nk get workloadrebalancers.apps.karmada.io nginx-rebalancer -o yaml\n```\n\n### Karmada and Flux\n\n```bash\n# first we need to apply the Flux2 CRDs to the Karmada control plane\nk apply -k github.com/fluxcd/flux2/manifests/crds\\?ref=main --kubeconfig $PWD/.karmada/karmada-apiserver.config\n\n# Helm release propagation\nk apply -f examples/helmrelease-podinfo.yaml \nk apply -f examples/helmrelease-propagation.yaml \nk apply -f examples/helmrelease-override.yaml \n\nKUBECONFIG=$PWD/.kube/gke-member-01.config k get pods\nKUBECONFIG=$PWD/.kube/eks-member-02.config k get pods\n\n# Kustomize propagation\nk apply -f examples/kustomize-podinfo.yaml \nk apply -f examples/kustomize-propagation.yaml \n\nKUBECONFIG=$PWD/.kube/gke-member-03.config k get pods\nKUBECONFIG=$PWD/.kube/eks-member-04.config k get pods\n```\n\n### Federated HPA \n\n```bash\n# make sure to enable the metrics adapter addon to collect metrics\n# from all member clusters\nk karmada addons enable karmada-metrics-adapter --karmada-kubeconfig=$PWD/.karmada/karmada-apiserver.config\n\nexport KUBECONFIG=$PWD/.karmada/karmada-apiserver.config \n\nk apply -f examples/nginx-deployment.yaml\nk apply -f examples/propagation-static-weight.yaml\n\nk apply -f examples/nginx-federated-hpa.yaml\nk apply -f examples/nginx-federated-cron.yaml\n\n# TODO load test demo\n# see https://karmada.io/docs/userguide/network/working-with-submariner\n# see https://karmada.io/docs/userguide/service/multi-cluster-ingress\n```\n\n## Maintainer\n\nM.-Leander Reimer (@lreimer), \u003cmario-leander.reimer@qaware.de\u003e\n\n## License\n\nThis software is provided under the MIT open source license, read the `LICENSE`\nfile for details.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flreimer%2Fhands-on-karmada","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flreimer%2Fhands-on-karmada","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flreimer%2Fhands-on-karmada/lists"}