Centos7 устанавливает кластерную среду K8S
Centos7 устанавливает кластерную среду K8S

1. Настройки системы

среда

Язык кода:javascript
копировать
[root@st01015vm192 /]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
[root@st01015vm192 /]# uname -a
Linux st01015vm192 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Устанавливается по умолчанию от имени пользователя root

1. Закрыть своп

Временно закрыть обмен

Язык кода:javascript
копировать
swapoff -a

постоянно закрыто Закомментируйте следующую конфигурацию в /etc/fstab

Язык кода:javascript
копировать
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

2. Выключите SELinux.

Kubelet не поддерживает SELinux. Здесь вам нужно перевести SELinux в разрешительный режим.

Язык кода:javascript
копировать
# Посмотреть статус
# /usr/sbin/sestatus -v  
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

3. Отключите брандмауэр

Язык кода:javascript
копировать
systemctl disable firewalld
systemctl stop firewalld

4. Настройте sysctl

Создайте файл /etc/sysctl.d/k8s.conf. Содержимое файла следующее.

Язык кода:javascript
копировать
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

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

Язык кода:javascript
копировать
sysctl -p /etc/sysctl.d/k8s.conf

В RHEL/CentOS 7 сетевые запросы неправильно маршрутизируются из-за обхода iptables. Вы должны убедиться, что в вашей конфигурации sysctl для параметра net.bridge.bridge-nf-call-iptables установлено значение 1. Плагин подключает контейнер к мосту Linux. Плагин должен установить системный параметр net/bridge/bridge-nf-call-iptables равным 1, чтобы гарантировать правильную работу прокси-сервера iptables.

Наконец, в ядре включена пересылка IP (поэтому ядро ​​будет обрабатывать пакеты из мостового контейнера): sysctl net.ipv4.ip_forward=1 Результатом всего этого является то, что все модули могут связываться друг с другом и отправлять трафик в Интернет.

сетевой плагин k8s https://kubernetes.io/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/

сетевая модель k8s https://kubernetes.io/zh/docs/concepts/cluster-administration/networking/

5. Настройте источник установки как Alibaba.

5.1 Настройка источника установки yum
Язык кода:javascript
копировать
## резервное копирование
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
## Скачать исходники с Али
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
5.2 Настройка источника k8s

vim /etc/yum.repos.d/kubernetes.repo

Язык кода:javascript
копировать
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
5.3 Пересобрать кеш yum
Язык кода:javascript
копировать
yum clean all
yum makecache fast
yum -y update

2. Установите докер

1. Установите докер

Вы можете обратиться к официальной документации сайта https://docs.docker.com/engine/install/centos/.

  • Удалить старую версию
Язык кода:javascript
копировать
yum remove docker \
           docker-client \
           docker-client-latest \
           docker-common \
           docker-latest \
           docker-latest-logrotate \
           docker-logrotate \
           docker-engine
  • Установить докер
Язык кода:javascript
копировать
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager \
    --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce docker-ce-cli containerd.io

Если вы хотите установить определенную версию докера

Язык кода:javascript
копировать
yum list docker-ce --showduplicates | sort -r
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

2. конфигурация докера

Создайте файл /etc/docker/daemon.json и напишите конфигурацию. mkdir /etc/docker/ vim /etc/docker/daemon.json

Язык кода:javascript
копировать
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
//   Если существование установлено внутри страны, добавьте следующую Конфигурацию
//   "registry-mirrors": [
//     "https://registry.docker-cn.com"
//   ],
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}

Внутренний источник докера

Язык кода:javascript
копировать
 "registry-mirrors": [
        "https://1nj0zren.mirror.aliyuncs.com",
        "https://docker.mirrors.ustc.edu.cn",
        "http://f1361db2.m.daocloud.io",
        "https://registry.docker-cn.com"
    ]

3. Перезапустите докер.

Язык кода:javascript
копировать
mkdir -p /etc/systemd/system/docker.service.d
systemctl daemon-reload
systemctl restart docker

Может быть сообщено об ошибке, ошибка docker.service

Язык кода:javascript
копировать
[root@st01015vm193 ~]# journalctl -xe 
May 08 15:36:09 st01015vm193 systemd[1]: Dependency failed for Docker Application Container Engine.
-- Subject: Unit docker.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit docker.service has failed.
-- 
-- The result is dependency.
May 08 15:36:09 st01015vm193 systemd[1]: Job docker.service/start failed with result 'dependency'.
May 08 15:36:09 st01015vm193 systemd[1]: Unit docker.socket entered failed state.

Вам необходимо добавить группу докеров в систему. Если вы выполнили базовую настройку, вам будет предложено указать, что у вас нет разрешений. Используйтеchattr -i для увеличения разрешений.

Язык кода:javascript
копировать
chattr -i /etc/group
groupadd docker
systemctl enable docker  && systemctl start docker

3. Установка кластера

1. Установите kubeadm, kubelet и kubectl.

Язык кода:javascript
копировать
yum install -y kubelet kubeadm kubectl kubernetes-cni --disableexcludes=kubernetes
systemctl enable --now kubelet && systemctl start kubelet

2. Используйте kubeadm для создания кластера

Толькосуществоватьmasterузелосуществлять

Язык кода:javascript
копировать
# masterузелосуществлять:
kubeadm init \
 --apiserver-advertise-address 10.10.45.192 \
 --pod-network-cidr=10.244.0.0/16
# --kubernetes-version=v1.15.0 \
# --image-repository=registry.aliyuncs.com/google_containers
# --apiserver-advertise-address Укажите интерфейс для связи с другими узлами
# --pod-network-cidr Укажите подсеть подсеть, этот CIDR необходимо использовать при использовании фаннелсети.

Может быть сообщено о следующей ошибке

Язык кода:javascript
копировать
[root@st01015vm192 ~]# kubeadm init \
>  --apiserver-advertise-address 10.10.45.192 \
>  --pod-network-cidr=10.244.0.0/16
W0508 15:09:35.577282   28115 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[init] Using Kubernetes version: v1.18.2
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
	[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
	[ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists
	[ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists
	[ERROR FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists
	[ERROR Swap]: running with swap on is not supported. Please disable swap
	[ERROR DirAvailable--var-lib-etcd]: /var/lib/etcd is not empty
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

Добавьте этот параметр: –ignore-preflight-errors=all

Об ошибке сообщается следующим образом

Язык кода:javascript
копировать
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused.

Как правило, kubelet не запускается. Проверьте статус, например журналы, чтобы найти причину. В моем случае своп был временно закрыт, что привело к открытию свопа после перезапуска машины: статус systemctl кубелета журналctl -xeu кубелет

После успешной установки появится следующая распечатка:

Язык кода:javascript
копировать
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

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/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.10.45.192:6443 --token 82scon.3zopf5qra2b1s25i \
    --discovery-token-ca-cert-hash sha256:2ea38c2a269d105b09bbf2964c089c067f0c8e7b44c0504b5854fd9acac263e0 

3. Разрешения на настройку пользователя (пользователь root также должен выполнить)

Язык кода:javascript
копировать
# masterузелосуществлять:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

4. Примените фланелевую сетку.

Язык кода:javascript
копировать
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
## Проверьте, успешно ли установлен фланнал
sudo kubectl -n kube-system get po -l app=flannel -o wide

5. Присоединение узла

Согласно отпечатку, после построения кластера на узле master к работе кластера присоединяется узел изучить. kubeadm join 10.10.45.192:6443 --token 82scon.3zopf5qra2b1s25i –discovery-token-ca-cert-hash sha256:2ea38c2a269d105b09bbf2964c089c067f0c8e7b44c0504b5854fd9acac263e0

Язык кода:javascript
копировать
W0508 15:42:29.235510    5131 join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings will be ignored when control-plane flag is not set.
[preflight] Running pre-flight checks
	[WARNING Hostname]: hostname "st01015vm194" could not be reached
	[WARNING Hostname]: hostname "st01015vm194": lookup st01015vm194 on 192.168.16.24:53: no such host

Измените /etc/hosts и добавьте хосты.

Язык кода:javascript
копировать
10.10.45.192 st01015vm192
10.10.45.193 st01015vm193
10.10.45.194 st01015vm194

Добавьте операцию кластера на существующем узле соответственно. После завершения изучения проверьте статус узла на существующем главном узле:

Язык кода:javascript
копировать
[root@st01015vm192 ~]# kubectl get nodes
NAME           STATUS     ROLES    AGE     VERSION
st01015vm192   Ready      master   16d     v1.18.2
st01015vm193   NotReady   <none>   29s     v1.18.2
st01015vm194   NotReady   <none>   6m43s   v1.18.2

Обнаружено, что статус узла всегда NotReady, проверьте статус модуля. kubectl get pods -n kube-system -o широкий

Язык кода:javascript
копировать
kube-flannel-ds-amd64-sdvpf            0/1     Init:ImagePullBackOff   0          8m12s   10.10.45.193   st01015vm193   <none>           <none>
kube-flannel-ds-amd64-x58td            0/1     Init:ImagePullBackOff   0          14m     10.10.45.194   st01015vm194   <none>           <none>

Обнаружено, что фланелевой модуль на дочернем узле сообщает об ошибке, просмотрите подробную информацию. kubectl описать pod -n kube-system kube-flannel-ds-amd64-sdvpf

Язык кода:javascript
копировать
Events:
  Type     Reason     Age                    From                   Message
  ----     ------     ----                   ----                   -------
  Normal   Scheduled  <unknown>              default-scheduler      Successfully assigned kube-system/kube-flannel-ds-amd64-sdvpf to st01015vm193
  Warning  Failed     2m22s (x2 over 4m33s)  kubelet, st01015vm193  Failed to pull image "quay.io/coreos/flannel:v0.12.0-amd64": rpc error: code = Unknown desc = context canceled
  Warning  Failed     2m22s (x2 over 4m33s)  kubelet, st01015vm193  Error: ErrImagePull
  Normal   BackOff    2m11s (x2 over 4m33s)  kubelet, st01015vm193  Back-off pulling image "quay.io/coreos/flannel:v0.12.0-amd64"
  Warning  Failed     2m11s (x2 over 4m33s)  kubelet, st01015vm193  Error: ImagePullBackOff
  Normal   Pulling    118s (x3 over 7m28s)   kubelet, st01015vm193  Pulling image "quay.io/coreos/flannel:v0.12.0-amd64"

Событие показывает, что получение образа не удалось. Это может быть сетевая проблема. После сбоя запуска модуля он попытается запуститься снова, поэтому подождите некоторое время или вручную извлеките образ на неисправном узле и измените его. imagePullPolicy при развертывании: Всегда

By default, the kubelet will try to pull each image from the specified registry. However, if the imagePullPolicy property of the container is set to IfNotPresent or Never, then a local image is used (preferentially or exclusively, respectively).

Измените imagePullPolicy: IfNotPresent.

docker pull quay.io/coreos/flannel:v0.12.0-amd64

Язык кода:javascript
копировать
[root@st01015vm192 ~]# kubectl get nodes
NAME           STATUS   ROLES    AGE   VERSION
st01015vm192   Ready    master   17d   v1.18.2
st01015vm193   Ready    <none>   33m   v1.18.2
st01015vm194   Ready    <none>   39m   v1.18.2

4. Установите веб-интерфейс (Панель управления)

Панель мониторинга не развернута по умолчанию. Его можно развернуть с помощью следующей команды:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml Чтобы защитить данные вашего кластера, Dashboard по умолчанию развертывается с минимальной конфигурацией RBAC. В настоящее время Dashboard поддерживает вход только с использованием токенов Bearer.

Итак, нам нужно скачать yaml и настроить его. Мы модифицируем следующую конфигурацию

Язык кода:javascript
копировать
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443

  selector:
    k8s-app: kubernetes-dashboard

Изменено следующим образом

Язык кода:javascript
копировать
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  selector:
    k8s-app: kubernetes-dashboard

Измените политику получения изображения на IfNotPresent или Never и извлеките изображение на всех узлах k8s. Этот шаг позволяет избежать сбоя при получении изображения по сетевым причинам при создании модуля. docker pull kubernetesui/metrics-scraper:v1.0.4 docker pull kubernetesui/dashboard:v2.0.0

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

Язык кода:javascript
копировать
docker save -o dashboard.tar kubernetesui/dashboard:v2.0.0
docker save -o metrics-scraper.tar kubernetesui/metrics-scraper:v1.0.4

снижение

Язык кода:javascript
копировать
docker load -i dashboard.tar 
docker load -i metrics-scraper.tar 

приложение

kubectl apply -f recommended.yaml

проверить статус

kubectl get pod,svc,ing,deploy -n kubernetes-dashboard

После запуска всех модулей проверьте

https://10.10.45.192:30001/

После завершения установки получите токен на главном узле.

Язык кода:javascript
копировать
[root@st01015vm192 ~]# kubectl -n kubernetes-dashboard  get secret
NAME                               TYPE                                  DATA   AGE
default-token-25jb9                kubernetes.io/service-account-token   3      23m
kubernetes-dashboard-certs         Opaque                                0      23m
kubernetes-dashboard-csrf          Opaque                                1      23m
kubernetes-dashboard-key-holder    Opaque                                2      23m
kubernetes-dashboard-token-fm795   kubernetes.io/service-account-token   3      23m
[root@st01015vm192 ~]# kubectl -n kubernetes-dashboard describe  secret kubernetes-dashboard-token-fm795
Name:         kubernetes-dashboard-token-fm795
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: kubernetes-dashboard
              kubernetes.io/service-account.uid: af7a61cf-901f-42f9-bcbe-6f521d026bc2

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IlhCZGZQa0MtaVFmMHJ0YTRBS083emppS0tKSENvb24xeW9scHIxY19zU0kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1mbTc5NSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImFmN2E2MWNmLTkwMWYtNDJmOS1iY2JlLTZmNTIxZDAyNmJjMiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.haW6XvBAyog0BasqbaWJxPqWjTJKiemVBwP3J8dwFE43Q93Jx41yjxK41NRNaUflL8xL3Aj4CNIJ0YUQwlpIutIzOJq7rXWkneRI6tmgr3jsCarFtjwETph7-spg-WQAHXRQxt7hwMyxcNkJprEc13q6zGO_ycx9ei_hjjliXo0O8JMuQsL0rlm2zXrWOpRer5U77Hj33dnVSGrjvlD3X_5NsI0dlzG2MmKMFZHM0_PVbYFnSvWcEmLl_04_u5CJPtPfp9Pu6RTjy1lMOZtsHgBxqDC-oXxm0UP2Tcn2qlu_UDfIPhiL3r-QrwWFy7b3WpxJCcXwcm07pfUzijQ77A

Просто используйте токен для входа по адресу https://10.10.45.192:30001/.

Ссылки

https://my.oschina.net/u/2539854/blog/3023384 https://juejin.im/post/5d089f49f265da1baa1e7611

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose