Устанавливаем кластер с помощью Kubeadm (CentOS 7)
- Необходимо чтобы все сервера резолвились по именам.
- Не предентую на правильность этой инструкции, только на ознакомления с технологией.
- Да я понимаю что один HaProxy это не хорошо и нужен Keepalived
-
Устанавиливаем HAProxy
yum install haproxy -y
- Правим конфиг vim /etc/haproxy/haproxy.cfg
frontend kubernetes-frontend
bind *:6443
mode tcp
option tcplog
default_backend kubernetes-backend
backend kubernetes-backend
mode tcp
balance roundrobin
server master1 192.168.8.1:6443
server master2 192.168.8.2:6443
server master3 192.168.8.3:6443
- Отключаем selinux и firewall и перезапускаем haproxy
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
systemctl disable --now ufw
systemctl stop firewalld
2. Устанавка на Master1
- Ставим, настраиваем и запускаем Containerd
yum --enablerepo="base" -y install yum-utils
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum install -y containerd.io-1.4.4-3.1.el7
mkdir -p /etc/containerd
cat > /etc/containerd/config.toml <<EOF
version = 2
[grpc]
max_recv_message_size = 16777216
max_send_message_size = 16777216
[debug]
level = "info"
[metrics]
address = ""
grpc_histogram = false
[plugins]
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "k8s.gcr.io/pause:3.3"
max_container_log_line_size = -1
[plugins."io.containerd.grpc.v1.cri".containerd]
default_runtime_name = "runc"
snapshotter = "overlayfs"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
runtime_engine = ""
runtime_root = ""
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
systemdCgroup = true
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://mirror.gcr.io","https://registry-1.docker.io"]
EOF
systemctl enable --now containerd
- Скачиваем и распаковываем утилиты crictl и nerdctl
curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.21.0/crictl-v1.21.0-linux-amd64.tar.gz | tar -zxf - -C /usr/bin
curl -L https://github.com/containerd/nerdctl/releases/download/v0.8.1/nerdctl-0.8.1-linux-amd64.tar.gz | tar -zxf - -C /usr/bin
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 30
debug: false
EOF
- Настраиваем sysctl, выключаем selinux, отчключаем swap, firewall, включаем ntpd,
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
systemctl disable --now ufw
systemctl stop firewalld
{
cat >>/etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
}
modprobe br_netfilter
cat <<EOF > /etc/modules-load.d/br_netfilter.conf
br_netfilter
EOF
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
- Ставим kubelet, kubectl и kubeadm
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet-1.21.4-0 kubeadm-1.21.4-0 kubectl-1.21.4-0
systemctl enable --now kubelet
- Создаем кластер
kubeadm init --control-plane-endpoint="192.168.8.5:6443" --upload-certs --apiserver-advertise-address=192.168.8.1 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors NumCPU | tee -a kubeadm_init.log
- Если все хорошо вы должны увидеть что то вроде этого, чтобы вы смогли увидеть ноды не забудьте скопировать конфиг файл в свою домашнию директорию.
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/
You can now join any number of the control-plane node running the following command on each as root:
kubeadm join 192.168.8.5:6443 --token bn7mo5.hr5fkficthqmpg43 \
--discovery-token-ca-cert-hash sha256:5a3b9e10a2203946d371465420780c9233c5d7d5fbceba6ce8bbfcb6033f556a \
--control-plane --certificate-key 95fb29ca384dec1049a41eb5e896c739c320af9de60878a5158dd2563ec84baf
Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.8.5:6443 --token bn7mo5.hr5fkficthqmpg43 \
--discovery-token-ca-cert-hash sha256:5a3b9e10a2203946d371465420780c9233c5d7d5fbceba6ce8bbfcb6033f556a
- Ставим сетевой плагин Calico
Скачиваем calico.yml
kubectl apply -f calico.yaml
- Проверяем что все заработало, должны увидеть поды почти все запущенные и нашу одну мастер ноду.
kubectl get node
kubectl get pod -A
Установка Master 2 и Master 3
- Сначала все действия делаем на Master2, только после всех операций преступаем к серверу Master3
- Повторяем все шаги до шага «Создаем Кластер»
- Отлично теперь подключаем
kubeadm join 192.168.8.5:6443 --token bn7mo5.hr5fkficthqmpg43 \
--discovery-token-ca-cert-hash sha256:5a3b9e10a2203946d371465420780c9233c5d7d5fbceba6ce8bbfcb6033f556a \
--control-plane --certificate-key 95fb29ca384dec1049a41eb5e896c739c320af9de60878a5158dd2563ec84baf --ignore-preflight-errors=NumCPU
- Проверить что все подключилось можем проверит на Master1
- Еще раз повторяем наши действия на Master3
Установка Node1 и Node2
- Сначала все действия делаем на Node1, только после всех операций преступаем к серверу Node2
- Повторяем все шаги до шага «Создаем Кластер»
- Отлично теперь подключаем
kubeadm join 192.168.8.5:6443 --token bn7mo5.hr5fkficthqmpg43 \
--discovery-token-ca-cert-hash sha256:5a3b9e10a2203946d371465420780c9233c5d7d5fbceba6ce8bbfcb6033f556a
- Проверить что все подключилось можем проверит на Master1
- Еще раз повторяем наши действия на Node2