Clouds Amazon (AWS) - Kubernetes Setup (AWS)
Делаю:
09.10.2022
По материалам из курса The Ultimate Kubernetes Administrator Course
Chapter 2: Build a K8s Cluster from Scratch
https://www.techworld-with-nana.com/kubernetes-administrator-cka
Имеем учебный аккаунт aws
По клику на open console открывается обычная консоль AWS с правами самого главного пользователя, который только может быть предоставлен пользовательской учетной записи в облках AWS.
AIM
Создаем пользователя (admin), для того, чтобы не работать под главным пользователем.
Users -> Add User
Записываем куда-нибудь.
- Username
- Secret access key
- Pass
Кликаем по ссылке вида: https://069940897088.signin.aws.amazon.com/console
EC2
EC2 -> Instancec -> Launch an instance
Создаем 3 виртуальные машины.
1 master Ubuntu 2t.medium
2 worker Ubuntu 2t.large
Security -> Edit inbound rules
// Порты берем здесь
https://kubernetes.io/docs/reference/ports-and-protocols/
172.31.0.0/16 - см. в VPC
// + Для всех узлов weave
- 6783 Custom 172.31.0.0/16
[Host машина]
$ cp ~/Downloads/k8s-node.pem ~/.ssh
$ chmod 400 ~/.ssh/k8s-node.pem
[Все узлы + Host машина] Прописываем узлы в /etc/hosts
$ sudo vi /etc/hosts
Заменить
<Private_IP> master
<Private_IP> worker1
<Private_IP> worker2
52.59.210.154 master
18.156.83.149 worker1
3.68.93.13 worker2
Подключение к узлам
// master
$ ssh -i ~/.ssh/k8s-node.pem ubuntu@master
// workstation
$ ssh -i ~/.ssh/k8s-node.pem ubuntu@worker1
$ ssh -i ~/.ssh/k8s-node.pem ubuntu@worker2
Задание названий для узлов
$ sudo apt update -y && sudo apt upgrade -y
$ sudo swapoff -a
$ sudo hostnamectl set-hostname master
$ sudo hostnamectl set-hostname worker1
$ sudo hostnamectl set-hostname worker2
[Все узлы] Инсталляция container-d
https://kubernetes.io/docs/setup/production-environment/container-runtimes/#containerd
$ mkdir ~/tmp
$ cd ~/tmp
$ vi install.sh
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# sysctl params required by setup, params persist across reboots
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# Apply sysctl params without reboot
sudo sysctl --system
sudo apt update
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
systemctl status containerd
$ chmod u+x install.sh
$ ./install.sh
[Все узлы] Install kubeadm kubelet and kubectl
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
// Если нужно подобрать пакеты определенных версий
// $ apt-cache madison kubeadm
$ vi install-k8s-components.sh
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=1.25.2-00 kubeadm=1.25.2-00 kubectl=1.25.2-00
# // фиксирует версии пакетов, чтобы они не обновлялись
sudo apt-mark hold kubelet kubeadm kubectl
$ chmod +x install-k8s-components.sh
$ ./install-k8s-components.sh
[master]
$ sudo kubeadm init
$ sudo kubectl get node --kubeconfig /etc/kubernetes/admin.conf
NAME STATUS ROLES AGE VERSION
master NotReady control-plane 20m v1.25.2
$ mkdir -p ~/.kube
$ sudo cp -i /etc/kubernetes/admin.conf ~/.kube/config
$ sudo chown $(id -u):$(id -g) ~/.kube/config
$ ls -l ~/.kube/config
-rw------- 1 ubuntu ubuntu 5640 Oct 1 21:51 /home/ubuntu/.kube/config
$ kubectl get node
NAME STATUS ROLES AGE VERSION
master NotReady control-plane 3m34s v1.25.2
Установка и настройка драйвера сети weave
https://www.weave.works/docs/net/latest/kubernetes/kube-addon/
$ wget "https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml" -O weave.yaml
vi weave.yaml
containers:
- name: weave
command:
- /home/weave/launch.sh
Заменить на
containers:
- name: weave
command:
- /home/weave/launch.sh
- --ipalloc-range=100.32.0.0/12
$ kubectl apply -f weave.yaml
$ kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane 24m v1.25.2
$ kubectl get pod -n kube-system
coredns должны появиться
[Worker узлы] Подключение узлов к master
// master
// Если нужно заново запустить процедуру
$ kubeadm token create --print-join-command
// worker nodes
sudo kubeadm join \*\*\*
// master
$ kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane 53m v1.25.2
worker1 Ready <none> 86s v1.25.2
worker2 NotReady <none> 17s v1.25.2
Test
$ git clone https://github.com/webmakaka/cats-app
$ cd cats-app/k8s/
$ kubectl apply -f ./
Перестартовка kubelet
// Перестартовать
$ sudo systemctl status kubelet
$ sudo systemctl restart kubelet