1. 为什么选择K3sHarbor组合最近两年在帮企业做容器化改造时发现很多团队都会遇到相同的困境既需要完整的容器镜像管理能力又受限于资源无法搭建完整的Kubernetes集群。这时候K3sHarbor的组合就成了我的首选方案。K3s作为轻量级Kubernetes发行版对硬件资源要求极低甚至能在树莓派上稳定运行而Harbor作为企业级镜像仓库提供了漏洞扫描、权限控制等生产级功能。实测在2核4G的云服务器上这个组合的部署时间不超过15分钟。相比传统方案它有几个明显优势资源占用低K3s本身内存占用不到512MBHarbor基础组件仅需1GB内存部署简单Helm一键安装values.yaml集中管理所有配置功能完整支持镜像同步、漏洞扫描、多租户管理等企业级特性2. 环境准备与前置条件2.1 基础环境配置在开始前需要准备好以下环境一台Linux服务器推荐Ubuntu 20.04至少2核CPU和4GB内存已安装Docker18.06版本开放30000-32767端口范围NodePort使用建议先执行系统优化命令# 关闭swap sudo swapoff -a sudo sed -i / swap / s/^/#/ /etc/fstab # 修改内核参数 cat EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 EOF sudo sysctl --system2.2 K3s集群安装使用官方一键安装脚本curl -sfL https://get.k3s.io | sh -安装完成后检查状态sudo kubectl get nodes sudo kubectl get pods -A常见问题处理如果遇到cgroup报错需要在启动时添加参数--kubelet-argcgroup-driversystemd国内环境可以添加镜像加速INSTALL_K3S_MIRRORcn sh -s --3. Helm安装与Harbor仓库配置3.1 Helm工具安装Helm是Kubernetes的包管理工具安装最新v3版本curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash添加Harbor官方仓库helm repo add harbor https://helm.goharbor.io helm repo update3.2 获取Harbor Chart下载最新Chart到本地helm pull harbor/harbor --untar cd harbor这里有个实用技巧可以先创建values.yaml的备份方便后续对比cp values.yaml values.yaml.bak4. values.yaml深度配置解析4.1 网络暴露配置修改expose部分实现NodePort暴露expose: type: nodePort tls: enabled: false # 测试环境可关闭TLS nodePort: ports: http: 30002 # 自定义HTTP端口 https: 30003 # 自定义HTTPS端口注意点生产环境务必启用TLS并配置合法证书端口范围需在30000-32767之间如果使用Ingress需要额外配置DNS解析4.2 存储配置实战使用NFS作为后端存储的典型配置persistence: enabled: true resourcePolicy: keep persistentVolumeClaim: registry: storageClass: nfs-client accessMode: ReadWriteMany size: 50Gi chartmuseum: storageClass: nfs-client size: 20Gi存储类创建示例NFS provisionerhelm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --set nfs.server192.168.1.100 \ --set nfs.path/data/nfs4.3 安全配置要点管理员密码配置的坑harborAdminPassword: YourStrongPassword123! # 不要用默认密码密码规则长度8-128字符必须包含大小写字母和数字特殊字符可选不要使用双引号包裹会导致登录失败5. 安装与验证5.1 Helm安装命令使用-f参数指定配置文件helm install my-harbor . -n harbor --create-namespace -f values.yaml安装过程监控watch kubectl get pods -n harbor5.2 常见问题排查如果Pod没有全部Running可以这样排查查看具体Pod日志kubectl logs -n harbor harbor-core-xxxx检查PVC绑定状态kubectl get pvc -n harbor查看事件记录kubectl get events -n harbor --sort-by.metadata.creationTimestamp6. 进阶配置与优化6.1 高可用配置通过调整副本数实现基础高可用portal: replicas: 2 core: replicas: 2 jobservice: replicas: 2 registry: replicas: 26.2 资源限制设置合理限制资源使用resources: limits: cpu: 1 memory: 2Gi requests: cpu: 0.5 memory: 1Gi6.3 镜像垃圾回收配置自动清理策略gc: enabled: true schedule: 0 0 * * * # 每天凌晨执行 retentionDays: 30 # 保留30天内的镜像7. 日常维护技巧7.1 备份与恢复使用velero进行全量备份velero backup create harbor-backup --include-namespaces harbor恢复命令velero restore create --from-backup harbor-backup7.2 版本升级Helm升级流程helm repo update helm upgrade my-harbor harbor/harbor -n harbor -f values.yaml升级前务必备份数据库和镜像存储查看官方升级说明在测试环境验证8. 实际使用案例8.1 镜像推送示例首先登录私有仓库docker login harbor.yourdomain.com -u admin标记并推送镜像docker tag nginx:latest harbor.yourdomain.com/library/nginx:v1 docker push harbor.yourdomain.com/library/nginx:v18.2 从K3s拉取镜像创建secret用于认证kubectl create secret docker-registry harbor-creds \ --docker-serverharbor.yourdomain.com \ --docker-usernameadmin \ --docker-passwordYourPassword在Pod中引用imagePullSecrets: - name: harbor-creds