温馨提示×

如何在Ubuntu上搭建Kubernetes集群

小樊
54
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