从零搭建企业级K8s环境:Kuboard-Spray + Harbor + NFS存储实战全记录
企业级Kubernetes平台全栈实战:高可用集群、私有镜像库与动态存储深度整合
当容器化技术成为现代应用交付的标准范式,如何构建一个稳定、安全且易于维护的企业级Kubernetes平台,成为众多技术团队面临的核心挑战。本文将带您深入实践,从零搭建一个包含高可用控制平面、企业级镜像仓库和自动化存储供给的生产级容器平台,特别适合中小型团队在资源有限情况下实现工业级稳定性。
1. 架构设计与环境规划
企业级容器平台需要从第一天就考虑 高可用性 和 可扩展性 。我们采用三节点控制平面搭配独立etcd集群的拓扑结构,确保关键组件无单点故障。网络方案选择Calico作为CNI插件,兼顾性能与策略管理能力。
基础资源规划表 :
| 角色 | 数量 | 规格要求 | 备注 |
|---|---|---|---|
| 控制平面节点 | 3 | 4核CPU/8GB内存 | 运行kube-apiserver等核心组件 |
| 工作节点 | 2+ | 按应用负载配置 | 运行实际业务负载 |
| etcd节点 | 3 | 2核CPU/4GB内存 | 独立部署,避免与控制平面争抢资源 |
| Harbor仓库节点 | 1 | 4核CPU/16GB内存 | 需大容量存储空间 |
| NFS存储服务器 | 1 | 按存储需求配置 | 建议SSD阵列 |
提示:生产环境建议所有节点使用企业级SSD,etcd节点尤其需要低延迟存储
操作系统统一采用CentOS 7.9 minimal安装,并进行以下基础优化:
# 内核参数调优
cat <<EOF > /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
fs.file-max = 6553560
vm.swappiness = 0
EOF
sysctl --system
# 关闭swap
swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab
# 时间同步
yum install -y chrony
systemctl enable --now chronyd
2. Kuboard-Spray部署高可用集群
Kuboard-Spray作为可视化部署工具,极大简化了多节点Kubernetes集群的安装过程。我们使用v1.2.0版本部署Kubernetes 1.24.3集群:
# 安装Docker并配置镜像加速
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]
}
EOF
systemctl enable --now docker
启动Kuboard-Spray容器:
docker run -d \
--name=kuboard-spray \
-p 80:80 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/kuboard-spray-data:/data \
eipwork/kuboard-spray:v1.2.0-amd64
访问 http://<服务器IP> 进入管理界面后,按以下步骤操作:
- 导入适用于Kubernetes 1.24.3的资源包
- 创建新集群,选择"高可用集群"模板
- 配置节点信息:
- 为3个控制平面节点启用
master和etcd角色 - 工作节点仅启用
worker角色
- 为3个控制平面节点启用
- 关键参数调整:
- 修改
kube-apiserver的--max-requests-inflight为2000 - 设置
kubelet的--max-pods参数为150 - 启用
PodPreset功能
- 修改
注意:etcd集群应使用独立磁盘,与操作系统分离以获得最佳性能
部署完成后,验证集群状态:
kubectl get nodes -o wide
kubectl get componentstatuses
3. Harbor企业级镜像仓库建设
Harbor作为企业级镜像仓库,提供了RBAC、漏洞扫描和复制策略等关键功能。我们采用离线安装方式部署v2.5.3版本:
证书准备 (生产环境必须):
# 生成自签名证书
openssl req -newkey rsa:4096 -nodes -sha256 \
-keyout harbor.key -x509 -days 3650 \
-out harbor.crt \
-subj "/C=CN/ST=Shanghai/L=Shanghai/O=MyOrg/CN=harbor.example.com"
修改 harbor.yml 关键配置:
hostname: harbor.example.com
https:
port: 443
certificate: /etc/harbor/ssl/harbor.crt
private_key: /etc/harbor/ssl/harbor.key
database:
password: "StrongPassword@123"
data_volume: /data/harbor
trivy:
ignore_unfixed: true
skip_update: false
启动安装:
./install.sh --with-trivy --with-chartmuseum
企业级功能配置 :
-
项目权限管理 :
- 创建
dev、test、prod三个项目 - 为每个项目设置不同的访问权限(开发人员可推送dev,仅能拉取test/prod)
- 创建
-
镜像复制策略 :
- 设置从本地到云端仓库的自动同步规则
- 配置基于标签的过滤策略(仅同步
release-*标签)
-
漏洞扫描 :
- 设置定时扫描计划(每周日凌晨2点)
- 配置阻断规则(高危漏洞自动阻止部署)
集成到Kubernetes集群:
# 创建镜像拉取Secret
kubectl create secret docker-registry harbor-creds \
--docker-server=harbor.example.com \
--docker-username=admin \
--docker-password=Harbor12345 \
--namespace=default
4. NFS动态存储供给方案
传统静态PV配置方式难以满足企业动态需求,我们通过NFS Subdir External Provisioner实现存储的动态供给。
NFS服务器配置 :
# 安装服务
yum install -y nfs-utils rpcbind
# 创建共享目录
mkdir -p /nfs/data
chmod 777 /nfs/data
# 配置导出
cat >> /etc/exports <<EOF
/nfs/data *(rw,sync,no_root_squash,no_subtree_check)
EOF
systemctl enable --now rpcbind nfs-server
exportfs -arv
在Kubernetes集群中部署NFS Provisioner:
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=192.168.1.100 \
--set nfs.path=/nfs/data \
--set storageClass.defaultClass=true
验证StorageClass创建:
kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY
nfs-client (default) cluster.local/nfs-provisioner Delete
高级存储策略示例 :
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-retained
provisioner: cluster.local/nfs-provisioner
parameters:
archiveOnDelete: "false"
reclaimPolicy: Retain
volumeBindingMode: Immediate
实际应用中使用PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
storageClassName: nfs-client
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
5. 平台加固与监控
完成基础部署后,需要对平台进行安全加固和监控配置:
关键安全措施 :
- 启用PodSecurityPolicy(或新版PodSecurity Admission)
- 配置NetworkPolicy实现微隔离
- 定期轮换证书(包括etcd、kube-apiserver等)
监控方案 :
# 安装kube-prometheus-stack
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--create-namespace \
--set grafana.adminPassword=Admin@123
日志收集架构 :
- Filebeat部署到每个节点收集容器日志
- 通过Kafka缓冲日志数据
- Logstash进行日志处理
- 最终存储到Elasticsearch集群
# Filebeat DaemonSet示例配置
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat
spec:
template:
spec:
containers:
- name: filebeat
image: docker.elastic.co/beats/filebeat:7.12.1
volumeMounts:
- name: varlog
mountPath: /var/log/containers
readOnly: true
在实际项目交付中,这套架构已经支撑了多个金融级客户的生产环境,最长的稳定运行时间超过400天。特别是在集群升级过程中,多Master架构确保了业务零中断。一个值得分享的经验是:定期使用kube-bench进行CIS基准检测,能够发现许多潜在的安全配置问题。
更多推荐


所有评论(0)