云原生之K8S------list-watch机制,调度约束以及故障排查

news2024/11/26 16:32:46

一,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,这里有三个list-watch,分别是controller manager(运行在Master),Scheduler(运行在Master),kubelet(运行在node)。他们在进程已启动就会监听(watch)APIserver出来的事件。

2,用户通过kubectl或其他API客户端请求给APIserver来建立一个pod对象副本。

3,APIserver尝试着将pod对象的相关元信息存入etcd中,带写入操作执行完成,APIserver即会返回确认信息至客户端。

4,当etcd接受创建pod信息1以后,会发送一个create事件给APIserver。

5,由于controller manager 一直在监听(watch ,通过http的8080端口)APIserver中的事件,次时APIserver接受到了create事件,又会发送给controller manager。

6,controller manager 在接到create事件后,调用其中的replication controller 来保证node上面需要创建的副本数量。一旦副本数量少于rc中定义的数量,RC会自动创建副本,总之它是保证副本数量的controller。

7,在controller manager  创建pod副本以后,APIserver会在etcd中记录这个pod的详细信息。

例如pod的副本数,container的内容是什么。

8,同样的etcd会将创建pod的详细通过时间发送给APIserver。

9,由于 Scheduler 在监听(Watch)APIServer,并且它在系统中起到了“承上启下”的作用,“承上”是指它负责接收创建的Pod 事件,为其安排 Node;“启下”是指安置工作完成后,Node 上的 kubelet 进程会接管后继工作,负责 Pod生命周期中的“下半生”。 换句话说,Scheduler 的作用是将待调度的 Pod 按照调度算法和策略绑定到集群中 Node 上。

10,Scheduler 调度完毕以后会更新 Pod 的信息,此时的信息更加丰富了。除了知道 Pod 的副本数量,副本内容。还知道部署到哪个Node 上面了。并将上面的 Pod 信息更新至 API Server,由 APIServer 更新至 etcd 中,保存起来。

11,etcd将更新成功的事件发送给APIaerver,APIserver也开始反映此pod对象的调度结果。

12,kubelet 是在 Node 上面运行的进程,它也通过 List-Watch的方式监听(Watch,通过https的6443端口)APIServer 发送的 Pod 更新的事件。kubelet会尝试在当前节点上调用 Docker 启动容器,并将 Pod 以及容器的结果状态回送至 APIServer。

13,APIServer 将 Pod 状态信息存入 etcd 中。在 etcd确认写入操作成功完成后,APIServer将确认信息发送至相关的 kubelet,事件将通过它被接受。

注意:在创建pod的工作就已经完成了后,为什么kubelet还要一直监听呢?原因很简单,假设这个时候kubectl发命令,要扩充pod副本数量,那么上面的流程又会被触发一遍,kubelet会根据最新的pod的部署情况调整node的资源,又或者pod副本数量没有发生变化,,但是其中的镜像文件升级了,kubelet也会自动获取最新的镜像文件并且加载。

二,调度约束(scheducer调度器)

kubernetes通过list-watch的机制进行每个组件的协助,每个组件之间的设计实现了解耦。

1,基本的调度方式

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

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

2,nodename

apiVersion: v1  
kind: Pod  
metadata:
  name: pod-example  
  labels:
    app: nginx  
spec:
  nodeName: node1
  containers:
  - name: nginx  
    image: nginx:1.15

 

kubectl apply  -f node1.yaml
kubectl get pods -o wide

 3,nodeselector

#查看标签用法
kubectl label --help
Usage:
  kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N
[--resource-version=version] [options]
#需要获取node上的NAME名称
kubectl get node
给对应的node设置标签分别
[root@master ~]#kubectl label nodes node1 zz=cxk

[root@master ~]#kubectl label nodes node2 cc=cxk
查看标签
kubectl get nodes --show-labels

[root@master ~]# vim nodeselector.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
  labels:
    app: nginx
spec:
  nodeSelector:
    lc: fuheinan
  containers:
  - name: nginx
    image: nginx:1.15

kubectl delete -f nodeselectl.yaml
kubectl get pods -o wide

 

三,故障排查

描述
pendingPod创建已经提供到kubernettes,但是,因为某种原因而不能顺利创建,例如下载镜像慢,调度不成功
RunningPod已经绑定到一个节点,并且已经创建了所以容器,至少有一个容器正在运行中,或正在启动或重新启动。
Successedpod中所以容器都已经成功终止,不会重新启动
FailedPod的所以容器均已终止,且至少有一个容器已在故障中终止,也就是说,容器要么以非零状态退出,要不被系统终止,
Unknown由于某种原因apiserver无法获得pod的状态,通常是由Master与pod所在主机kubelet通信时出错。
#查看pod事件
kubectl describe TYPE NAME_PREFIX  
#查看pod日志(Failed状态下)
kubectl logs POD_NAME
#进入pod(状态为running,但是服务没有提供)
kubectl exec –it POD_NAME bash

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/4226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue笔记:基础入门(前篇)

文章目录前言开发环境准备无构建使用构建式使用API风格单文件组件页面打开时闪烁后记前言 Vue(发音为 /vjuː/,类似 view)是一款渐进式Web前端框架,提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。 官方网站:…

上海亚商投顾:沪指缩量跌0.43%

上海亚商投顾前言:无惧大盘大跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 三大指数今日集体回调,沪指午后跌近1%,创业板指盘中跌超1.7%,临近尾盘跌幅有所…

字符串查询--Python

str1 hello python index 需求:查找p所在的索引位置 格式: 字符串.index(self(不用传值), sub(子字符串), start(起始位置), end(结束位置)) print(str1.index(p)) # 6 如果字符串中含有多个子字符串,则会返回指定范围内的从左至右的第一个查找到的子字符串位置索引 print…

开源组件搭建完整的Kubernetes-Devops平台方案

文章目录平台六大模块K8S自动化运维容器平台(Rancher Kubernetes)CI/CD自动构建自动部署平台(Jenkins Harbor Helms)监控告警平台(PrometheusGrafana)微服务ServiceMesh平台(Lstio&#xff0…

Linux如何写C语言

想要在Linux系统上写C语言程序,需要有两个东西: vim编辑器gcc编译器 下载 vim 和 gcc: 先切换到root用户状态 ,输入 sudo passwd root //设置密码然后输入 su root //切换到root用户状态在root用户状态下,输入 apt in…

CMOS电路基础知识,包括NMOS、PMOS,以及由它们构成的非门、与非、或非等门电路,和版图绘制(L-edit16.3)

CMOS电路基础知识,包括NMOS、PMOS,以及由它们构成的非门、与非、或非等门电路,和版图绘制(L-edit16.3) 1,CMOS门电路1)PMOS和NMOS电路结构2)`MOS管结构的工作原理`,如NMOS管结构2,非门电路结构,即反相器3,与非门和或非门、与门和或门4,传输门+数据选择器。1,CMOS…

第四章:Redis--一站式高性能存储方案(包含下载)

Redis概述 Redis是一 款基于键值对的NoSQL数据库,它的值支持多种数据结构。 key都是一个String类型,但value的类型包含以下: 字符串(strings)、哈希(hashes)、 列表(lists)、 集合(sets)、 有序集合(sorted sets)等 Redis将所有的数据都存放…

【1684. 统计一致字符串的数目】

来源:力扣(LeetCode) 描述: 给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。如果一个字符串的每一个字符都在 allowed 中,就称这个字符串是 一致字符串 。 请你返回 words 数组中 一致字符串 的数…

ElasticSearch系列——Kibana,核心概念

ElasticSearch系列——Kibana,核心概念Kibana下载地址Windows安装修改配置文件启动Kibana验证ES核心概念Index索引Mapping映射Document文档使用Kibana对ES进行操作查询所有索引查询指定索引创建索引指定分片和副本数删除索引创建映射查看指定索引的映射信息映射无法…

网络安全基础入门-概念名词

目录 网络安全学习(2022.10.23) 一、基础入门——概念名词 DNS 脚本语言 后门(2022.11.06) WEB WEB相关安全漏洞 演示案例 网络安全学习(2022.10.23) 一、基础入门——概念名词 查询网站&#xff…

【Linux】进程概念与进程状态

文章目录一、什么是进程1、进程概念2、进程描述 -- PCB二、进程的一些基本操作1、查看进程2、结束进程2、通过系统调用获取进程标示符3、通过系统调用创建子进程三、进程状态1、普适的操作系统层面2、具体Linux操作系统层面四、两种特殊的进程1、僵尸进程2、孤儿进程五、进程优…

社科研究中的问卷设计详解

文章目录参考的文献和网站等资源:参考的up主的讲解B站北师大钱婧老师、参考B站up除草姬:参考的书籍查阅过程中给自己补充的问卷基础知识cssci一篇关于兴趣问卷的案例分析看懂这篇论文需要补充的知识点SPSS和Mplus中如何操作参考的文献和网站等资源&#…

C语言从0到1之《三子棋》的实现

🕺作者启明星使 🎃专栏:《数据库》《C语言》 🏇分享一句话: 沉香:差一点,怎么总是差一点 杨戬:一定是练功的时候总是差不多,到了关键的时候就是差一点 大家一起加油&…

Android Studio开发之应用组件Application的讲解及实战(附源码,通过图书管理信息系统实战)

需要源码请点赞关注收藏后评论区留言~~ 一、Application的生命周期 Application是Android的一大组件,在APP运行过程中有且仅有一个Application对象贯穿应用的整个生命周期 打开AndroidMainfest.xml 发现activity节点的上级正是application节点,不过该节…

手把手带你搭建个人博客系统(一)

⭐️前言⭐️ 该web开发系统涉及到的知识: Java基础MySQL数据库JDBC技术前端三件套(HTMLCSSJavaScript)Servlet 使用到的开发工具: ideavscodetomcatpostmanFiddler 博主将会手把手带你搭建个人博客系统。 因文章篇幅较长&am…

【Spring boot 静态资源处理】

默认静态资源处理 Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性。 建议大家使用 Spring Boot 的默认配置方式,如果需要特殊处理的再通过配置进行修改。 如果想要自 己 完 全 控 制 WebMVC ,就需…

快速创建django项目管理系统流程

首先创建django project,虚拟环境选择我已经有的虚拟环境,下面是创建后的画面,简单的框架模板,需要配置改动一些代码参数,才能适合我自己的习惯。 这里我经常用到的习惯必须导入的是simpleui库,还有django的…

基于STM32-Socket-Qt 遥控小车(一代)

文章目录一、项目分析1. 项目简介2. 知识储备3. 硬件选择二、STM32部分三、QT部分四、遥控小车演示程序源码一、项目分析 1. 项目简介 本项目本质为客户端与服务器之间的通信,通过发送不同的指令,服务器和客户端进行不同的操作。 客户端:基…

声学特征提取

声学特征提取流程图 语谱图 语谱图的横坐标是时间,纵坐标是频率,坐标点值为语音数据能量。由于是采用二维平面表达三维信息,所以能量值的大小是通过颜色来表示的,颜色深,表示该点的语音能量越强。 语谱图形成过程 …

zabbix监控Linux

1. 环境配置: 主机名主机地址操作系统角色zabbix192.168.188.201Rocky Linux release 8.6zabbix-servernode1192.168.188.111CentOS7zabbix-agent 2. 配置zabbix客户端: 1>. 下载并安装zabbix客户端: [rootnode1 ~]# wget https://mi…