Preparing Virtual Machines
We begin with a base VM named Node1 wich will serve as the master node. Using VirtualBox's cloning feature, we create two identical worker nodes:
- Node1: Master
- Node2: Worker
- Node3: Worker
Kubernetes Installation
Configuring Yum Repository
Add Kubernetes repository using Aliyun mirror:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
System Configuration
Disable swap and firewall:
swapoff -a
systemctl disable firewalld
Disable SELinux:
setenforce 0
Installing Components
Install Kubernetes packages:
yum install -y kubelet kubeadm kubectl
Configuring cgroup Driver
Ensure Docker and kubelet use same cgroup driver:
docker info | grep -i cgroup
sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
systemctl daemon-reload
Initilaizing the Cluster
On master node (Node1):
kubeadm init \
--pod-network-cidr=192.168.0.0/16 \
--kubernetes-version=v1.10.0 \
--apiserver-advertise-address=192.168.56.101
After initialization, configure kubectl:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
Network Setup
Install Calico network plugin:
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml
Adding Worker Nodes
On each worker node, run the join command provided by kubeadm init output:
kubeadm join 192.168.56.101:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
Verifying Cluster Status
Check node status:
kubectl get nodes
Check pod status:
kubectl get pods -n kube-system
Making Master Node Schedulable
To allow pods on master node:
kubectl taint nodes --all node-role.kubernetes.io/master-