k8s 部署pod到指定node
k8s指定节点部署
在一些业务场景中,会需要将一些pod部署到指定node,按照默认的调度规则,pod会优先分配到负载较小的node中,难免会出现多个pod资源竞争的情况。
k8s有两种常用的方法可以实现将指定pod分配到指定node中。
nodeName
在部署的yaml文件中,对xxx.spec.nodeName指定节点名称,则该pod将只会在该node上进行部署:
$ vim websvr.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: websvr1-deployment
spec:selector:matchLabels:app: websvr1replicas: 3template:metadata:labels:app: websvr1spec:nodeName: k8s-node1 #指定节点名称containers:- name: websvr1image: websvr:v1ports:- containerPort: 3000---apiVersion: v1
kind: Service
metadata:name: websvr1-service
spec:selector:app: websvr1ports:- protocol: TCPport: 3000targetPort: 3000
$ kubectl apply -f websvr1.yamlNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
websvr1-deployment-54cffcc8b4-jw9fl 1/1 Running 0 15s 10.244.36.90 k8s-node1 <none> <none>
websvr1-deployment-54cffcc8b4-s97ln 1/1 Running 0 15s 10.244.36.92 k8s-node1 <none> <none>
websvr1-deployment-54cffcc8b4-wglpb 1/1 Running 0 15s 10.244.36.91 k8s-node1 <none> <none>
可以看到websvr只部署在了k8s-node1上,那么如果现在有三个node,一个pod需要部署在其中两个不同node中,是不是要指定两个node的名称呢,其实这种场景可以使用第二种指定分配的方法:
nodeSelector
和nodeName不同,nodeSelector是可以指定某一种类型的node进行分配,这种类型在k8s里被称为标签(label)
#查看当前node
$ kubectl get node -o wideNAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-elasticsearch Ready <none> 16h v1.21.0 172.16.66.167 <none> CentOS Linux 8 4.18.0-305.19.1.el8_4.x86_64 docker://20.10.9
k8s-master Ready control-plane,master 43h v1.21.0 172.16.66.169 <none> CentOS Linux 8 4.18.0-305.19.1.el8_4.x86_64 docker://20.10.9
k8s-node1 Ready <none> 43h v1.21.0 172.16.66.168 <none> CentOS Linux 8 4.18.0-305.19.1.el8_4.x86_64 docker://20.10.9
k8s-node2 Ready <none> 43h v1.21.0 172.16.66.170 <none> CentOS Linux 8 4.18.0-305.19.1.el8_4.x86_64 docker://20.10.9#给k8s-node1 k8s-node2打上标签websvr
$ kubectl label nodes k8s-node1 k8s-node2 type=websvr#查看type=websvr标签的node
$ kubectl get node -l type=websvrNAME STATUS ROLES AGE VERSION
k8s-node1 Ready <none> 43h v1.21.0
k8s-node2 Ready <none> 43h v1.21.0#以下附带标签的其他操作:
#修改标签
$ kubectl label nodes k8s-node1 k8s-node2 type=webtest --overwrite#查看node标签
$ kubectl get nodes k8s-node1 k8s-node2 --show-labels#删除标签
$ kubectl label nodes k8s-node1 k8s-node2 type-
修改部署yaml
$ vim websvr1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: websvr1-deployment
spec:selector:matchLabels:app: websvr1replicas: 3template:metadata:labels:app: websvr1spec:nodeSelector: #选择标签为type:websvr的node部署type: websvrcontainers:- name: websvr1image: websvr:v1ports:- containerPort: 3000---apiVersion: v1
kind: Service
metadata:name: websvr1-service
spec:selector:app: websvr1ports:- protocol: TCPport: 3000targetPort: 3000
同理修改websvr2.yaml
$ vim websvr2.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: websvr2-deployment
spec:selector:matchLabels:app: websvr2replicas: 3template:metadata:labels:app: websvr2spec:nodeSelector: #选择标签为type:websvr的node部署type: websvrcontainers:- name: websvr2image: websvr:v2ports:- containerPort: 3001---apiVersion: v1
kind: Service
metadata:name: websvr2-service
spec:selector:app: websvr2ports:- protocol: TCPport: 3001targetPort: 3001
$ kubectl apply -f websvr1.yaml$ kubectl apply -f websvr2.yaml$ kubectl get pods -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
websvr1-deployment-67fd6cf9d4-cfstc 1/1 Running 0 2m22s 10.244.36.93 k8s-node1 <none> <none>
websvr1-deployment-67fd6cf9d4-lx6tr 1/1 Running 0 2m22s 10.244.169.151 k8s-node2 <none> <none>
websvr1-deployment-67fd6cf9d4-zxznp 1/1 Running 0 2m22s 10.244.169.152 k8s-node2 <none> <none>
websvr2-deployment-67dfc4f674-dz44b 1/1 Running 0 2m10s 10.244.36.95 k8s-node1 <none> <none>
websvr2-deployment-67dfc4f674-wjg5x 1/1 Running 0 2m10s 10.244.169.153 k8s-node2 <none> <none>
websvr2-deployment-67dfc4f674-xdk9m 1/1 Running 0 2m10s 10.244.36.94 k8s-node1 <none> <none>
可以看到此时两个websvr deployment已经部署在指定的node节点上
若有不正确,欢迎指出
k8s 部署pod到指定node相关推荐
- Kubernetes对Pod调度指定Node以及Node的Taint 和 Toleration
1.指定pod到指定的node上 #1.1查看节点的lebel kubectl get nodes --show-labels#1.2获取到该节点的label信息 ip-10-100-2-80 Rea ...
- Sentinel云原生K8S部署实
部署的流程图 部署的详细过程 编译Docker镜像 Sentinel源码下载 https://gitee.com/pingfanrenbiji/Sentinel.git Sentinel-dashbo ...
- k8s 部署 TCP node应用
k8s 部署 TCP node应用 之前我们已经成功的将node的http应用部署到k8s集群内,但某些业务不仅仅需要http应用还需要TCP长连接应用,本文将对部署tcp应用的步骤及问题进行总结 本 ...
- 【好文收藏】k8s中Pod 无法正常解析域名:部署 DNS 调试工具排查
k8s 中 Pod 无法正常解析域名:部署 DNS 调试工具排查 问题描述 最近将 Kubernetes 升级到 1.18.1 版本,不过升级完后,查看工作节点的部分 Pod 无法启动,查看消息全是 ...
- 关于K8s中Pod调度[选择器,指定节点,主机亲和性]方式和节点[coedon,drain,taint]标记的Demo
写在前面 嗯,整理K8s中pod调度相关笔记,这里分享给小伙伴 博文内容涉及: kube-scheduler组件的简述 Pod的调度(选择器.指定节点.主机亲和性)方式 节点的coedon与drain ...
- 手动安装K8s第六节:node节点部署-kubelet
部署kubelet 1.准备二进制包 [root@k8smaster ~]# cd /usr/local/src/kubernetes/server/bin/ [root@k8smaster bin] ...
- k8s利用deployment部署pod,以及应用更新和回滚操作
deployment部署pod,也是通过yaml文件的方式部署.deployment通过yaml文件定义需要deploy名称,需要几个pod协助运行,拉取的镜像版本等内容.一般来说一个deployme ...
- k8s查看容器日志---查看运行中指定pod以及指定pod中容器的日志
1.查看指定pod的日志 kubectl logs <pod_name> kubectl logs -f <pod_name> #类似tail -f的方式查看(tail -f ...
- k8s查看pod的yaml文件_K8S系列学习,Pod实战那些事儿,有必要知道知道
Kubernetes学习路上的那些事儿,很有必要分享出来 什么是Pod 要弄清楚这个概念,我们还是先上官网瞧瞧,https://kubernetes.io/zh/docs/concepts/workl ...
最新文章
- Authentication Error errorcode: 230 uid: -1 appid -1 msg: APP Scode码校验失败
- 一本介绍Javascript 的很好的书【基础期间全局了解】
- android 6.0权限
- Effective Java~34. 用enum 代替 int 常量
- 无法打开Win11系统小组件怎么办
- Linux用户:您上一次使用Windows已有多长时间了?
- 二分查找(binary_search)
- 酷比魔方iwork8刷机shell_酷比魔方iwork8超级版双系统刷机教程,remix+Windows10,序列号i1开头数字结尾...
- ArrayList LinkedList
- ubuntu 安装万能五笔
- 介绍ping中的TTL是什么意思
- 【已解决】ModuleNotFoundError: No module named ‘snmp_cmds‘ 缺少snmp-cmds包
- 微信公众号消息text换行问题
- 2018最佳计算机配置,2018年主流的组装电脑配置是什么样的?
- Jmeter压力测试简单教程(包括服务器状态监控)-----转载自lsoqvle 的博客(https://blog.csdn.net/cbzcbzcbzcbz/article/details/780)
- 用python输出国际象棋棋盘_python输出国际象棋棋盘的实例分享
- 《崔庆才Python3网络爬虫开发实战教程》学习笔记(3):抓取猫眼电影榜单TOP100电影,并存入Excel表格
- WVP-PRO+ZLMediaKit搭建GB28181视频平台(linux详细教学)
- 手机端移动端的前端原生js裁剪图片上传
- micosoft project professional 2010