跳到主要内容

Linux

2024年07月29日
柏拉文
越努力,越幸运

一、Yum


1.1 认识

通过 Yum 安装 kubeadmkubeletkubectl

  • 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. 添加 Kubernetesyum 仓库。: 在仓库定义中的 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. 安装 kubeletkubeadmkubectl,并启用 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 服务

参考资料


安装 kubeadm