Добавлены функции для проверки установки утилит в скрипт generate.sh, обновлены IP-адреса в README.md, изменено удаление файлов в run-stand.sh и обновлен IP-адрес в ippool.yaml.
This commit is contained in:
parent
f005886d19
commit
3b25fe3420
@ -35,16 +35,16 @@ spec:
|
||||
installCRDs: true
|
||||
---
|
||||
|
||||
# apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
# kind: Kustomization
|
||||
# metadata:
|
||||
# name: piraeus-cluster
|
||||
# namespace: flux-system
|
||||
# spec:
|
||||
# interval: 3m
|
||||
# path: talos-k8s-flux/soft/piraeus
|
||||
# prune: true
|
||||
# sourceRef:
|
||||
# kind: GitRepository
|
||||
# name: flux-system
|
||||
# namespace: flux-system
|
||||
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||
kind: Kustomization
|
||||
metadata:
|
||||
name: piraeus-cluster
|
||||
namespace: flux-system
|
||||
spec:
|
||||
interval: 3m
|
||||
path: talos-k8s-flux/soft/piraeus
|
||||
prune: true
|
||||
sourceRef:
|
||||
kind: GitRepository
|
||||
name: flux-system
|
||||
namespace: flux-system
|
||||
|
||||
@ -29,19 +29,15 @@ talosctl machineconfig patch config/controlplane.yaml --patch @cp3.patch --outpu
|
||||
|
||||
talosctl machineconfig patch config/worker.yaml --patch @worker1.patch --output config/worker1.yaml
|
||||
talosctl machineconfig patch config/worker.yaml --patch @worker2.patch --output config/worker2.yaml
|
||||
```
|
||||
|
||||
эту часть делаем мы
|
||||
|
||||
```bash
|
||||
talosctl apply-config --insecure -n 192.168.23.57 --file config/cp1.yaml
|
||||
talosctl bootstrap --nodes 192.168.23.57 --endpoints 192.168.23.57 --talosconfig=config/talosconfig
|
||||
|
||||
# talosctl apply-config --insecure -n 192.168.23.52 --file config/cp2.yaml
|
||||
# talosctl apply-config --insecure -n 192.168.23.53 --file config/cp3.yaml
|
||||
|
||||
talosctl apply-config --insecure -n 192.168.23.59 --file config/worker1.yaml
|
||||
talosctl apply-config --insecure -n 192.168.23.58 --file config/worker2.yaml
|
||||
talosctl apply-config --insecure -n 192.168.23.63 --file config/worker1.yaml
|
||||
talosctl apply-config --insecure -n 192.168.23.64 --file config/worker2.yaml
|
||||
|
||||
talosctl kubeconfig ~/.kube/talos-demo.yaml --nodes 192.168.23.57 --endpoints 192.168.23.57 --talosconfig config/talosconfig
|
||||
```
|
||||
@ -75,8 +71,8 @@ talosctl --talosconfig config/talosconfig apply-config -n 192.168.23.57 --file c
|
||||
# talosctl --talosconfig config/talosconfig apply-config -n 192.168.23.52 --file config/cp2.yaml
|
||||
# talosctl --talosconfig config/talosconfig apply-config -n 192.168.23.53 --file config/cp3.yaml
|
||||
|
||||
talosctl --talosconfig config/talosconfig apply-config -n 192.168.23.58 --file config/worker1.yaml
|
||||
talosctl --talosconfig config/talosconfig apply-config -n 192.168.23.59 --file config/worker2.yaml
|
||||
talosctl --talosconfig config/talosconfig apply-config -n 192.168.23.59 --file config/worker1.yaml
|
||||
talosctl --talosconfig config/talosconfig apply-config -n 192.168.23.58 --file config/worker2.yaml
|
||||
```
|
||||
|
||||
## Re-Apply configs and reboot
|
||||
|
||||
@ -4,4 +4,4 @@ metadata:
|
||||
name: pool
|
||||
spec:
|
||||
blocks:
|
||||
- cidr: 192.168.23.60/32
|
||||
- cidr: 192.168.23.72/32
|
||||
|
||||
@ -23,7 +23,7 @@ cgroup:
|
||||
autoMount:
|
||||
enabled: false
|
||||
hostRoot: /sys/fs/cgroup
|
||||
k8sServiceHost: 192.168.23.57
|
||||
k8sServiceHost: 192.168.23.22
|
||||
k8sServicePort: 6443
|
||||
l2announcements:
|
||||
enabled: true
|
||||
|
||||
@ -8,17 +8,10 @@ CONFIG_DIR="config"
|
||||
# Цвета для вывода
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Helper function for checking uniqueness in an array
|
||||
contains_element () {
|
||||
local e match="$1"
|
||||
shift
|
||||
for e; do [[ "$e" == "$match" ]] && return 0; done
|
||||
return 1
|
||||
}
|
||||
|
||||
# Function for asking yes/no questions
|
||||
# функции ask_yes_no, check_command, detect_os и т.д.
|
||||
ask_yes_no() {
|
||||
local prompt="$1"
|
||||
local default="$2"
|
||||
@ -43,6 +36,161 @@ ask_yes_no() {
|
||||
done
|
||||
}
|
||||
|
||||
# Функция для определения ОС
|
||||
detect_os() {
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
if [[ -f /etc/os-release ]]; then
|
||||
. /etc/os-release
|
||||
echo "$ID"
|
||||
elif [[ -f /etc/redhat-release ]]; then
|
||||
echo "rhel"
|
||||
elif [[ -f /etc/debian_version ]]; then
|
||||
echo "debian"
|
||||
else
|
||||
echo "linux"
|
||||
fi
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
echo "macos"
|
||||
else
|
||||
echo "unknown"
|
||||
fi
|
||||
}
|
||||
|
||||
# Функция для проверки установки утилиты
|
||||
check_command() {
|
||||
local cmd="$1"
|
||||
local name="$2"
|
||||
|
||||
if command -v "$cmd" &> /dev/null; then
|
||||
echo -e "${GREEN}✓ $name установлен${NC}"
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}✗ $name не установлен${NC}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Функция для проверки установки brew (для macOS)
|
||||
check_brew() {
|
||||
if ! command -v brew &> /dev/null; then
|
||||
echo -e "${RED}✗ brew не установлен${NC}"
|
||||
echo -e "${YELLOW}Установите Homebrew командой:/bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"${NC}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Функция для установки talosctl
|
||||
install_talosctl() {
|
||||
local os=$(detect_os)
|
||||
echo -e "\n${YELLOW}Установка talosctl...${NC}"
|
||||
|
||||
case "$os" in
|
||||
"ubuntu"|"debian")
|
||||
echo "Для Ubuntu/Debian:"
|
||||
echo "curl -Lo /usr/local/bin/talosctl https://github.com/siderolabs/talos/releases/latest/download/talosctl-linux-amd64"
|
||||
echo "chmod +x /usr/local/bin/talosctl"
|
||||
;;
|
||||
"rhel"|"centos"|"fedora"|"rocky"|"alma")
|
||||
echo "Для RHEL/CentOS/Fedora:"
|
||||
echo "curl -Lo /usr/local/bin/talosctl https://github.com/siderolabs/talos/releases/latest/download/talosctl-linux-amd64"
|
||||
echo "chmod +x /usr/local/bin/talosctl"
|
||||
;;
|
||||
"macos")
|
||||
check_brew
|
||||
echo "Для macOS:"
|
||||
echo "brew install talosctl"
|
||||
echo "Или вручную:"
|
||||
echo "curl -Lo /usr/local/bin/talosctl https://github.com/siderolabs/talos/releases/latest/download/talosctl-darwin-amd64"
|
||||
echo "chmod +x /usr/local/bin/talosctl"
|
||||
;;
|
||||
*)
|
||||
echo "Скачайте talosctl с https://github.com/siderolabs/talos/releases"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Функция для установки kubectl
|
||||
install_kubectl() {
|
||||
local os=$(detect_os)
|
||||
echo -e "\n${YELLOW}Установка kubectl...${NC}"
|
||||
|
||||
case "$os" in
|
||||
"ubuntu"|"debian")
|
||||
echo "Для Ubuntu/Debian:"
|
||||
echo "sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl"
|
||||
echo "sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg"
|
||||
echo "echo \"deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main\" | sudo tee /etc/apt/sources.list.d/kubernetes.list"
|
||||
echo "sudo apt-get update && sudo apt-get install -y kubectl"
|
||||
;;
|
||||
"rhel"|"centos"|"fedora"|"rocky"|"alma")
|
||||
echo "Для RHEL/CentOS/Fedora:"
|
||||
echo "cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo"
|
||||
echo "[kubernetes]"
|
||||
echo "name=Kubernetes"
|
||||
echo "baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64"
|
||||
echo "enabled=1"
|
||||
echo "gpgcheck=1"
|
||||
echo "repo_gpgcheck=1"
|
||||
echo "gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg"
|
||||
echo "EOF"
|
||||
echo "sudo yum install -y kubectl"
|
||||
;;
|
||||
"macos")
|
||||
check_brew
|
||||
echo "Для macOS:"
|
||||
echo "brew install kubectl"
|
||||
;;
|
||||
*)
|
||||
echo "Скачайте kubectl с https://kubernetes.io/docs/tasks/tools/install-kubectl/"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Проверка необходимых утилит
|
||||
echo -e "${GREEN}--- Проверка необходимых утилит ---${NC}"
|
||||
|
||||
TALOSCTL_INSTALLED=false
|
||||
KUBECTL_INSTALLED=false
|
||||
|
||||
if check_command "talosctl" "talosctl"; then
|
||||
TALOSCTL_INSTALLED=true
|
||||
else
|
||||
if [[ $(ask_yes_no "Установить talosctl автоматически? (y/n) [y]: " "y") == "y" ]]; then
|
||||
install_talosctl
|
||||
else
|
||||
echo -e "${YELLOW}Установка talosctl отменена пользователем. Скрипт завершён.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if check_command "kubectl" "kubectl"; then
|
||||
KUBECTL_INSTALLED=true
|
||||
else
|
||||
if [[ $(ask_yes_no "Установить kubectl автоматически? (y/n) [y]: " "y") == "y" ]]; then
|
||||
install_kubectl
|
||||
else
|
||||
echo -e "${YELLOW}Установка kubectl отменена пользователем. Скрипт завершён.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Если что-то не установлено, предлагаем установить
|
||||
if [[ "$TALOSCTL_INSTALLED" == "false" || "$KUBECTL_INSTALLED" == "false" ]]; then
|
||||
echo -e "\n${YELLOW}Для продолжения необходимо установить недостающие утилиты.${NC}"
|
||||
echo -e "${YELLOW}Выполните команды установки выше, затем запустите скрипт снова.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "\n${GREEN}Все необходимые утилиты установлены!${NC}\n"
|
||||
|
||||
# Helper function for checking uniqueness in an array
|
||||
contains_element () {
|
||||
local e match="$1"
|
||||
shift
|
||||
for e; do [[ "$e" == "$match" ]] && return 0; done
|
||||
return 1
|
||||
}
|
||||
|
||||
echo -e "${GREEN}--- Интерактивный конфигуратор Talos K8s ---${NC}"
|
||||
|
||||
# --- Вопросы пользователю ---
|
||||
@ -283,6 +431,7 @@ if [[ "$USE_DRBD" == "y" ]] && (( WORKER_COUNT == 0 )); then
|
||||
- name: drbd
|
||||
parameters:
|
||||
- usermode_helper=disabled
|
||||
- name: drbd_transport_tcp
|
||||
- name: dm-thin-pool
|
||||
EOF
|
||||
if [[ "$USE_ZFS" == "y" ]]; then
|
||||
@ -431,6 +580,7 @@ done
|
||||
# Генерация патчей для worker-нод
|
||||
if (( WORKER_COUNT > 0 )); then
|
||||
echo -e "\n${GREEN}--- Настройка Worker нод ---${NC}"
|
||||
WORKER_IPS=()
|
||||
for i in $(seq 1 $WORKER_COUNT); do
|
||||
while true; do
|
||||
read -p "Введите IP адрес для worker $i (например, 192.168.23.10${i}): " WORKER_IP
|
||||
@ -443,6 +593,7 @@ if (( WORKER_COUNT > 0 )); then
|
||||
echo -e "${YELLOW}Этот IP адрес уже используется. Введите уникальный адрес.${NC}"
|
||||
else
|
||||
USED_IPS+=("$WORKER_IP")
|
||||
WORKER_IPS+=("$WORKER_IP")
|
||||
break
|
||||
fi
|
||||
done
|
||||
@ -472,7 +623,34 @@ EOF
|
||||
- name: drbd
|
||||
parameters:
|
||||
- usermode_helper=disabled
|
||||
- name: drbd_transport_tcp
|
||||
- name: dm-thin-pool
|
||||
EOF
|
||||
if [[ "$USE_ZFS" == "y" ]]; then
|
||||
cat >> "$FILENAME" << EOF
|
||||
- name: zfs
|
||||
EOF
|
||||
fi
|
||||
if [[ "$USE_SPL" == "y" ]]; then
|
||||
cat >> "$FILENAME" << EOF
|
||||
- name: spl
|
||||
EOF
|
||||
fi
|
||||
if [[ "$USE_VFIO_PCI" == "y" ]]; then
|
||||
cat >> "$FILENAME" << EOF
|
||||
- name: vfio_pci
|
||||
EOF
|
||||
fi
|
||||
if [[ "$USE_VFIO_IOMMU_TYPE1" == "y" ]]; then
|
||||
cat >> "$FILENAME" << EOF
|
||||
- name: vfio_iommu_type1
|
||||
EOF
|
||||
fi
|
||||
if [[ "$USE_OPENVSWITCH" == "y" ]]; then
|
||||
cat >> "$FILENAME" << EOF
|
||||
- name: openvswitch
|
||||
EOF
|
||||
fi
|
||||
fi
|
||||
echo "Создан файл: $FILENAME"
|
||||
done
|
||||
@ -509,8 +687,9 @@ done
|
||||
# Применение патчей к worker-нодам
|
||||
if (( WORKER_COUNT > 0 )); then
|
||||
for i in $(seq 1 $WORKER_COUNT); do
|
||||
talosctl machineconfig patch worker.yaml --patch @worker$i.patch --output worker$i.yaml
|
||||
echo "Создан файл: $CONFIG_DIR/worker$i.yaml"
|
||||
WORKER_IP=${WORKER_IPS[$((i-1))]}
|
||||
talosctl machineconfig patch worker.yaml --patch @worker${i}.patch --output worker${i}.yaml
|
||||
echo "Создан файл: $CONFIG_DIR/worker${i}.yaml"
|
||||
done
|
||||
fi
|
||||
|
||||
@ -554,5 +733,51 @@ else
|
||||
echo -e "${YELLOW}Файл talosconfig не найден${NC}"
|
||||
fi
|
||||
|
||||
# --- Применение конфигов и bootstrap ---
|
||||
echo -e "\n${GREEN}--- Применение конфигов и bootstrap ---${NC}"
|
||||
cd ..
|
||||
|
||||
FIRST_CP_IP=${CP_IPS[0]}
|
||||
FIRST_CP_IP_CLEAN=$(echo "$FIRST_CP_IP" | cut -d'/' -f1)
|
||||
|
||||
read -p "Применить конфиг на первом control-plane ($FIRST_CP_IP_CLEAN)? [Enter для продолжения]"
|
||||
talosctl apply-config --insecure -n $FIRST_CP_IP_CLEAN --file config/cp1.yaml
|
||||
echo -e "${GREEN}Применен конфиг на первом control-plane ($FIRST_CP_IP_CLEAN)${NC}"
|
||||
echo -e "${YELLOW}--------------------------------------------------${NC}"
|
||||
echo -e "${RED} Обязательно дождитесь ребута и предложения в логе о bootstrap ${NC}"
|
||||
echo -e "${YELLOW}--------------------------------------------------${NC}"
|
||||
|
||||
read -p "Выполнить bootstrap на первом control-plane ($FIRST_CP_IP_CLEAN)? [Enter для продолжения]"
|
||||
talosctl bootstrap --nodes $FIRST_CP_IP_CLEAN --endpoints $FIRST_CP_IP_CLEAN --talosconfig=config/talosconfig
|
||||
echo -e "${RED}Выполнен bootstrap на первом control-plane ($FIRST_CP_IP_CLEAN)${NC}"
|
||||
echo "Обазятельно дождитесь полного завершения bootstrap"
|
||||
echo "Остальные ноды можно применять без ожидания"
|
||||
echo -e "${YELLOW}--------------------------------------------------${NC}"
|
||||
|
||||
if (( CP_COUNT > 1 )); then
|
||||
for i in $(seq 2 $CP_COUNT); do
|
||||
CP_IP_CLEAN=$(echo "${CP_IPS[$((i-1))]}" | cut -d'/' -f1)
|
||||
read -p "Применить конфиг на control-plane $i ($CP_IP_CLEAN)? [Enter для продолжения]"
|
||||
talosctl apply-config --insecure -n $CP_IP_CLEAN --file config/cp${i}.yaml
|
||||
done
|
||||
fi
|
||||
|
||||
if (( WORKER_COUNT > 0 )); then
|
||||
for i in $(seq 1 $WORKER_COUNT); do
|
||||
WORKER_IP=${WORKER_IPS[$((i-1))]}
|
||||
read -p "Применить конфиг на worker-$i ($WORKER_IP)? [Enter для продолжения]"
|
||||
talosctl apply-config --insecure -n $WORKER_IP --file config/worker${i}.yaml
|
||||
done
|
||||
fi
|
||||
|
||||
# Выгрузка kubeconfig
|
||||
KUBECONFIG_ENDPOINT=""
|
||||
if [[ "$USE_VIP" == "y" && -n "$VIP_IP" ]]; then
|
||||
KUBECONFIG_ENDPOINT=$VIP_IP
|
||||
else
|
||||
KUBECONFIG_ENDPOINT=$FIRST_CP_IP_CLEAN
|
||||
fi
|
||||
|
||||
talosctl kubeconfig ~/.kube/${CLUSTER_NAME}.yaml --nodes $KUBECONFIG_ENDPOINT --endpoints $KUBECONFIG_ENDPOINT --talosconfig config/talosconfig
|
||||
|
||||
echo "Работа скрипта завершена"
|
||||
|
||||
@ -28,7 +28,7 @@ echo "${VERB} stand"
|
||||
done
|
||||
|
||||
cd config
|
||||
rm talosconfig cp1.yaml cp2.yaml cp3.yaml secrets.yaml controlplane.yaml worker.yaml
|
||||
rm -rf *
|
||||
cd ..
|
||||
exit 0
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user