diff --git a/kubernetes.sh b/kubernetes.sh deleted file mode 100644 index 4f42f1f..0000000 --- a/kubernetes.sh +++ /dev/null @@ -1,663 +0,0 @@ -#!/bin/bash -menu() { -echo "=========================" -echo "= 菜单 =" -echo "=========================" -echo "= 1. 主机名解析 =" -echo "= 2. 环境配置 =" -echo "= 3. 安装docker =" -echo "= 4. 安装kubernetes =" -echo "= 5. 导入镜像 =" -echo "= 6. master节点 =" -echo "= 7. node节点 =" -echo "= 8. 退出 =" -echo "=========================" -} - -menu_first() { -echo "=========================" -echo "= 主机解析 =" -echo "=========================" -echo "= 1. 查看主机名 =" -echo "= 2. 设置主机名 =" -echo "= 3. 查看解析文件 =" -echo "= 4. 主机解析 =" -echo "= 5. 删除特定行 =" -echo "= 6. 退出 =" -echo "=========================" -} - -first_option() { -while true; do - menu_first - read -p "请输入选项:" i - case $i in - 1) - host=`hostname` - echo "主机名为 $host" - ;; - 2) - read -p "输入主机名:" host - hostnamectl set-hostname $host - if [ $? -eq 0 ]; then - echo "设置主机名成功!" - new_host=`hostname` - echo "主机名为 $new_host" - else - echo "设置主机名失败!" - fi - ;; - 3) - cat /etc/hosts - echo - ;; - 4) - while true; do - read -p "输入格式:IP 主机名(输入e退出):" host - if [[ $host == "e" ]]; then - echo "退出成功!" - break - fi - - arr=($host) - - if [[ ${#arr[@]} -ne 2 ]]; then - echo "输入格式不符合,必须包含IP和主机名。" - continue - fi - - ip="${arr[0]}" - hostname="${arr[1]}" - - ip_regex='^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$' - if [[ ! $ip =~ $ip_regex ]]; then - echo "IP地址格式无效" - continue - fi - - hostname_regex='^[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$' - if [[ ! $hostname =~ $hostname_regex ]]; then - echo "主机名格式无效(允许字母、数字、连字符,不以连字符开头/结尾,最长63字符)。" - continue - fi - - echo "$ip $hostname" >> /etc/hosts - echo "添加成功:$ip $hostname" - done - ;; - 5) - read -p "输入要删除的主机解析:" host - escaped_host=$(sed -e 's/[][\.^*$]/\\&/g' <<< "$host") - - if grep -q "$escaped_host" /etc/hosts; then - sed -i "/$escaped_host/d" /etc/hosts - echo "删除成功!" - else - echo "未找到匹配的主机解析!" - fi - ;; - 6) - break - ;; - *) - echo "无效的选项,请重新输入!" - ;; - esac -done -} - -menu_second() { -echo "=========================" -echo "= 环境配置 =" -echo "=========================" -echo "= 1. 查看firewalld状态 =" -echo "= 2. 启动firewalld =" -echo "= 3. 关闭firewalld =" -echo "= 4. 开机启动firewalld =" -echo "= 5. 开机关闭firewalld =" -echo "= 6. 查看selinux状态 =" -echo "= 7. 开启selinux =" -echo "= 8. 关闭selinux =" -echo "= 9. 开机启动selinux =" -echo "= 10. 开机关闭selinux =" -echo "= 11. 禁用swap分区 =" -echo "= 12. 开机禁用swap分区 =" -echo "= 13. 加载内核 =" -echo "= 14. 退出 =" -echo "=========================" -} - -second_option() { -while true; do - menu_second - read -p "请选择选项:" i - case $i in - 1) - status=$(systemctl is-active firewalld) - enabled=$(systemctl is-enabled firewalld) - - if [ "$status" == "active" ]; then - echo "firewalld 当前状态:已启动!" - else - echo "firewalld 当前状态:未启动!" - fi - - if [ "$enabled" == "enabled" ]; then - echo "firewalld 是否开机启动:是" - else - echo "firewalld 是否开机启动:否" - fi - ;; - 2) - systemctl start firewalld - if [ $? -eq 0 ]; then - echo "启动成功!" - else - echo "启动失败!" - fi - ;; - 3) - systemctl stop firewalld - if [ $? -eq 0 ]; then - echo "关闭成功!" - else - echo "关闭失败!" - fi - ;; - 4) - systemctl enable firewalld - if [ $? -eq 0 ]; then - echo "永久启动成功!" - else - echo "永久启动失败!" - fi - ;; - 5) - systemctl disable firewalld - if [ $? -eq 0 ]; then - echo "永久关闭成功!" - else - echo "永久关闭失败!" - fi - ;; - 6) - state=`getenforce` - if [[ $state == "Enforcing" ]]; then - echo "selinux的状态为已启动!" - else - echo "selinux的状态为已关闭!" - fi - ;; - 7) - setenforce 1 - if [ $? -eq 0 ]; then - echo "selinux启动成功!" - else - echo "selinux启动失败!需要重启才能启动" - fi - ;; - 8) - setenforce 0 - if [ $? -eq 0]; then - echo "selinux关闭成功!" - else - echo "selinux关闭失败!" - fi - ;; - 9) - sed -i '/^SELINUX=/c SELINUX=enforcing/' /etc/selinux/config - if [ $? -eq 0]; then - echo "永久启动selinux成功!" - else - echo "永久启动selinux失败!" - fi - ;; - 10) - sed -i '/^SELINUX=/c SELINUX=disabled/' /etc/selinux/config - if [ $? -eq 0 ]; then - echo "永久关闭selinux成功!" - else - echo "永久关闭selinux失败!" - fi - ;; - 11) - swapoff -a - if [ $? -eq 0 ]; then - echo "禁用swap分区成功!" - else - echo "禁用swap分区失败!" - fi - ;; - 12) - sed -i 's/.*swap.*/#&/' /etc/fstab - if [ $? -eq 0 ]; then - echo "永久禁用swap分区成功!" - else - echo "永久禁用swap分区失败!" - fi - ;; - 13) - modprobe br_netfilter - echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf - echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf - echo "vm.swappiness=0" >> /etc/sysctl.conf - echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf - - sysctl -p - ;; - 14) - echo "退出成功!" - break - ;; - *) - echo "无效的选择,请重新输入!" - ;; - - esac -done - -} - -menu_third() { -echo "=========================" -echo "= docker管理 =" -echo "=========================" -echo "= 1. 安装docker =" -echo "= 2. 配置容器加速 =" -echo "= 3. 启动docker =" -echo "= 4. 关闭docker =" -echo "= 5. 开机启动docker =" -echo "= 6. 开机关闭docker =" -echo "= 7. 重启docker =" -echo "= 8. 清空 =" -echo "= 9. 退出 =" -echo "=========================" -} - -third_option(){ -while true; do - menu_third - read -p "请选择选项:" i - case $i in - 1) - yum install -y yum-utils >/dev/null - yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo >/dev/null - yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y >/dev/null - ;; - 2) - echo '{ - "max-concurrent-downloads": 10, - "max-concurrent-uploads": 5, - "default-shm-size": "1G", - "debug": true, - "experimental": false, - "registry-mirrors": [ - "https://x9r52uz5.mirror.aliyuncs.com", - "https://dockerhub.icu", - "https://docker.chenby.cn", - "https://docker.1panel.live", - "https://docker.awsl9527.cn", - "https://docker.anyhub.us.kg", - "https://dhub.kubesre.xyz" - ] -}' > /etc/docker/daemon.json - systemctl daemon-reload - ;; - 3) - systemctl start docker - if [ $? -eq 0 ]; then - echo "启动docker成功!" - else - echo "启动docker失败!" - fi - ;; - 4) - systemctl stop docker - if [ $? -eq 0 ]; then - echo "关闭docker成功!" - else - echo "关闭docker失败!" - fi - ;; - 5) - systemctl enable docker &> /dev/null - if [ $? -eq 0 ]; then - echo "开机启动docker成功!" - else - echo "开机启动docker失败!" - fi - ;; - 6) - systemctl disable docker &> /dev/null - if [ $? -eq 0 ]; then - echo "开机关闭docker成功!" - else - echo "开机关闭docker失败!" - fi - ;; - 7) - systemctl restart docker - if [ $? -eq 0 ]; then - echo "docker重启成功!" - else - echo "docker重启失败" - fi - ;; - 8) - clear - ;; - 9) - echo "退出成功!" - break - ;; - *) - echo "无效的选择,请重新输入!" - ;; - esac -done -} - -menu_fourth() { -echo "=========================" -echo "= kubernetes 安装 =" -echo "=========================" -echo "= 1. 配置yum仓库 =" -echo "= 2. 安装 =" -echo "= 3. 配置cgroups =" -echo "= 4. 开机启动 =" -echo "= 5. 清空 =" -echo "= 6. 退出 =" -echo "=========================" -} - -fourth_option() { -while true; do - menu_fourth - read -p "请选择选项:" i - case $i in - 1) -echo "[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" > /etc/yum.repos.d/kubernetes.repo - ;; - 2) - yum -y install kubeadm-1.23.5 kubelet-1.23.5 kubectl-1.23.5 ipvsadm >/dev/null - ;; - 3) - echo 'KUBELET_EXTRA_ARGS="--cgroup-driver=cgroupfs --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1"' > /etc/sysconfig/kubelet - ;; - 4) - systemctl enable kubelet &> /dev/null - if [ $? -eq 0 ]; then - echo "开机启动成功!" - else - echo "开机启动失败!" - fi - ;; - 5) - clear - ;; - 6) - echo "推出成功!" - break - ;; - *) - echo "无效的选择,请重新输入!" - ;; - esac -done -} - -menu_fifth() { -echo "=========================" -echo "= 镜像导入 =" -echo "=========================" -echo "= 1. 导入镜像文件 =" -echo "= 2. 加载镜像 =" -echo "= 3. 查看镜像 =" -echo "= 4. 清空 =" -echo "= 5. 退出 =" -echo "=========================" -} - -fifth_option() { -while true; do - menu_fifth - read -p "请选择选项:" i - case $i in - 1) - yum -y install lrzsz - mkdir /mnt/docker-image && cd /mnt/docker-image - pwd - rz - ;; - 2) - tar_dir="/mnt/docker-image" - tar_files=("$tar_dir"/*.tar) - - if [ ${#tar_files[@]} -eq 0 ]; then - echo "在 $tar_dir 中未找到任何.tar文件" - exit 0 - fi - - ERRORS=0 - for file in "${tar_files[@]}"; do - docker load < $file >/dev/null - if [ $? -eq 0 ]; then - echo "加载 $file 镜像成功!" - else - echo "加载 $file 镜像失败!" - ((ERRORS++)) - fi - done - - if [ $ERRORS -ne 0 ]; then - echo "警告:有 $ERRORS 个文件加载失败" >&2 - else - echo "所有镜像已成功加载" - fi - ;; - 3) - docker images - ;; - 4) - clear - ;; - 5) - echo "推出成功!" - break - ;; - *) - echo "无效的选择,请重新输入!" - ;; - esac -done -} - -menu_sixth() { -echo "=========================" -echo "= master节点管理 =" -echo "=========================" -echo "= 1. 初始化 =" -echo "= 2. 查看集群状态 =" -echo "= 3. 清空 =" -echo "= 4. 退出 =" -echo "=========================" -} - -sixth_option() { -while true; do - menu_sixth - read -p "请选择选项:" i - case $i in - 1) - while true; do - read -p "输入master的ip地址:" ip - - ip_regex='^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$' - - if [[ ! $ip =~ $ip_regex ]]; then - echo "IP地址格式无效" - continue - fi - - mkdir /mnt/master - - kubeadm init --kubernetes-version=1.23.5 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=$ip > /mnt/master/init_info 2>> /mnt/master/error_info - - if [ $? -eq 0 ]; then - echo "初始化成功!" - mkdir -p $HOME/.kube - sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config - sudo chown $(id -u):$(id -g) $HOME/.kube/config - export KUBECONFIG=/etc/kubernetes/admin.conf - kubectl apply -f /mnt/docker-image/kube-flannel-2402.yml > /mnt/master/flannel_info - else - echo "初始化失败!" - fi - - break - done - - ;; - 2) - kubectl get nodes - ;; - 3) - clear - ;; - 4) - echo "退出成功!" - break - ;; - *) - echo "无效的选择,请重新输入!" - ;; - esac -done -} - -menu_seventh() { -echo "=========================" -echo "= node节点管理 =" -echo "=========================" -echo "= 1. 获取初始化信息文件 =" -echo "= 2. 加入集群 =" -echo "= 3. 清空 =" -echo "= 4. 退出 " -echo "=========================" -} - -seventh_option() { -while true; do - menu_seventh - read -p "请选择选项:" i - case $i in - 1) - rpm -q expect &> /dev/null - - if [ $? -ne 0 ]; then - yum -y install expect tcl tclx tcl-devel &> /dev/null - fi - - while true; do - read -p "输入master的ip地址:" ip - - ip_regex='^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$' - - if [[ ! $ip =~ $ip_regex ]]; then - echo "IP地址格式无效" - continue - else - break - fi - done - - stty -echo - read -p "输入密码:" password - stty echo - echo - - /usr/bin/expect <<-EOF >/dev/null 2>&1 - set timeout 10 - log_user 0 - spawn scp $ip:/mnt/master/init_info /mnt/ - expect { - "yes/no" { send "yes\n"; exp_continue } - "password:" {send "$password\n"} - } - expect eof - EOF - - if [ $? -eq 0 ]; then - echo "输出成功!" - else - echo "输出失败!" - fi - ;; - 2) - file="/mnt/init_info" - ip=`awk '/kubeadm join/ {print $3}' $file` - token=$(grep -oP -- '--token \K\S+' "$file") - cert_hash=$(grep -oP -- '--discovery-token-ca-cert-hash \K\S+' "$file") - - kubeadm join $ip --token $token --discovery-token-ca-cert-hash $cert_hash >/dev/null - - if [ $? -eq 0 ]; then - echo "加入集群成功!" - else - echo "加入集群失败!" - fi - ;; - 3) - clear - ;; - 4) - echo "退出成功!" - break - ;; - *) - echo "无效的选择,请重新输入!" - ;; - esac -done -} - -while true; do - menu - read -p "请选择选项:" i - case $i in - 1) - first_option - ;; - 2) - second_option - ;; - 3) - third_option - ;; - 4) - fourth_option - ;; - 5) - fifth_option - ;; - 6) - sixth_option - ;; - 7) - seventh_option - ;; - 8) - echo "退出成功!" - exit - ;; - *) - echo "无效的选择,请重新输入!" - ;; - esac -done