云计算之kubernetes节点排错

本文探讨了Kubernetes集群中Pod调度异常的问题,通过对比分析发现节点缺少dnsmasq服务导致Pod无法在该节点上运行,安装并配置dnsmasq后,问题得以解决,验证了所有Pod能正常在两个节点间调度。

1. 问题:


    两台节点都是Ready状态,node上 docker / kubelet / flanneld / kube-proxy 服务都运行正常,为什么pod只能被调度到一台上?

2. 现状:


    

master]# kubectl get nodes -o wide
        NAME             STATUS   ROLES    AGE    VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION           CONTAINER-RUNTIME
        192.168.89.133   Ready    <none>   194d   v1.16.2   192.168.89.133   <none>        CentOS Linux 7 (Core)   3.10.0-1062.el7.x86_64   docker://1.13.1
        192.168.89.134   Ready    <none>   193d   v1.16.2   192.168.89.134   <none>        CentOS Linux 7 (Core)   3.10.0-1062.el7.x86_64   docker://1.13.1
    两台机器都是Ready状态
master]# kubectl get pods -n kube-system -o wide
        NAME                        READY   STATUS    RESTARTS   AGE   IP          NODE             NOMINATED NODE   READINESS GATES
        kube-dns-6685cc54bd-lb5v4   3/3     Running   0          46m   10.1.84.2   192.168.89.134   <none>           <none>
    但是所有的pod只调度到节点2


3. 根据现有问题思考原因


    思考一:很久以前配置了节点1不可用
    思考二:节点1更改过服务权限配置
    思考三:master做过限制,禁止调度到节点1


4. 排错:


    先看正常的节点2拥有哪些端口在节点1上没有的
    

节点2]# ss -anptu | less
        udp    UNCONN     0      0      192.168.122.1:53                    *:*                   users:(("dnsmasq",pid=2083,fd=5))
        udp    UNCONN     0      0      *%virbr0:67                    *:*                   users:(("dnsmasq",pid=2083,fd=3))
        tcp    LISTEN     0      5      192.168.122.1:53                    *:*                   users:(("dnsmasq",pid=2083,fd=6))


    发现 节点1上没有 dnsmasq,也就是53端口,也没有安装dnsmasq
    

节点1]# yum -y install dnsmasq
    节点1]# dnsmasq 
    节点1]# ss -anptu | grep dnsmasq
        udp    UNCONN     0      0         *:53                    *:*                   users:(("dnsmasq",pid=92515,fd=4))
        udp    UNCONN     0      0      [::]:53                 [::]:*                   users:(("dnsmasq",pid=92515,fd=6))
        tcp    LISTEN     0      5         *:53                    *:*                   users:(("dnsmasq",pid=92515,fd=5))
        tcp    LISTEN     0      5      [::]:53                 [::]:*                   users:(("dnsmasq",pid=92515,fd=7))
    master]# kubectl delete  -f kubedns-controller.yaml
        deployment.apps "kube-dns" deleted
    master]# kubectl create  -f kubedns-controller.yaml
        deployment.apps/kube-dns created
    master]# kubectl get pods -n kube-system -o wide
        NAME                        READY   STATUS    RESTARTS   AGE     IP         NODE             NOMINATED NODE   READINESS GATES
        kube-dns-6685cc54bd-bqjsn   3/3     Running   0          4m22s   10.1.5.2   192.168.89.133   <none>           <none>


    发现可以重新调度到节点1上了,但是不确定这时候节点2是否也是正常的,现在多建几个pods验证下
    重新安装dashboard
  

 master]# kubectl create -f recommended.yaml
        namespace/kubernetes-dashboard created
        serviceaccount/kubernetes-dashboard created
        service/kubernetes-dashboard created
        secret/kubernetes-dashboard-certs created
        secret/kubernetes-dashboard-csrf created
        secret/kubernetes-dashboard-key-holder created
        configmap/kubernetes-dashboard-settings created
        role.rbac.authorization.k8s.io/kubernetes-dashboard created
        clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
        rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
        clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
        deployment.apps/kubernetes-dashboard created
        service/dashboard-metrics-scraper created
        deployment.apps/dashboard-metrics-scraper created
master]# kubectl get pods -n kubernetes-dashboard -o wide
        NAME                                         READY   STATUS    RESTARTS   AGE   IP          NODE             NOMINATED NODE   READINESS GATES
        dashboard-metrics-scraper-5f4dc864c4-rt45p   1/1     Running   0          13s   10.1.84.2   192.168.89.134   <none>           <none>
        kubernetes-dashboard-687bd5c7d7-zrppg        1/1     Running   0          14s   10.1.5.3    192.168.89.133   <none>           <none>


5. 总结
    将错误的和正确的比较,不一定是核心配置,也有可能是周边应用引起的,我这节点1之前一直无法调度,没有注意,今天注意了下,原来是dns问题,没有这个dnsmasq做支撑,master可能就无法调度pod到这台机器了。

<think>好的,用户询问的是关于云计算大赛中排错练习的方法和资源。首先,我需要回想一下用户提供的引用内容,看看是否有相关的信息。引用1到4主要提到了各个省市的云计算应用赛项样题,包括私有云、容器云、公有云的任务模块,以及涉及到的技术如OpenStack、Kubernetes、DevOps、边缘计算等。用户之前的问题可能集中在这些技术的排错上。 接下来,我需要整理排错练习的一般方法,并结合大赛的具体要求。比如,大赛可能考察OpenStack部署错误、Kubernetes集群故障、网络配置问题等。所以,排错方法需要覆盖日志分析、分层检查、工具使用等方面。此外,资源方面,官方文档、实验环境、模拟题都是关键。 用户可能希望得到具体的步骤和资源链接,但由于不能提供外部链接,只能建议官方文档和实验平台。同时,用户可能需要知道如何模拟故障场景,比如通过破坏服务或配置错误来练习排错。还要考虑时间限制,大赛通常有时间压力,所以快速定位问题很重要。 需要确保回答结构清晰,分步骤说明方法,然后列出资源类型,最后生成相关问题。同时,检查是否引用了提供的资料,例如引用4提到OpenStack和Kubernetes,引用3提到云服务搭建,这些可以作为排错的具体场景。可能还需要提到日志分析工具和监控工具,如Prometheus,这在引用中虽然没有直接提到,但属于常见的云原生工具。 最后,生成的相关问题要围绕排错的不同方面,比如工具推荐、时间管理、常见错误类型等,帮助用户进一步探索。</think>### 云计算大赛排错练习方法与资源指南 #### 一、排错核心方法论 1. **分层排查法** - **基础设施层**:检查网络连通性(如$ping$、$traceroute$)、硬件资源分配(CPU/内存/磁盘使用率) - **服务层**:验证OpenStack组件状态($systemctl status nova-api$)、Kubernetes集群健康度($kubectl get nodes$)[^4] - **应用层**:分析容器日志($docker logs <container_id>$)、云应用API响应状态码 2. **日志分析技巧** - 使用$grep -C 5 "ERROR" /var/log/nova/nova-api.log$定位关键错误上下文 - 结合$journalctl -u neutron-server --since "10 minutes ago$"追踪服务时间线 3. **模拟故障场景** - 故意制造典型错误(如删除Kubernetes的etcd数据目录、修改OpenStack配置文件权限) - 参考**2024广东省赛样题**中私有云运维任务要求设计故障场景[^1] #### 二、专项训练资源 1. **官方文档** - OpenStack排错指南:https://docs.openstack.org/ - Kubernetes故障诊断:https://kubernetes.io/docs/tasks/debug/ *(注:需配合实验环境操作)* 2. **实验平台** - **DevStack**:快速搭建OpenStack测试环境 ```bash git clone https://opendev.org/openstack/devstack ./devstack/stack.sh ``` - **Katacoda Kubernetes沙盒**:浏览器直接运行排错练习 3. **大赛模拟题** - **2023全国赛题**中"云防火墙配置错误导致服务中断"场景[^3] - **2025山东赛卷**容器云服务搭建环节的典型网络隔离问题[^2] #### 三、排错工具箱 | 工具类型 | 推荐工具 | 应用场景示例 | |----------------|--------------------------|----------------------------------| | 网络诊断 | Wireshark、tcpdump | 分析VXLAN隧道不通问题 | | 性能监控 | Prometheus+Grafana | 定位CPU过载导致虚拟机创建失败 | | 配置验证 | Ansible Dry-Run模式 | 检查云平台自动化部署脚本潜在错误 | | 容器诊断 | kubectl describe pod | 排查Pod处于Pending状态的原因 | #### 四、训练建议 1. 每天完成1-2个**计时排错任务**(如20分钟内恢复Kubernetes API服务) 2. 建立**排错知识库**,分类记录常见错误码与解决方案 3. 参考**2024河北赛题**中"边缘计算系统运维"任务设计混合云故障场景[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值