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的协助才能完成整个部署过程。

扫描二维码关注公众号,回复: 14674490 查看本文章

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

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设置标签分别
kubectl label nodes node1 zz=cxk
 
kubectl label nodes node2 cc=cxk
查看标签
kubectl get nodes --show-labels
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

三、故障排查 

描述

Pending

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

Running

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

Succeeded

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

Failed

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

Unknown

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

查看pod事件
kubectl describe TYPE NAME_PREFIX  

查看pod日志(Failed状态下)
kubectl logs POD_NAME

进入pod(状态为running,但是服务没有提供)
kubectl exec –it POD_NAME bash

猜你喜欢

转载自blog.csdn.net/Drw_Dcm/article/details/127788971