Setting Up Kubernetes on EC2
Step 1: Update System Packages
Before installing any software, update your package lists to ensure you're getting the latest versions.
bash
sudo apt update && sudo apt upgrade -y
Step 2: Install Docker
Kubernetes runs containers, so you need to install Docker first.
- Install Required Dependencies Run the following command:
bash
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
- Add Docker GPG Key and Repository Run these commands to add the Docker GPG key and repository:
bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- Install Docker Update the package list and install Docker:
bash
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
- Start and Enable Docker Ensure Docker runs on system startup:
bash
sudo systemctl start docker
sudo systemctl enable docker
- Verify Docker Installation Check the installed version of Docker:
bash
docker --version
Step 3: Install Kubernetes Components (kubectl, kubeadm, kubelet)
- Add Kubernetes Signing Key Run this command to add the Kubernetes signing key:
bash
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
- Add Kubernetes Repository Add the Kubernetes repository to your system's APT sources list:
bash
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
- Install Kubernetes Components Update the package list and install kubelet, kubeadm, and kubectl:
bash
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
- Prevent Automatic Updates (Optional) To avoid unintended upgrades that may disrupt your cluster, hold these packages at their current versions:
bash
sudo apt-mark hold kubelet kubeadm kubectl
- Verify Installation Check the installed versions of Kubernetes components:
bash
kubeadm version
kubectl version --client
Step 4: Enable Docker for Kubernetes
Kubernetes requires Docker’s cgroup driver to be set correctly.
- Check Current cgroup Driver Run this command to check the current cgroup driver:
bash
sudo docker info | grep -i cgroup
If it does not say "systemd", proceed to configure it.
- Configure Docker to Use Systemd Create a configuration file for Docker:
bash
sudo mkdir -p /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
🔹 step 9: Set Up Ingress for Better Traffic Routing
Instead of accessing our app via a NodePort, we’ll set up an Ingress Controller to handle traffic more efficiently.
🛠️ What is Ingress?
Ingress allows you to define routing rules for Kubernetes services.
It provides a stable URL (e.g., http://yourdomain.com).
It eliminates the need to use random NodePort numbers.
1️⃣ Install an Ingress Controller (NGINX)
Since we’re using AWS EC2, we’ll install the NGINX Ingress Controller.
Run:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
✅ This deploys the Ingress Controller.
Now, check if the pods are running:
kubectl get pods -n ingress-nginx
✅ Expected output:
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-xxxx 1/1 Running 0 1m
2️⃣ Create an Ingress Resource
Now, let's create an Ingress Rule to route traffic to our Nginx deployment.
1️⃣ Create a file:
nano nginx-ingress.yaml
2️⃣ Add the following configuration:
`yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: nginx.example.com # Replace this with your domain or public IP
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80`
3️⃣ Apply the configuration:
kubectl apply -f nginx-ingress.yaml
✅ This sets up an Ingress route to forward traffic to the Nginx service.
3️⃣ Test the Ingress
Find the external IP of the Ingress Controller:
kubectl get svc -n ingress-nginx
✅ Look for an entry like this:
pgsql
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
ingress-nginx-controller LoadBalancer 10.96.XXX.XXX XX.XX.XX.XX 80:XXXXX/TCP
🔹 The EXTERNAL-IP is what you'll use to access your app.
Now, test it:
curl -H "Host: nginx.example.com" http://XX.XX.XX.XX
✅ If successful, you'll see the Nginx welcome page.
Top comments (0)