单机环境下的K8s快速部署与Kuboard实战:从零搭建Nginx服务

张开发
2026/4/6 23:20:34 15 分钟阅读

分享文章

单机环境下的K8s快速部署与Kuboard实战:从零搭建Nginx服务
1. 单机K8s环境快速部署指南第一次接触Kubernetes的朋友可能会被复杂的集群搭建劝退但其实单机环境下的K8s部署可以非常简单。我最近在测试环境中反复验证了一套稳定可靠的部署方案整个过程从系统配置到集群就绪只需要20分钟。下面分享的每个步骤都附带避坑指南这些经验都是用无数个深夜调试换来的。1.1 系统环境调优实战操作系统建议选择CentOS 7或Ubuntu 18.04 LTS版本这两个系统对K8s的兼容性最好。我遇到过最典型的问题就是SELinux和防火墙导致的组件通信失败建议直接关闭# 临时关闭SELinux setenforce 0 # 永久关闭需重启生效 sed -i s/^SELINUXenforcing$/SELINUXdisabled/ /etc/selinux/config # 停止防火墙服务 systemctl stop firewalld # 禁用开机启动 systemctl disable firewalld内存交换分区是另一个隐形杀手Kubelet会直接罢工。这里有个细节要注意除了用swapoff -a临时关闭还要记得注释掉/etc/fstab中的swap挂载行否则重启后又会恢复。内核参数调优直接影响网络性能建议创建专属配置文件cat EOF /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 EOF # 加载配置 sysctl --system1.2 Docker与K8s的版本婚配版本兼容性问题我踩过三次坑最严重的一次导致所有Pod网络不通。经过实测以下组合最稳定Docker CE 18.06.x Kubernetes 1.13.xDocker CE 19.03.x Kubernetes 1.18.x安装指定版本Docker的秘诀是yum remove docker* -y # 彻底清理旧版本 yum install -y yum-utils yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install --setoptobsoletes0 docker-ce-18.06.3.ce-3.el7 -y国内用户一定要配置镜像加速这是我常用的多镜像源配置{ registry-mirrors: [ https://registry.docker-cn.com, https://3laho3y3.mirror.aliyuncs.com ], exec-opts: [native.cgroupdriversystemd] }1.3 K8s组件安装技巧使用阿里云源安装能解决90%的包下载问题cat EOF /etc/yum.repos.d/kubernetes.repo [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled1 gpgcheck0 repo_gpgcheck0 EOF yum install -y kubelet-1.13.12 kubeadm-1.13.12 kubectl-1.13.12镜像拉取有个小技巧可以先用国内源下载再改标签。比如docker pull mirrorgooglecontainers/kube-apiserver:v1.13.12 docker tag mirrorgooglecontainers/kube-apiserver:v1.13.12 k8s.gcr.io/kube-apiserver:v1.13.122. 集群初始化深度解析2.1 初始化命令的隐藏参数最简初始化命令应该是kubeadm init --pod-network-cidr10.100.0.0/16但有几个增强参数很实用--ignore-preflight-errorsSwap强制忽略swap警告--upload-certs自动上传证书方便后续节点加入--control-plane-endpoint为单机设置固定访问端点初始化失败时记得查看详细日志journalctl -xeu kubelet2.2 网络插件选型建议Flannel是最轻量的选择但需要匹配正确的CIDRkubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml如果遇到网络问题可以检查ip a查看cni0网桥是否存在route -n确认路由表tcpdump -i cni0抓包分析2.3 单机部署的特殊处理默认master节点有污点限制解除命令要记牢kubectl taint nodes --all node-role.kubernetes.io/master-验证节点就绪状态时我最喜欢用这个组合命令watch -n 1 kubectl get nodes kubectl get pods -n kube-system3. Kuboard可视化管控实战3.1 容器化部署技巧推荐使用数据卷持久化配置docker run -d \ --namekuboard \ -p 80:80/tcp \ -p 10081:10081/tcp \ -v /data/kuboard:/data \ -e KUBOARD_ENDPOINThttp://your-ip:80 \ eipwork/kuboard:v3登录后第一件事要做的修改默认密码admin/kuboard123配置时区为Asia/Shanghai设置自动刷新间隔为15秒3.2 Nginx应用部署全流程在Kuboard中创建Deployment时这些参数最易出错镜像拉取策略测试环境用Always生产环境用IfNotPresent资源限制建议设置requests和limits相同值健康检查必须配置readinessProbe和livenessProbe端口映射的黄金法则容器端口必须与nginx.conf中的listen一致Service的targetPort要匹配容器端口NodePort范围要在30000-32767之间3.3 日常运维技巧查看实时日志的小技巧kubectl logs -f deployment/nginx --tail100快速进入容器排查问题kubectl exec -it $(kubectl get pods -l appnginx -o jsonpath{.items[0].metadata.name}) -- bash我最常用的监控命令组合watch -n 1 kubectl top pods kubectl get events --sort-by.metadata.creationTimestamp4. 常见问题解决方案库4.1 镜像拉取失败处理典型错误ImagePullBackoff的解决步骤检查镜像tag是否拼写错误确认docker配置了正确的镜像加速器尝试手动docker pull测试连通性对于私有镜像创建正确的secret4.2 Pod状态异常排查Pending状态常见原因资源不足free -h查看内存没有可用节点kubectl describe pod查看事件PVC未绑定kubectl get pvcCrashLoopBackOff的排查路径kubectl logs查看崩溃前日志kubectl describe pod看Exit Code检查容器启动命令是否正确4.3 网络故障处理Service无法访问的检查清单kubectl get endpoints确认有正确IP检查Service的selector与Pod标签匹配测试ClusterIP是否能在节点上访问确认kube-proxy组件运行正常DNS解析失败的调试方法kubectl run -it --rm --imagebusybox debug --restartNever -- nslookup kubernetes.default

更多文章