diff --git a/talos-k8s-flux/clusters/t8s-demo/install/piraeus.yaml b/talos-k8s-flux/clusters/t8s-demo/install/piraeus.yaml index 62b8346..5970b19 100644 --- a/talos-k8s-flux/clusters/t8s-demo/install/piraeus.yaml +++ b/talos-k8s-flux/clusters/t8s-demo/install/piraeus.yaml @@ -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 diff --git a/talos-k8s/README.md b/talos-k8s/README.md index cf6554a..adffcf3 100644 --- a/talos-k8s/README.md +++ b/talos-k8s/README.md @@ -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 diff --git a/talos-k8s/cilium/ippool.yaml b/talos-k8s/cilium/ippool.yaml index 0dbafe6..247447f 100644 --- a/talos-k8s/cilium/ippool.yaml +++ b/talos-k8s/cilium/ippool.yaml @@ -4,4 +4,4 @@ metadata: name: pool spec: blocks: - - cidr: 192.168.23.60/32 + - cidr: 192.168.23.72/32 diff --git a/talos-k8s/cilium/values.yaml b/talos-k8s/cilium/values.yaml index 06fc2bb..48d8f8a 100644 --- a/talos-k8s/cilium/values.yaml +++ b/talos-k8s/cilium/values.yaml @@ -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 diff --git a/talos-k8s/generate.sh b/talos-k8s/generate.sh index ba2bed3..7b3aef7 100755 --- a/talos-k8s/generate.sh +++ b/talos-k8s/generate.sh @@ -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 < 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 "Работа скрипта завершена" diff --git a/talos-k8s/run-stand.sh b/talos-k8s/run-stand.sh index b0ec75a..6f8d735 100755 --- a/talos-k8s/run-stand.sh +++ b/talos-k8s/run-stand.sh @@ -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 }