• kubernetes中的list-watch机制


    目录

    一、list-watch机制

    1.list-watch介绍

    2.list-watch工作流程

    1.基本的调度方式 

    2.nodename

     3.nodeselector

    三、故障排查 


    一、list-watch机制

    1.list-watch介绍

    1)kubernetes是通过list-watch的机制进行每个组件的动作,保持数据同步的,每个组件之间的设计实现了解耦。

    2)用户是通过kubelet根据配置文件,向apiserver发送命令,在node节点上面建立pod和container。

    APIserver经过API调用,权限控制,调用资源和存储资源的过程,实际上还没有真正开始部署应用,这里需要controller manager,scheduler和kubelet的协助才能完成整个部署过程。

    3)在kubernetes中,所以部署的信息都会写到etcd中保存,实际上etcd在存储部署信息的时候,会发送create事件给APIserver会通过监听(watch)etcd发过来的事件。其他组件也会监听APIserver发出来的事件。
     

    2.list-watch工作流程

    pod是kubernetes的基础单元,pod启动典型创建过程如下:

    1.基本的调度方式 

    1)nodeName用于将pod调度到指定的node名称上(跳过调度器之间分配)

    2)nodeselector用于将pod调度到匹配label的node上

    2.nodename

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: pod-example
    5. labels:
    6. app: nginx
    7. spec:
    8. nodeName: node1
    9. containers:
    10. - name: nginx
    11. image: nginx:1.15
    1. kubectl apply -f node1.yaml
    2. kubectl get pods -o wide

     3.nodeselector

    1. 查看标签用法
    2. kubectl label --help
    3. Usage:
    4. kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N
    5. [--resource-version=version] [options]
    1. 需要获取node上的NAME名称
    2. kubectl get node

    1. 给对应的node设置标签分别
    2. kubectl label nodes node1 zz=cxk
    3. kubectl label nodes node2 cc=cxk
    4. 查看标签
    5. kubectl get nodes --show-labels
    1. vim nodeselector.yaml
    2. apiVersion: v1
    3. kind: Pod
    4. metadata:
    5. name: pod-example
    6. labels:
    7. app: nginx
    8. spec:
    9. nodeSelector:
    10. lc: fuheinan
    11. containers:
    12. - name: nginx
    13. image: nginx:1.15
    1. kubectl delete -f nodeselectl.yaml
    2. kubectl get pods -o wide

    三、故障排查 

    描述

    Pending

    Pod创建已经提交到Kubernetes。但是,因为某种原因而不能顺利创建。例如下载镜像慢,调度不成功。

    Running

    Pod已经绑定到一个节点,并且已经创建了所有容器。至少有一个容器正在运行中,或正在启动或重新启动。

    Succeeded

    Pod中的所有容器都已成功终止,不会重新启动。

    Failed

    Pod的所有容器均已终止,且至少有一个容器已在故障中终止。也就是说,容器要么以非零状态退出,要么被系统终止。

    Unknown

    由于某种原luapiserver无法获得Pod的状态,通常是由于Master与Pod所在主机kubelet通信时出错。

    1. 查看pod事件
    2. kubectl describe TYPE NAME_PREFIX
    3. 查看pod日志(Failed状态下)
    4. kubectl logs POD_NAME
    5. 进入pod(状态为running,但是服务没有提供)
    6. kubectl exec –it POD_NAME bash
  • 相关阅读:
    【Try to Hack】防火墙(一)
    国赛练习(1)
    上周热点回顾(2.6-2.12)
    DM8数据守护集群安装部署_手动切换
    制造业企业如何做好数字化转型?推荐收藏!
    【leetcode】 vscode leetcode [ERROR] invalid password? 问题解决
    使用Jekyll + GitHub Pages搭建个人博客
    uni-app华为审核被拒,驳回原因:您的应用在运行时,未见向用户告知权限申请的目的
    RK3568平台开发系列讲解(应用篇)串口应用编程之串口的使用步骤
    Matlab实现遗传算法仿真(附上20个仿真源码)
  • 原文地址:https://blog.csdn.net/Drw_Dcm/article/details/127788971