Kubernetes 上的 TiDB 集群环境需求

本文介绍在 Kubernetes 上部署 TiDB 集群的软硬件环境需求。

软件版本要求

软件名称版本
DockerDocker CE 18.09.6
Kubernetesv1.12.5+
CentOSCentOS 7.6,内核要求为 3.10.0-957 或之后版本
Helmv3.0.0+

配置防火墙

建议关闭防火墙:

systemctl stop firewalld systemctl disable firewalld

如果无法关闭 firewalld 服务,为了保证 Kubernetes 正常运行,需要打开以下端口:

  1. 在 Master 节点上,打开以下端口,然后重新启动服务:

    firewall-cmd --permanent --add-port=6443/tcp firewall-cmd --permanent --add-port=2379-2380/tcp firewall-cmd --permanent --add-port=10250/tcp firewall-cmd --permanent --add-port=10251/tcp firewall-cmd --permanent --add-port=10252/tcp firewall-cmd --permanent --add-port=10255/tcp firewall-cmd --permanent --add-port=8472/udp firewall-cmd --add-masquerade --permanent # 当需要在 Master 节点上暴露 NodePort 时候设置 firewall-cmd --permanent --add-port=30000-32767/tcp systemctl restart firewalld
  2. 在 Node 节点上,打开以下端口,然后重新启动服务:

    firewall-cmd --permanent --add-port=10250/tcp firewall-cmd --permanent --add-port=10255/tcp firewall-cmd --permanent --add-port=8472/udp firewall-cmd --permanent --add-port=30000-32767/tcp firewall-cmd --add-masquerade --permanent systemctl restart firewalld

配置 Iptables

FORWARD 链默认配置成 ACCEPT,并将其设置到开机启动脚本里:

iptables -P FORWARD ACCEPT

禁用 SELinux

setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

关闭 Swap

Kubelet 正常工作需要关闭 Swap,并且把 /etc/fstab 里面有关 Swap 的那行注释掉:

swapoff -a sed -i 's/^\(.*swap.*\)$/#\1/' /etc/fstab

内核参数设置

按照下面的配置设置内核参数,也可根据自身环境进行微调:

modprobe br_netfilter cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-arptables = 1 net.core.somaxconn = 32768 vm.swappiness = 0 net.ipv4.tcp_syncookies = 0 net.ipv4.ip_forward = 1 fs.file-max = 1000000 fs.inotify.max_user_watches = 1048576 fs.inotify.max_user_instances = 1024 net.ipv4.conf.all.rp_filter = 1 net.ipv4.neigh.default.gc_thresh1 = 80000 net.ipv4.neigh.default.gc_thresh2 = 90000 net.ipv4.neigh.default.gc_thresh3 = 100000 EOF sysctl --system

配置 Irqbalance 服务

Irqbalance 服务可以将各个设备对应的中断号分别绑定到不同的 CPU 上,以防止所有中断请求都落在同一个 CPU 上而引发性能瓶颈。

systemctl enable irqbalance systemctl start irqbalance

CPUfreq 调节器模式设置

为了让 CPU 发挥最大性能,请将 CPUfreq 调节器模式设置为 performance 模式。详细参考在部署目标机器上配置 CPUfreq 调节器模式

cpupower frequency-set --governor performance

Ulimit 设置

TiDB 集群默认会使用很多文件描述符,需要将工作节点上面的 ulimit 设置为大于等于 1048576

cat <<EOF >> /etc/security/limits.conf root soft nofile 1048576 root hard nofile 1048576 root soft stack 10240 EOF sysctl --system

Docker 服务

安装 Docker 时,建议选择 Docker CE 18.09.6 及以上版本。请参考 Docker 安装指南 进行安装。

安装完 Docker 服务以后,执行以下步骤:

  1. 将 Docker 的数据保存到一块单独的盘上,Docker 的数据主要包括镜像和容器日志数据。通过设置 --data-root 参数来实现:

    cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ], "data-root": "/data1/docker" } EOF

    上面会将 Docker 的数据目录设置为 /data1/docker

  2. 设置 Docker daemon 的 ulimit。

    1. 创建 docker service 的 systemd drop-in 目录 /etc/systemd/system/docker.service.d

      mkdir -p /etc/systemd/system/docker.service.d
    2. 创建 /etc/systemd/system/docker.service.d/limit-nofile.conf 文件,并配置 LimitNOFILE 参数的值,取值范围为大于等于 1048576 的数字即可。

      cat > /etc/systemd/system/docker.service.d/limit-nofile.conf <<EOF [Service] LimitNOFILE=1048576 EOF
    3. 重新加载配置。

      systemctl daemon-reload && systemctl restart docker

Kubernetes 服务

参考 Kubernetes 官方文档,部署一套多 Master 节点高可用集群。

Kubernetes Master 节点的配置取决于 Kubernetes 集群中 Node 节点个数,节点数越多,需要的资源也就越多。节点数可根据需要做微调。

Kubernetes 集群 Node 节点个数Kubernetes Master 节点配置
1-51vCPUs 4GB Memory
6-102vCPUs 8GB Memory
11-1004vCPUs 16GB Memory
101-2508vCPUs 32GB Memory
251-50016vCPUs 64GB Memory
501-500032vCPUs 128GB Memory

安装完 Kubelet 之后,执行以下步骤:

  1. 将 Kubelet 的数据保存到一块单独盘上(可跟 Docker 共用一块盘),Kubelet 主要占盘的数据是 emptyDir 所使用的数据。通过设置 --root-dir 参数来实现:

    echo "KUBELET_EXTRA_ARGS=--root-dir=/data1/kubelet" > /etc/sysconfig/kubelet systemctl restart kubelet

    上面会将 Kubelet 数据目录设置为 /data1/kubelet

  2. 通过 kubelet 设置预留资源,保证机器上的系统进程以及 Kubernetes 的核心进程在工作负载很高的情况下仍然有足够的资源来运行,从而保证整个系统的稳定。

TiDB 集群资源需求

请根据服务器建议配置来规划机器的配置。

另外,在生产环境中,尽量不要在 Kubernetes Master 节点部署 TiDB 实例,或者尽可能少地部署 TiDB 实例。因为网卡带宽的限制,Master 节点网卡满负荷工作会影响到 Worker 节点和 Master 节点之间的心跳信息汇报,导致比较严重的问题。

文档内容是否有帮助?

下载 PDF文档反馈社区交流
产品
TiDB
TiDB Dedicated
TiDB Serverless
© 2024 PingCAP. All Rights Reserved.
Privacy Policy.