Prerequisite
disable selinux
disable & stop firewalld
disable swap
Sysctl and Modules
create new file /etc/sysctl.d/kubernetes.conf and add lines below to the file.
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
create new file /etc/modules-load.d/kubernetes.conf add line below to the file.
br_netfilter
reload sysctl :
# sysctl –system
Kubelet, kubeadm and kubectl
Install Kubelet, kubeadm and kubectl on all nodes.
Add the Google repository.
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
Install latest version of kubelet, kubeadm and kubectl.
yum install -y kubelet kubeadm kubectl –disableexcludes=kubernetes
If need spesific version of kubelet, kubeadm and kubectl. Check available kubernetes version by below command.
yum -v list kubelet –show-duplicates –disableexcludes=kubernetes
Install spesific version of kubelet, kubeadm and kubectl.
yum install kubelet-1.21.4-0 kubeadm-1.21.4-0 kubectl-1.21.4-0 –disableexcludes=kubernetes
Start and enable kubelet service
systemctl enable –now kubelet
Container runtime
Install container runtime on all nodes. (Docker/CRI-O/Containerd)
Docker.
Uninstall old versions if exist.
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
Add docker repository.
yum install -y yum-utils
yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
Install docker engine.
yum install docker-ce docker-ce-cli containerd.io
Start and enable docker service.
systemctl enable –now docker
Init kubernetes master node
- for single master node.
kubeadm init –pod-network-cidr 192.168.0.0/16
- for multi master node, init from one of master.
kubeadm init –control-plane-endpoint “loadbalancer-ip-masters:6443” –upload-certs –pod-network-cidr 192.168.0.0/16
notes: for multi master, load balancer is needed for load balance the master nodes.
Join another master (multi master) or worker.
join another master to cluster.
kubeadm join loadbalancer-ip-masters:6443 –token [token] –discovery-token-ca-cert-hash [token] –control-plane –certificate-key [key]
join worker to cluster, get output from this command from master node.
kubeadm token create –print-join-command
- join worker for single master.
kubeadm join ip-master:6443 –token [token] –discovery-token-ca-cert-hash [token]
- join worker for multi master.
kubeadm join loadbalancer-ip-master:6443 –token [token] –discovery-token-ca-cert-hash [token]
CNI (Choose one)
- Calico typha
kubectl apply -f https://docs.projectcalico.org/manifests/calico-typha.yaml
- Flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Nginx Ingress
Install nginx ingress
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.48.1/deploy/static/provider/baremetal/deploy.yaml
ref: https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal