温馨提示×

Linux K8s部署步骤全解析

小樊
85
2025-10-05 21:20:54
栏目: 智能运维

Linux环境下Kubernetes(K8s)集群部署全解析

一、准备工作

1. 环境与系统要求

  • 硬件配置:每台服务器需满足至少2核CPU、4GB内存、20GB可用磁盘空间(生产环境建议更高配置)。
  • 操作系统:推荐使用Ubuntu 22.04 LTS、CentOS 7.7及以上版本的64位Linux发行版(避免使用过时版本)。
  • 网络要求:所有节点(Master/Worker)需处于同一局域网,确保防火墙、安全组允许Kubernetes组件间通信(如6443端口用于API Server、10250端口用于kubelet)。
  • IP规划:为每个节点分配固定内网IP,并记录Master节点的IP地址(后续kubeadm join命令需使用)。

2. 系统优化配置

  • 关闭Swap分区:Kubernetes要求禁用Swap,否则会导致Pod无法正常调度。执行以下命令:
    swapoff -a  # 临时关闭
    sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab  # 永久关闭(注释掉fstab中的swap行)
    
  • 关闭SELinux(仅CentOS/RHEL需要):SELinux会限制容器权限,执行以下命令:
    setenforce 0  # 临时关闭
    sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久关闭
    
  • 配置Hosts文件:在所有节点的/etc/hosts中添加节点IP与主机名映射(替换为实际IP和主机名):
    echo "<Master-IP> master-node" >> /etc/hosts
    echo "<Worker1-IP> worker1-node" >> /etc/hosts
    echo "<Worker2-IP> worker2-node" >> /etc/hosts
    
  • 启用内核模块(Ubuntu/Debian需要):Kubernetes依赖overlaybr_netfilter模块,执行以下命令:
    modprobe overlay
    modprobe br_netfilter
    echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.d/k8s.conf
    echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.d/k8s.conf
    sysctl --system  # 生效配置
    

3. 安装Docker容器运行时

Kubernetes依赖容器运行时管理容器,推荐使用Docker(也可选择containerd,但Docker更常用)。

  • Ubuntu/Debian系统
    curl -fsSL https://get.docker.com -o get-docker.sh
    bash get-docker.sh  # 自动安装Docker CE
    systemctl enable docker && systemctl start docker
    
  • CentOS/RHEL系统
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    yum install -y docker-ce docker-ce-cli containerd.io
    systemctl enable docker && systemctl start docker
    

4. 安装Kubernetes核心组件

Kubernetes的核心组件包括kubeadm(集群初始化工具)、kubelet(节点代理)、kubectl(命令行工具)。

  • Ubuntu/Debian系统
    apt-get update && apt-get install -y apt-transport-https curl
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
    echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
    apt-get update
    apt-get install -y kubelet kubeadm kubectl
    apt-mark hold kubelet kubeadm kubectl  # 锁定版本,防止自动更新
    
  • CentOS/RHEL系统
    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    EOF
    yum install -y kubelet kubeadm kubectl
    systemctl enable kubelet
    

二、部署Master节点

Master节点是集群的控制中心,负责管理节点、调度Pod、维护集群状态。

1. 初始化Master节点

在Master节点上执行kubeadm init命令,指定Pod网络CIDR(需与后续网络插件兼容,如Flannel默认使用10.244.0.0/16):

kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<Master-IP>
  • 参数说明
    • --pod-network-cidr:Pod网络的CIDR范围,需与网络插件要求一致。
    • --apiserver-advertise-address:Master节点的IP地址,用于API Server通信。
  • 输出关键信息:初始化完成后,终端会输出kubeadm join命令(包含Token和CA证书哈希),需保存备用(用于Worker节点加入集群)。

2. 配置kubectl

kubectl是管理Kubernetes集群的命令行工具,需将Master节点的配置文件复制到当前用户目录:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 验证配置:执行kubectl version,若能显示客户端与服务端版本信息,则配置成功。

3. 安装网络插件

Kubernetes需要网络插件实现Pod之间的跨节点通信,推荐使用Flannel(轻量级、易部署)或Calico(功能丰富、支持网络策略)。

  • 安装Flannel
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
  • 安装Calico(需修改CIDR匹配):
    kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    
  • 验证网络插件:执行kubectl get pods -n kube-system,查看网络插件Pod是否处于Running状态。

三、部署Worker节点

Worker节点是集群的计算节点,负责运行容器化应用。

1. 加入Worker节点

在Worker节点上执行Master节点初始化时输出的kubeadm join命令(替换为实际Token和CA哈希):

kubeadm join <Master-IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
  • 说明:若忘记kubeadm join命令,可在Master节点上重新生成:
    kubeadm token create --print-join-command
    

2. 验证节点加入

回到Master节点,执行以下命令查看集群节点状态:

kubectl get nodes
  • 预期结果:Worker节点会显示为NotReady(需等待网络插件部署完成后变为Ready)。

四、验证集群部署

1. 检查节点状态

kubectl get nodes
  • 正常状态:所有节点(Master/Worker)均显示为Ready

2. 部署示例应用

部署一个Nginx应用,验证集群是否能正常调度Pod:

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --type=NodePort --port=80
  • 说明--type=NodePort表示将服务暴露到节点端口,--port=80为容器端口。

3. 访问示例应用

获取NodePort端口(替换为实际节点IP):

kubectl get svc nginx
  • 访问方式:在浏览器中输入http://<Master-IP>:<NodePort>http://<Worker-IP>:<NodePort>,若看到Nginx欢迎页面,则部署成功。

五、可选步骤(增强集群功能)

1. 安装Kubernetes Dashboard

Dashboard是Kubernetes的Web管理界面,可通过以下命令安装:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
  • 访问Dashboard:需通过kubectl proxy开启代理,或使用Ingress暴露服务。

2. 配置高可用(HA)

生产环境建议部署高可用集群,包含多个Master节点(通过etcd集群保证数据一致性),可使用kubeadm的--control-plane-endpoint参数配置。

3. 配置持久化存储

若应用需要持久化数据,可安装存储插件(如NFS、Ceph、Longhorn),并创建PersistentVolume(PV)和PersistentVolumeClaim(PVC)。

以上步骤覆盖了Linux环境下Kubernetes集群的基础部署流程,实际生产环境需根据需求调整配置(如网络插件选择、高可用设计、存储方案等)。部署完成后,建议定期备份etcd数据(集群核心数据),并监控集群状态(如使用Prometheus+Granafa)。

0