文档首页> 云计算> 教你如何搭建K8S集群。

教你如何搭建K8S集群。

发布时间:2024-09-04 07:08       

搭建Kubernetes(K8S)集群涉及多个步骤和组件的配置,是一个需要严谨执行的过程。以下是一份详细的Kubernetes集群搭建指南,旨在帮助你理解每一个步骤,并顺利完成集群的部署。

一、准备环境

  1. 服务器节点准备你需要至少两台运行Linux操作系统的服务器节点,这些节点可以是物理服务器或虚拟机。建议配置如下:

    • 主节点(Master Node):负责集群管理、调度、API访问等任务。
    • 工作节点(Worker Node):用于运行实际的应用容器。

    要求:

    • 所有节点需要能够通过内网互相访问。
    • 确保节点之间的时间同步,以免引发潜在的集群通信问题。
  2. 节点系统配置确保所有节点满足以下要求:

    • 禁用Swap:

      sudo swapoff -a
      

      解释:Kubernetes需要禁用Swap以确保稳定的内存管理,因为Swap可能导致Kubelet的不稳定。

    • 配置主机名:

      sudo hostnamectl set-hostname <hostname>
      

      解释:为每个节点设置一个唯一的主机名,便于后续管理和识别。

    • 更新系统:

      sudo apt-get update && sudo apt-get upgrade -y
      

      解释:
      确保系统软件包为最新,以避免由于旧版本软件包导致的兼容性问题。

二、安装Docker

  1. 安装Docker引擎Kubernetes依赖Docker来管理和运行容器,因此在每个节点上安装Docker是必不可少的。

    Ubuntu/Debian:

    sudo apt-get install -y docker.io
    

    CentOS:

    sudo yum install -y docker
    sudo systemctl start docker
    sudo systemctl enable docker
    

    解释:这些命令在不同的Linux发行版上安装Docker,并启动Docker服务,确保在系统重启后Docker仍自动启动。

  2. 配置Docker
    配置Docker以适应Kubernetes的要求:

    sudo mkdir /etc/docker
    cat <<EOF | sudo tee /etc/docker/daemon.json
    {
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "100m"
      },
      "storage-driver": "overlay2"
    }
    EOF
    sudo systemctl restart docker
    

    解释:
    以上配置将Docker的cgroup驱动设置为 systemd,这是Kubernetes推荐的配置,以便与Kubelet一致。配置还调整了日志驱动和存储驱动,以优化容器的运行性能和日志管理。

三、安装Kubernetes组件

  1. 添加Kubernetes仓库为了安装Kubernetes的各个组件,你需要先添加Kubernetes的官方软件仓库。

    Ubuntu/Debian:

    sudo apt-get update && sudo apt-get install -y apt-transport-https curl
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
    deb https://apt.kubernetes.io/ kubernetes-xenial main
    EOF
    sudo apt-get update
    

    CentOS:

    cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOF
    sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
    

    **解释:**以上命令添加了Kubernetes官方软件仓库,并确保你可以从官方渠道安装到最新的Kubernetes版本。

  2. 安装Kubernetes组件
    使用包管理工具安装Kubernetes的主要组件:kubeadmkubelet和 kubectl

    Ubuntu/Debian:

    sudo apt-get install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl
    

    CentOS:

    sudo yum install -y kubelet kubeadm kubectl
    sudo systemctl enable kubelet && sudo systemctl start kubelet
    

    解释:
    kubelet负责在每个节点上运行容器;kubeadm用于初始化和管理集群;kubectl是用于与集群交互的命令行工具。apt-mark hold命令防止这些软件包被意外升级。

四、初始化主节点(Master Node)

  1. 初始化集群在主节点上使用 kubeadm init命令初始化Kubernetes集群。

    sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    

    解释:--pod-network-cidr选项指定Pod网络的CIDR(Classless Inter-Domain Routing)。这个示例使用的是Flannel网络插件的默认CIDR。

  2. 配置kubectl
    配置kubectl以便在主节点上管理集群。

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

    解释:
    这些命令将kubeadm生成的配置文件复制到用户目录中,并设置相应权限,以便你可以使用kubectl命令管理集群。

五、加入工作节点(Worker Node)

  1. 加入集群
    在每个工作节点上,使用 kubeadm join命令加入集群。这个命令会在 kubeadm init成功后提供。

    sudo kubeadm join <master-ip>:<port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
    

    解释:
    此命令将工作节点加入到主节点所在的集群中,<master-ip><port><token>和 <hash>都是 kubeadm init成功后生成的值。请在命令中替换为实际值。

六、配置网络插件

  1. 安装网络插件
    在主节点上安装一个网络插件,以便集群内的Pod可以互相通信。这里我们以Flannel为例:

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

    解释:
    这个命令通过kubectl应用Flannel网络插件的配置文件,Flannel将管理Pod的网络通信。

七、验证集群状态

  1. 查看节点状态使用以下命令检查集群中所有节点的状态:

    kubectl get nodes
    

    **解释:**这个命令列出了集群中所有节点的状态。你应该能看到所有节点的状态都为 Ready,这表明节点已成功加入集群并准备好运行Pod。

  2. 查看集群组件状态
    你可以进一步验证集群组件的运行情况:

    kubectl get pods --all-namespaces
    

    解释:
    这条命令列出了所有命名空间下正在运行的Pod,可以帮助你检查集群是否有组件未正常启动。

八、总结与扩展

通过以上步骤,你已经成功搭建了一个基本的Kubernetes集群。这个集群由一个主节点和至少一个工作节点组成,并且已经配置好了必要的网络插件以支持Pod之间的通信。

进一步的配置和优化

  1. 持久存储配置持久存储(Persistent Storage),以支持持久化应用数据。常见的存储插件包括NFS、Ceph、GlusterFS等。
  2. 集群监控安装集群监控工具(如Prometheus、Grafana),以便实时监控集群和应用的运行状态。
  3. 负载均衡
    部署Ingress Controller(如NGINX Ingress Controller),以提供集群外部的HTTP和HTTPS负载均衡。

分析说明表

| 操作步骤 | 命令/操作 | 详细解释

     
禁用Swap sudo swapoff -a 禁用Swap,确保Kubernetes的稳定性。
安装Docker sudo apt-get install -y docker.io