概述

  • 在使用过程中,如果希望指定的pod放在自己希望的node节点上可以进行调度,选择对应的node节点。
  • 可以看出可以使用节点的ip地址或者是在node节点添加标签,让pod调度器使用selector进行选择,这里我将使用两种方法,将主服务的beego端放在node1上,将判题器的两个judger放在node2上,judger1使用ip选择,judger2使用lable选择。

调度

nodename调度

apiVersion: apps/v1
kind: Deployment
metadata:name: unioj-judger-deploymentnamespace: default
spec:selector:matchLabels:app: unioj-judgerreplicas: 1template:metadata:labels:app: unioj-judgerspec:nodeName: k8s-node2restartPolicy: Alwayscontainers:- name: unioj-judgerimage: registry.cn-beijing.aliyuncs.com/uyistcoj/unioj-judgerimagePullPolicy: Alwaysports:- containerPort: 7999resources:requests:memory: 100Micpu: 400mlivenessProbe:httpGet:path: /healthyport: 7999initialDelaySeconds: 3periodSeconds: 3successThreshold: 1        # 健康阀值
  • 问题:直接使用192.168.10.66会导致pending一直无法调度,故而使用node的名字,估摸着是集群不认识ip

lable调度

打标签

  • 打标签
kubectl label nodes <node-name> <label-key>=<label-value>
  • 查看标签
[root@k8s-master1 pods]# kubectl get node --show-labels
NAME          STATUS   ROLES                  AGE   VERSION   LABELS
k8s-master1   Ready    control-plane,master   30d   v1.21.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master1,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
k8s-node1     Ready    <none>                 30d   v1.21.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux
k8s-node2     Ready    <none>                 30d   v1.21.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux
  • 给node2打标签unioj-role: judgers
[root@k8s-master1 pods]# kubectl label nodes k8s-node2 unioj-role=judgers
node/k8s-node2 labeled
[root@k8s-master1 pods]# kubectl get node --show-labels
NAME          STATUS   ROLES                  AGE   VERSION   LABELS
k8s-master1   Ready    control-plane,master   30d   v1.21.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master1,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
k8s-node1     Ready    <none>                 30d   v1.21.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux
k8s-node2     Ready    <none>                 30d   v1.21.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux,unioj-role=judgers
  • 修改yaml进行选择
apiVersion: apps/v1
kind: Deployment
metadata:name: unioj-judger-deployment2namespace: default
spec:selector:matchLabels:app: unioj-judger2replicas: 1template:metadata:labels:app: unioj-judger2spec:nodeSelector:unioj-role: judgerscontainers:- name: unioj-judgerimage: registry.cn-beijing.aliyuncs.com/uyistcoj/unioj-judgerimagePullPolicy: Alwaysports:- containerPort: 7999resources:requests:memory: 100Micpu: 400mimagePullPolicy: Alwaysports:- containerPort: 7999resources:requests:memory: 100Micpu: 400mlivenessProbe:httpGet:path: /healthyport: 7999initialDelaySeconds: 3periodSeconds: 3successThreshold: 1        # 健康阀值
  • apply之前的分布
[root@k8s-master1 pods]# kubectl get pods -o wide
NAME                                        READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
unioj-beego-deployment-6874449649-lhjm7     1/1     Running   1          11h     10.100.2.64   k8s-node2   <none>           <none>
unioj-judger-deployment-5c596bb8d5-gck6f    1/1     Running   0          7m34s   10.100.2.68   k8s-node2   <none>           <none>
unioj-judger-deployment2-78ff65b5fd-99r5j   1/1     Running   0          46m     10.100.1.51   k8s-node1   <none>           <none>
  • apply
[root@k8s-master1 pods]# kubectl apply -f unioj-judger2.yaml
deployment.apps/unioj-judger-deployment2 configured[root@k8s-master1 pods]# kubectl get pods -o wide
NAME                                        READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
unioj-beego-deployment-6874449649-lhjm7     1/1     Running   1          11h     10.100.2.64   k8s-node2   <none>           <none>
unioj-judger-deployment-5c596bb8d5-gck6f    1/1     Running   0          8m48s   10.100.2.68   k8s-node2   <none>           <none>
unioj-judger-deployment2-5fcf476c57-xf8ck   1/1     Running   0          27s     10.100.2.69   k8s-node2   <none>           <none>
  • 同样的方法把beego调度到node1
[root@k8s-master1 pods]# kubectl label node k8s-node1 unioj-role=beego
node/k8s-node1 labeled[root@k8s-master1 pods]# kubectl get node --show-labels
NAME          STATUS   ROLES                  AGE   VERSION   LABELS
k8s-master1   Ready    control-plane,master   30d   v1.21.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master1,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
k8s-node1     Ready    <none>                 30d   v1.21.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,unioj-role=beego
k8s-node2     Ready    <none>                 30d   v1.21.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux,unioj-role=judgers
  • yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: unioj-beego-deploymentnamespace: defaultlabels:app: unioj-beego
spec:replicas: 1selector:matchLabels:app: unioj-beegotemplate:metadata:labels:app: unioj-beegospec:nodeSelector:unioj-role: beegocontainers:- name: unoj-beegoimage: registry.cn-beijing.aliyuncs.com/uyistcoj/unioj-beego:latestports:- containerPort: 8000- containerPort: 8666
  • apply后
[root@k8s-master1 pods]# kubectl get pod -o wide
NAME                                        READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
unioj-beego-deployment-dc8986bcb-7mrqv      1/1     Running   0          4m13s   10.100.1.52   k8s-node1   <none>           <none>
unioj-judger-deployment-5c596bb8d5-gck6f    1/1     Running   0          15m     10.100.2.68   k8s-node2   <none>           <none>
unioj-judger-deployment2-5fcf476c57-xf8ck   1/1     Running   0          7m      10.100.2.69   k8s-node2   <none>           <none>

结果

所有的judger到node2上,主控的beego到了node1

常见问题

k8s指定node调度相关推荐

  1. k8s 指定节点调度标签

    nodeSelector 强制匹配 指定pod 调度到标签 ssd [root@k8s-master cka3]# cat ssd.yaml apiVersion: v1 kind: Pod meta ...

  2. 关于K8s中Pod调度[选择器,指定节点,主机亲和性]方式和节点[coedon,drain,taint]标记的Demo

    写在前面 嗯,整理K8s中pod调度相关笔记,这里分享给小伙伴 博文内容涉及: kube-scheduler组件的简述 Pod的调度(选择器.指定节点.主机亲和性)方式 节点的coedon与drain ...

  3. k8s 部署pod到指定node

    k8s指定节点部署 在一些业务场景中,会需要将一些pod部署到指定node,按照默认的调度规则,pod会优先分配到负载较小的node中,难免会出现多个pod资源竞争的情况. k8s有两种常用的方法可以 ...

  4. k8s ready 不调度_【零基础学云计算】k8s部署---master节点组件部署(三)

    kube-APIserver组件介绍 kube-APIserver提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中 ...

  5. K8S之Scheduler调度器

    K8S之Scheduler调度器 kubernetes Scheduler 简介 kubernetes Scheduler 运行在 master 节点,它的核心功能是监听 apiserver 来获取 ...

  6. k8s(八)—调度因素(nodeName、nodeSelector、亲和与反亲和、Taints 污点)、影响pod调度的指令

    1 调度简介 [root@server2 ~]# kubectl get pod -n kube-system 2 影响kubernetes调度的因素 2.1 nodeName(针对节点) [root ...

  7. OpenShift 4 - 通过DaemonSet在指定Node上运行守护程序

    <OpenShift 4.x HOL教程汇总> 文章目录 通过DaemonSet在Worker Node上运行守护程序 通过DaemonSet在指定Node上运行守护程序 通过Daemon ...

  8. nvm安装流程、使用nvm安装指定node版本

    注意:要用nvm管理node版本的前提是要把之前已经下载的node给卸载掉,然后用nvm陆续添加自己所需的node版本,否则会出现nvm中node版本切换过来了,但是再使用的时候还是原来的. 1.下载 ...

  9. Mac 指定node版本安装

    Mac 指定node版本安装 之前一直没有写文章的习惯,经过几次处理技术问题的事情后,发现还是要花点时间记录一下日常遇到的一些问题及解决办法,有助于加深印象和后续再次遇到时,能快速的回忆起来 1.nv ...

最新文章

  1. [Runtime]-交换方法
  2. 前端学习(3034):vue+element今日头条管理-markdown补充
  3. DNS服务器介绍(二)——主从复制和区域转发
  4. python概率论_概率论中常见分布总结以及python的scipy库使用
  5. thinkphp5 open_basedir 补充
  6. mysql 主从手动切换
  7. 处理日期和时间数据--字符串文字
  8. mysql 没有三级模式两级映像_数据库三级模式/两级映像
  9. lammps教程:叠加力场hybrid/overlay设置方法介绍
  10. 【Android测试】在AndroidStudio中进行单元测试
  11. DELPHI点在多边形内算法
  12. html5手机摄像头相册批量,h5调用手机摄像头/相册(示例代码)
  13. HTML期末学生大作业 响应式动漫网页作业 html+css+javascript (1)
  14. android室内地图,室内位置-与地图交互-开发指南-Android 室内地图SDK | 高德地图API...
  15. 这是什么意思admin.php,administratior是什么意思
  16. 为什么mysql不建议执行超过3表以上的多表关联查询?
  17. 共享店铺靠谱么?共享店铺哪家好?全方位测评企雀共享店铺,黑谷共享店铺!
  18. 数据分析报告,就该这么写!超详细攻略奉上
  19. 讨论数据增强(data augmentation)的有效性
  20. DbVisualizer破解

热门文章

  1. TI最新CC2640R2L与CC2640R2F区别详解
  2. mac DBeaver连接mysql 驱动失败问题
  3. 深入理解Pytorch负对数似然函数(torch.nn.NLLLoss)和交叉熵损失函数(torch.nn.CrossEntropyLoss)
  4. java.lang.IllegalArgumentException: Invalid character found in method name [0x160x030x0
  5. Python入门 类型转换
  6. 分析N沟道MOS管和P沟道MOS管在电路中的详细应用
  7. 如何在Windows DOS环境下格式化硬盘
  8. 99、插值法,函数逼近,曲线拟和,数值积分,数值微分,解线性方程组的直接方法,解线性方程组的迭代法,非线性方程求根,常微分方程的数值解法...
  9. VC6中工具条的新特色 (转)
  10. WIN键 锁定、解锁