☰
Kubernetes二进制安装指南:生产环境部署与优化
2026/10/27 7:18:51 网站建设 项目流程

1. 为什么选择二进制方式安装Kubernetes?

在云原生技术蓬勃发展的今天,Kubernetes已经成为容器编排领域的事实标准。不同于常见的kubeadm、minikube等工具化安装方式,二进制安装是直接使用官方编译好的可执行文件进行部署。这种方式虽然步骤相对复杂,但具有以下不可替代的优势:

  • 环境掌控度更高:每个组件都以独立进程运行,可以精确控制启动参数和运行环境
  • 排障更直观:组件日志分离,问题定位更直接
  • 适合生产环境:没有隐藏的自动化操作,所有配置显式声明
  • 版本控制灵活:可以自由组合不同版本的组件

我在多个生产环境中采用二进制部署的经验表明,这种方式虽然前期投入时间较多,但后期维护和问题排查的成本显著降低。特别是在需要定制化调度策略或网络方案时,二进制安装提供了最大的灵活性。

2. 环境准备与前置条件

2.1 硬件资源配置建议

对于测试环境,建议至少准备:

  • 2核CPU
  • 4GB内存
  • 30GB磁盘空间

生产环境则需要根据实际负载调整,通常建议:

  • Master节点:4核CPU/8GB内存/100GB磁盘
  • Node节点:根据容器负载动态扩展

注意:所有节点需要时间同步(建议配置NTP服务),主机名不能重复,且需要关闭swap分区。

2.2 操作系统要求

本次安装基于CentOS 7.x系统,其他Linux发行版需要相应调整命令。关键系统配置如下:

# 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 关闭selinux setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 关闭swap swapoff -a sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

2.3 容器运行时准备

Kubernetes v1.34.0默认使用containerd作为容器运行时。安装步骤如下:

# 安装containerd yum install -y containerd.io # 生成默认配置 containerd config default > /etc/containerd/config.toml # 修改sandbox镜像为国内源 sed -i 's|k8s.gcr.io/pause|registry.aliyuncs.com/google_containers/pause|g' /etc/containerd/config.toml # 启动服务 systemctl enable containerd systemctl start containerd

3. 核心组件安装与配置

3.1 下载二进制文件

从官方GitHub仓库获取v1.34.0版本的组件:

# 创建安装目录 mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs} # 下载核心组件 wget https://dl.k8s.io/v1.34.0/kubernetes-server-linux-amd64.tar.gz tar -zxvf kubernetes-server-linux-amd64.tar.gz cd kubernetes/server/bin cp kube-apiserver kube-controller-manager kube-scheduler kubectl kubelet kube-proxy /opt/kubernetes/bin/

3.2 证书体系搭建

使用cfssl工具生成集群所需的各类证书:

# 安装cfssl工具 wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 mv cfssl_linux-amd64 /usr/local/bin/cfssl mv cfssljson_linux-amd64 /usr/local/bin/cfssljson # 生成CA证书 cat > ca-config.json <<EOF { "signing": { "default": { "expiry": "87600h" }, "profiles": { "kubernetes": { "usages": [ "signing", "key encipherment", "server auth", "client auth" ], "expiry": "87600h" } } } } EOF # 生成各组件证书(示例:apiserver) cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes apiserver-csr.json | cfssljson -bare apiserver

3.3 组件配置详解

3.3.1 API Server配置

创建/opt/kubernetes/cfg/kube-apiserver.conf配置文件:

KUBE_APISERVER_OPTS="--logtostderr=false \ --v=2 \ --log-dir=/opt/kubernetes/logs \ --etcd-servers=https://192.168.1.100:2379 \ --bind-address=0.0.0.0 \ --secure-port=6443 \ --advertise-address=192.168.1.100 \ --allow-privileged=true \ --service-cluster-ip-range=10.0.0.0/24 \ --enable-admission-plugins=NamespaceLifecycle,NodeRestriction \ --authorization-mode=RBAC,Node \ --kubelet-client-certificate=/opt/kubernetes/ssl/apiserver.pem \ --kubelet-client-key=/opt/kubernetes/ssl/apiserver-key.pem \ --tls-cert-file=/opt/kubernetes/ssl/apiserver.pem \ --tls-private-key-file=/opt/kubernetes/ssl/apiserver-key.pem \ --client-ca-file=/opt/kubernetes/ssl/ca.pem \ --service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \ --service-account-signing-key-file=/opt/kubernetes/ssl/ca-key.pem \ --service-account-issuer=https://kubernetes.default.svc.cluster.local"
3.3.2 Controller Manager配置

/opt/kubernetes/cfg/kube-controller-manager.conf:

KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false \ --v=2 \ --log-dir=/opt/kubernetes/logs \ --leader-elect=true \ --kubeconfig=/opt/kubernetes/cfg/kube-controller-manager.kubeconfig \ --bind-address=127.0.0.1 \ --cluster-signing-cert-file=/opt/kubernetes/ssl/ca.pem \ --cluster-signing-key-file=/opt/kubernetes/ssl/ca-key.pem \ --root-ca-file=/opt/kubernetes/ssl/ca.pem \ --service-account-private-key-file=/opt/kubernetes/ssl/ca-key.pem \ --cluster-cidr=10.244.0.0/16 \ --node-cidr-mask-size=24 \ --controllers=*,bootstrapsigner,tokencleaner"

4. 服务启动与集群初始化

4.1 systemd服务文件配置

为每个核心组件创建systemd服务单元:

# API Server服务示例 cat > /usr/lib/systemd/system/kube-apiserver.service <<EOF [Unit] Description=Kubernetes API Server Documentation=https://github.com/kubernetes/kubernetes [Service] EnvironmentFile=-/opt/kubernetes/cfg/kube-apiserver.conf ExecStart=/opt/kubernetes/bin/kube-apiserver \$KUBE_APISERVER_OPTS Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target EOF

4.2 启动顺序与依赖关系

正确的组件启动顺序应该是:

  1. etcd集群
  2. kube-apiserver
  3. kube-controller-manager
  4. kube-scheduler
  5. kubelet
  6. kube-proxy

使用以下命令启动服务:

systemctl daemon-reload systemctl enable kube-apiserver kube-controller-manager kube-scheduler systemctl start kube-apiserver kube-controller-manager kube-scheduler

4.3 集群状态验证

检查各组件状态:

# 查看服务状态 systemctl status kube-apiserver kube-controller-manager kube-scheduler # 检查集群健康状态 /opt/kubernetes/bin/kubectl --kubeconfig=/root/.kube/config get cs

预期输出应显示所有组件状态为Healthy:

NAME STATUS MESSAGE ERROR controller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {"health":"true"}

5. 节点加入与网络配置

5.1 Worker节点部署

在Node节点上重复证书分发和组件安装步骤,特别注意:

  1. kubelet需要单独配置,指定--bootstrap-kubeconfig参数
  2. kube-proxy需要配置正确的集群CIDR
  3. 需要将Master节点生成的/etc/kubernetes/pki目录复制到Node节点

5.2 CNI网络插件选择

推荐使用Calico作为网络插件,安装命令:

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

关键配置参数:

  • CALICO_IPV4POOL_CIDR:需要与kube-controller-manager的--cluster-cidr参数一致
  • IP_AUTODETECTION_METHOD:在多网卡环境下指定正确的网卡

5.3 节点加入集群

在Master节点生成加入命令:

kubeadm token create --print-join-command

在Worker节点执行输出的join命令,完成后在Master节点验证:

kubectl get nodes

6. 生产环境优化建议

6.1 高可用架构设计

对于生产环境,建议采用以下高可用方案:

  • API Server:3节点,前置负载均衡
  • etcd:奇数节点集群(3/5节点)
  • Worker节点:根据业务需求水平扩展

6.2 关键参数调优

  1. API Server:

    • --max-requests-inflight:根据节点规模调整(默认400)
    • --event-ttl:延长事件保留时间(默认1h)
  2. kubelet:

    • --max-pods:单节点最大Pod数量(默认110)
    • --kube-api-qps:与API Server通信的QPS限制(默认5)
  3. etcd:

    • 定期执行defrag操作
    • 监控db size增长趋势

6.3 监控与日志方案

推荐部署:

  • Prometheus + Grafana:集群监控
  • EFK(Elasticsearch+Fluentd+Kibana):日志收集
  • Alertmanager:告警通知

7. 常见问题排查指南

7.1 证书相关错误

典型错误现象:

  • x509: certificate signed by unknown authority
  • x509: certificate has expired or is not yet valid

解决方案:

  1. 检查所有节点时间同步
  2. 确保证书有效期足够长(建议87600h)
  3. 验证证书CN和SAN配置

7.2 网络连通性问题

排查步骤:

  1. 检查Calico Pod状态
  2. 验证节点间网络连通性
  3. 检查iptables/nftables规则
  4. 确认网络插件配置正确

7.3 组件启动失败

通用排查方法:

  1. journalctl -u 服务名 -f 查看实时日志
  2. 检查配置文件语法
  3. 验证依赖服务(如etcd)是否正常
  4. 检查端口冲突情况

我在实际运维中发现,90%的启动问题都与证书配置或网络连通性有关。建议首次部署时逐步验证每个组件的启动状态,不要一次性启动所有服务。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询