- To interact with k8s cluster we have two major options
- programatically by using REST API with json payloads
- kubectl command line by using YAML manifests
- When we interact with kubectl we create yaml manifest which has minimum details required where we express what we want rather than how it is done.
- when we work with clusters especially container clusters we embrace cattle mindset (pet vs cattle)
Pods in k8s
- A Pod is smallest unit of creation in k8s.
- Container will exist inside Pod.
- A Pod is collection of application containers and volumes running inside the same execution environment
- Each container in a pod runs with in its own cgroup, but they share a number of Linux namespaces
- Each Pod gets a unique IP address in k8s cluster. The containers running inside the Pod share the same Ip Address and port space, have the same host name
- A Pod can have any number of containers, but ideally its not a good idea to run multiple containers in a Pod.
- A Pod should represent a microservice/application so running one container is considered as best idea.
K8s has wide variety of installation options
- local machine:
- Manual cluster installation:
- Automatic cluster installation
- Managed clusters
- Azure Kubernetes Service
- Elastic Kubernetes Service
- Google Kubernetes Engine
- local machine:
- We would be using Manual Cluster installation to start with and then move towards Managed clusters
- Once the k8s is installed in any of the above approaches, we need to create manifests to deploy our applications.
kubeadm single master installation
- Refer Here for kubeadm installation
- For practice try playground Refer Here
- I will be create a 3 node k8s cluster with one master
- On all the nodes install docker
curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh sudo -i # Run these commands as root ###Install GO### wget https://storage.googleapis.com/golang/getgo/installer_linux chmod +x ./installer_linux ./installer_linux source ~/.bash_profile git clone https://github.com/Mirantis/cri-dockerd.git cd cri-dockerd mkdir bin go get && go build -o bin/cri-dockerd mkdir -p /usr/local/bin install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd cp -a packaging/systemd/* /etc/systemd/system sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service systemctl daemon-reload systemctl enable cri-docker.service systemctl enable --now cri-docker.socket usermod -aG docker ubuntu
- On all the nodes install kubelet, kubeadm and kubectl Refer Here
sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg 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 sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
- Next steps: We need to initialize k8s cluster.