1. Два способа развертывания k8s:
На данный момент существует два основных способа развертывания кластеров Kubernetes в продакшене:
kubeadm
Kubeadm — это инструмент развертывания K8s, который обеспечивает kubeadm init и kubeadm join для быстрого развертывания кластеров Kubernetes.
двоичный пакет
Загрузите дистрибутивную версию двойного с github. пакет,Развертывание каждого компонента вручную,Сформируйте кластер Kubernetes.
В этом эксперименте для создания кластера используется kubeadm.
2. Подготовка среды
Требования к серверу:
Рекомендуемая минимальная аппаратная конфигурация: 2-ядерный процессор, 2 ГБ памяти, 20 ГБ жесткого диска.
Лучше всего, чтобы сервер имел доступ к внешней сети. Если сервер не может получить доступ к Интернету, соответствующее изображение необходимо заранее загрузить и импортировать в узел.
Программная среда:
Операционная система: centos7.6.1810
Docker:20-ce
K8s:1.23
Планирование сервера: (в этом эксперименте используется виртуальная машина)
k8s-master:192.168.239.137
k8s-node1:192.168.239.138
k8s-node2:192.168.239.139
3.1 Подготовка среды установки: Следующие операции необходимо выполнить на всех узлах.
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config # постоянный
setenforce 0 # временный
swapoff -a # временный
sed -ri 's/.swap./#&/' /etc/fstab # постоянный
hostnamectl set-hostname <hostname>
cat >> /etc/hosts << EOF
192.168.239.137 k8s-master
192.168.239.138 k8s-node1
192.168.239.139 k8s-node2
EOF
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # вступить в силу
yum install ntpdate -y
ntpdate time.windows.com
3.2. Установите Docker, kubeadm и kubelet [все узлы].
Установите докер:
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docker
Настройте ускоритель загрузки изображений:
vim /etc/docker/daemon.json
{
"registry-mirrors": "https://b9pmyelo.mirror.aliyuncs.com",
"exec-opts": "native.cgroupdriver=systemd"
}
systemctl restart docker
информация о докере #Просмотр информации о докере и подтверждение
Добавить источник программного обеспечения:
cat > /etc/yum.repos.d/kubernetes.repo << EOF
kubernetes
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
Установите kubeadm, kubelet, kubectl:
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet
4.1 развертывание kubeadm (нужно немного подождать)
kubeadm init \
--apiserver-advertise-address=192.168.239.137 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
--apiserver-advertise-address адрес объявления кластера
--image-repository Поскольку адрес извлечения изображения по умолчанию k8s.gcr.io недоступен в Китае.
--kubernetes-version Версия K8s, соответствующая установленной выше
--service-cidr Внутренняя виртуальная сеть кластера, вход для единого доступа к модулям
--pod-network-cidr Сеть подов, соответствующая yaml сетевого компонента CNI, развернутому ниже
После инициализации будет выведена команда соединения. Сначала скопируйте ее и используйте, когда узел присоединяется к мастеру.
4.2. Скопируйте файл сертификации k8s.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Просмотр рабочих узлов:
kubectl get nodes
Примечание. Поскольку сетевой плагин еще не развернут, он не готов, продолжайте.
5.1. Добавьте новый узел в кластер и выполните выходные данные команды kubeadm join в kubeadm init.
Срок действия токена по умолчанию составляет 24 часа. По истечении срока действия токен больше не доступен. На данный момент вам необходимо заново создать токен. Для его быстрой генерации можно напрямую использовать команду:
kubeadm token create --print-join-command
После завершения вышеуказанных операций каждый рабочий узел присоединился к кластеру, но его статус — NoReady. Это связано с тем, что без них они не могут обмениваться данными между хостами. Основная функция сетевого модуля CNI — обеспечить возможность ресурсам модуля взаимодействовать между хостами. Для настройки выполните следующие команды на главном узле:
wget https://docs.projectcalico.org/manifests/calico.yaml
После загрузки вам необходимо изменить определение сети Pod (CALICO_IPV4POOL_CIDR), которое совпадает с указанным ранее в --pod-network-cidr init kubeadm.
После изменения файла разверните:
kubectl apply -f calico.yaml
kubectl get pods -n kube-system #Пройдет некоторое время, прежде чем выполнение завершится, прежде чем все заработает
Примечание. Все файлы yaml в будущем будут выполняться только на главном узле.
Каталог установки: /etc/kubernetes/
Каталог файла конфигурации компонента: /etc/kubernetes/manifests/
Dashboard — это официально предоставляемый пользовательский интерфейс, который можно использовать для базового управления ресурсами K8s.
Адрес загрузки YAML:
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
По умолчанию доступ к информационной панели возможен только внутри кластера. Измените службу на тип NodePort и откройте ее снаружи:
vi recommended.yaml
...
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 30001 selector:
k8s-app: kubernetes-dashboard
type: NodePort
...
Адрес доступа: https://NodeIP:30001
Создайте учетную запись службы и привяжите роль администратора кластера по умолчанию:
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
Используйте выходной токен для входа в панель мониторинга.