就是当 pod 第一次调度到一个节点后,就不再变动了,哪怕发生故障 down 机都不会变. 除了用 nodeselector 绑定之外还有别的办法吗?因为用 nodeselector 就成纯手动调度了,我还是希望按照我上面说的逻辑自动调度,有可能吗?
![]() | 1 thet 2021-04-28 12:07:08 +08:00 via iPhone 把手动 nodeselector 弄成程序设置,就成自动的了 |
![]() | 2 wandehul 2021-04-28 12:10:07 +08:00 可以 label |
3 lsnl8480 2021-04-28 12:58:27 +08:00 ![]() 搜索一下 k8s 污点 容忍 pod 容忍 node not ready 污点就可以了 |
![]() | 4 baby6dog 2021-04-28 15:33:36 +08:00 既然是调度到 node 后就不再变动 为何不开始就指定 node 或者你自己写 crd |
6 THESDZ 2021-04-28 16:31:51 +08:00 我的理解是,你所提出来的问题并非你真正的需求,你提出的问题只是你的实现手段的可行性,建议提出原始的需求 |
![]() | 7 ptrees OP @HESDZ 是这样的,我们公司有几十套差不多的系统分别做个性化开发,一套系统需要一台虚拟机,这样资源开销太大,而且不方便回收迁移.所以我想用 k8s 来管理,方便启停.考虑到读写性能问题我不想用 nfs,所以想把 pod 绑定在 node 上直接用 hostpath,然后就问出了这个问题.如果有更好的解决方案还请不吝赐教. |
![]() | 8 defunct9 2021-04-28 17:29:38 +08:00 不建议这么搞,这么搞违背了无状态 pod 的要求。可以 nfs,oss 挂,iscsi,GlusterFS,hostpath 不是好选择 |
9 THESDZ 2021-04-28 17:31:29 +08:00 @ptrees #7 按照你目前的需求,本人建议是给指定的节点上增加 label,然后通过 selector 配置 label,将 pod 固定在指定节点上 下面是我搜索到的相关文章 https://www.cnblogs.com/peng-zone/p/11739433.html |
10 THESDZ 2021-04-28 17:33:43 +08:00 @THESDZ #9 另外假设你考虑配置比较繁琐,而你的多个应用实际上可以根据 namespace 区分的话,可以考虑使用 namespace 绑定节点 以下是我找到的相关文章 https://blog.csdn.net/weixin_43842833/article/details/108599857 |
![]() | 11 STRRL 2021-04-28 17:42:48 +08:00 唉 听上去又是要做这种“原地”的需求, 这种事情最好不做, 做了以后运维仍然要承担很大的风险. 可以搜一下美团的博客,然后了解一下 openkruise. |
12 we8105 2021-04-28 18:15:52 +08:00 哈哈 这个问题是老问题了 遇到过多次 基本上问就是 openkruise 然后原地升级 但是要引入第三方模块 不一定适用所有环境 有的就不喜欢用 你能怎么办 要不自己写一个调度器 我当时就想写来着 奈何 go 没学精通 最后没成 |
![]() | 13 kennylam777 2021-04-28 18:40:25 +08:00 ![]() 甚有人提 PersistentVolume 配 local volume? 配置在 kubernetes.io 官上就有提, 通 PVC 定制 Pod 配指定的 node, 就做到主的要求, 不必去搞第三方的吧。 不同於 pod.spec.nodeName 的是, 你要用 pv.spec.nodeAffinity 指定 node, 都在 PV 上指定 local path 了就行吧, 不必 pod.spec 如果只是了一 local volume, 能少到 node labels 就好 |
![]() | 14 kennylam777 2021-04-28 18:54:43 +08:00 清楚一, 就是 PV 不要用 hostPath 要用 local, 者是不同的 |
![]() | 15 andyangyu 2021-04-28 18:59:33 +08:00 ![]() 楼上说的对, 直接使用 local-volume-provisioner 就可以, pv 在节点事先生成, pvc 消费了 pv 以后, pod 就相当于和 node 绑定了, 除非删 pvc, 不然永远不会调度到其他机器上. |
![]() | 16 ptrees OP 嗯,感谢大家的建议,我再考虑考虑 |
![]() | 17 hellorisk 2021-04-28 20:11:28 +08:00 可以试试阿里云那边开源的 Openkruise 中的 cloneset |
18 kaneg 2021-04-29 00:11:20 +08:00 PV 中的 local volume 就是为你这种需求量身定做的。 |
![]() | 19 xuanbg 2021-04-29 05:10:01 +08:00 容器名字加上固定的标签就行了吧?譬如有个 A 版本和 B 版本,你要开发 A 版本就把 A-xxx 容器都开起来,B-xxx 容器都停掉。这个也不需要 k8s,装个 prtainer 就解决了。 |
![]() | 20 kennylam777 2021-04-29 10:29:49 +08:00 @xuanbg 1. 是 k8s 板 2. Portainer 不就是一漂亮又化了的 WebUI?! 不上 k8s 度用 Swarm?在有人有用 Swarm 上生境? 3. 你的方案就是主不想要的手度方案 |
![]() | 21 xuanbg 2021-04-29 10:43:41 +08:00 @kennylam777 一个开发环境,手动调度更灵活更简单,有什么不好的呢?又不是生产环境。话说就是测试环境我都不建议手动调度。。。 |
![]() | 22 ptrees OP 顺便一提最后还是用手动调度了 不过还是区分了一下,读写比较频繁的使用手动调度+hostpath,其他的自动+nfs,还可以 |