Added K8s manuall install blog
This commit is contained in:
205
blog - install K8s manually.md
Normal file
205
blog - install K8s manually.md
Normal file
@@ -0,0 +1,205 @@
|
||||
# K8s Manual Install
|
||||
|
||||
## Pre-requisites for each node
|
||||
|
||||
Remove any exiting docker components (Not required if host is new)
|
||||
|
||||
```
|
||||
sudo apt remove docker docker-engine docker.io containerd runc
|
||||
```
|
||||
|
||||
Install required packages
|
||||
|
||||
```
|
||||
sudo apt install curl ca-certificates apt-transport-https containerd nfs-common gpg
|
||||
```
|
||||
|
||||
## Disable Swap
|
||||
|
||||
```
|
||||
sudo swapoff -a
|
||||
```
|
||||
|
||||
Comment out swap line in `/etc/fstab`
|
||||
|
||||
```
|
||||
sudo vim /etc/fstab
|
||||
```
|
||||
|
||||
## Create containerd conf file
|
||||
|
||||
```
|
||||
sudo vim /etc/modules-load.d/containerd.conf
|
||||
```
|
||||
|
||||
Add the following:
|
||||
|
||||
```
|
||||
overlay
|
||||
br_netfilter
|
||||
```
|
||||
|
||||
Insert the `overlay` and `br_netfilter` modules
|
||||
|
||||
```
|
||||
sudo modprobe overlay && sudo modprobe br_netfilter
|
||||
```
|
||||
|
||||
## Create 99-kubernetes-cri.conf file
|
||||
|
||||
```
|
||||
sudo vim /etc/sysctl.d/99-kubernetes-cri.conf
|
||||
```
|
||||
|
||||
Add the following:
|
||||
|
||||
```
|
||||
net.bridge.bridge-nf-call-iptables = 1
|
||||
net.ipv4.ip_forward = 1
|
||||
net.bridge.bridge-nf-call-ip6tables = 1
|
||||
```
|
||||
|
||||
Apply changes without reboot
|
||||
|
||||
```
|
||||
sudo sysctl --system
|
||||
```
|
||||
|
||||
## Create default containerd config
|
||||
|
||||
```
|
||||
sudo mkdir /etc/containerd
|
||||
containerd config default | sudo tee /etc/containerd/config.toml
|
||||
```
|
||||
|
||||
Make sure the following options are set in the specified locations in the file
|
||||
|
||||
```
|
||||
version = 2
|
||||
[plugins]
|
||||
[plugins."io.containerd.grpc.v1.cri"]
|
||||
[plugins."io.containerd.grpc.v1.cri".containerd]
|
||||
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
|
||||
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
|
||||
runtime_type = "io.containerd.runc.v2"
|
||||
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
|
||||
SystemdCgroup = true
|
||||
```
|
||||
[reference](https://github.com/containerd/containerd/issues/4203#issuecomment-651532765)
|
||||
|
||||
## Restart Containerd
|
||||
|
||||
```
|
||||
sudo systemctl restart containerd
|
||||
```
|
||||
|
||||
## Install kubernetes repo and packages
|
||||
|
||||
> Note: The legacy package repositories (apt.kubernetes.io and yum.kubernetes.io) have been deprecated and frozen starting from September 13, 2023. Using the new package repositories hosted at pkgs.k8s.io is strongly recommended and required in order to install Kubernetes versions released after September 13, 2023. The deprecated legacy repositories, and their contents, might be removed at any time in the future and without a further notice period. The new package repositories provide downloads for Kubernetes versions starting with v1.24.0. - [Reference](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)
|
||||
|
||||
These instructions are for Kubernetes 1.29.
|
||||
|
||||
### Download the public signing key for the Kubernetes package repositories.
|
||||
|
||||
_The same signing key is used for all repositories so you can disregard the version in the URL_
|
||||
|
||||
```shell
|
||||
# If the folder `/etc/apt/keyrings` does not exist, it should be created before the curl command.
|
||||
# sudo mkdir -p -m 755 /etc/apt/keyrings
|
||||
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
|
||||
```
|
||||
|
||||
### Add the appropriate Kubernetes `apt` repository.
|
||||
_Please note that this repository has packages only for Kubernetes 1.29; for other Kubernetes minor versions, you need to change the Kubernetes minor version in the URL to match your desired minor version (you should also check that you are reading the documentation for the version of Kubernetes that you plan to install)._
|
||||
|
||||
```shell
|
||||
# This overwrites any existing configuration in /etc/apt/sources.list.d/kubernetes.list
|
||||
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
|
||||
```
|
||||
|
||||
### Update the `apt` package index, install kubelet, kubeadm and kubectl, and pin their version:
|
||||
|
||||
```shell
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y kubelet kubeadm kubectl
|
||||
sudo apt-mark hold kubelet kubeadm kubectl
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Initialize the cluster
|
||||
|
||||
_Perform the rest of the steps from the control-plane (master node) only!_
|
||||
|
||||
## Initialize the cluster with kubeadm
|
||||
|
||||
```
|
||||
sudo kubeadm init --upload-certs --pod-network-cidr 10.244.0.0/16
|
||||
```
|
||||
|
||||
You should get output similar to the following:
|
||||
|
||||
```
|
||||
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
|
||||
|
||||
Alternatively, if you are the root user, you can run:
|
||||
|
||||
export KUBECONFIG=/etc/kubernetes/admin.conf
|
||||
|
||||
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 192.168.48.134:6443 --token vhcdvr.1c8gqc6s5qpiukt7 \
|
||||
--discovery-token-ca-cert-hash sha256:697968c82f451ea0174d7abcc17a7c6e347f9c55963846659233624dd10cde57
|
||||
```
|
||||
|
||||
Follow the directions in the output to copy and change ownership on the config file.
|
||||
|
||||
## Deploy flannel
|
||||
|
||||
```
|
||||
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
|
||||
```
|
||||
|
||||
## Join worker nodes
|
||||
|
||||
Use the command in the output to join worker nodes to the cluster.
|
||||
|
||||
As root on each worker node:
|
||||
|
||||
```
|
||||
kubeadm join 192.168.48.134:6443 --token vhcdvr.1c8gqc6s5qpiukt7 --discovery-token-ca-cert-hash sha256:697968c82f451ea0174d7abcc17a7c6e347f9c55963846659233624dd10cde57
|
||||
```
|
||||
|
||||
## Verify cluster from the control-plane (Master Node)
|
||||
|
||||
```
|
||||
kube@devitkubm1a:~$ kubectl get nodes
|
||||
```
|
||||
|
||||
Sample output
|
||||
|
||||
```
|
||||
NAME STATUS ROLES AGE VERSION
|
||||
devitkub1a Ready <none> 34s v1.29.1
|
||||
devitkub1b Ready <none> 15s v1.29.1
|
||||
devitkubm1a Ready control-plane 10m v1.29.1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# References
|
||||
|
||||
* [Install Kubernetes on to bare metal servers](https://dev.azure.com/Overdrive-IT/IT-Infrastructure/_git/ansible-k8s-bare-metal?anchor=install-kubernetes-on-to-bare-metal-servers)
|
||||
* [K8S Manual Install Steps](https://dev.azure.com/OverDrive-IT/IT-Infrastructure/_wiki/wikis/IT-Infrastructure.wiki/35/K8S-Manual-Install-Steps)
|
||||
* [kubeadm reset](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-reset/)
|
||||
* [Bootstrapping clusters with kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/)
|
||||
Reference in New Issue
Block a user