上传文件至 脚本

This commit is contained in:
wxin 2025-04-22 10:00:14 +08:00
parent 20d92ca798
commit c810f4e7af

663
脚本/kubernetes.sh Normal file
View File

@ -0,0 +1,663 @@
#!/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