以下是一个完整的 Shell 脚本,可以一键安装单节点 Kubernetes 集群。脚本包含系统初始化、Containerd 安装、Kubernetes 组件安装和集群初始化等步骤。
#!/bin/bash
# 单节点Kubernetes集群一键安装脚本
# 适用于CentOS 7/8或Ubuntu 20.04+系统
# 支持Kubernetes v1.27.3版本
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查命令执行状态
check_status() {
if [ $? -ne 0 ]; then
log_error "$1 失败"
exit 1
else
log_info "$1 成功"
fi
}
# 检查是否为root用户
check_root() {
if [ "$(id -u)" -ne 0 ]; then
log_error "请使用root用户执行此脚本"
exit 1
fi
}
# 系统初始化
system_init() {
log_info "开始系统初始化..."
# 关闭防火墙
if command -v systemctl &>/dev/null; then
if [ -f /etc/redhat-release ]; then
systemctl disable --now firewalld
elif [ -f /etc/debian_version ]; then
if command -v ufw &>/dev/null; then
ufw disable
fi
fi
fi
# 关闭SELinux
if [ -f /etc/selinux/config ]; then
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
fi
# 关闭Swap
swapoff -a
sed -i '/swap/d' /etc/fstab
# 设置主机名
hostnamectl set-hostname k8s-single
# 配置hosts文件
cat > /etc/hosts <<EOF
127.0.0.1 localhost localhost.localdomain
$(hostname -I | awk '{print $1}') k8s-single
EOF
# 加载内核模块
cat > /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
# 配置系统参数
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
log_info "系统初始化完成"
}
# 安装Containerd
install_containerd() {
log_info "开始安装Containerd..."
if [ -f /etc/redhat-release ]; then
# CentOS/RHEL
cat > /etc/yum.repos.d/docker.repo <<EOF
[docker-ce-stable]
name=Docker CE Stable - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/\$releasever/\$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF
yum install -y containerd.io
elif [ -f /etc/debian_version ]; then
# Ubuntu
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y containerd.io
else
log_error "不支持的操作系统"
exit 1
fi
# 配置Containerd
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# 修改配置
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
sed -i 's|registry.k8s.io|registry.aliyuncs.com/google_containers|g' /etc/containerd/config.toml
# 重启Containerd
systemctl restart containerd
systemctl enable containerd
log_info "Containerd安装完成"
}
# 安装Kubernetes组件
install_kubernetes() {
log_info "开始安装Kubernetes组件..."
if [ -f /etc/redhat-release ]; then
# CentOS/RHEL
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[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
EOF
yum install -y kubelet-1.27.3 kubeadm-1.27.3 kubectl-1.27.3
systemctl enable --now kubelet
elif [ -f /etc/debian_version ]; then
# Ubuntu
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.27/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.27/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list > /dev/null
apt-get update
apt-get install -y kubelet=1.27.3-1.1 kubeadm=1.27.3-1.1 kubectl=1.27.3-1.1
systemctl enable --now kubelet
else
log_error "不支持的操作系统"
exit 1
fi
log_info "Kubernetes组件安装完成"
}
# 初始化Kubernetes集群
init_kubernetes_cluster() {
log_info "开始初始化Kubernetes集群..."
# 创建kubeadm配置文件
cat > kubeadm-config.yaml <<EOF
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: $(hostname -I | awk '{print $1}')
bindPort: 6443
nodeRegistration:
criSocket: unix:///var/run/containerd/containerd.sock
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.27.3
controlPlaneEndpoint: "k8s-single:6443"
networking:
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
imageRepository: registry.aliyuncs.com/google_containers
EOF
# 执行初始化
kubeadm init --config=kubeadm-config.yaml --upload-certs
check_status "Kubernetes集群初始化"
# 配置kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
# 安装网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
check_status "网络插件安装"
# 允许Master节点运行Pod
kubectl taint nodes --all node-role.kubernetes.io/control-plane- node-role.kubernetes.io/master-
check_status "Master节点配置"
log_info "Kubernetes集群初始化完成"
}
# 验证安装
verify_installation() {
log_info "开始验证Kubernetes安装..."
# 等待集群组件启动
log_info "等待集群组件启动..."
sleep 30
# 检查节点状态
log_info "检查节点状态:"
kubectl get nodes
# 检查Pod状态
log_info "检查系统Pod状态:"
kubectl get pods --all-namespaces
log_info "Kubernetes验证完成"
}
# 主函数
main() {
check_root
log_info "开始Kubernetes单节点集群安装..."
system_init
install_containerd
install_kubernetes
init_kubernetes_cluster
verify_installation
log_info "====================================================================="
log_info "Kubernetes单节点集群安装完成!"
log_info "你可以使用以下命令查看集群状态:"
log_info " kubectl get nodes"
log_info " kubectl get pods --all-namespaces"
log_info "====================================================================="
}
# 执行主函数
main最后
以上就是热心网友最近收集整理的关于服务器安装k8s的shell完整脚本的全部内容,更多相关服务器安装k8s内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复