Развернуть кластер K8s

1. Два способа развертывания k8s

В настоящее время существует два основных способа развертывания кластеров Kubernetes в производственной среде:

кубадм

Kubeadm — это инструмент развертывания K8s, который обеспечивает инициализацию kubeadm и объединение kubeadm для быстрого развертывания кластеров Kubernetes.

бинарный пакет

Загрузите бинарный пакет дистрибутива с github и вручную разверните каждый компонент, чтобы сформировать кластер Kubernetes.

В этом эксперименте kubeadm используется для создания кластера.

2. Среда развертывания

ИМЯ

IP

ОС-ОБРАЗ

ВЕРСИЯ

ДОКЕР-ВЕРСИЯ

ВЕРСИЯ КАЛИКО

владелец

192.168.0.220

эл7.x86_64

v1.23.0

23.0.1

v3.9.0

узел01

192.168.0.6

эл7.x86_64

v1.23.0

23.0.1

v3.9.0

3. Начальная конфигурация

  • изменить имя хоста

  • Измените файл hosts

  • отключить брандмауэр

  • близко

sed -i 's/enforcing/disabled/' /etc/selinux/config      # 永久
setenforce 0                                            # 临时
  • Закройте раздел подкачки, затем перезапустите

swapoff -a                             # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
  • Синхронизируйте время каждого узла

#安装ntpdate
yum -y install ntpdate
运行命令:crontab -l
添加:0 */1 * * * ntpdate time1.aliyun.com
  • Добавить фильтрацию мостов

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1 
net.ipv4.ip_forward = 1 
vm.swappiness = 0
EOF
  • Загрузите модуль br_netfilter

modprobe br_netfilter
#查看
lsmod | grep br_netfilter
  • Файл конфигурации фильтра моста загрузки

sysctl -p /etc/sysctl.d/k8s.conf
  • открыть ipvs

#安装ipset及ipvsadm
yum -y install ipset ipvsadm
#创建sysconfig/modules文件夹
mkdir -p /etc/sysconfig/modules/
#操作如下命令
cat >>/etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

#授权、运行、检查是否加载
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

4. Разверните кластер Kubernetes

  • Установите 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 docke

Настройте ускоритель загрузки зеркала:

vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

systemctl restart docker
docker info              #查看docker信息,进行确认

Добавьте источник программного обеспечения Alibaba Cloud:

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

Установите только kubelet для запуска (последующая инициализация кластера запустит kubelet)

#查看kubelet状态
systemctl status kubelet
#设置kubelet开机启动
systemctl enable kubelet

Просмотрите образы, необходимые для кластера k8s, и загрузите их заранее

kubeadm config images list
  • Разверните k8s-master [выполнение мастера]

развертывание kubeadm

kubeadm init \
  --apiserver-advertise-address=192.168.0.220 \
  --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 по умолчанию для извлечения образа недоступен в Китае, укажите здесь адрес репозитория образов Alibaba Cloud.

--kubernetes-version Версия K8s, соответствующая установленной выше

--service-cidr внутренняя виртуальная сеть кластера, вход единого доступа Pod

--pod-network-cidr Сеть Pod, соответствующая сетевому компоненту CNI yaml, развернутому ниже

Скопируйте приведенный выше вывод команды kubeadm join.

kubeadm join 192.168.0.220:6443 --token v4cfxg.nopu749nz57alzwo \
    --discovery-token-ca-cert-hash sha256:56ab22922d19aa6e77b7b046fa82ad1b8a3ed90323ab9e5eacae1008b2a9deb4

Скопируйте файл аутентификации k8s

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

Посмотреть рабочие узлы:

kubectl get nodes

Примечание. Поскольку сетевой плагин не развернут, он еще не готов. Не готов, продолжайте работу.

  • Установить сетевой плагин Calico [мастер-исполнение]

Загрузите файл сетевого плагина calico.yaml и выполните:

wget https://docs.projectcalico.org/v3.23/manifests/calico.yaml
vim calico.yaml
- name: CALICO_IPV4POOL_CIDR
  value: "10.244.0.0/16"     #与前面kubeadm init的 --pod-network-cidr指定的一样
- name: IP_AUTODETECTION_METHOD
  value: "interface=eth0"   #IP 220那个网卡

kubectl apply -f calico.yaml

Примечание:

问题:alico/node не готов: BIRD не готов: BGP не установлен с 192.168.0.220

Причина в том, что у мастер-узла больше сетевых карт, а calico выбирает не ту сетевую карту.

Измените calico.yaml и укажите правильное имя сетевой карты.

адрес ifconfig 220 находится в eth0

увеличение env увеличение:

– имя: IP_AUTODETECTION_METHOD

значение: "интерфейс=eth0"

kubectl get pods -n kube-system

После запуска Calico Pod узлы будут готовы.

kubectl describe  pods calico-node-dghzw -n kube-system

Помните: добавьте в файл docker daemon.json: "exec-opts": ["native.cgroupdriver=systemd"]

Убедитесь, что установка главного узла прошла нормально.

#查看每个容器运行状态(仅且显示STATUS:Running 、 READY:1/1 状态,表示集群安装成功)
kubectl get pod -n kube-system
#通过如下命令定位问题(一般情况为镜像拉取失败)
kubectl describe pod 容器名 -n kube-system 或 kubectl logs 容器名 -n kube-system
  • Настройте узел узла k8s [узел узла операции]

Чтобы добавить новый узел в кластер, выполните вывод команды kubeadm join в kubeadm init.

kubeadm join 192.168.0.220:6443 --token v4cfxg.nopu749nz57alzwo \
    --discovery-token-ca-cert-hash sha256:56ab22922d19aa6e77b7b046fa82ad1b8a3ed90323ab9e5eacae1008b2a9deb4

Токен по умолчанию действителен в течение 24 часов, а по истечении срока его действия токен становится недоступен. В это время необходимо воссоздать токен, который можно сгенерировать напрямую с помощью команды:

создать токен kubeadm --print-join-command

5. Разверните панель инструментов

Dashboard — это официальный пользовательский интерфейс, который можно использовать для базового управления ресурсами K8s.

Адрес загрузки YAML:

https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

По умолчанию доступ к Dashboard возможен только внутри кластера. Измените Service на тип NodePort и выставьте его наружу:

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         --增加

осуществлять:

kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard

Адрес доступа: https://NodeIP:30001

Требуется токен, для которого необходимо создать учетную запись службы и привязать ее к роли администратора кластера по умолчанию:

 # 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

Используйте выходной токен для входа в Dashboard.

6. Убедитесь, что весь кластер успешно установлен [мастер]

#查看集群节点以及节点状态是否就绪,Ready为就绪
kubectl get node
#查看每个容器运行状态(仅且显示STATUS:Running 、 READY:1/1 状态,表示容器正常运行,当所有容器正常运行时节点转为就绪状态)
kubectl get pod -n kube-system -owide
#通过如下命令定位问题(一般情况为镜像拉取失败)
kubectl describe pod 容器名 -n kube-system
或 kubectl logs 容器名 -n kube-system

рекомендация

отblog.csdn.net/victory0508/article/details/129027047
рекомендация