Инструмент kk (KubeKey), используемый в этой статье, выполняет установку kubesphere и k8s, автор успешно развернул его в рабочей среде и на виртуальной машине, пожалуйста, используйте его~
kubesphereОфициальная документация:https://v3-1.docs.kubesphere.io/zh/docs/ несколько узлов Установитьдокумент:https://v3-1.docs.kubesphere.io/zh/docs/installing-on-linux/introduction/multioverview/ Автономная установка Официальная документация:https://v3-1.docs.kubesphere.io/zh/docs/installing-on-linux/introduction/air-gapped-installation/
Конфигурация виртуальной машины
имя хоста | IP-адрес | Минимальные требования | иллюстрировать |
---|---|---|---|
master14 | 192.168.239.14 | Процессор: 2 ядра, память: 4 ГБ, жесткий диск: 80 ГБ | узел мастер14 |
node22 | 192.168.239.22 | ЦП: 1 ядро, память: 1 ГБ, жесткий диск: 50 ГБ | узел22узел |
node23 | 192.168.239.23 | ЦП: 1 ядро, память: 1 ГБ, жесткий диск: 50 ГБ | узел23узел |
node24 | 192.168.239.23 | ЦП: 1 ядро, память: 1 ГБ, жесткий диск: 50 ГБ | частный сервер гавани |
Напоминание: это минимальная конфигурация для локального автономного развертывания через виртуальную машину (Конфигурация жесткого диска виртуальной машины 50 ГБ не означает, что 50 ГБ будут выделены напрямую, это виртуально~)
Словом, резервирования жесткого диска на 100G вполне достаточно, чтобы поиграться с моей Конфигурацией.
При достаточно надежной внешней защите selinux можно отключить навсегда
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl stop firewalld && systemctl disable firewalld
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
dockerонлайн Установить Подробное руководство---Установить
Теплое напоминание: Ниже приводится Автономная правительственная интранет-сеть. установка~
19.3.8+
Выберите подходящую версию докера
tar -zxvf docker-19.03.9.tgz
Переместите все распакованные папки Docker в каталог /usr/bin.
cp docker/* /usr/bin/
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
#Выполняем последовательно следующие скрипты
vi /etc/systemd/system/docker.service
chmod +x /etc/systemd/system/docker.service
systemctl daemon-reload && systemctl start docker && systemctl enable docker.service
docker -v
vi /etc/docker/daemon.json заполните следующее содержимое:
{
"registry-mirrors": [
"https://sq9p56f6.mirror.aliyuncs.com" #зеркальный ускоритель
],
"insecure-registries": ["IP:8088"], #Если зеркальное хранилище http, его необходимо добавить в политику безопасности
"exec-opts":["native.cgroupdriver=systemd"] #Переведите cgroup в режим systemd для синхронизации с Linux, по умолчанию используется cgroupfs.
}
Docker-ComposeПуть загрузки:https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64
Выберите подходящую версию докера
#Выполняем команды последовательно
#переименовать
mv docker-compose-Linux-x86_64 docker-compose
#Изменить разрешения
chmod +x docker-compose
#Файл docker-compose перемещен в /usr/local/bin
mv docker-compose /usr/local/bin
#Открываем файл /etc/profile
vi /etc/profile
#Добавляем содержимое в конец файла, затем сохраняем и выходим
export PATH=$JAVA_HOME:/usr/local/bin:$PATH
#Перезагрузите файл конфигурации, чтобы он вступил в силу
source /etc/profile
#тест
docker-compose
HarborПодробное руководство---Установить
По умолчанию у вас есть пакет порта.
#декомпрессия
tar -zxvf harbor-offline-installer-v2.5.0-rc4.tgz
cp harbor.yml.tmpl harbor.yml
# Закомментируйте содержимое конфигурации htps. Параметры, связанные с конфигурацией htp, в основном имя хоста, порт, другие можно оставить в покое.
vi harbor.yml
#запускать
./install.sh
Вы можете изменить загрузку в соответствии с вашими потребностями. Kubernetes Версия. Установить KubeSphere v3.1.1 предложения Kubernetes Версии: v1.17.9, v1.18.8, v1.19.8 а также v1.20.4. Если не указано Kubernetes Версия, Кубе Кей будет установлен по умолчанию Kubernetes v1.19.8. О поддерживаемых Kubernetes Дополнительная информация о версии,Видетьопорная матрица。 После запуска скрипта папка будет создана автоматически
kubekey
。пожалуйста Уведомление,Когда вы позже создадите кластер,Этот файл иkk
Должен быть размещен в том же каталоге.
#Файл является исполняемым.
chmod +x offline-installation-tool.sh
# IP:8088->Частный серверный складip+порт
./offline-installation-tool.sh -l images-list.txt -d ./kubesphere-images -r IP:8088/library
#Извлеките и войдите в каталог:
chmod +x kk
#Указываем соответствующую версию (нет необходимости выполнять этот шаг, если в файле kk есть yaml)
./kk create config --with-kubernetes v1.20.4 --with-kubesphere v3.1.1 -f config-sample.yaml
#Редактировать (файл необходимо отредактировать следующим образом Конфигурация)
vi config-sample.yaml
#осуществлять
./kk create cluster -f config-sample.yaml
Теплое напоминание⚠️ Файл config-sample.yaml необходимо настроить следующим образом.
spec.host
s Укажите машины, которые будут включены в кластерspec.roleGroups.etcd spec.roleGroups.maste
r Укажите главный узелspec.roleGroups.worke
r Укажите рабочий узелregistry.insecureRegistrie
s Добавить адрес частного сервера
Появятся адрес доступа, имя пользователя и пароль, и установка пройдет успешно.
шаг:
Рекомендуется установить MySQL извне.
Просмотр управления кластером
Включите компонент журнала и запустите подключаемый компонент.
Репозиторий образов конфигурации
В этой статье используется метод yml для создания самостоятельного приложения.,Различные проекты требуют только
Изменить корпоративное пространство
、Зеркальный склад
а такжеКонфигурация базы данных
Вот и все。Добрые советы:Эта статья основана на существующей базе данных.а Также проектом можно управлять при условии его загрузки на зеркальный склад~
...
Примечание. При сборке продукта независимо от того, было ли имя хранилища адреса источника изображения в файле pom проекта создано в гавани, если нет, при запуске конвейера будет сообщено об ошибке, и вам необходимо создать хранилище самостоятельно.
Успешно. После завершения запуска проверьте журналы всех контейнеров службы, чтобы убедиться, что запуск завершился без ошибок.
немного
Уведомление
1. Измените файл kkConfiguration на главном узле и добавьте новый узел node2Configuration.
2. Выполните команду добавления
./kk add nodes -f Конфигурациядокумент
./kk add nodes -f sample.yaml
3. Просмотр узлов
kubectl get node
./kk delete node <nodeName> -f config-sample.yaml
селектор тегов
1. Тег
#Просмотр текущего узла
$ kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-elasticsearch Ready <none> 16h v1.21.0 172.16.66.167 <none> CentOS Linux 8 4.18.0-305.19.1.el8_4.x86_64 docker://20.10.9
k8s-master Ready control-plane,master 43h v1.21.0 172.16.66.169 <none> CentOS Linux 8 4.18.0-305.19.1.el8_4.x86_64 docker://20.10.9
k8s-node1 Ready <none> 43h v1.21.0 172.16.66.168 <none> CentOS Linux 8 4.18.0-305.19.1.el8_4.x86_64 docker://20.10.9
k8s-node2 Ready <none> 43h v1.21.0 172.16.66.170 <none> CentOS Linux 8 4.18.0-305.19.1.el8_4.x86_64 docker://20.10.9
#Give k8s-node1 k8s-node2 помечен знаком
$ kubectl label nodes k8s-node1 k8s-node2 type=sign
#Просмотр узла с помощью тега type=websvr
$ kubectl get node -l type=websvr
NAME STATUS ROLES AGE VERSION
k8s-node1 Ready <none> 43h v1.21.0
k8s-node2 Ready <none> 43h v1.21.0
#Другие операции со следующими тегами:
#Изменить метку
$ kubectl label nodes k8s-node1 k8s-node2 type=webtest --overwrite
#Просмотр тегов узлов
$ kubectl get nodes k8s-node1 k8s-node2 --show-labels
#удалить тег
$ kubectl label nodes k8s-node1 k8s-node2 type-
2. Вставить селектор
apiVersion: apps/v1
kind: Deployment
metadata:
name: websvr1-deployment
spec:
selector:
matchLabels:
app: websvr1
replicas: 3
template:
metadata:
labels:
app: websvr1
spec:
nodeSelector: #Выберите развертывание узла с типом метки:labels
type: lables
containers:
- name: websvr1
image: websvr:v1
ports:
- containerPort: 3000
Объем хранилища kubesphere является распределенной хранилищем.,Не беспокойтесь о том, что делает нижний слой. Но нам нужно хранить данные в файловой директории текущего сервера.,Можно смонтировать с помощью тома. Конфигурация
# Грубо говоря, Он смонтирован на диске начальство.
apiVersion: v1
kind: Pod
spec:
containers:
- name: test
image: nginx
# Определите том данных, который нужно смонтировать
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
hostPath:
path: /usr/etc/nginx/config
Вышеуказанное будет локальным каталогом (хоста сервера). /usr/etc/nginx/config
висит на контейнере /etc/config
начальство.
мобильная сеть
dnsConfig:
nameservers:
- 114.114.114.114
options:
- name: ndots
value: '2'
- name: edns0
Анализ причин. Как следует из названия, сразу видно, что параметр https не установлен и нет необходимости использовать https. Решение: закомментируйте https в файле конфигурации, просто закомментируйте его.
Анализ причин: Docker не перезапустился после отключения брандмауэра. Решение. Выполните следующую команду, чтобы перезапустить Docker. перезапуск сервисного докера
Анализ причин: взаимодействие с реестром Docker по умолчанию использует HTTPS, но при создании частного образа по умолчанию используется служба HTTP, поэтому при взаимодействии с частным образом возникает следующая ошибка. Решение. Добавьте безопасный процесс в системную службу Docker.
vi /etc/docker/daemon.jsonзаполнятьinsecure-registries
:
{
"registry-mirrors": [
"https://sq9p56f6.mirror.aliyuncs.com"
],
"insecure-registries": ["192.168.239.24:8088"],
"exec-opts":["native.cgroupdriver=systemd"]
}
Анализ причин:проходить
du -h --max-depth=1 /
Проверьте каталог уровень за уровнем и обнаружите, что файл каталога /var/lib/docker слишком велик. Решение. Перенесите данные и измените место хранения Docker по умолчанию. или Получить внешнее хранилище
(1) Перенос данных и изменение места хранения докера по умолчанию.
#Остановить службу докера
systemctl stop docker
#Создаем новый каталог докера и выполняем команду df -h, найти большой диск
mkdir -p /app/docker/lib
#Переносим файлы из каталога /var/lib/docker в /app/docker/lib
rsync -avz /var/lib/docker/ /app/docker/lib/
#Конфигурация /usr/lib/systemd/system/docker.service
vi /usr/lib/systemd/system/docker.service
#Перезапускаем докер
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
(2) Подтвердите, вступила ли в силу модификация корневого каталога Docker.
[root@node24 docker]# docker info
...
Docker Root Dir: /app/docker/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
...
(3) Убедитесь, что предыдущее изображение все еще на месте.
[root@master24 kk]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
perl latest f9596eddf06f 5 months ago 890MB
hello-world latest feb5d9fea6a5 8 months ago 13.3kB
192.168.239.24:8088/library/nginxdemos/hello plain-text 21dd11c8fb7a 8 months ago 22.9MB
nginxdemos/hello plain-text 21dd11c8fb7a 8 months ago 22.9MB
192.168.239.24:8088/library/kubesphere/edge-watcher v0.1.0 f3c1c017ccd5 8 months ago 47.8MB
kubesphere/edge-watcher v0.1.0 f3c1c017ccd5 8 months ago 47.8MB
(4) Убедившись, что с контейнером нет проблем, удалите файлы в каталоге /var/lib/docker/.
rm -rf /var/lib/docker
В докере такого образа нет. Просто вытащите его и отправьте на частный сервер с тегом.
(1) Ситуация 1
Источником докера по умолчанию является официальный зарубежный источник, скорость загрузки низкая, поэтому он заменяется на источник внутреннего зеркала.
vi /etc/docker/daemon.jsonзаполнятьregistry-mirrors
:
{
"registry-mirrors": [
"https://sq9p56f6.mirror.aliyuncs.com" #Это мой собственный зеркальный ускоритель Alibaba Cloud. Вы можете зайти на Alibaba и получить свой собственный.
],
"insecure-registries": ["192.168.239.24:8088"],
"exec-opts":["native.cgroupdriver=systemd"]
}
(2) Ситуация 2
Возникла проблема с портом, из-за которой частный сервер не может подключиться.
(3) Ситуация третья
Возникла проблема с частным сервером Конфигурации в config-sample.yaml, в результате чего соответствующее зеркало не найдено.
Посмотреть журнал
journalctl -xeu kubelet
Посмотреть прогресс
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items0.metadata.name}') -f