{"slug": "install-and-set-up-kubeflow-for-ml-on-eks", "title": "Install and set up Kubeflow for ML on EKS.", "summary": "A developer documented a step-by-step process for installing Kubeflow on Amazon EKS, using eksctl to provision the cluster, VPC, subnets, and a managed node group in a single command. The guide notes that Kubeflow's control-plane components require at least m5.xlarge nodes and that its Kustomize-based manifests often need repeated apply passes until all CRDs resolve. It also warns that the default dashboard login should be changed immediately on any non-throwaway cluster.", "body_md": "Kubeflow is like a dedicated playground for machine learning on Kubernetes. Imagine having a magic toolbox that not only helps you build and train your models but also handles all the nitty-gritty details of deploying and scaling them in a Kubernetes environment. It's like having a personal assistant that makes sure your machine learning workflows run smoothly, letting you focus on the fun part—experimenting and creating cutting-edge models.\n\nYou can install the AWS CLI from the official `[documentation](https://docs.aws.amazon.com/cli/)`\n\nThis command can also be used to install AWS CLI\n\n```\nsudo apt-get update && sudo apt-get install -y awscli\n```\n\nAfter the download, we need to configure it using the command\n\n```\nAWS configure\n```\n\nThis step will prompt you to enter your AWS Access Key ID, AWS Secret Access Key, default region, and default output format (optional).\n\nThe raw `aws eks create-cluster` command shown above works, but only if you already have a VPC, subnets, and an EKS service role with the right trust policy set up beforehand — that's three extra prerequisites most people don't have lying around. The faster, more common path is `eksctl`, which creates the cluster, the VPC, the subnets, and a managed node group in one command:\n\n```\neksctl create cluster \\\n  --name kubeflow-eks \\\n  --region us-east-1 \\\n  --nodegroup-name ml-nodes \\\n  --node-type m5.xlarge \\\n  --nodes 2 \\\n  --nodes-min 2 \\\n  --nodes-max 4 \\\n  --managed\n```\n\n`m5.xlarge` (4 vCPU, 16 GB RAM) is a reasonable floor for Kubeflow — its control-plane components (Istio, Dex, the Kubeflow dashboard, Notebook controller, Pipelines) are memory-hungry even before you run a single training job. This takes 15-20 minutes; `eksctl` is provisioning real VPC, subnet, and IAM resources underneath, not just the cluster.\n\nOnce it finishes, point `kubectl` at the new cluster:\n\n```\naws eks update-kubeconfig --name kubeflow-eks --region us-east-1\nkubectl get nodes\n```\n\nYou should see your node group's instances in `Ready` state before moving on — Kubeflow's installer will fail in confusing ways if the nodes aren't ready yet.\n\nKubeflow doesn't ship as a single Helm chart — it's a collection of components (Istio, Dex, cert-manager, the Kubeflow Pipelines UI, Notebook controller, KServe, and more) glued together with Kustomize overlays in the official [kubeflow/manifests](https://github.com/kubeflow/manifests) repo. Clone it and check out a release tag that matches a Kubernetes version your EKS cluster actually supports:\n\n```\ngit clone https://github.com/kubeflow/manifests.git\ncd manifests\ngit checkout v1.9.0\n```\n\nKubeflow's components have interdependencies that `kubectl apply -k` alone can't always resolve on the first pass — a CRD from one component might not exist yet when another component's manifest tries to reference it. The project's own documented workaround is to retry the apply in a loop until every resource is created:\n\n```\nwhile ! kustomize build example | kubectl apply --server-side --force-conflicts -f -; do\n  echo \"Retrying to apply resources\"\n  sleep 20\ndone\n```\n\nThis can take several passes and several minutes — that's expected, not a sign something's broken, as long as the error messages are about missing CRDs rather than something else.\n\n```\nkubectl get pods -n kubeflow\n```\n\nEvery pod should eventually reach `Running`. Then reach the dashboard by port-forwarding the Istio ingress gateway rather than exposing it publicly on a fresh cluster:\n\n```\nkubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80\n```\n\nOpen `http://localhost:8080` — the default login is `user@example.com` / `12341234`, which you should treat as a placeholder to change immediately, not a real credential to leave in place, if this cluster is anything more than a throwaway lab.\n\nThe gap between the raw `aws eks create-cluster` command and a running Kubeflow dashboard is bigger than it looks from the AWS CLI reference page alone — a working node group, a Kustomize-based multi-component install with real interdependency ordering issues, and a default credential you have to remember to rotate. None of that is a knock on Kubeflow itself; it's a genuinely capable ML platform once it's up. It's just worth knowing the real shape of the setup before starting, rather than assuming one `aws eks create-cluster` call and a Helm install away.", "url": "https://wpnews.pro/news/install-and-set-up-kubeflow-for-ml-on-eks", "canonical_source": "https://dev.to/rdgmh/install-and-set-up-kubeflow-for-ml-on-eks-4cgm", "published_at": "2026-09-17 07:33:51+00:00", "updated_at": "2026-09-17 07:53:45.554142+00:00", "lang": "en", "topics": ["machine-learning", "mlops", "ai-infrastructure", "developer-tools"], "entities": ["Kubeflow", "Amazon EKS", "eksctl", "Kubernetes", "AWS", "Istio", "Dex", "KServe"], "alternates": {"html": "https://wpnews.pro/news/install-and-set-up-kubeflow-for-ml-on-eks", "markdown": "https://wpnews.pro/news/install-and-set-up-kubeflow-for-ml-on-eks.md", "text": "https://wpnews.pro/news/install-and-set-up-kubeflow-for-ml-on-eks.txt", "jsonld": "https://wpnews.pro/news/install-and-set-up-kubeflow-for-ml-on-eks.jsonld"}}