{"id":15676836,"url":"https://github.com/primecloudlabs/kubernetes-on-premise","last_synced_at":"2026-06-05T07:01:54.357Z","repository":{"id":252116569,"uuid":"839475017","full_name":"antonputra/kubernetes-on-premise","owner":"antonputra","description":null,"archived":false,"fork":false,"pushed_at":"2024-11-17T16:26:45.000Z","size":13,"stargazers_count":43,"open_issues_count":0,"forks_count":23,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-03-10T07:57:43.396Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/antonputra.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-08-07T17:24:01.000Z","updated_at":"2025-03-04T16:51:05.000Z","dependencies_parsed_at":"2024-08-07T20:47:15.277Z","dependency_job_id":"cd42c8bb-aa1a-45ea-9aef-09ae99846e04","html_url":"https://github.com/antonputra/kubernetes-on-premise","commit_stats":{"total_commits":9,"total_committers":1,"mean_commits":9.0,"dds":0.0,"last_synced_commit":"65ab1e8d288215d96fbf2f48d3b1b5390f3b5dd6"},"previous_names":["antonputra/kubernetes-on-premise"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antonputra%2Fkubernetes-on-premise","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antonputra%2Fkubernetes-on-premise/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antonputra%2Fkubernetes-on-premise/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antonputra%2Fkubernetes-on-premise/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/antonputra","download_url":"https://codeload.github.com/antonputra/kubernetes-on-premise/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244066189,"owners_count":20392406,"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":[],"created_at":"2024-10-03T16:05:59.043Z","updated_at":"2026-06-05T07:01:54.349Z","avatar_url":"https://github.com/antonputra.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kubernetes On-Premise Guide (Ubuntu).\n\n## Components\n\n- Kubernetes: `1.35`\n- Containerd: `2.2.1`\n- Runc: `1.4.0`\n- CNI plugins: `1.9.0`\n- Calico: `3.30.6`\n- MetalLB: `0.15.3`\n\n## Steps\n\n### Preparing the hosts (Update DNS)\n\n- control-plane-00\n- node-00\n- node-01\n- node-02\n- node-03\n- ...\n\n```sh\nexport DESIRED_HOST_NAME=\"control-plane-00\"\nexport CURRENT_HOST_NAME=\"ubuntu\"\n\nsudo apt update \u0026\u0026 sudo apt -y upgrade\nsudo sed -i \"s/$CURRENT_HOST_NAME/$DESIRED_HOST_NAME/\" /etc/hostname\nsudo sed -i \"s/$CURRENT_HOST_NAME/$DESIRED_HOST_NAME/\" /etc/hosts\nsudo reboot\n```\n\n### Disable Swap Memory (Kubelet Requirement)\n\n```sh\nsudo swapoff -a\nsudo sed -i 's/\\/swap.img/#\\/swap.img/' /etc/fstab\nfree -h\n```\n\n### Installing a container runtime (containerd)\n\n```sh\nexport CONTAINERD_VER=\"2.2.1\"\n\ncurl -L https://github.com/containerd/containerd/releases/download/v$CONTAINERD_VER/containerd-$CONTAINERD_VER-linux-amd64.tar.gz -o containerd-$CONTAINERD_VER-linux-amd64.tar.gz\nsudo tar Cxzvf /usr/local containerd-$CONTAINERD_VER-linux-amd64.tar.gz\nsudo curl -L https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -o /lib/systemd/system/containerd.service\nsudo systemctl daemon-reload\nsudo systemctl enable --now containerd\n```\n\n#### Installing runc\n\n```sh\nexport RUNC_VER=\"1.4.0\"\n\n\ncurl -L https://github.com/opencontainers/runc/releases/download/v$RUNC_VER/runc.amd64 -o runc.amd64\nsudo install -m 755 runc.amd64 /usr/local/sbin/runc\n```\n\n#### Installing CNI plugins\n\n```sh\nexport PLUGINS_VER=\"1.9.0\"\n\ncurl -L https://github.com/containernetworking/plugins/releases/download/v$PLUGINS_VER/cni-plugins-linux-amd64-v$PLUGINS_VER.tgz -o cni-plugins-linux-amd64-v$PLUGINS_VER.tgz\nsudo mkdir -p /opt/cni/bin\nsudo tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v$PLUGINS_VER.tgz\nsudo mkdir /etc/containerd/\n\nsudo sh -c 'containerd config default \u003e /etc/containerd/config.toml'\nsudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml\n\nsudo systemctl restart containerd\n\nstat -fc %T /sys/fs/cgroup/\n```\n\n### Install and configure prerequisites\n\n```sh\ncat \u003c\u003cEOF | sudo tee /etc/modules-load.d/k8s.conf\noverlay\nbr_netfilter\nEOF\n\nsudo modprobe overlay\nsudo modprobe br_netfilter\n\n# sysctl params required by setup, params persist across reboots\ncat \u003c\u003cEOF | sudo tee /etc/sysctl.d/k8s.conf\nnet.bridge.bridge-nf-call-iptables  = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\nnet.ipv4.ip_forward                 = 1\nEOF\n\n# Apply sysctl params without reboot\nsudo sysctl --system\n\nlsmod | grep br_netfilter\nlsmod | grep overlay\n\nsysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward\n```\n\n### Install kubeadm (on all the hosts)\n\n```sh\nexport K8S_VER=\"1.35\"\n\nsudo apt-get update\nsudo apt-get install -y apt-transport-https ca-certificates curl gpg\n\ncurl -fsSL https://pkgs.k8s.io/core:/stable:/v$K8S_VER/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg\necho \"deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v$K8S_VER/deb/ /\" | sudo tee /etc/apt/sources.list.d/kubernetes.list\n\nsudo apt-get update\nsudo apt-get install -y kubelet kubeadm kubectl\nsudo apt-mark hold kubelet kubeadm kubectl\n```\n\n### Initializing your control-plane node\n\n```sh\nsudo kubeadm init --pod-network-cidr=10.0.0.0/16\n```\n\n### Copy Kubernetes Config\n\n```sh\nsudo cat /etc/kubernetes/admin.conf\n\nvim ~/.kube/config\n```\n\n### Installing a Pod network add-on\n\n```sh\nexport CALICO_VER=\"3.30.6\"\n\nkubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v$CALICO_VER/manifests/tigera-operator.yaml\n\n## It takes a while for CRDs to become available; if it fails, retry multiple times.\nkubectl apply -f https://raw.githubusercontent.com/antonputra/kubernetes-on-premise/main/calico.yaml\n```\n\n### Join Master (Example)\n\n```sh\nsudo kubeadm join 192.168.50.135:6443 --token 91frs1.soriol1w90rjqg5u \\\n\t--discovery-token-ca-cert-hash sha256:984c077be96832548ca5185268fbc37804b6ce19799c54c53ba1973ead6b611c\n```\n\n### Add Roles\n\n```sh\nkubectl label node node-00 node-role.kubernetes.io/worker=\nkubectl label node node-01 node-role.kubernetes.io/worker=\nkubectl label node node-02 node-role.kubernetes.io/worker=\nkubectl label node node-03 node-role.kubernetes.io/worker=\n```\n\n### Add Labels\n\n```sh\nkubectl label node node-00 node=node-00\nkubectl label node node-01 node=node-01\nkubectl label node node-02 node=node-02\nkubectl label node node-03 node=node-03\n```\n\n### Install MetalLB\n\n```sh\nkubectl edit configmap -n kube-system kube-proxy\n\napiVersion: kubeproxy.config.k8s.io/v1alpha1\nkind: KubeProxyConfiguration\nmode: \"ipvs\"\nipvs:\n  strictARP: true\n\nexport METALLB_VER=\"0.15.3\"\n\nkubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v$METALLB_VER/config/manifests/metallb-native.yaml\n\n## It takes a while for CRDs to become available; if it fails, retry multiple times.\nkubectl apply -f https://raw.githubusercontent.com/antonputra/kubernetes-on-premise/main/metallb.yaml\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprimecloudlabs%2Fkubernetes-on-premise","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprimecloudlabs%2Fkubernetes-on-premise","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprimecloudlabs%2Fkubernetes-on-premise/lists"}