kubernetes-installation/README.md

193 lines
5.2 KiB
Markdown
Raw Normal View History

2021-10-09 14:39:29 +07:00
# Installation Guide for Kubernetes Cluster
### 1. Download kubectl
```shell
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
```
### 2. Validate kubectl
```shell
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
echo "$(<kubectl.sha256) kubectl" | sha256sum --check
```
### 3. Install kubectl
```shell
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
```
##### If none-root access (for local user)
```shell
chmod +x kubectl
mkdir -p ~/.local/bin/kubectl
mv ./kubectl ~/.local/bin/kubectl
# and then add ~/.local/bin/kubectl to $PATH
```
### 4. Verify kubectl installed
```shell
kubectl version --client
```
2021-10-09 14:48:19 +07:00
# Install Helm 3
```shell
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
```
2021-10-09 15:06:35 +07:00
# Setup network
```shell
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
```
2021-10-09 15:13:25 +07:00
# Install kubernetes tools
### 1. Install CNI plugins (required for most pod network)
2021-10-09 15:13:25 +07:00
```shell
CNI_VERSION="v0.8.2"
ARCH="amd64"
sudo mkdir -p /opt/cni/bin
curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-${ARCH}-${CNI_VERSION}.tgz" | sudo tar -C /opt/cni/bin -xz
```
```shell
DOWNLOAD_DIR=/usr/local/bin
sudo mkdir -p $DOWNLOAD_DIR
```
### 2. Install crictl (required for kubeadm / Kubelet Container Runtime Interface (CRI))
```shell
CRICTL_VERSION="v1.17.0"
ARCH="amd64"
curl -L "https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-${ARCH}.tar.gz" | sudo tar -C $DOWNLOAD_DIR -xz
```
### 3. Install kubeadm, kubelet and add a kubelet systemd service
```shell
RELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)"
ARCH="amd64"
cd $DOWNLOAD_DIR
sudo curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/${ARCH}/{kubeadm,kubelet}
sudo chmod +x {kubeadm,kubelet}
RELEASE_VERSION="v0.4.0"
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service
sudo mkdir -p /etc/systemd/system/kubelet.service.d
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
sudo systemctl enable --now kubelet
```
### 4. Verify installation for kubernetes tools
```shell
kubeadm version
```
2021-10-09 17:18:34 +07:00
### 5. Configure containerd
```shell
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
2021-10-09 17:28:17 +07:00
# Setup required sysctl params, these persist across reboots. (If using crio)
2021-10-09 17:18:34 +07:00
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
# Apply sysctl params without reboot
sudo sysctl --system
```
2021-10-09 17:18:34 +07:00
```shell
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
```
2021-10-09 17:28:17 +07:00
**If using crio**
2021-10-09 17:18:34 +07:00
- Update config
```shell
sudo nano /etc/containerd/config.toml
```
- Change SystemdCgroup from **false** to **true**
```toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
```
- Restart containerd service
```shell
sudo systemctl restart containerd
```
### 6. Disable swap and install docker.io
```shell
sudo swapoff -a
wget https://sh.osa.cubetiqs.com/docker-setup.sh
bash docker-setup.sh
2021-10-09 17:10:17 +07:00
sudo systemctl start docker
sudo systemctl enable docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
2021-10-09 17:30:57 +07:00
sudo systemctl daemon-reload
sudo systemctl restart docker
```
#### Install some required tools
```shell
2021-10-09 15:43:13 +07:00
sudo apt-get -y install socat conntrack
```
2021-10-09 17:18:34 +07:00
### 7. Cluster on Master node
```shell
2021-10-09 20:40:15 +07:00
sudo kubeadm init --pod-network-cidr 172.16.1.0/24
```
2021-10-09 17:10:17 +07:00
2021-10-09 20:40:15 +07:00
```shell
2021-10-09 17:10:17 +07:00
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
```
2021-10-09 17:10:17 +07:00
2021-10-09 20:40:15 +07:00
#### Cluster Netowrk with Flannel
2021-10-09 17:10:17 +07:00
```shell
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
2021-10-09 17:18:34 +07:00
```
2021-10-09 20:40:15 +07:00
#### Cluster Network with Calico
```shell
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
```
2021-10-09 19:20:34 +07:00
#### Kubernetes Dashboard
```shell
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
```
2021-10-09 17:18:34 +07:00
#### References
- https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker