commit c187b20d237a5f1f7edf02599afd7537d999a2fa Author: wxin <15253413025@163.com> Date: Fri Apr 18 12:23:40 2025 +0800 上传文件至 / diff --git a/kubernetes.sh b/kubernetes.sh new file mode 100644 index 0000000..bab703b --- /dev/null +++ b/kubernetes.sh @@ -0,0 +1,531 @@ +#!/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 + yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo + yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y + ;; + 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 + ;; + 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 + 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 +} + +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) + 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 + + kubeadm init --kubernetes-version=1.23.5 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=$ip + break + done + mkdir -p $HOME/.kube + sudo cp -i /etc/kubernetes/admin.conf + sudo chown $(id -u):$(id -g) $HOME/.kube/config + export KUBECONFIG=/etc/kubernetes/admin.conf + kubectl apply -f kube-flannel-2402.yml + ;; + 7) + + ;; + 8) + echo "退出成功!" + exit + ;; + *) + echo "无效的选择,请重新输入!" + ;; + esac +done