温馨提示×

Kubernetes在Linux上的最佳安装实践

小樊
54
2025-10-24 20:10:07
栏目: 智能运维

Kubernetes在Linux上的最佳安装实践

一、前置准备:环境与配置

1. 硬件要求

  • Master节点:至少2核CPU、2GB内存、20GB可用磁盘空间(生产环境建议4核CPU、8GB以上内存,以满足etcd存储和高可用需求)。
  • Worker节点:至少1核CPU、1GB内存、20GB可用磁盘空间(运行容器化应用的基础配置,可根据应用负载调整)。
  • 通用要求:所有节点需具备稳定网络连接(节点间互通,能访问互联网下载镜像),建议使用SSD提升IO性能。

2. 操作系统选择

  • 推荐使用主流Linux发行版:如Ubuntu 20.04+/22.04 LTS(社区支持好、文档丰富)、CentOS Stream 8/9或Rocky Linux 9(企业级稳定性,兼容性好)。
  • 避免使用过旧版本(如CentOS 7已停止维护),确保系统内核版本符合Kubernetes要求(Kubernetes 1.32+需内核≥4.19)。

3. 基础环境配置

  • 关闭swap分区:Kubernetes要求禁用swap以避免性能问题。执行swapoff -a临时关闭,编辑/etc/fstab文件注释swap行永久生效。
  • 关闭防火墙与SELinux
    • 防火墙:CentOS使用systemctl stop firewalld && systemctl disable firewalld;Ubuntu使用ufw disable
    • SELinux:执行sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0临时生效,重启系统永久禁用。
  • 配置内核参数:允许iptables检查桥接流量,创建/etc/sysctl.d/k8s.conf文件,添加以下内容并执行sysctl --system生效:
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    

4. 安装容器运行时

Kubernetes依赖容器运行时管理容器,推荐使用containerd(Kubernetes原生支持,性能更优):

  • Ubuntu/Debian:
    sudo apt install -y containerd
    sudo mkdir -p /etc/containerd
    sudo containerd config default > /etc/containerd/config.toml
    sudo systemctl restart containerd
    
  • CentOS/RHEL:
    sudo yum install -y containerd
    sudo systemctl enable --now containerd
    
  • 可选:若使用Docker,需配置--exec-opt native.cgroupdriver=systemd(避免与kubelet冲突)。

二、安装Kubernetes核心组件

1. 安装kubelet、kubeadm、kubectl

这三个组件是Kubernetes集群管理的核心:

  • Ubuntu/Debian:添加Kubernetes官方APT源,安装指定版本(避免自动升级导致版本不兼容):
    sudo apt update && sudo apt install -y apt-transport-https curl
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
    echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    sudo apt update
    sudo apt install -y kubelet=1.29.10-00 kubeadm=1.29.10-00 kubectl=1.29.10-00
    sudo apt-mark hold kubelet kubeadm kubectl  # 锁定版本
    
  • CentOS/RHEL:添加Kubernetes YUM源,安装指定版本:
    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=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    sudo yum install -y kubelet-1.29.10 kubeadm-1.29.10 kubectl-1.29.10
    sudo systemctl enable --now kubelet
    

2. 初始化Master节点

使用kubeadm init命令初始化Master节点,指定Pod网络CIDR(避免与本地网络冲突):

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU,Mem
  • 关键操作
    • 初始化完成后,按照提示将/etc/kubernetes/admin.conf复制到当前用户的.kube目录,并设置权限:
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
      
    • 保存kubeadm join命令(用于Worker节点加入集群),该命令包含Token和CA证书哈希,有效期为24小时。

3. 部署网络插件

网络插件是Pod间通信的核心,推荐使用Calico(高性能、支持网络策略):

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
  • 验证网络插件状态:kubectl get pods -n kube-system(所有插件Pod应为Running状态)。

三、加入Worker节点

在Worker节点上执行Master节点生成的kubeadm join命令(替换为实际IP、Token和CA哈希):

sudo kubeadm join <Master-IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
  • 验证节点状态:在Master节点执行kubectl get nodes,若Worker节点状态为Ready,则表示加入成功。

四、后续配置与优化

1. 安装Kubernetes Dashboard(可选)

Dashboard提供Web界面管理集群,安装命令:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
  • 创建ServiceAccount并绑定权限(用于访问Dashboard):
    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: dashboard-admin
      namespace: kubernetes-dashboard
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: dashboard-admin-binding
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: ServiceAccount
      name: dashboard-admin
      namespace: kubernetes-dashboard
    EOF
    
  • 访问Dashboard:通过kubectl proxy启动代理,然后在浏览器访问http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

2. 配置监控与日志(生产必备)

  • 监控:部署Prometheus+Grafana组合,监控集群节点、Pod的资源使用情况(如CPU、内存、磁盘)。
  • 日志:部署EFK(Elasticsearch+Fluentd+Kibana)或Loki+Grafana,收集和分析Pod日志,便于故障排查。

3. 安全加固

  • 启用TLS认证:确保API Server、kubelet等组件使用TLS加密通信(默认开启)。
  • 配置网络策略:使用Calico或Cilium定义Pod间访问规则,限制不必要的流量。
  • 定期更新:关注Kubernetes安全公告,及时升级组件版本(避免使用已停止支持的版本)。

五、注意事项

  • 版本兼容性:Kubernetes控制平面与节点组件版本差不超过2个小版本(如控制平面v1.29,节点支持v1.27~v1.29)。
  • 高可用性:生产环境建议部署3个Master节点和多个Worker节点,使用etcd集群(如部署3节点etcd)保证数据一致性。
  • 资源管理:为Pod配置资源请求(requests)和限制(limits),避免资源抢占;使用Horizontal Pod Autoscaler(HPA)根据负载自动扩缩容Pod。

0