Linux
2024年07月29日
一、Yum
1.1 认识
通过 Yum
安装 kubeadm
、kubelet
、kubectl
-
kubeadm
: 用来初始化集群的指令 -
kubelet
: 在集群中的每个节点上用来启动Pod
和容器等 -
kubectl
: 用来与集群通信的命令行工具
1.2 步骤
1. 将 SELinux
设置为 permissive
模式
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
2. 添加 Kubernetes
的 yum
仓库。: 在仓库定义中的 exclude
参数确保了与 Kubernetes
相关的软件包在运行 yum update
时不会升级,因为升级 Kubernetes
需要遵循特定的过程。请注意,此仓库仅包含适用于 Kubernetes 1.30
的软件包; 对于其他 Kubernetes
次要版本,则需要更改 URL
中的 Kubernetes
次要版本以匹配你所需的次要版本 (你还应该检查正在阅读的安装文档是否为你计划安装的 Kubernetes
版本的文档)。
# 此操作会覆盖 /etc/yum.repos.d/kubernetes.repo 中现存的所有配置
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
3. 安装 kubelet
、kubeadm
和 kubectl
,并启用 kubelet
以确保它在启动时自动启动:
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
1.3 脚本
1. 将以上步骤沉淀为脚本,实现安装自动化, 命名为 install_kubernetes.sh
#!/bin/bash
# 函数:处理错误
handle_error() {
echo "Error: $1"
exit 1
}
# 函数:检查是否以 root 用户运行
check_root() {
if [ "$(id -u)" -ne 0 ]; then
echo "This script must be run as root. Exiting."
exit 1
fi
}
# 函数:检查并删除旧的 Kubernetes 仓库配置
remove_old_repo() {
echo "Removing existing Kubernetes yum repository configuration (if any)..."
if [ -f /etc/yum.repos.d/kubernetes.repo ]; then
sudo rm -f /etc/yum.repos.d/kubernetes.repo || handle_error "Failed to remove old Kubernetes repo file"
fi
}
# 函数:检查并删除旧的软件包
remove_old_packages() {
echo "Removing existing kubelet, kubeadm, and kubectl (if any)..."
if rpm -q kubelet kubeadm kubectl >/dev/null 2>&1; then
sudo yum remove -y kubelet kubeadm kubectl || handle_error "Failed to remove existing kubelet, kubeadm, and kubectl"
fi
}
# 函数:添加 Kubernetes 的 yum 仓库
add_kubernetes_repo() {
echo "Adding Kubernetes yum repository..."
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
echo "Kubernetes yum repository added"
}
# 函数:更新 yum 缓存
update_yum_cache() {
echo "Updating yum cache..."
sudo yum makecache -y || handle_error "Failed to update yum cache"
}
# 函数:安装 kubelet、kubeadm 和 kubectl
install_kubernetes_components() {
echo "Installing kubelet, kubeadm, and kubectl..."
sudo yum install -y --allowerasing kubelet kubeadm kubectl --disableexcludes=kubernetes || handle_error "Failed to install kubelet, kubeadm, and kubectl"
echo "kubelet, kubeadm, and kubectl installed"
}
# 函数:设置为开机启动 kubelet
start_kubelet() {
echo "Enabling and starting kubelet service..."
systemctl daemon-reload
systemctl enable kubelet && systemctl restart kubelet || handle_error "Failed to enable and start kubelet service"
}
# 函数:验证 kubelet 服务状态
verify_kubelet() {
if systemctl is-active --quiet kubelet; then
echo "kubelet service is running"
else
handle_error "kubelet service is not running"
fi
}
# 函数:输出 kubectl 和 kubeadm 版本
verify_kubectl_version() {
echo "Verifying kubectl adn kubeadm version..."
yum info kubeadm || handle_error "Failed to get kubeadm version"
kubectl version --client || handle_error "Failed to get kubectl version"
}
# 主程序
# 检查是否以 root 用户运行
check_root
# 将 SELinux 设置为 permissive 模式
echo "Setting SELinux to permissive mode..."
current_selinux_status=$(sestatus | grep "Current mode:" | awk '{print $3}')
if [ "$current_selinux_status" != "permissive" ]; then
sudo setenforce 0 || handle_error "Failed to set SELinux to permissive mode"
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config || handle_error "Failed to update /etc/selinux/config"
echo "SELinux set to permissive mode"
else
echo "SELinux is already in permissive mode"
fi
# 删除旧的 Kubernetes 仓库配置
remove_old_repo
# 添加 Kubernetes 的 yum 仓库
add_kubernetes_repo
# 更新 yum 缓存
update_yum_cache
# 删除旧的软件包
remove_old_packages
# 安装 kubelet、kubeadm 和 kubectl
install_kubernetes_components
# 启用并启动 kubelet 服务
start_kubelet
# 验证 kubelet 服务状态
verify_kubelet
# 输出 kubectl 版本
verify_kubectl_version
echo "Installation completed! The kubelet service is now running."
2. 发送 install_kubernetes.sh
脚本(可选)
scp install_kubernetes.sh root@192.168.105.132:/root
3. 赋予脚本执行权限
chmod +x install_kubernetes.sh
4. 运行脚本
sudo ./install_kubernetes.sh
5. 检查 kubectl
服务状态
kubectl config view // 查看当前配置
kubectl cluster-info // 检查与集群的连接
kubectl version --client // 查看 kubectl 版本
kubectl get nodes // 查看集群中各个节点的状态
kubectl get pods --all-namespaces // 查看集群中所有 Pod 的状态
kubeadm version // 查看 kubeadm 版本
kubelet --version // 查看 kubelet 版本
sudo systemctl status kubelet // 查看 kubelet 服务状态
sudo systemctl start kubelet // 启动 kubelet 服务
sudo systemctl restart kubelet // 重启 kubelet 服务
sudo systemctl stop kubelet // 停止 kubelet 服务
sudo systemctl enable kubelet // 系统重启时自动启动 kubelet 服务