Saturday, July 25, 2020

Kubernetes set up on Linux machine ...


1. Installing Docker engine

1. Build a redhat OS system on your Virtual box

Attach ISO image and mount it
# mkdir /cdrom /opt/OS_Image; mount /dev/cdrom /cdrom
# cd /cdrom; cp -a * /opt/OS_Image

TO make cdrom mount automatically
# vi /etc/rc.d/rc/local
touch /var/lock/subsys/local
# Add the line below
mount /dev/cdrom /cdrom

wq!

# chmod +x /etc/rc.d/rc/local


Set up repo
[root@control yum.repos.d]# cat local.repo
[OS-Repo]
name=Centos8 repo AppStttream
baseurl=file:///opt/OS_Image/AppStream
gpgcheck=0

[BASEOS]
name=Centos8 repo
baseurl=file:///opt/OS_Image/BaseOS
gpgcheck=0

[docker]
name=docker repo
baseurl=https://download.docker.com/linux/centos/7/x86_64/stable/
gpgcheck=0
[root@control yum.repos.d]#


[root@control yum.repos.d]# yum install docker-ce --nobest


Set up repo fo kubernetes

googole for installing kubeadm

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

Read through the page since it contains very important information. Go to the section where you find  yum repo set up.

COpy the code and set up the repo.


cat <<EOF > /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
EOF



# Set SELinux in permissive mode (effectively disabling it)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

systemctl enable --now kubelet

-> Verify SElinux to permissive
# cat /etc/sysconfig/selinux or etc/selinux/config  

Install iproute-tc
[root@control yum.repos.d]# yum install iproute-tc


cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

Make sure that the br_netfilter module is loaded before this step. This can be done by running lsmod | grep br_netfilter. To load it explicitly call modprobe br_netfilter

Restart kubelet
systemctl daemon-reload
systemctl restart kubelet
systemctl enable docker
[root@control yum.repos.d]# systemctl start docker
[root@control yum.repos.d]# systemctl status docker

[root@control yum.repos.d]# docker info
 Cgroup Driver: cgroupfs

Configure cgroup driver used by kubelet on control-plane node

https://github.com/kubernetes/kubeadm/issues/1394

[root@control yum.repos.d]# cat /etc/docker/daemon.json
{
   "exec-opts": ["native.cgroupdriver=systemd"]
}
[root@control yum.repos.d]# systemctl restart docker
[root@control yum.repos.d]# docker info  # shows the output...

Cgroup Driver: systemd

Disable swap

[root@control yum.repos.d]# vi /etc/fstab
#/dev/mapper/cl_control-swap swap                    swap    defaults        0 0
~

[root@control yum.repos.d]# systemctl start kubelet
[root@control yum.repos.d]# systemctl enable kubelet
[root@control yum.repos.d]# systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor pre>
  Drop-In: /usr/lib/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: activating (auto-restart) (Result: exit-code) since Wed 2020-07-22 1>
     Docs: https://kubernetes.io/docs/
  Process: 18237 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_C>
 Main PID: 18237 (code=exited, status=255)



Now, we are going to make this os as an base image - called GOLD image. Basedo n this we will create other OS instances for Control and worker nodes.


Now, Shutdown your VM
[root@control yum.repos.d]# init 0


Go to your Virtual box and R. click on your VM and click on clone

Under Macaddress policy - select generate new MAC address


Keep original machine intake and create a 3 clone machines
- Control or master node
- 2 worker nodes


Set the hostname and IP address. Add entry to dns or hosts file
# hostnamectl set-hostname master; exec bash

# cat /etc/hosts
192.168.56.5    master
192.168.56.6    worker1
192.168.56.7    worker2

Make sure they can comunicate with each other
# for i in master worker1 worker2; do  ping -c 2 $i; done


Now, set up your kubernetes master also called control plane
Specify the network information
Run kubeadm -h for helo
# kubeadm -h
read all the output and pick the best option.

here, we like to set up an kubernetes so we will pick init option. lets go ahead and get help on this as well.

# kubeadm init -h
We see for network info, we will pick
--pod-network-cidr string              Specify range of IP addresses

# kubeadm init --pod-network-cidr=10.10.1.0/16

I got error that my docker engine is not started and firewalld is enabled. so I want to disable firewall and start docker

[root@master ~]# systemctl enable docker
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl status docker
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld

I got another error complaining about CPU

[root@master ~]# kubeadm init --pod-network-cidr=10.10.1.0/16
W0722 16:25:45.888720    6178 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[init] Using Kubernetes version: v1.18.6
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher


I have to shutdown master and add one more CPU.

[root@master ~]# docker ps

Now, lets try again,

[root@master ~]# kubeadm init --pod-network-cidr 10.10.1.0/16
W0722 16:30:58.200764    1654 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[init] Using Kubernetes version: v1.18.6
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster

................

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.0.2.15:6443 --token 6daorv.o0hdosnxi40z08h1 \
    --discovery-token-ca-cert-hash sha256:61d3f94370095d8a04e155a133383c57b3e221150d369c575dfdb2e3c78de08f
[root@master ~]#


Review the output and complete the following,
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@master ~]#

Add alias to profile
[root@master ~]# vi .bashrc
alias kc=kubectl
[root@master ~]# . ./.bashrc

[root@master ~]# systemctl status kubelet
[root@master ~]# docker images
[root@master ~]# docker ps

[root@master ~]# kc get pods
No resources found in default namespace.
[root@master ~]# kc get nodes
NAME     STATUS     ROLES    AGE   VERSION
master   NotReady   master   12m   v1.18.6
[root@master ~]# kc get ns
[root@master ~]# kc create namespace myspace
namespace/myspace created

[root@master ~]# kc get ns
NAME              STATUS   AGE
default           Active   17m
kube-node-lease   Active   17m
kube-public       Active   17m
kube-system       Active   17m
myspace           Active   19s
[root@master ~]# kc run testpod --image=httpd -n myspace
pod/testpod created
[root@master ~]# kc get pods
No resources found in default namespace.
[root@master ~]# kc get pods -n myspace
NAME      READY   STATUS    RESTARTS   AGE
testpod   0/1     Pending   0          39s
[root@master ~]# kc get all -n myspace
NAME          READY   STATUS    RESTARTS   AGE
pod/testpod   0/1     Pending   0          72s


[root@master ~]# kc get pods -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-66bff467f8-66t78         0/1     Pending   0          19m
coredns-66bff467f8-sllrx         0/1     Pending   0          19m
etcd-master                      1/1     Running   0          19m
kube-apiserver-master            1/1     Running   0          19m
kube-controller-manager-master   1/1     Running   0          19m
kube-proxy-4kfld                 1/1     Running   0          19m
kube-scheduler-master            1/1     Running   0          19m
[root@master ~]#

We are going to create flannel

google for github kube-flannel.yml

https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

[root@master ~]# kc apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds-amd64 created
daemonset.apps/kube-flannel-ds-arm64 created
daemonset.apps/kube-flannel-ds-arm created
daemonset.apps/kube-flannel-ds-ppc64le created
daemonset.apps/kube-flannel-ds-s390x created
[root@master ~]#

[root@master ~]# kc get pods
No resources found in default namespace.
[root@master ~]# kc get pods -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-66bff467f8-66t78         1/1     Running   0          26m
coredns-66bff467f8-sllrx         1/1     Running   0          26m
etcd-master                      1/1     Running   0          26m
kube-apiserver-master            1/1     Running   0          26m
kube-controller-manager-master   1/1     Running   0          26m
kube-flannel-ds-amd64-lw6xf      1/1     Running   0          37s
kube-proxy-4kfld                 1/1     Running   0          26m
kube-scheduler-master            1/1     Running   0          26m
[root@master ~]#




Run on client machines
kubeadm join 10.0.2.15:6443 --token 6daorv.o0hdosnxi40z08h1 \
    --discovery-token-ca-cert-hash sha256:61d3f94370095d8a04e155a133383c57b3e221150d369c575dfdb2e3c78de08f



https://carleton.ca/scs/tech-support/troubleshooting-guides/host-only-adapter-on-virtualbox/
https://condor.depaul.edu/glancast/443class/docs/vbox_host-only_setup.html

No comments:

Post a Comment