温馨提示×

如何在Ubuntu上搭建Kubernetes集群

小樊
62
2025-10-01 21:19:59
栏目: 智能运维

在Ubuntu上搭建Kubernetes集群(基于kubeadm)

Kubernetes(K8s)是一个开源容器编排平台,kubeadm是其官方推荐的快速搭建集群的工具。以下是在Ubuntu系统上搭建Kubernetes集群的详细步骤,涵盖环境准备、组件安装、集群初始化及验证等关键环节。

一、环境准备

1. 系统要求

  • 操作系统:Ubuntu 20.04及以上版本(推荐LTS版本,稳定性更高);
  • 硬件配置:至少2GB RAM(推荐4GB+)、2个CPU核心、20GB以上可用磁盘空间;
  • 网络要求:所有节点(Master/Worker)之间能互相通信,关闭防火墙或开放必要端口(如6443、10250等);
  • 主机配置:每台机器设置唯一主机名(如master-nodeworker-node1),并通过/etc/hosts文件配置IP与主机名映射(避免DNS依赖)。

2. 关键前置操作

  • 关闭Swap分区:Kubernetes要求禁用Swap,否则会导致节点无法加入集群。执行以下命令:
    sudo swapoff -a  # 临时关闭
    sudo sed -i '/ swap / s/^(.*)$/#\1/g' /etc/fstab  # 永久禁用(注释fstab中的swap行)
    
  • 同步系统时间:所有节点时间必须一致,可使用ntpchrony工具同步(如sudo apt install chrony && sudo systemctl enable --now chrony)。

二、安装Docker容器运行时

Kubernetes依赖容器运行时管理容器,Docker是常用选择(也可替换为containerd):

# 添加Docker官方GPG密钥和存储库
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
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"

# 安装Docker CE并启动服务
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker

# 配置Docker使用systemd作为cgroup驱动(兼容Kubernetes)
sudo mkdir -p /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

三、安装Kubernetes核心组件

在所有节点(Master/Worker)上执行以下操作,安装kubeletkubeadmkubectl

# 添加Kubernetes官方APT仓库
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  # 锁定版本

四、初始化Master节点

Master节点是集群的控制平面,负责管理节点、调度Pod等核心功能:

# 初始化集群(指定Pod网络CIDR,需与后续网络插件匹配)
sudo kubeadm init --pod-network-cidr=192.168.0.0/16

# 配置kubectl(将Master节点的kubeconfig复制到用户目录)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 安装网络插件(以Calico为例,支持网络策略)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

# 验证Master节点状态(应显示“Ready”)
kubectl get nodes

五、加入Worker节点

Worker节点负责运行应用Pod,通过kubeadm join命令将Worker节点加入集群:

  1. 获取Join命令:Master节点初始化完成后,终端会输出类似以下命令(需记录tokendiscovery-token-ca-cert-hash):
    kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef \
      --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    
  2. 在Worker节点执行Join命令:将上述命令复制到每台Worker节点终端运行,等待节点状态变为“Ready”。

六、验证集群状态

在Master节点上执行以下命令,确认集群是否搭建成功:

# 查看节点状态(所有节点应为“Ready”)
kubectl get nodes

# 查看集群组件状态(应均为“Running”)
kubectl get componentstatuses

# 部署测试应用(如Nginx)
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pods,svc  # 查看Pod和Service状态

常见问题解决

  • Token过期:若kubeadm join命令中的token过期,可在Master节点重新生成:
    kubeadm token create
    kubeadm token list  # 获取新token
    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
    
  • 网络插件安装失败:确保网络插件YAML文件能正常访问(如Calico官网可能更新链接,需替换为最新版本)。

通过以上步骤,即可在Ubuntu系统上搭建一个基础的Kubernetes集群。后续可根据需求扩展节点、部署应用或配置高级功能(如Ingress、StorageClass等)。

0