Skip to content

RHEL 7 kubernetes and cassandra installation guide (ContainerD runtime)

Dark edited this page Jun 23, 2023 · 5 revisions

Kubernetes installation

At every node of your cluster you have to install:

  • containerd.io
  • kubelet
  • kubectl
  • kubeadm

Run the following commands sequentially

  1. Add repositories

    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
    cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
    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
    
  2. Install packages
    NOTE: please change versions according to what you would like to use (compatibility table)

    yum install -y iproute-tc containerd.io kubelet-1.21.13 kubeadm-1.21.13 kubectl-1.21.13 --disableexcludes=kubernetes
    
  3. Disable swap

    sudo swapoff -a
    

    Note: swap should be disabled in /etc/fstab (comment it out)

  4. Set SELinux in permissive mode (effectively disabling it)

    sudo setenforce 0
    sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
    
  5. Disable firewall

    sudo systemctl disable firewalld && systemctl stop firewalld
    
    or you can add rules
    # Master
    firewall-cmd --permanent --add-port=6443/tcp # Kubernetes API server
    firewall-cmd --permanent --add-port=2379-2380/tcp # etcd server client API
    firewall-cmd --permanent --add-port=10250/tcp # Kubelet API
    firewall-cmd --permanent --add-port=10251/tcp # kube-scheduler
    firewall-cmd --permanent --add-port=10252/tcp # kube-controller-manager
    firewall-cmd --permanent --add-port=8285/udp # Flannel
    firewall-cmd --permanent --add-port=8472/udp # Flannel
    firewall-cmd --add-masquerade --permanent
    firewall-cmd --permanent --add-port=30000-32767/tcp # if NodePort on master is required
    firewall-cmd --reload
    systemctl restart firewalld
    
    # Worker
    firewall-cmd --permanent --add-port=10250/tcp
    firewall-cmd --permanent --add-port=8285/udp # Flannel
    firewall-cmd --permanent --add-port=8472/udp # Flannel
    firewall-cmd --permanent --add-port=30000-32767/tcp # NodePort range
    firewall-cmd --add-masquerade --permanent
    firewall-cmd --reload
    systemctl restart firewalld
    
  6. Enable services

    systemctl enable containerd; systemctl enable kubelet
    
  7. Run the following command to set up the kernel modules immediately

    sudo modprobe overlay && modprobe br_netfilter
    
  8. Install kernel modules for containerd

    sudo tee /etc/modules-load.d/containerd.conf<<EOF
    overlay
    br_netfilter
    EOF
    
  9. Set system level settings for Kubernetes networking works as expected

    sudo tee /etc/sysctl.d/kubernetes.conf<<EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    EOF
    
  10. To take effect immediately run

    sudo sysctl --system && echo 1 > /proc/sys/net/ipv4/ip_forward
    
  11. Containerd settings

    sudo containerd config default > /etc/containerd/config.toml
    sudo systemctl start containerd
    

Reminder: all steps above(1-11) must be performed at every node that you would like to use in your Kubernetes cluster


Cluster creation

  1. Init your cluster

    kubeadm init --pod-network-cidr=10.244.0.0/16
    
  2. Enable auto-completion and kubectl for user

    mkdir -p $HOME/.kube && cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && chown $(id -u):$(id -g) $HOME/.kube/config && \
    printf "source <(kubectl completion bash)\nsource <(kubeadm completion bash)" >> ~/.bashrc && . .bashrc
    
  3. Flannel installation
    NOTE: also you can use Calico, Cilium, Contiv-VPP, Kube-router, Weave Net

    kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
    
  4. Check system pods

    $ kubectl get pods --namespace=kube-system
    NAME                                       READY   STATUS    RESTARTS   AGE
    coredns-74ff55c5b-txmpm                    1/1     Running   0          6m58s
    coredns-74ff55c5b-zl89t                    1/1     Running   0          6m58s
    etcd-th2-kuber-test04                      1/1     Running   0          7m8s
    kube-apiserver-th2-kuber-test04            1/1     Running   0          7m8s
    kube-controller-manager-th2-kuber-test04   1/1     Running   0          7m8s
    kube-flannel-ds-cxzq7                      1/1     Running   8          117s
    kube-proxy-9szhv                           1/1     Running   0          6m58s
    kube-scheduler-th2-kuber-test04            1/1     Running   0          7m8s
    

  1. Join nodes
    At step 12 (init cluster) you got the command to join your nodes to the cluster

    kubeadm join 192.168.0.10:6443 \
      --token 7adyph.18ud1qnkrz2wwwfg \
      --discovery-token-ca-cert-hash sha256:f938f0dbbb3353d9ffeebc2631412182cc2234e8c3d34f0b395623d9bd29fd78
    
    In case you lost the token and hash
    • Generate a new token actual 1 hour
      kubeadm token create --description "Demo token" --ttl 1h
      
    • Then get a hash of certificate
      openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
      

    Check your nodes after

    $ kubectl get nodes
    NAME              STATUS                        ROLES           AGE    VERSION
    kube00            Ready                         master          109m   v1.21.13
    kube01            Ready                         <none>          53s    v1.21.13
    
Clone this wiki locally