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


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


По клику на open console открывается обычная консоль AWS с правами самого главного пользователя, который только может быть предоставлен пользовательской учетной записи в облках AWS.


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


AIM


Создаем пользователя (admin), для того, чтобы не работать под главным пользователем.


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Users -> Add User


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Записываем куда-нибудь.

  • Username
  • Secret access key
  • Pass

Кликаем по ссылке вида: https://069940897088.signin.aws.amazon.com/console


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


EC2

EC2 -> Instancec -> Launch an instance


Создаем 3 виртуальные машины.


1 master Ubuntu 2t.medium
2 worker Ubuntu 2t.large

Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Security -> Edit inbound rules

// Порты берем здесь
https://kubernetes.io/docs/reference/ports-and-protocols/

172.31.0.0/16 - см. в VPC

Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


// + Для всех узлов weave
- 6783 Custom 172.31.0.0/16

Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


Clouds Amazon (AWS) - Kubernetes Setup (AWS)


[Host машина]


$ cp ~/Downloads/k8s-node.pem ~/.ssh
$ chmod 400 ~/.ssh/k8s-node.pem


[Все узлы + Host машина] Прописываем узлы в /etc/hosts


$ sudo vi /etc/hosts


Заменить на данные из консоли aws


<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