温馨提示×

如何在Linux服务器安装Kubernetes

小樊
52
2025-11-08 19:19:50
栏目: 云计算

如何在Linux服务器安装Kubernetes

1. 准备工作

  • 系统要求:选择Ubuntu 22.04+、CentOS 7/8或RHEL 8+等主流Linux发行版;每节点至少2核CPU、2GB内存、20GB磁盘空间;所有节点需联网且能互相通信(主机名解析可通过/etc/hosts配置)。
  • 关键配置
    • 关闭Swap分区(Kubernetes要求):执行sudo swapoff -a临时关闭,编辑/etc/fstab注释掉swap行永久生效。
    • 关闭防火墙(或放行Kubernetes端口):Ubuntu执行sudo ufw disable;CentOS执行sudo systemctl stop firewalld && sudo systemctl disable firewalld
    • 禁用SELinux(CentOS/RHEL):执行sudo sed -i 's/enforcing/disabled/g' /etc/selinux/config并重启系统。

2. 安装容器运行时(Containerd推荐)

容器运行时是Kubernetes管理容器的基础,推荐使用Containerd(原生支持Kubernetes)。

  • Ubuntu/Debian
    sudo apt update && sudo apt install -y containerd
    sudo mkdir -p /etc/containerd
    sudo containerd config default | sudo tee /etc/containerd/config.toml  # 生成默认配置
    sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml  # 启用Systemd cgroup(Kubernetes要求)
    sudo systemctl restart containerd && sudo systemctl enable containerd
    
  • CentOS/RHEL
    sudo yum install -y yum-utils
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    sudo yum install -y containerd.io
    sudo systemctl enable containerd && sudo systemctl start containerd
    

注:若使用Docker,可通过sudo apt install -y docker.io(Ubuntu)或sudo yum install -y docker(CentOS)安装,但Containerd性能更优且更轻量。

3. 安装Kubernetes核心组件(kubelet、kubeadm、kubectl)

这三个组件是Kubernetes集群的核心:

  • Ubuntu/Debian
    sudo apt update && sudo apt install -y apt-transport-https curl
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    sudo apt update
    sudo apt install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl  # 防止自动升级(避免版本冲突)
    
  • CentOS/RHEL
    cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    sudo yum install -y kubelet kubeadm kubectl
    sudo systemctl enable kubelet && sudo systemctl start kubelet
    

注:kubeadm用于初始化集群,kubelet运行在每个节点上,kubectl用于管理集群。

4. 初始化Master节点

在Master节点上执行以下命令,初始化Kubernetes控制平面:

sudo kubeadm init \
  --apiserver-advertise-address=<Master节点IP> \  # 替换为Master节点实际IP
  --pod-network-cidr=10.244.0.0/16 \             # 指定Pod网络CIDR(需与后续网络插件匹配)
  --image-repository registry.aliyuncs.com/google_containers  # 使用国内镜像加速(可选)
  • 输出说明:初始化成功后,会显示kubeadm join命令(包含token和CA证书哈希),需保存备用(用于Worker节点加入集群)。
  • 配置kubectl
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    执行kubectl get nodes,此时Master节点状态应为NotReady(需等待网络插件安装)。

5. 安装网络插件(Flannel推荐)

Kubernetes需要网络插件实现Pod间通信,常用Flannel(轻量、易部署):

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

安装完成后,执行kubectl get pods -n kube-system,等待所有网络插件Pod状态变为Running(通常需要1-2分钟)。

6. 加入Worker节点

在Worker节点上执行Master节点生成的kubeadm join命令(替换其中的<Master_IP><token><sha256_hash>):

sudo kubeadm join <Master_IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

若忘记命令,可在Master节点重新生成:

kubeadm token create --print-join-command

执行后,Worker节点会自动加入集群,回到Master节点执行kubectl get nodes,若Worker节点状态变为Ready,则说明集群搭建成功。

7. 验证集群状态

  • 查看节点状态:kubectl get nodes(所有节点应为Ready)。
  • 查看Pod状态:kubectl get pods --all-namespaces(核心组件如kube-apiserverkube-controller-manager等应为Running)。
  • 测试部署:部署一个Nginx测试应用,验证集群功能:
    kubectl create deployment nginx --image=nginx
    kubectl expose deployment nginx --port=80 --type=NodePort
    kubectl get svc nginx  # 查看NodePort端口(如30080)
    
    在浏览器访问<Master_IP>:<NodePort>,若看到Nginx欢迎页面,则说明集群正常运行。

注意事项

  • 生产环境建议使用高可用集群(多Master节点)和更稳定的网络插件(如Calico)。
  • 若使用Docker,需确保其版本与Kubernetes兼容(可通过kubeadm config images list查看所需镜像)。
  • 遇到问题可参考Kubernetes官方文档或社区论坛(如Stack Overflow)。

0