搭建Kubernetes集群

搭建Kubernetes集群(简称K8S)通常包括准备机器、安装必要的组件(如kubeadm、kubectl、kubelet),以及配置网络、初始化控制平面和将工作节点加入集群。以下是搭建Kubernetes集群的基本步骤,主要基于kubeadm工具,适合快速启动一个生产级的集群。

前提条件

  1. 硬件要求:
    • 主控节点(Master Node)至少2核CPU,2GB内存(推荐4GB),20GB硬盘。
    • 工作节点(Worker Node)至少1核CPU,1GB内存,20GB硬盘。
  2. 软件要求:
    • 操作系统:推荐使用Ubuntu 20.04或CentOS 7。
    • 所有节点应有相同的操作系统版本。
    • 关闭swap(Kubernetes要求关闭swap,以避免内存分配问题)。
    • 设置静态IP地址。
    • 确保防火墙配置允许Kubernetes组件的端口通信。

步骤1:环境准备

1.1 更新系统并关闭swap

# 更新系统
sudo apt-get update && sudo apt-get upgrade -y
# 禁用
swapsudo swapoff -a
# 永久禁用
swapsudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

1.2 安装Docker

# 安装Docker依赖
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

# 添加Docker GPG密钥和仓库

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 安装Dockersudo

apt-get update && sudo apt-get install -y docker-ce

# 启动Docker并设置为开机自启动

sudo systemctl start dockersudo systemctl enable docker

1.3 安装kubeadm、kubelet和kubectl

# 添加Kubernetes GPG密钥
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

# 添加Kubernetes仓库

sudo bash -c 'cat <<EOF >/etc/apt/sources.list.d/kubernetes.listdeb http://apt.kubernetes.io/ kubernetes-xenial mainEOF'

# 更新包列表并安装Kubernetes组件
sudo apt-get updatesudo apt-get install -y kubelet kubeadm kubectl

# 设置kubelet开机启动
sudo systemctl enable kubeletsudo systemctl start kubelet

步骤2:初始化主控节点

2.1 初始化Kubernetes控制平面(Master Node)

在主控节点上运行以下命令来初始化集群:

sudo kubeadm init --pod-network-cidr=192.168.0.0/16
  • --pod-network-cidr:定义Pod网络的CIDR范围,具体取决于你选择的网络插件(如Calico或Flannel)。

初始化完成后,Kubernetes会输出配置集群的下一步指令。

2.2 配置kubectl

在主控节点上为当前用户配置kubectl,以便可以使用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

步骤3:安装网络插件

Kubernetes集群需要网络插件来管理Pod之间的网络通信。以Calico为例:

kubectl apply -f https://docs.projectcalico.org/v3.21/manifests/calico.yaml

或者你可以选择Flannel作为网络插件:

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

网络插件安装完成后,Kubernetes集群中的所有节点和Pod才能正常通信。

步骤4:添加工作节点

在每个工作节点上运行以下命令,加入到主控节点创建的集群中。你需要在主控节点上初始化后得到的kubeadm join命令,类似如下:

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

主控节点生成的token和hash会在集群初始化输出中看到。如果忘记,可以在主控节点上运行以下命令重新获取:

kubeadm token create --print-join-command

步骤5:验证集群状态

在主控节点上运行以下命令,查看集群是否正常运行:

kubectl get nodes

所有节点应显示为Ready状态,表示已经成功加入集群。

其他步骤:集群管理与维护

  1. 检查Pod状态:
    • 使用kubectl get pods --all-namespaces来查看所有命名空间下的Pod状态,确保网络插件等基础设施组件正常运行。
  2. 部署应用程序:
    • 使用kubectl apply -f <yaml-file>可以在集群中部署应用,yaml文件定义了应用的Pod、Service等资源。
  3. Node扩展:
    • 通过增加更多的工作节点,可以扩大Kubernetes集群的计算资源。
  4. 集群监控和日志:
    • 使用工具如Prometheus、Grafana监控集群运行状况,使用kubectl logs查看容器日志。

总结

通过kubeadm搭建Kubernetes集群是相对简便且高效的方式。你需要准备好主控节点和工作节点,安装必要的组件,然后通过kubeadm初始化主控节点,安装网络插件,并将工作节点加入集群。在集群创建完成后,便可以开始部署和管理容器化的应用程序了。