二进制安装 Kubernetes 高可用集群
目录
简介
一、二进制安装 Kubernetes 的优势
1. 高度可控性
2. 深度定制化能力
3. 低环境依赖性
4. 便于故障排查与维护
二、部署环境与资源清单
三、基础环境配置
1. 关闭系统防火墙与 SELinux
2. 关闭交换分区
3. 配置系统资源限制
4. 优化内核参数
四、安装容器运行时(containerd)
1. 下载并安装 CNI 插件
2. 安装 containerd
3. 配置 containerd 服务
4. 配置 containerd 模块与内核参数
5. 配置 containerd 镜像加速
五、部署 Kubernetes 基础组件
1. 下载并分发 Kubernetes 与 etcd 二进制文件
2. 生成证书(基于 cfssl 工具)
六、高可用配置(Nginx+Keepalived)
1. 安装 Nginx 实现 API Server 负载均衡
2. 安装 Keepalived 实现 VIP 漂移
七、启动 Kubernetes 核心组件
1. 启动 etcd 集群(master 节点)
2. 启动 kube-apiserver(master 节点)
3. 启动控制器管理器与调度器
八、配置 Node 节点
1. 启动 kubelet
2. 启动 kube-proxy
九、部署网络插件与附加组件
1. 安装 Calico 网络插件
2. 安装 CoreDNS(服务发现)
3. 安装 Metrics Server(资源监控)
十、集群验证
1. 检查节点状态
2. 部署测试 Pod
总结
简介
在 Kubernetes 集群部署中,二进制安装方式以其高度可控性和灵活性,成为企业级生产环境的优选方案。本文将介绍如何通过二进制文件部署 Kubernetes 高可用集群,结合 Nginx 实现负载均衡、Keepalived 实现虚拟 IP 漂移,构建稳定可靠的容器编排平台。(实验案例,在生产环境部署时需谨慎)
一、二进制安装 Kubernetes 的优势
相较于包管理工具(APT/YUM)或容器化部署(kubeadm),二进制安装具有以下独特优势:
1. 高度可控性
- 版本灵活选择:可手动下载任意版本的 Kubernetes 组件(如 v1.29.2),不受限于包管理工具的版本库更新节奏,适合兼容旧版应用或测试特定功能。
- 组件按需裁剪:仅安装必要组件(如计算节点可只部署 kubelet 和 kube-proxy),减少资源占用,适合边缘节点或轻量集群。
2. 深度定制化能力
- 细粒度配置:通过独立配置文件(YAML/JSON)直接修改组件参数,例如自定义 kube-apiserver 的认证方式(
--authorization-mode=RBAC,Node
)或调整 kubelet 内存限制。 - 适配复杂环境:可手动配置网络接口、存储路径及认证方式(如自签证书),满足私有云、混合云及合规场景(金融、医疗行业)需求。
3. 低环境依赖性
- 脱离包管理体系:无需依赖系统 APT/YUM 源,适合离线环境(内网数据中心),通过手动拷贝二进制文件即可完成部署。
- 跨平台兼容:预编译的二进制文件支持 Linux、Windows 及 x86_64、ARM64 架构,无需额外编译。
4. 便于故障排查与维护
- 独立组件生命周期:每个组件以独立进程运行(通过 systemd 管理),故障时可单独重启或升级(如仅升级 kube-scheduler)。
- 日志直达:组件日志路径明确(如
/var/log/kube-apiserver.log
),便于直接定位问题。
二、部署环境与资源清单
本次部署采用 5 节点架构,具体配置如下:
操作系统 | 配置 | 主机名 | IP 地址 | 角色 |
openEuler 24.03 | 2C4G | k8s-master01 | 192.168.10.101 | master 节点 |
openEuler 24.03 | 2C4G | k8s-master02 | 192.168.10.102 | master 节点 |
openEuler 24.03 | 2C4G | k8s-master03 | 192.168.10.103 | master 节点 |
openEuler 24.03 | 2C4G | k8s-node01 | 192.168.10.104 | node 节点 |
openEuler 24.03 | 2C4G | k8s-node02 | 192.168.10.105 | node 节点 |
- | - | - | 192.168.10.100 | VIP(虚拟 IP) |
三、基础环境配置
1. 关闭系统防火墙与 SELinux
# 停止并禁用firewalld服务
systemctl stop firewalld
systemctl disable firewalld# 临时关闭SELinux
setenforce 0
# 永久关闭SELinux(需重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
解释:Kubernetes 集群内部组件通过特定端口通信,关闭防火墙可避免端口拦截;SELinux 可能限制容器权限,关闭后减少部署障碍。
2. 关闭交换分区
# 临时关闭交换分区
swapoff -a
# 永久关闭交换分区(注释fstab中的swap配置)
sed -i '/swap/s/^/#/' /etc/fstab
解释:Kubernetes 要求禁用交换分区,避免容器内存调度异常,确保节点资源管理准确。
3. 配置系统资源限制
# 临时设置文件描述符限制
ulimit -SHn 65535# 永久配置资源限制
cat >> /etc/security/limits.conf <<EOF
* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited
EOF
解释:提高文件描述符和进程数限制,避免高负载时因资源限制导致组件异常,memlock unlimited
确保容器可锁定内存,提升性能。
4. 优化内核参数
# 配置Kubernetes所需内核参数
cat <<EOF > /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1 # 启用IP转发(容器跨节点通信必需)
net.bridge.bridge-nf-call-iptables = 1 # 桥接流量通过iptables规则
fs.may_detach_mounts = 1 # 允许容器挂载分离
vm.overcommit_memory=1 # 允许内存超额分配(避免OOM误杀)
vm.panic_on_oom=0 # OOM时不触发系统panic
net.ipv6.conf.all.disable_ipv6 = 0 # 启用IPv6(如需)
net.ipv6.conf.all.forwarding = 1 # 启用IPv6转发
EOF# 加载内核参数
sysctl --system
解释:内核参数优化针对容器网络、内存管理等场景,确保 Kubernetes 组件正常运行。
四、安装容器运行时(containerd)
Kubernetes 支持 containerd 作为容器运行时,替代 Docker 引擎。以下是安装步骤:
1. 下载并安装 CNI 插件
# 下载CNI插件(容器网络接口)
wget https://github.com/containernetworking/plugins/releases/download/v1.4.0/cni-plugins-linux-amd64-v1.4.0.tgz# 创建CNI目录
mkdir -p /etc/cni/net.d /opt/cni/bin# 解压插件到指定目录
tar zxvf cni-plugins-linux-amd64-v1.4.0.tgz -C /opt/cni/bin/
解释:CNI 插件负责容器网络配置,如网络创建、IP 分配等,是容器跨节点通信的基础。
2. 安装 containerd
# 下载containerd安装包
wget https://github.com/containerd/containerd/releases/download/v1.7.13/cri-containerd-cni-1.7.13-linux-amd64.tar.gz# 解压到根目录(包含/usr、/etc等路径)
tar zxvf cri-containerd-cni-1.7.13-linux-amd64.tar.gz -C /
3. 配置 containerd 服务
# 创建systemd服务文件
cat > /etc/systemd/system/containerd.service <<EOF
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target # 网络和本地文件系统就绪后启动[Service]
ExecStartPre=-/sbin/modprobe overlay # 启动前加载overlay模块(存储驱动)
ExecStart=/usr/local/bin/containerd # 启动containerd
Type=notify # 服务就绪时通知systemd
Delegate=yes # 允许systemd管理重启/停止
KillMode=process # 通过终止进程停止服务
Restart=always # 异常退出时始终重启
RestartSec=5 # 重启间隔5秒
LimitNPROC=infinity # 无进程数限制
LimitCORE=infinity # 无CPU核心限制
LimitNOFILE=infinity # 无文件描述符限制
TasksMax=infinity # 无任务数限制
OOMScoreAdjust=-999 # 降低OOM优先级(避免被优先杀死)[Install]
WantedBy=multi-user.target # 多用户模式下启动
EOF
4. 配置 containerd 模块与内核参数
# 配置containerd所需内核模块
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay # 容器存储驱动(overlayfs)
br_netfilter # 桥接网络过滤模块
EOF# 加载模块
systemctl restart systemd-modules-load.service# 配置网络相关内核参数
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1 # 桥接流量通过iptables
net.ipv4.ip_forward = 1 # 启用IPv4转发
net.bridge.bridge-nf-call-ip6tables = 1 # IPv6桥接流量通过ip6tables
EOF# 生效内核参数
sysctl --system
5. 配置 containerd 镜像加速
# 生成默认配置文件
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml# 修改配置文件(关键部分)
vim /etc/containerd/config.toml
# 1. 替换sandbox镜像为阿里云镜像(加速拉取)
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
# 2. 配置cgroup驱动为systemd(与Kubernetes一致)
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]SystemdCgroup = true# 创建镜像加速配置
mkdir -p /etc/containerd/certs.d/docker.io
cat <<EOF | sudo tee /etc/containerd/certs.d/docker.io/hosts.toml
server = "docker.io"
[host."https://docker.m.daocloud.io"] # DaoCloud镜像加速
capabilities = ["pull", "resolve"]
EOF# 重启containerd
systemctl daemon-reload
systemctl enable --now containerd
解释:镜像加速配置可提升国外镜像(如 k8s.gcr.io)的拉取速度;SystemdCgroup=true
确保 containerd 与 Kubernetes 的 cgroup 驱动一致,避免资源管理冲突。
五、部署 Kubernetes 基础组件
1. 下载并分发 Kubernetes 与 etcd 二进制文件
# 在master01节点下载
wget https://dl.k8s.io/v1.29.2/kubernetes-server-linux-amd64.tar.gz
wget https://github.com/etcd-io/etcd/releases/download/v3.5.12/etcd-v3.5.12-linux-amd64.tar.gz# 安装Kubernetes组件
tar zxvf kubernetes-server-linux-amd64.tar.gz
cp kubernetes/server/bin/* /usr/local/bin/# 安装etcd
tar zxvf etcd-v3.5.12-linux-amd64.tar.gz
mv etcd-v3.5.12-linux-amd64/etcd* /usr/local/bin/# 分发到其他master节点(全部组件)
scp /usr/local/bin/* 192.168.10.102:/usr/local/bin/
scp /usr/local/bin/* 192.168.10.103:/usr/local/bin/# 分发到node节点(仅kubelet和kube-proxy)
scp /usr/local/bin/kube{let,-proxy} 192.168.10.104:/usr/local/bin/
scp /usr/local/bin/kube{let,-proxy} 192.168.10.105:/usr/local/bin/
2. 生成证书(基于 cfssl 工具)
Kubernetes 组件间通信依赖 TLS 证书,使用 cfssl 工具生成:
# 安装cfssl
wget "https://mirrors.chenby.cn/https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssl_1.6.4_linux_amd64" -O /usr/local/bin/cfssl
wget "https://mirrors.chenby.cn/https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssljson_1.6.4_linux_amd64" -O /usr/local/bin/cfssljson
chmod +x /usr/local/bin/cfssl*# 生成etcd证书(示例:CA配置)
cat > ca-config.json << EOF
{"signing": {"default": { "expiry": "876000h" }, # 证书有效期100年"profiles": {"kubernetes": {"usages": ["signing", "key encipherment", "server auth", "client auth"],"expiry": "876000h"}}}
}
EOF# 生成etcd CA证书
cfssl gencert -initca etcd-ca-csr.json | cfssljson -bare /etc/etcd/ssl/etcd-ca# 生成Kubernetes API Server证书(需包含所有节点IP和VIP)
cfssl gencert \-ca=/etc/kubernetes/pki/ca.pem \-ca-key=/etc/kubernetes/pki/ca-key.pem \-config=ca-config.json \-hostname=10.96.0.1,192.168.10.100,192.168.10.101,... \ # 包含Service网段、VIP、节点IP-profile=kubernetes \apiserver-csr.json | cfssljson -bare /etc/kubernetes/pki/apiserver
解释:证书需包含所有节点 IP、VIP 及 Service 网段(如 10.96.0.1),确保组件间通信通过 TLS 验证。生成后需将证书分发到所有节点。
六、高可用配置(Nginx+Keepalived)
1. 安装 Nginx 实现 API Server 负载均衡
# 编译安装Nginx(启用stream模块)
yum install gcc -y
wget http://nginx.org/download/nginx-1.25.4.tar.gz
tar xvf nginx-1.25.4.tar.gz
cd nginx-1.25.4
./configure --with-stream --without-http # 仅启用TCP代理,禁用HTTP
make && make install# 配置Nginx负载均衡(指向3个master节点的API Server)
cat > /usr/local/nginx/conf/kube-nginx.conf <<EOF
worker_processes 1;
events { worker_connections 1024; }
stream {upstream backend {least_conn; # 最少连接负载均衡server 192.168.10.101:6443 max_fails=3 fail_timeout=30s;server 192.168.10.102:6443 max_fails=3 fail_timeout=30s;server 192.168.10.103:6443 max_fails=3 fail_timeout=30s;}server {listen 0.0.0.0:8443; # 监听8443端口(与VIP绑定)proxy_connect_timeout 1s;proxy_pass backend;}
}
EOF# 创建Nginx系统服务
cat > /etc/systemd/system/nginx.service <<EOF
[Unit]
Description=kube-apiserver nginx proxy
After=network.target[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t # 启动前检查配置
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/kube-nginx.conf
Restart=always
RestartSec=5[Install]
WantedBy=multi-user.target
EOF# 启动Nginx
systemctl daemon-reload
systemctl enable --now nginx
2. 安装 Keepalived 实现 VIP 漂移
# 安装Keepalived
yum -y install keepalived# master01配置(主节点)
cat > /etc/keepalived/keepalived.conf << EOF
global_defs { router_id LVS_DEVEL }
vrrp_script chk_apiserver { # 健康检查脚本(检查nginx是否运行)script "/etc/keepalived/check_apiserver.sh"interval 5weight -5
}
vrrp_instance VI_1 {state MASTERinterface ens160 # 绑定的网卡(需根据实际环境修改)mcast_src_ip 192.168.10.101 # 本机IPvirtual_router_id 51priority 100 # 优先级(主节点高于备节点)advert_int 2 # 心跳间隔2秒authentication {auth_type PASSauth_pass K8SHA_KA_AUTH}virtual_ipaddress { 192.168.10.100 } # VIPtrack_script { chk_apiserver } # 关联健康检查
}
EOF# 健康检查脚本(所有master节点)
cat > /etc/keepalived/check_apiserver.sh << EOF
#!/bin/bash
err=0
for k in \$(seq 1 3); doif ! pgrep nginx; then # 检查nginx进程err=\$((err+1))sleep 1elseerr=0breakfi
done
if [ \$err -ne 0 ]; thensystemctl stop keepalived # 检查失败则停止keepalived,释放VIPexit 1
elseexit 0
fi
EOF
chmod +x /etc/keepalived/check_apiserver.sh# 启动Keepalived
systemctl enable --now keepalived
解释:Nginx 负责将 VIP(192.168.10.100:8443)的请求转发到 3 个 master 节点的 API Server(6443 端口);Keepalived 通过 VRRP 协议监控 Nginx 状态,当主节点故障时,VIP 自动漂移到备节点,实现高可用。
七、启动 Kubernetes 核心组件
1. 启动 etcd 集群(master 节点)
# master01的etcd配置(示例)
cat > /etc/etcd/etcd.config.yml << EOF
name: 'k8s-master01'
data-dir: /var/lib/etcd
listen-peer-urls: 'https://192.168.10.101:2380' # 节点间通信端口
listen-client-urls: 'https://192.168.10.101:2379,http://127.0.0.1:2379' # 客户端通信端口
initial-advertise-peer-urls: 'https://192.168.10.101:2380'
advertise-client-urls: 'https://192.168.10.101:2379'
initial-cluster: 'k8s-master01=https://192.168.10.101:2380,k8s-master02=https://192.168.10.102:2380,k8s-master03=https://192.168.10.103:2380'
initial-cluster-token: 'etcd-k8s-cluster'
initial-cluster-state: 'new'
# 证书配置(使用之前生成的etcd证书)
client-transport-security:cert-file: '/etc/etcd/ssl/etcd.pem'key-file: '/etc/etcd/ssl/etcd-key.pem'trusted-ca-file: '/etc/etcd/ssl/etcd-ca.pem'
EOF# 创建etcd服务
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Service
After=network.target[Service]
Type=notify
ExecStart=/usr/local/bin/etcd --config-file=/etc/etcd/etcd.config.yml
Restart=on-failure
RestartSec=10[Install]
WantedBy=multi-user.target
EOF# 启动etcd
systemctl daemon-reload
systemctl enable --now etcd
2. 启动 kube-apiserver(master 节点)
# master01的apiserver配置(示例)
cat > /usr/lib/systemd/system/kube-apiserver.service << EOF
[Unit]
Description=Kubernetes API Server
After=network.target[Service]
ExecStart=/usr/local/bin/kube-apiserver \\--v=2 \\ # 日志级别--bind-address=0.0.0.0 \\--secure-port=6443 \\ # API Server端口--advertise-address=192.168.10.101 \\ # 本机IP--service-cluster-ip-range=10.96.0.0/12 \\ # Service网段--etcd-servers=https://192.168.10.101:2379,https://192.168.10.102:2379,https://192.168.10.103:2379 \\ # etcd集群地址--etcd-cafile=/etc/etcd/ssl/etcd-ca.pem \\ # etcd CA证书--tls-cert-file=/etc/kubernetes/pki/apiserver.pem \\ # API Server证书--tls-private-key-file=/etc/kubernetes/pki/apiserver-key.pem \\--client-ca-file=/etc/kubernetes/pki/ca.pem \\ # 客户端CA证书--authorization-mode=Node,RBAC \\ # 授权模式(RBAC)--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,... # 准入插件
Restart=on-failure
RestartSec=10s[Install]
WantedBy=multi-user.target
EOF# 启动apiserver
systemctl daemon-reload
systemctl enable --now kube-apiserver
3. 启动控制器管理器与调度器
# 启动kube-controller-manager
cat > /usr/lib/systemd/system/kube-controller-manager.service << EOF
[Unit]
Description=Kubernetes Controller Manager[Service]
ExecStart=/usr/local/bin/kube-controller-manager \\--v=2 \\--kubeconfig=/etc/kubernetes/controller-manager.kubeconfig \\ # 连接API Server的配置--leader-elect=true \\ # 启用leader选举(多master高可用)--cluster-signing-cert-file=/etc/kubernetes/pki/ca.pem \\ # 集群证书签名--cluster-signing-key-file=/etc/kubernetes/pki/ca-key.pem
Restart=always
RestartSec=10s[Install]
WantedBy=multi-user.target
EOF# 启动kube-scheduler
cat > /usr/lib/systemd/system/kube-scheduler.service << EOF
[Unit]
Description=Kubernetes Scheduler[Service]
ExecStart=/usr/local/bin/kube-scheduler \\--v=2 \\--kubeconfig=/etc/kubernetes/scheduler.kubeconfig \\--leader-elect=true # 启用leader选举
Restart=always
RestartSec=10s[Install]
WantedBy=multi-user.target
EOF# 启动组件
systemctl daemon-reload
systemctl enable --now kube-controller-manager kube-scheduler
八、配置 Node 节点
1. 启动 kubelet
# 创建kubelet配置文件
cat > /etc/kubernetes/kubelet-conf.yml <<EOF
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
address: 0.0.0.0
port: 10250 # kubelet端口
cgroupDriver: systemd # 与containerd一致
clusterDNS: [10.96.0.10] # DNS服务IP(CoreDNS)
clusterDomain: cluster.local
authentication:anonymous:enabled: false # 禁用匿名访问webhook:enabled: true # 启用webhook认证
authorization:mode: Webhook # 启用webhook授权
EOF# 创建kubelet服务
cat > /usr/lib/systemd/system/kubelet.service << EOF
[Unit]
Description=Kubernetes Kubelet
After=containerd.service[Service]
ExecStart=/usr/local/bin/kubelet \\--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.kubeconfig \\ # 引导配置--kubeconfig=/etc/kubernetes/kubelet.kubeconfig \\ # 最终配置--config=/etc/kubernetes/kubelet-conf.yml \\ # 配置文件--container-runtime-endpoint=unix:///run/containerd/containerd.sock
Restart=always
RestartSec=10s[Install]
WantedBy=multi-user.target
EOF# 启动kubelet
systemctl daemon-reload
systemctl enable --now kubelet
2. 启动 kube-proxy
# 创建kube-proxy配置
cat > /etc/kubernetes/kube-proxy.yaml << EOF
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs" # 使用IPVS模式(性能优于iptables)
clusterCIDR: 172.16.0.0/12 # Pod网段
kubeconfig: /etc/kubernetes/kube-proxy.kubeconfig # 连接API Server的配置
EOF# 创建kube-proxy服务
cat > /usr/lib/systemd/system/kube-proxy.service << EOF
[Unit]
Description=Kubernetes Kube Proxy[Service]
ExecStart=/usr/local/bin/kube-proxy \\--config=/etc/kubernetes/kube-proxy.yaml \\--v=2
Restart=always
RestartSec=10s[Install]
WantedBy=multi-user.target
EOF# 启动kube-proxy
systemctl daemon-reload
systemctl enable --now kube-proxy
九、部署网络插件与附加组件
1. 安装 Calico 网络插件
# 下载Calico配置
wget https://mirrors.chenby.cn/https://github.com/projectcalico/calico/blob/master/manifests/calico-typha.yaml
cp calico-typha.yaml calico.yaml# 修改Pod网段(与kube-controller-manager配置一致)
vim calico.yaml
# 找到CALICO_IPV4POOL_CIDR,设置为172.16.0.0/12# 替换镜像源(加速拉取)
sed -i "s#docker.io/calico/#m.daocloud.io/docker.io/calico/#g" calico.yaml# 部署Calico
kubectl apply -f calico.yaml
2. 安装 CoreDNS(服务发现)
# 添加Helm仓库
helm repo add coredns https://coredns.github.io/helm
helm pull coredns/coredns
tar xvf coredns-1.29.0.tgz
cd coredns# 修改Service IP为10.96.0.10(与kubelet配置的clusterDNS一致)
vim values.yaml
service:clusterIP: "10.96.0.10"# 部署CoreDNS
helm install coredns ./ -n kube-system
3. 安装 Metrics Server(资源监控)
# 下载配置
wget https://mirrors.chenby.cn/https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml# 修改配置(添加--kubelet-insecure-tls,避免证书验证问题)
vim components.yaml
args:- --kubelet-insecure-tls # 测试环境使用,生产环境需配置证书# 部署Metrics Server
kubectl apply -f components.yaml
十、集群验证
1. 检查节点状态
kubectl get nodes
# 输出应显示所有节点为Ready状态
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready <none> 10m v1.29.2
k8s-master02 Ready <none> 10m v1.29.2
k8s-master03 Ready <none> 10m v1.29.2
k8s-node01 Ready <none> 5m v1.29.2
k8s-node02 Ready <none> 5m v1.29.2
2. 部署测试 Pod
# 创建Nginx Deployment
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-test
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.25.4ports:- containerPort: 80
EOF# 检查Pod状态
kubectl get pods -o wide
# 输出应显示3个Pod分布在不同节点,状态为Running
总结
通过二进制方式部署 Kubernetes 高可用集群,虽然步骤复杂,但能提供更高的灵活性和可控性。本文介绍了从基础环境配置、容器运行时安装、证书生成、核心组件部署到高可用配置的全过程,结合 Nginx 和 Keepalived 实现了 API Server 的负载均衡与故障自动切换。
后续可根据需求扩展集群功能,如部署 Ingress 控制器实现外部访问、配置存储插件提供持久化存储等。在生产环境中,还需注意证书轮换、组件升级策略及监控告警的配置,确保集群长期稳定运行。