目录
- 一.系统环境
- 二.前言
- 三.pod的调度
- 3.1 pod的调度概述
- 3.2 pod自动调度
- 3.2.1 创建3个主机端口为80的pod
- 3.3 使用nodeName 字段指定pod运行在哪个节点
- 3.4 使用节点标签nodeSelector指定pod运行在哪个节点
- 3.4.1 查看标签
- 3.4.2 创建标签
- 3.4.3 通过标签控制pod在哪个节点运行
- 3.5 使用亲和性与反亲和性调度pod
- 3.5.1 使用硬策略requiredDuringSchedulingIgnoredDuringExecution
- 3.5.2 使用软策略preferredDuringSchedulingIgnoredDuringExecution
- 3.5.3 节点亲和性权重
- 3.6 Pod 拓扑分布约束
服务器操作系统版本CPU架构进程功能描述k8scloude1/192.168.110.130CentOS Linux release 7.4.1708 (Core)x86_64docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calicok8s master节点k8scloude2/192.168.110.129CentOS Linux release 7.4.1708 (Core)x86_64docker,kubelet,kube-proxy,calicok8s worker节点k8scloude3/192.168.110.128CentOS Linux release 7.4.1708 (Core)x86_64docker,kubelet,kube-proxy,calicok8s worker节点二.前言本文介绍pod的调度,即如何让pod运行在Kubernetes集群的指定节点 。
进行pod的调度的前提是已经有一套可以正常运行的Kubernetes集群,关于Kubernetes(k8s)集群的安装部署,可以查看博客《Centos7 安装部署Kubernetes(k8s)集群》https://www.cnblogs.com/renshengdezheli/p/16686769.html
三.pod的调度3.1 pod的调度概述你可以约束一个 Pod 以便 限制 其只能在特定的节点上运行,或优先在特定的节点上运行 。有几种方法可以实现这点 , 推荐的方法都是用 标签选择算符来进行选择 。通常这样的约束不是必须的,因为调度器将自动进行合理的放置(比如,将 Pod 分散到节点上,而不是将 Pod 放置在可用资源不足的节点上等等) 。但在某些情况下,你可能需要进一步控制 Pod 被部署到哪个节点 。例如,确保 Pod 最终落在连接了 SSD 的机器上, 或者将来自两个不同的服务且有大量通信的 Pods 被放置在同一个可用区 。
你可以使用下列方法中的任何一种来选择 Kubernetes 对特定 Pod 的调度:
- 与节点标签匹配的 nodeSelector
- 亲和性与反亲和性
- nodeName 字段
- Pod 拓扑分布约束
- 待调度的pod列表
- 可用的node列表
- 调度算法:主机过滤,主机打分
#主机端口映射:hostPort: 80[root@k8scloude1 pod]# kubectl explain pods.spec.containers.ports.hostPortKIND:PodVERSION:v1FIELD:hostPort <integer>DESCRIPTION:Number of port to expose on the host. If specified, this must be a validport number, 0 < x < 65536. If HostNetwork is specified, this must matchContainerPort. Most containers do not need this.
创建第一个pod,hostPort: 80表示把容器的80端口映射到节点的80端口[root@k8scloude1 pod]# vim schedulepod.yaml#kind: Pod表示资源类型为Podlabels指定pod标签metadata下面的name指定pod名字containers下面全是容器的定义#image指定镜像名字imagePullPolicy指定镜像下载策略containers下面的name指定容器名#resources指定容器资源(CPU,内存等)env指定容器里的环境变量dnsPolicy指定DNS策略#restartPolicy容器重启策略ports指定容器端口containerPort容器端口hostPort节点上的端口[root@k8scloude1 pod]# cat schedulepod.yamlapiVersion: v1kind: Podmetadata:creationTimestamp: nulllabels:run: podname: podnamespace: podspec:containers:- image: nginximagePullPolicy: IfNotPresentname: podresources: {}ports:- name: httpcontainerPort: 80protocol: TCPhostPort: 80dnsPolicy: ClusterFirstrestartPolicy: Alwaysstatus: {}[root@k8scloude1 pod]# kubectl apply -f schedulepod.yamlpod/pod created[root@k8scloude1 pod]# kubectl get podsNAMEREADYSTATUSRESTARTSAGEpod1/1Running06s
可以看到pod创建成功 。接下来创建第二个pod,hostPort: 80表示把容器的80端口映射到节点的80端口 , 两个pod只有pod名字不一样 。
[root@k8scloude1 pod]# cp schedulepod.yaml schedulepod1.yaml [root@k8scloude1 pod]# vim schedulepod1.yaml [root@k8scloude1 pod]# cat schedulepod1.yamlapiVersion: v1kind: Podmetadata:creationTimestamp: nulllabels:run: pod1name: pod1namespace: podspec:containers:- image: nginximagePullPolicy: IfNotPresentname: pod1resources: {}ports:- name: httpcontainerPort: 80protocol: TCPhostPort: 80dnsPolicy: ClusterFirstrestartPolicy: Alwaysstatus: {}[root@k8scloude1 pod]# kubectl apply -f schedulepod1.yamlpod/pod1 created[root@k8scloude1 pod]# kubectl get podsNAMEREADYSTATUSRESTARTSAGEpod1/1Running011mpod11/1Running05s
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- JAVA开发搞了一年多的大数据,究竟干了点啥
- JAVA的File对象
- 原神须弥地区死域有什么效果
- 原神巡林小队三号林区位置在哪
- 不思议迷宫幽灵船八个部件位置在哪
- 原神巡林小队二号林区位置在哪
- 原神巡林小队一号林区位置在哪
- 阴阳锅防空洞的密码有哪些
- 自费研究生的培养方式是统分还是自筹呢 培养方式统分
- 光伏发电的政府补助政策 光伏发电新政策