求职网站网页模板下载,购物网站建设案件,百度卖货平台,学做网站视频K8S调度
一、List-Watch 机制 controller-manager、scheduler、kubelet 通过 List-Watch 机制监听 apiserver 发出的事件#xff0c;apiserver 通过 List-Watch 机制监听 etcd 发出的事件1.scheduler 的调度策略
预选策略/预算策略#xff1a;通过调度算法过滤掉不满足条件…K8S调度
一、List-Watch 机制 controller-manager、scheduler、kubelet 通过 List-Watch 机制监听 apiserver 发出的事件apiserver 通过 List-Watch 机制监听 etcd 发出的事件1.scheduler 的调度策略
预选策略/预算策略通过调度算法过滤掉不满足条件的Node节点如果没有满足条件的Node节点Pod会处于Pending状态直到有符合条件的Node节点出现
PodFitsResources、PodFitsHost、PodFitsHostPorts、PodSelectorMatches、NoDiskConflict优选策略根据优先级选项为满足预选策略条件的Node节点进行优先级权重排序最终选择优先级最高的Node节点来调度Pod
LeastRequestedPriority、BalancedResourceAllocation、ImageLocalityPriority二、如何将Pod调度到指定节点
1使用 nodeName 字段指定 Node节点名称
2使用 nodeSelector 指定 Node节点的标签
3使用 节点/Pod 亲和性
4使用 污点容忍 1.标签的管理
kubectl label 资源类型 资源名称 标签key标签value ##设置标签
kubectl label 资源类型 资源名称 标签key标签value --overwrite ##修改标签
kubectl label 资源类型 资源名称 标签key- ##删除标签kubectl get 资源类型 资源名称 --show-labels ##展示资源名称下的所有标签
kubectl get 资源类型 -l 标签key[标签value] ##列出符合条件的标签下的资源
2.亲和性
2.1节点亲和性
节点亲和性nodeAffinity匹配指定的Node节点标签将要部署的Pod调度到满足条件的Node节点上2.2Pod亲和性
拓扑域具有相同标签的node节点Pod亲和性podAffinity匹配指定的Pod标签将要部署的Pod调度到与指定Pod所在的Node节点处于 同一个拓扑域 的Node节点上Pod反亲和性podAntiAffinity匹配指定的Pod标签将要部署的Pod调度到与指定Pod所在的Node节点处于 不同的拓扑域 的Node节点上2.3亲和性的策略
硬策略required....要强制性的满足指定条件如果没有满足条件的Node节点Pod会处于Pending状态直到有符合条件的Node节点出现软策略preferred....非强制性的会优先选择满足条件的Node节点调度即使没有满足条件的Node节点Pod依然会完成调度
3.污点taint
3.1配置
kubectl taint node node名称 keyvalue:effecteffect支持的选项NoSchedule(一定不会被调度)
PreferNoSchedule(尽量不被调度)
NoExecute(不会被调度并驱逐节点上的Pod)3.2污点删除
kubectl taint node node名称 key[value:effect]-3.3查看节点有哪些污点
kubectl describe nodes node名称 | grep Taints4.容忍 tolerations
4.1配置
spec:tolerations:- key: 污点键名operator: Equal|Existsvalue: 污点键值effect: NoSchedule|PreferNoSchedule|NoExecute5.不可调度cordon)
kubectl cordon node名称 ##设置为不可调度kubectl uncordon node名称 ##解除不可调度6.不可调度 驱逐drain)
kubectl drain node名称 --ignore-daemonsets --delete-emptydir-data --force7.Pod的启动过程
1通过 scheduler 根据调度算法选择一台在最适合的 Node节点运行 Pod
2拉取镜像
3挂载 存储卷 等
4创建并运行容器
5根据容器的探针探测结果设置 Pod 状态8.Pod的生命周期
生命周期状态说明PendingPod已经创建但是处于包括Pod还未完成调度到Node节点的过程或者处于镜像拉取过程中、存储卷挂载失败等情况RunningPod中至少有一个容器正在运行SucceededPod中的所有容器都已经成功退出且不再重启。CompletedFailedPod中的所有容器都已终止且至少有一个容器异常退出。ErrorUnknownMaster节点的 controller-manager 无法获取 Pod 的状态通常是因为 Master节点与 Pod 所在的 Node 节点通信失联导致的
Pod遵循预定义的生命周期起始于Pending阶段如果至少其中有一个主要容器正常启动则进入Running阶段之后取决于Pod中是否有容器以失败状态结束而进入Succeeded或者Failed阶段。三、K8S中排障方法
kubectl get pods 查看Pod运行状态
kubectl describe 资源类型|pods 资源名称 查看资源的详细信息和事件
kubectl logs pod名称 [-c 容器名] [-p] 查看容器的进程日志
kubectl exec -it pod名称 [-c 容器名] sh|bash 进入Pod容器查看容器内部相关状态信息
kubectl debug -it pod名称 --image临时容器的镜像名 --target目标容器 在Pod中创建临时容器进入目标容器进行调试在Pod容器的宿主机使用nsenter转换网络等命名空间直接在宿主机进入目标容器的命名空间进行调试
查看k8s集群中相关信息
kubectl get nodes 查看Node节点的运行状态
kubectl get cs 查看Master组件的状态
kubectl cluster-info 查看集群信息journalctl -u kubelet -f 跟踪查看Kubelet进程日志看k8s集群中相关信息
kubectl get nodes 查看Node节点的运行状态
kubectl get cs 查看Master组件的状态
kubectl cluster-info 查看集群信息journalctl -u kubelet -f 跟踪查看Kubelet进程日志