[{"data":1,"prerenderedAt":428},["ShallowReactive",2],{"navigation":3,"index":14,"index-blogs":87},[4],{"title":5,"path":6,"stem":7,"children":8,"page":13},"Blog","\u002Fblog","blog",[9],{"title":10,"path":11,"stem":12},"Kubernetes Installation Guide - Ubuntu 22.04","\u002Fblog\u002Fkubernetes-installation-guide","blog\u002Fkubernetes-installation-guide",false,{"id":15,"title":16,"about":17,"blog":20,"body":23,"description":24,"experience":25,"extension":52,"meta":53,"navigation":54,"path":55,"profession":56,"seo":57,"stem":60,"testimonials":61,"__hash__":86},"index\u002Findex.yml","Mohammed A.",{"title":18,"description":19},"About Me","I'm a Senior Software Engineer at Kyndryl, who is assigned on enterprise banking software — currently leading a SonarQube team that remediates vulnerabilities across Java applications.\nWith a Master's in Software and Services Architecture from Eötvös Loránd University and a background spanning Java development, test automation, and incident response.\n",{"title":21,"description":22},"Latest Articles","Notes on Java, reliability, security, and the cloud.",null,"I build, secure, and keep enterprise Java banking systems running. Based in Budapest, working across development, quality, and operations.",{"title":26,"items":27},"Work Experience",[28,36,40,44],{"position":29,"date":30,"company":31},"Technical Lead at","2025 - Present",{"name":32,"logo":33,"url":34,"color":35},"Kyndryl","i-simple-icons-kyndryl","https:\u002F\u002Fwww.kyndryl.com","#FF6363",{"position":37,"date":38,"company":39},"Site Reliability Engineer at","2024 - Present",{"name":32,"logo":33,"url":34,"color":35},{"position":41,"date":42,"company":43},"Java Developer & QA Automation Engineer at","2022 - 2023",{"name":32,"logo":33,"url":34,"color":35},{"position":45,"date":46,"company":47},"Application Developer at","2019 - 2022",{"name":48,"logo":49,"url":50,"color":51},"IBM","i-simple-icons-ibm","https:\u002F\u002Fwww.ibm.com","#0F62FE","yml",{},true,"\u002F","Senior Software Engineer",{"title":58,"description":59},"Mohammed A. - Technical Lead & Site Reliability Engineer","Portfolio of Mohammed A., a Budapest-based Technical Lead and Site Reliability Engineer building secure, resilient Java banking systems.","index",[62,70,78],{"quote":63,"author":64},"Emma's approach to UX design completely transformed our product. She has a rare ability to balance beautiful aesthetics with functional simplicity. The redesign not only looked better, but it reduced our customer support tickets by 40% and increased conversion rates across all key metrics.",{"name":65,"description":66,"avatar":67},"Sarah Chen","Product Director at Bloom Finance",{"src":68,"srcset":69},"https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1487412720507-e7ab37603c6f?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=40&h=40&q=80","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1487412720507-e7ab37603c6f?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=80&h=80&q=80 2x",{"quote":71,"author":72},"Working with Emma was the best decision we made for our startup. She didn't just deliver designs—she challenged our assumptions, conducted thorough user research, and created an experience that truly resonated with our audience. Her technical knowledge of front-end development meant the handoff to our engineering team was seamless.",{"name":73,"description":74,"avatar":75},"Michael Rodriguez","Co-founder of Wavelength Music",{"src":76,"srcset":77},"https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=40&h=40&q=80","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=80&h=80&q=80 2x",{"quote":79,"author":80},"Emma stands out in her ability to translate complex sustainability data into intuitive interfaces. Her work on EcoTrack wasn't just visually stunning—it fundamentally changed how our users interact with environmental information. She approaches each problem with both creativity and analytical rigor, which is exactly what we needed.",{"name":81,"description":82,"avatar":83},"Dr. Aisha Johnson","Chief Innovation Officer at GreenTech Solutions",{"src":84,"srcset":85},"https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1573497019940-1c28c88b4f3e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=40&h=40&q=80","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1573497019940-1c28c88b4f3e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=80&h=80&q=80 2x","9AvYP22eMloQ6SgrpYmrbux5djIIy_i5jf2nQ0sMvXU",[88],{"id":89,"title":10,"author":90,"body":94,"date":420,"description":421,"extension":422,"image":423,"meta":424,"minRead":425,"navigation":54,"path":11,"seo":426,"stem":12,"__hash__":427},"blog\u002Fblog\u002Fkubernetes-installation-guide.md",{"name":16,"avatar":91},{"src":92,"alt":93},"https:\u002F\u002Fapi.dicebear.com\u002F9.x\u002Fnotionists\u002Fsvg?seed=Mohammed&backgroundColor=e5e7eb","Developer avatar for Mohammed A.",{"type":95,"value":96,"toc":409},"minimark",[97,102,106,117,120,126,129,135,138,143,146,151,154,159,163,166,172,175,181,184,190,193,197,200,203,206,212,215,220,223,228,231,236,242,251,257,260,265,271,278,283,286,289,295,298,303,306,311,314,319,327,330,334,337,342,345,350,353,358,361,366,369,374,377,382,385,390,393,397,403],[98,99,101],"h2",{"id":100},"step-1-install-kubectl-binary-with-curl-on-linux","Step 1: Install kubectl binary with curl on Linux",[103,104,105],"p",{},"Download the latest release with the command:",[107,108,113],"pre",{"className":109,"code":111,"language":112},[110],"language-text","curl -LO \"https:\u002F\u002Fdl.k8s.io\u002Frelease\u002F$(curl -L -s https:\u002F\u002Fdl.k8s.io\u002Frelease\u002Fstable.txt)\u002Fbin\u002Flinux\u002Farm64\u002Fkubectl\"\n","text",[114,115,111],"code",{"__ignoreMap":116},"",[103,118,119],{},"Validate the binary, Download the kubectl checksum file:",[107,121,124],{"className":122,"code":123,"language":112},[110],"   curl -LO \"https:\u002F\u002Fdl.k8s.io\u002Frelease\u002F$(curl -L -s https:\u002F\u002Fdl.k8s.io\u002Frelease\u002Fstable.txt)\u002Fbin\u002Flinux\u002Farm64\u002Fkubectl.sha256\"\n",[114,125,123],{"__ignoreMap":116},[103,127,128],{},"Validate the kubectl binary against the checksum file:",[107,130,133],{"className":131,"code":132,"language":112},[110],"echo \"$(cat kubectl.sha256)  kubectl\" | sha256sum --check\n",[114,134,132],{"__ignoreMap":116},[103,136,137],{},"If valid, the output is:",[103,139,140],{},[114,141,142],{},"kubectl: OK",[103,144,145],{},"Install kubectl",[103,147,148],{},[114,149,150],{},"sudo install -o root -g root -m 0755 kubectl \u002Fusr\u002Flocal\u002Fbin\u002Fkubectl",[103,152,153],{},"Test to ensure the version you installed is up-to-date:",[103,155,156],{},[114,157,158],{},"kubectl version --client",[98,160,162],{"id":161},"step-2-install-docker-engine-on-ubuntu","Step 2: Install Docker Engine on Ubuntu",[103,164,165],{},"Set up Docker's apt repository.",[107,167,170],{"className":168,"code":169,"language":112},[110],"# Add Docker's official GPG key:\nsudo apt-get update\nsudo apt-get install ca-certificates curl gnupg\nsudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\ncurl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n\n# Add the repository to Apt sources:\necho \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu \\\n  $(. \u002Fetc\u002Fos-release && echo \"$VERSION_CODENAME\") stable\" | \\\n  sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\nsudo apt-get update\n\n",[114,171,169],{"__ignoreMap":116},[103,173,174],{},"Install the Docker packages.",[107,176,179],{"className":177,"code":178,"language":112},[110],"sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[114,180,178],{"__ignoreMap":116},[103,182,183],{},"Verify that the Docker Engine installation is successful by running the hello-world image.",[107,185,188],{"className":186,"code":187,"language":112},[110],"sudo docker run hello-world\n",[114,189,187],{"__ignoreMap":116},[103,191,192],{},"This command downloads a test image and runs it in a container. When the container runs, it prints a confirmation message and exits.",[98,194,196],{"id":195},"step-3-minikube-start","Step 3: minikube start",[103,198,199],{},"minikube is local Kubernetes, focusing on making it easy to learn and develop for Kubernetes.",[103,201,202],{},"All you need is Docker (or similarly compatible) container or a Virtual Machine environment, and Kubernetes is a single command away: minikube start",[103,204,205],{},"To install the latest minikube stable release on ARM64 Linux using binary download:",[107,207,210],{"className":208,"code":209,"language":112},[110],"curl -LO https:\u002F\u002Fstorage.googleapis.com\u002Fminikube\u002Freleases\u002Flatest\u002Fminikube-linux-arm64\n\nsudo install minikube-linux-arm64 \u002Fusr\u002Flocal\u002Fbin\u002Fminikube\n",[114,211,209],{"__ignoreMap":116},[103,213,214],{},"Start a cluster using the docker driver:",[103,216,217],{},[114,218,219],{},"minikube start --driver=docker",[103,221,222],{},"To make docker the default driver:",[103,224,225],{},[114,226,227],{},"minikube config set driver docker",[103,229,230],{},"If minikube fails to start, try to set permission to docker.sock",[103,232,233],{},[114,234,235],{},"sudo chmod 666 \u002Fvar\u002Frun\u002Fdocker.sock",[103,237,238,239],{},"netcat is needed to check network address, install it with ",[114,240,241],{},"sudo apt install netcat",[103,243,244,245],{},"kubeadm need to be installed to create a new cluster, visit ",[246,247,248],"a",{"href":248,"rel":249},"https:\u002F\u002Fkubernetes.io\u002Fdocs\u002Fsetup\u002Fproduction-environment\u002Ftools\u002Fkubeadm\u002Finstall-kubeadm\u002F#k8s-install-0",[250],"nofollow",[103,252,253,254],{},"Interact with your cluster\n",[114,255,256],{},"kubectl get po -A",[103,258,259],{},"You can also make your life easier by adding the following to your shell config: (for more details see: kubectl)",[103,261,262],{},[114,263,264],{},"alias kubectl=\"minikube kubectl --\"",[103,266,267,268],{},"Open dashboard\n",[114,269,270],{},"minikube dashboard",[103,272,273,274],{},"Congrats!!! Kubernetes installed and running on ",[246,275,276],{"href":276,"rel":277},"http:\u002F\u002F127.0.0.1:34307\u002F",[250],[279,280,282],"h3",{"id":281},"step-4-deploy-sample-application","Step 4: Deploy Sample application",[103,284,285],{},"Now deploy an example application",[103,287,288],{},"Create a sample deployment and expose it on port 8080:",[107,290,293],{"className":291,"code":292,"language":112},[110],"kubectl create deployment hello-minikube --image=kicbase\u002Fecho-server:1.0\n\nkubectl expose deployment hello-minikube --type=NodePort --port=8080\n",[114,294,292],{"__ignoreMap":116},[103,296,297],{},"It may take a moment, but your deployment will soon show up when you run:",[103,299,300],{},[114,301,302],{},"kubectl get services hello-minikube",[103,304,305],{},"The easiest way to access this service is to let minikube launch a web browser for you:",[103,307,308],{},[114,309,310],{},"minikube service hello-minikube",[103,312,313],{},"Alternatively, use kubectl to forward the port:",[103,315,316],{},[114,317,318],{},"kubectl port-forward service\u002Fhello-minikube 7080:8080",[103,320,321,322,326],{},"Tada! Your application is now available at ",[246,323,324],{"href":324,"rel":325},"http:\u002F\u002Flocalhost:7080\u002F",[250],".",[103,328,329],{},"You should be able to see the request metadata in the application output. Try changing the path of the request and observe the changes. Similarly, you can do a POST request and observe the body show up in the output.",[279,331,333],{"id":332},"step-5-managing-your-cluster","Step 5: Managing your cluster",[103,335,336],{},"Pause Kubernetes without impacting deployed applications:",[103,338,339],{},[114,340,341],{},"minikube pause",[103,343,344],{},"Unpause a paused instance:",[103,346,347],{},[114,348,349],{},"minikube unpause",[103,351,352],{},"Halt the cluster:",[103,354,355],{},[114,356,357],{},"minikube stop",[103,359,360],{},"Change the default memory limit (requires a restart):",[103,362,363],{},[114,364,365],{},"minikube config set memory 9001",[103,367,368],{},"Browse the catalog of easily installed Kubernetes services:",[103,370,371],{},[114,372,373],{},"minikube addons list",[103,375,376],{},"Create a second cluster running an older Kubernetes release:",[103,378,379],{},[114,380,381],{},"minikube start -p aged --kubernetes-version=v1.16.1",[103,383,384],{},"Delete all of the minikube clusters:",[103,386,387],{},[114,388,389],{},"minikube delete --all",[391,392],"h1",{"id":116},[279,394,396],{"id":395},"resources","Resources",[103,398,399],{},[246,400,401],{"href":401,"rel":402},"https:\u002F\u002Fkubernetes.io\u002Fdocs\u002Ftasks\u002Ftools\u002Finstall-kubectl-linux\u002F",[250],[103,404,405],{},[246,406,407],{"href":407,"rel":408},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[250],{"title":116,"searchDepth":410,"depth":410,"links":411},2,[412,413,414],{"id":100,"depth":410,"text":101},{"id":161,"depth":410,"text":162},{"id":195,"depth":410,"text":196,"children":415},[416,418,419],{"id":281,"depth":417,"text":282},3,{"id":332,"depth":417,"text":333},{"id":395,"depth":417,"text":396},"2026-08-31","A step-by-step guide to installing kubectl, Docker, and Minikube on Ubuntu 22.04, then deploying and managing your first local Kubernetes application.","md","https:\u002F\u002Fraw.githubusercontent.com\u002Fkubernetes\u002Fkubernetes\u002Fmaster\u002Flogo\u002Flogo.png",{},8,{"title":10,"description":421},"v_itpepVL-3wHexhv_JJVnnmPRIXZPwv_ErpdErayn0",1788444550428]