kubernetes调度pod运行于master节点上
应用背景:
使用kubeadm部署的kubernetes集群,其master节点默认拒绝将pod调度运行于其上的,加点官方的术语就是:master默认被赋予了一个或者多个“污点(taints)”,“污点”的作用是让该节点拒绝将pod调度运行于其上。那么存在某些情况,比如想让master也成为工作节点可以调度pod运行怎么办呢?
两种方式:①去掉“污点”(taints)【生产环境不推荐】;②让pod能够容忍(tolerations)该节点上的“污点”。
测试环境:
节点名称 | 节点类型 | 版本号 | 部署方式 |
kube-node-01 | Master | v1.11.2 | kubeadm init |
kube-node-02 | Node | v1.11.2 | kubeadm join |
kube-node-03 | Node | v1.11.2 | kubeadm join |
操作步骤:
1. 当前环境
[root@kube-node-01 ~]# kubectl get pod -o wide
No resources found.
2. 准备一个yaml文件创建pod(2副本)
[root@kube-node- ~]# kubectl apply -f test-springboot-rc.yaml
replicationcontroller/test-springboot created
[root@kube-node- ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
test-springboot-6495q / Running 2m 10.244.2.113 kube-node- <none>
test-springboot-b5sq2 / Running 2m 10.244.1.76 kube-node- <none>
以上运行的2个pod分别被调度到节点2和节点3上,目前还不足以说明调度不到节点1上,继续操作;
3. 扩容pod副本观察
[root@kube-node- ~]# kubectl scale rc test-springboot --replicas=3
replicationcontroller/test-springboot scaled
[root@tlsw-pre- ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
test-springboot-6495q / Running 4m 10.244.2.113 kube-node- <none>
test-springboot-68qtw / Running 9s 10.244.2.114 kube-node- <none>
test-springboot-b5sq2 / Running 4m 10.244.1.76 kube-node- <none>
一般情况下,kubernetes的pod调度策略会尽量的安排相同的pod安排至不同的节点,上面推测因为节点1含有污点,pod不得不再次调度到节点2或者节点3上去。
再次测试默认调度,添加pod副本至5个:
[root@tlsw-pre- home]# kubectl scale rc test-springboot --replicas=5
replicationcontroller/test-springboot scaled
[root@tlsw-pre- home]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
test-springboot-4875k / Running 1m 10.244.1.77 kube-node- <none>
test-springboot-6495q / Running 14m 10.244.2.113 kube-node- <none>
test-springboot-68qtw / Running 10m 10.244.2.114 kube-node- <none>
test-springboot-b5sq2 / Running 14m 10.244.1.76 kube-node- <none>
test-springboot-hghwb / Running 1m 10.244.2.115 kube-node- <none>
以上显而易见,master节点(kube-node-01)上一直没有pod运行,因为含有“污点”作祟。
4. 查看master节点的容忍参数
[root@kube-node- ~]# kubectl describe node kube-node-01
……
Taints: node-role.kubernetes.io/master:NoSchedule
Unschedulable: false
……
5.添加污点容忍(并再次增加副本数至6)
根据容忍参数在pod对应的yaml文件中添加“容忍”段,如下:
……
replicas: 6 // 在当前的运行环境副本数(5个)上增加1个副本,用来观察pod调度
……
spec:
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
containers:
- name: test-springboot
……
[root@tlsw-pre- home]# kubectl apply -f test-springboot-rc.yaml
replicationcontroller/test-springboot configured
[root@tlsw-pre- home]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
test-springboot-4875k / Running 10m 10.244.1.77 kube-node-
test-springboot-6495q / Running 23m 10.244.2.113 kube-node-
test-springboot-68qtw / Running 19m 10.244.2.114 kube-node-
test-springboot-6pz2x / ContainerCreating 3s <none> kube-node-01
test-springboot-b5sq2 / Running 23m 10.244.1.76 kube-node-
test-springboot-hghwb / Running 10m 10.244.2.115 kube-node-
很明显,最新的一个pod已经调度至master节点,还在创建中,等待一下即可正常running。
结束.
kubernetes调度pod运行于master节点上的更多相关文章
- 八、指定节点pod运行在固定节点
指定pod运行在固定节点 一.指定固定节点:Pod.spec.nodeName Pod.spec.nodeName 将 Pod 直接调度到指定的 Node 节点上,会跳过 Scheduler 的调度策 ...
- 记录一个奇葩的问题:k8s集群中master节点上部署一个单节点的nacos,导致master节点状态不在线
情况详细描述; k8s集群,一台master,两台worker 在master节点上部署一个单节点的nacos,导致master节点状态不在线(不论是否修改nacos的默认端口号都会导致master节 ...
- Kubernetes集群部署之四Master节点部署
Kubernetes Master节点部署三个服务:kube-apiserver.kube-controller-manager.kube-scheduler和一个命令工具kubectl. Maste ...
- 二进制安装 kubernetes 1.12(三) - 部署 Master 节点组件
在Master节点部署组件 在部署Kubernetes之前一定要确保etcd.flannel.docker是正常工作的,否则先解决问题再继续. 创建 CA 证书 mkdir -p /iba/master ...
- k8s集群master节点上的flannel总是不定期重启的原因分析
这个问题,困绕了团队一段时间, 因为暂时没有用到master的外网网络, 没有引起重视,但总归要解决. 上周五,刚好有点小空,就深入调查了一下. 最后,定位到了问题点:k8s master节点的fla ...
- kubernetes 将pod运行在某些特定的节点上,给节点打标签
给节点打上标签: kubectl label node <node_name> GPU=true #打上标签 GPU=true 在创建pod的yaml文件时: 添加 nodeSel ...
- ES等待任务——是master节点上的task任务
等待中的任务编辑 有一些任务只能由主节点去处理,比如创建一个新的 索引或者在集群中移动分片.由于一个集群中只能有一个主节点,所以只有这一节点可以处理集群级别的元数据变动.在 99.9999% 的时间里 ...
- 二、安装并配置Kubernetes Master节点
1. 安装配置Master节点上的Kubernetes服务 1.1 安装Master节点上的Kubernetes服务 yum -y install kubernetes 1.2 修改kube-apis ...
- kubernetes之pod调度
调度规则 deployment全自动调度: 运行在哪个节点上完全由master的scheduler经过一系列的算法计算得出, 用户无法进行干预 nodeselector定向调度: 指定pod调度到一些 ...
随机推荐
- 图片与Base64相互转换 jar包
1.右键项目 -->Properties -->Java Bulid Path-> Libraries -->JRE System Library-->Access ru ...
- 生鲜配送管理系统_升鲜宝V2.0 价格组功能 操作说明_15382353715
价格组功能是B端供应链系统,必不可少的一个功能,其主要实现不同的客户不同的价格,B端系统有一个最大的不同就是,有些商品后台下单人员能看到的.有些商品在销售的那一瞬间,还不知道价格.所以这些商品只有后台 ...
- layui+ztree 树状下拉框
一.效果图 [关闭] [展开] 二.代码 [HTML]注:布局一定要用DIV不是select否则效果···· <div class="layui-form-item"> ...
- 每天五分钟-javascript数据类型
javascript数据类型分为基本数据类型与复杂数据类型 基本数据类型包括:string,number,boolean,null,undefined,symbol(es6) 复杂数据类型包括:obj ...
- datatable动态列处理,重绘表格(敲黑板,划重点!!!我肝了一天半才彻底弄懂这个东西,TAT)
datatable动态列处理,重绘表格 前言:至于动态列的绘画,我前面博客已经写过了,就是动态列的配置问题,不懂的去我博客看下,今天要写的呢,就是你已经写了一个动态列在datatable,现在你想重新 ...
- linux/shell/bash 自动输入密码或文本
linux有些命令需要输入密码,比如ssh或su,又不能通过参数指定,正常只能手动输入.这让人多少有些懊恼,尽管这样很安全! 破解:expect 默认没这个东西,需要安装 apt/yum instal ...
- git-lfs插件
Git本地会保存文件所有版本,对于大文件很容易导致仓库体积迅速膨胀 为了解决这个问题,Github在2015.4宣布推出Git LFS(Large File Storage),详见:Announcin ...
- Go 定时任务
本文基于Golang Crontab 实现了一个Crontab Job Manager.更加容易使用,同时也能够满足更加复杂的场景. 仓储地址, 如果有用,欢迎点赞,欢迎讨论,欢迎找茬. 需求 在开发 ...
- SQLServer之创建事务序列化
创建事务序列化注意事项 语法:set transaction isolation level serialize; 序列化会指定下列内容: 语句不能读取已由其他事务修改但尚未提交的数据. 任何其他事务 ...
- SQL Server数据库————模糊查询和聚合函数
***********模糊查询*********/ 关键字: like (!!!!字符串类型) in (,,) 匹配()内的某个具体值(括号里可以写多个值) between... and.. 在某两 ...