Déployer et exposer globalement une application multi-clusters via K8GB et Liqo …

This page summarizes the projects mentioned and recommended in the original post on dev.to

Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
  • k8gb

    A cloud native Kubernetes Global Balancer

    root@k8gb:~# curl -fsSL https://get.docker.com | sh - # Executing docker install script, commit: 4f282167c425347a931ccfd95cc91fab041d414f + sh -c apt-get update -qq >/dev/null + sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null + sh -c mkdir -p /etc/apt/keyrings && chmod -R 0755 /etc/apt/keyrings + sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg + sh -c chmod a+r /etc/apt/keyrings/docker.gpg + sh -c echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable" > /etc/apt/sources.list.d/docker.list + sh -c apt-get update -qq >/dev/null + sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-scan-plugin >/dev/null + version_gte 20.10 + [-z] + return 0 + sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce-rootless-extras >/dev/null + sh -c docker version Client: Docker Engine - Community Version: 20.10.21 API version: 1.41 Go version: go1.18.7 Git commit: baeda1f Built: Tue Oct 25 18:01:58 2022 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.21 API version: 1.41 (minimum version 1.12) Go version: go1.18.7 Git commit: 3056208 Built: Tue Oct 25 17:59:49 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.9 GitCommit: 1c90a442489720eec95342e1789ee8a5e1b9536f runc: Version: 1.1.4 GitCommit: v1.1.4-0-g5fd4c4d docker-init: Version: 0.19.0 GitCommit: de40ad0 ================================================================================ To run Docker as a non-privileged user, consider setting up the Docker daemon in rootless mode for your user: dockerd-rootless-setuptool.sh install Visit https://docs.docker.com/go/rootless/ to learn about rootless mode. To run the Docker daemon as a fully privileged service, but granting non-root users access, refer to https://docs.docker.com/go/daemon-access/ WARNING: Access to the remote API on a privileged Docker daemon is equivalent to root access on the host. Refer to the 'Docker daemon attack surface' documentation for details: https://docs.docker.com/go/attack-surface/ ================================================================================ root@k8gb:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES root@k8gb:~# git clone https://github.com/k8gb-io/k8gb Cloning into 'k8gb'... remote: Enumerating objects: 11114, done. remote: Counting objects: 100% (12/12), done. remote: Compressing objects: 100% (12/12), done. remote: Total 11114 (delta 2), reused 2 (delta 0), pack-reused 11102 Receiving objects: 100% (11114/11114), 10.55 MiB | 15.73 MiB/s, done. Resolving deltas: 100% (5805/5805), done. root@k8gb:~# cd k8gb/ root@k8gb:~/k8gb# curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash Preparing to install k3d into /usr/local/bin k3d installed into /usr/local/bin/k3d Run 'k3d --help' to see what you can do with it. root@k8gb:~/k8gb# root@k8gb:~/k8gb# k3d --help https://k3d.io/ k3d is a wrapper CLI that helps you to easily create k3s clusters inside docker. Nodes of a k3d cluster are docker containers running a k3s image. All Nodes of a k3d cluster are part of the same docker network. Usage: k3d [flags] k3d [command] Available Commands: cluster Manage cluster(s) completion Generate completion scripts for [bash, zsh, fish, powershell | psh] config Work with config file(s) help Help about any command image Handle container images. kubeconfig Manage kubeconfig(s) node Manage node(s) registry Manage registry/registries version Show k3d and default k3s version Flags: -h, --help help for k3d --timestamps Enable Log timestamps --trace Enable super verbose output (trace logging) --verbose Enable verbose output (debug logging) --version Show k3d and default k3s version Use "k3d [command] --help" for more information about a command. root@k8gb:~/k8gb# snap install kubectl --classic snap "kubectl" is already installed, see 'snap help refresh' root@k8gb:~/k8gb# curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 11156 100 11156 0 0 51694 0 --:--:-- --:--:-- --:--:-- 51888 Downloading https://get.helm.sh/helm-v3.10.2-linux-amd64.tar.gz Verifying checksum... Done. Preparing to install helm into /usr/local/bin helm installed into /usr/local/bin/helm

  • liqo

    Enable dynamic and seamless Kubernetes multi-cluster topologies

    root@k8gb:~# liqoctl liqoctl is a CLI tool to install and manage Liqo. Liqo is a platform to enable dynamic and decentralized resource sharing across Kubernetes clusters, either on-prem or managed. Liqo allows to run pods on a remote cluster seamlessly and without any modification of Kubernetes and the applications. With Liqo it is possible to extend the control and data plane of a Kubernetes cluster across the cluster's boundaries, making multi-cluster native and transparent: collapse an entire remote cluster to a local virtual node, enabling workloads offloading, resource management and cross-cluster communication compliant with the standard Kubernetes approach. Usage: liqoctl [command] Available Commands: completion Generate the autocompletion script for the specified shell generate Generate data/commands to perform additional operations help Help about any command install Install/upgrade Liqo in the selected cluster move Move an object to a different cluster offload Offload a resource to remote clusters peer Enable a peering towards a remote cluster status Show the status of Liqo uninstall Uninstall Liqo from the selected cluster unoffload Unoffload a resource from remote clusters unpeer Disable a peering towards a remote cluster version Print the liqo CLI version and the deployed Liqo version Flags: --cluster string The name of the kubeconfig cluster to use --context string The name of the kubeconfig context to use -h, --help help for liqoctl --kubeconfig string Path to the kubeconfig file to use for CLI requests --user string The name of the kubeconfig user to use -v, --verbose Enable verbose logs (default false) Use "liqoctl [command] --help" for more information about a command. root@k8gb:~# git clone https://github.com/liqotech/liqo Cloning into 'liqo'... remote: Enumerating objects: 28194, done. remote: Counting objects: 100% (261/261), done. remote: Compressing objects: 100% (170/170), done. remote: Total 28194 (delta 132), reused 173 (delta 81), pack-reused 27933 Receiving objects: 100% (28194/28194), 34.98 MiB | 23.34 MiB/s, done. Resolving deltas: 100% (18901/18901), done. root@k8gb:~# cd liqo/examples/global-ingress/ root@k8gb:~/liqo/examples/global-ingress# ls manifests setup.sh

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

  • admiralty

    A system of Kubernetes controllers that intelligently schedules workloads across clusters.

    GitHub - admiraltyio/admiralty: A system of Kubernetes controllers that intelligently schedules workloads across clusters.

  • polaris-gslb

    A free, open source GSLB (Global Server Load Balancing) solution.

    GitHub - polaris-gslb/polaris-gslb: A free, open source GSLB (Global Server Load Balancing) solution.

  • powergslb

    PowerGSLB - PowerDNS Remote GSLB Backend

    GitHub - AlekseyChudov/powergslb: PowerGSLB - PowerDNS Remote GSLB Backend

  • ingress-nginx

    Ingress-NGINX Controller for Kubernetes

    make[3]: Leaving directory '/root/k8gb' Deploy Ingress helm repo add --force-update nginx-stable https://kubernetes.github.io/ingress-nginx "nginx-stable" has been added to your repositories helm repo update Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "k8gb" chart repository ...Successfully got an update from the "nginx-stable" chart repository Update Complete. ⎈Happy Helming!⎈ helm -n k8gb upgrade -i nginx-ingress nginx-stable/ingress-nginx \ --version 4.0.15 -f deploy/ingress/nginx-ingress-values.yaml Release "nginx-ingress" does not exist. Installing it now. NAME: nginx-ingress LAST DEPLOYED: Fri Nov 11 19:54:37 2022 NAMESPACE: k8gb STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: The ingress-nginx controller has been installed. It may take a few minutes for the LoadBalancer IP to be available. You can watch the status by running 'kubectl --namespace k8gb get services -o wide -w nginx-ingress-ingress-nginx-controller' An example Ingress that makes use of the controller: apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example namespace: foo spec: ingressClassName: nginx rules: - host: www.example.com http: paths: - backend: service: name: exampleService port: number: 80 path: / # This section is only required if TLS is to be enabled for the Ingress tls: - hosts: - www.example.com secretName: example-tls If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided: apiVersion: v1 kind: Secret metadata: name: example-tls namespace: foo data: tls.crt: tls.key: type: kubernetes.io/tls make[3]: Entering directory '/root/k8gb' Deploy GSLB cr kubectl apply -f deploy/crds/test-namespace.yaml namespace/test-gslb created sed -i 's/cloud\.example\.com/cloud.example.com/g' "deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr.yaml" kubectl apply -f "deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr.yaml" gslb.k8gb.absa.oss/test-gslb created git checkout -- "deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr.yaml" sed -i 's/cloud\.example\.com/cloud.example.com/g' "deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_failover.yaml" kubectl apply -f "deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_failover.yaml" gslb.k8gb.absa.oss/test-gslb-failover created git checkout -- "deploy/crds/k8gb.absa.oss_v1beta1_gslb_cr_failover.yaml" Deploy podinfo kubectl apply -f deploy/test-apps service/unhealthy-app created deployment.apps/unhealthy-app created helm repo add podinfo https://stefanprodan.github.io/podinfo "podinfo" has been added to your repositories helm upgrade --install frontend --namespace test-gslb -f deploy/test-apps/podinfo/podinfo-values.yaml \ --set ui.message="` kubectl -n k8gb describe deploy k8gb | awk '/CLUSTER_GEO_TAG/ { printf $2 }'`" \ --set image.repository="ghcr.io/stefanprodan/podinfo" \ podinfo/podinfo \ --version 5.1.1 Release "frontend" does not exist. Installing it now. NAME: frontend LAST DEPLOYED: Fri Nov 11 19:54:41 2022 NAMESPACE: test-gslb STATUS: deployed REVISION: 1 NOTES: 1. Get the application URL by running these commands: echo "Visit http://127.0.0.1:8080 to use your application" kubectl -n test-gslb port-forward deploy/frontend-podinfo 8080:9898 make[3]: Leaving directory '/root/k8gb' Wait until Ingress controller is ready kubectl -n k8gb wait --for=condition=Ready pod -l app.kubernetes.io/name=ingress-nginx --timeout=600s pod/nginx-ingress-ingress-nginx-controller-7cs7g condition met pod/nginx-ingress-ingress-nginx-controller-qx5db condition met test-gslb1 deployed! make[2]: Leaving directory '/root/k8gb' make[2]: Entering directory '/root/k8gb' Deploy local cluster test-gslb2 kubectl config use-context k3d-test-gslb2 Switched to context "k3d-test-gslb2". Create namespace kubectl apply -f deploy/namespace.yaml namespace/k8gb created Deploy GSLB operator from v0.10.0 make deploy-k8gb-with-helm make[3]: Entering directory '/root/k8gb' # create rfc2136 secret kubectl -n k8gb create secret generic rfc2136 --from-literal=secret=96Ah/a2g0/nLeFGK+d/0tzQcccf9hCEIy34PoXX2Qg8= || true secret/rfc2136 created helm repo add --force-update k8gb https://www.k8gb.io "k8gb" has been added to your repositories cd chart/k8gb && helm dependency update walk.go:74: found symbolic link in path: /root/k8gb/chart/k8gb/LICENSE resolves to /root/k8gb/LICENSE. Contents of linked file included and used Getting updates for unmanaged Helm repositories... ...Successfully got an update from the "https://absaoss.github.io/coredns-helm" chart repository Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "k8gb" chart repository ...Successfully got an update from the "podinfo" chart repository ...Successfully got an update from the "nginx-stable" chart repository Update Complete. ⎈Happy Helming!⎈ Saving 1 charts Downloading coredns from repo https://absaoss.github.io/coredns-helm Deleting outdated charts helm -n k8gb upgrade -i k8gb k8gb/k8gb -f "" \ --set k8gb.clusterGeoTag='us' --set k8gb.extGslbClustersGeoTags='eu' \ --set k8gb.reconcileRequeueSeconds=10 \ --set k8gb.dnsZoneNegTTL=10 \ --set k8gb.imageTag=v0.10.0 \ --set k8gb.log.format=simple \ --set k8gb.log.level=debug \ --set rfc2136.enabled=true \ --set k8gb.edgeDNSServers[0]=172.18.0.1:1053 \ --set externaldns.image=absaoss/external-dns:rfc-ns1 \ --wait --timeout=2m0s Release "k8gb" does not exist. Installing it now. NAME: k8gb LAST DEPLOYED: Fri Nov 11 19:55:03 2022 NAMESPACE: k8gb STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: done _ ___ _ | | _( _ ) ___| |__ | |/ / _ \ / _` | '_ \ | < (_) | (_| | |_) | |_|\_\ ___/ \__ , |_.__/ & all dependencies are installed |___/ 1. Check if your DNS Zone is served by K8GB CoreDNS $ kubectl -n k8gb run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools --command -- /usr/bin/dig @k8gb-coredns SOA . +short If everything is fine then you are expected to see similar output:

  • opensource-gslb

    GitHub - datianshi/opensource-gslb

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

  • k3d

    Little helper to run CNCF's k3s in Docker

    root@k8gb:~# curl -fsSL https://get.docker.com | sh - # Executing docker install script, commit: 4f282167c425347a931ccfd95cc91fab041d414f + sh -c apt-get update -qq >/dev/null + sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null + sh -c mkdir -p /etc/apt/keyrings && chmod -R 0755 /etc/apt/keyrings + sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg + sh -c chmod a+r /etc/apt/keyrings/docker.gpg + sh -c echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable" > /etc/apt/sources.list.d/docker.list + sh -c apt-get update -qq >/dev/null + sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-scan-plugin >/dev/null + version_gte 20.10 + [-z] + return 0 + sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce-rootless-extras >/dev/null + sh -c docker version Client: Docker Engine - Community Version: 20.10.21 API version: 1.41 Go version: go1.18.7 Git commit: baeda1f Built: Tue Oct 25 18:01:58 2022 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.21 API version: 1.41 (minimum version 1.12) Go version: go1.18.7 Git commit: 3056208 Built: Tue Oct 25 17:59:49 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.9 GitCommit: 1c90a442489720eec95342e1789ee8a5e1b9536f runc: Version: 1.1.4 GitCommit: v1.1.4-0-g5fd4c4d docker-init: Version: 0.19.0 GitCommit: de40ad0 ================================================================================ To run Docker as a non-privileged user, consider setting up the Docker daemon in rootless mode for your user: dockerd-rootless-setuptool.sh install Visit https://docs.docker.com/go/rootless/ to learn about rootless mode. To run the Docker daemon as a fully privileged service, but granting non-root users access, refer to https://docs.docker.com/go/daemon-access/ WARNING: Access to the remote API on a privileged Docker daemon is equivalent to root access on the host. Refer to the 'Docker daemon attack surface' documentation for details: https://docs.docker.com/go/attack-surface/ ================================================================================ root@k8gb:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES root@k8gb:~# git clone https://github.com/k8gb-io/k8gb Cloning into 'k8gb'... remote: Enumerating objects: 11114, done. remote: Counting objects: 100% (12/12), done. remote: Compressing objects: 100% (12/12), done. remote: Total 11114 (delta 2), reused 2 (delta 0), pack-reused 11102 Receiving objects: 100% (11114/11114), 10.55 MiB | 15.73 MiB/s, done. Resolving deltas: 100% (5805/5805), done. root@k8gb:~# cd k8gb/ root@k8gb:~/k8gb# curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash Preparing to install k3d into /usr/local/bin k3d installed into /usr/local/bin/k3d Run 'k3d --help' to see what you can do with it. root@k8gb:~/k8gb# root@k8gb:~/k8gb# k3d --help https://k3d.io/ k3d is a wrapper CLI that helps you to easily create k3s clusters inside docker. Nodes of a k3d cluster are docker containers running a k3s image. All Nodes of a k3d cluster are part of the same docker network. Usage: k3d [flags] k3d [command] Available Commands: cluster Manage cluster(s) completion Generate completion scripts for [bash, zsh, fish, powershell | psh] config Work with config file(s) help Help about any command image Handle container images. kubeconfig Manage kubeconfig(s) node Manage node(s) registry Manage registry/registries version Show k3d and default k3s version Flags: -h, --help help for k3d --timestamps Enable Log timestamps --trace Enable super verbose output (trace logging) --verbose Enable verbose output (debug logging) --version Show k3d and default k3s version Use "k3d [command] --help" for more information about a command. root@k8gb:~/k8gb# snap install kubectl --classic snap "kubectl" is already installed, see 'snap help refresh' root@k8gb:~/k8gb# curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 11156 100 11156 0 0 51694 0 --:--:-- --:--:-- --:--:-- 51888 Downloading https://get.helm.sh/helm-v3.10.2-linux-amd64.tar.gz Verifying checksum... Done. Preparing to install helm into /usr/local/bin helm installed into /usr/local/bin/helm

  • docker-install

    Docker installation script

    root@k8gb:~# curl -fsSL https://get.docker.com | sh - # Executing docker install script, commit: 4f282167c425347a931ccfd95cc91fab041d414f + sh -c apt-get update -qq >/dev/null + sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null + sh -c mkdir -p /etc/apt/keyrings && chmod -R 0755 /etc/apt/keyrings + sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg + sh -c chmod a+r /etc/apt/keyrings/docker.gpg + sh -c echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable" > /etc/apt/sources.list.d/docker.list + sh -c apt-get update -qq >/dev/null + sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-scan-plugin >/dev/null + version_gte 20.10 + [-z] + return 0 + sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce-rootless-extras >/dev/null + sh -c docker version Client: Docker Engine - Community Version: 20.10.21 API version: 1.41 Go version: go1.18.7 Git commit: baeda1f Built: Tue Oct 25 18:01:58 2022 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.21 API version: 1.41 (minimum version 1.12) Go version: go1.18.7 Git commit: 3056208 Built: Tue Oct 25 17:59:49 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.9 GitCommit: 1c90a442489720eec95342e1789ee8a5e1b9536f runc: Version: 1.1.4 GitCommit: v1.1.4-0-g5fd4c4d docker-init: Version: 0.19.0 GitCommit: de40ad0 ================================================================================ To run Docker as a non-privileged user, consider setting up the Docker daemon in rootless mode for your user: dockerd-rootless-setuptool.sh install Visit https://docs.docker.com/go/rootless/ to learn about rootless mode. To run the Docker daemon as a fully privileged service, but granting non-root users access, refer to https://docs.docker.com/go/daemon-access/ WARNING: Access to the remote API on a privileged Docker daemon is equivalent to root access on the host. Refer to the 'Docker daemon attack surface' documentation for details: https://docs.docker.com/go/attack-surface/ ================================================================================ root@k8gb:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES root@k8gb:~# git clone https://github.com/k8gb-io/k8gb Cloning into 'k8gb'... remote: Enumerating objects: 11114, done. remote: Counting objects: 100% (12/12), done. remote: Compressing objects: 100% (12/12), done. remote: Total 11114 (delta 2), reused 2 (delta 0), pack-reused 11102 Receiving objects: 100% (11114/11114), 10.55 MiB | 15.73 MiB/s, done. Resolving deltas: 100% (5805/5805), done. root@k8gb:~# cd k8gb/ root@k8gb:~/k8gb# curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash Preparing to install k3d into /usr/local/bin k3d installed into /usr/local/bin/k3d Run 'k3d --help' to see what you can do with it. root@k8gb:~/k8gb# root@k8gb:~/k8gb# k3d --help https://k3d.io/ k3d is a wrapper CLI that helps you to easily create k3s clusters inside docker. Nodes of a k3d cluster are docker containers running a k3s image. All Nodes of a k3d cluster are part of the same docker network. Usage: k3d [flags] k3d [command] Available Commands: cluster Manage cluster(s) completion Generate completion scripts for [bash, zsh, fish, powershell | psh] config Work with config file(s) help Help about any command image Handle container images. kubeconfig Manage kubeconfig(s) node Manage node(s) registry Manage registry/registries version Show k3d and default k3s version Flags: -h, --help help for k3d --timestamps Enable Log timestamps --trace Enable super verbose output (trace logging) --verbose Enable verbose output (debug logging) --version Show k3d and default k3s version Use "k3d [command] --help" for more information about a command. root@k8gb:~/k8gb# snap install kubectl --classic snap "kubectl" is already installed, see 'snap help refresh' root@k8gb:~/k8gb# curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 11156 100 11156 0 0 51694 0 --:--:-- --:--:-- --:--:-- 51888 Downloading https://get.helm.sh/helm-v3.10.2-linux-amd64.tar.gz Verifying checksum... Done. Preparing to install helm into /usr/local/bin helm installed into /usr/local/bin/helm

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts