一个node没有重复pod
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个node没有重复pod相关的知识,希望对你有一定的参考价值。
您好,很高兴回答您的问题。Node没有重复Pod的话,意味着该节点上的所有Pod都是唯一的,没有重复的。这样的话,可以确保在该节点上的Pod都是独立的,不会受到其他节点上的Pod的影响,从而提高了系统的可靠性和稳定性。此外,没有重复Pod的节点也可以更好地利用资源,因为每个Pod都可以充分利用节点上的资源,而不会因为重复Pod而浪费资源。 参考技术A 没有重复的pod说明应该代码在运行的时候。出现代码函数不合规不完整的情况,导致一个node没有出现重复的pod。需要修改其函数关系式来调节函数的大小,修改之后就不会出现重复的pod了。 参考技术B 在每个 Node 上运行一个 GlusterFS 存储或者 Ceph 存储的 Daemon 进程。 - 在每个 Node 上运行一个日志采集程序,例如 Fluentd 或者 Logstach 。 - 在每个 Node 上运行一个性能监控程序,采集该 Node 的运行性能数据,例如 Prometheus Node Exporter 、 collectd 、 New Relic agent 或者 Ganglia gmond 等。DaemonSet 的 Po d 调度策略与 RC 类似,除了使用系统内置的算法在每台 Node 上进行调度,也可以在 Pod 的定义中使用 NodeSelector 或 NodeAffinity 来指定满足条件的 Node 范围进行调度。
下面的例子定义为在每台 Node 上启动一个 fluentd 容器,配置文件 fluentd-ds. yaml 的内容如下,其中挂载了物理机的两个目录“/var/log ”和“/var/lib/docker/containers ”:
--- apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd-cloud-logging namespace: kube-system labels: k8s-app: fluentd-cloud-logging spec: selector: matchLabels: k8s-app: fluentd-cloud-logging template: metadata: namespace: kube-system labels: k8s-app: fluentd-cloud-logging spec: containers: - name: fluentd-cloud-logging #image: gcr.io/google_containers/fluentd-elasticsearch:1.17 image: googlecontainersmirrors/fluentd-elasticsearch:1.17 resources: limits: cpu: 100m memory: 200Mi env: - name: FLUENTD_ARGS value: -q volumeMounts: - name: varlog mountPath: /var/log readOnly: false - name: containers mountPath: /var/lib/docker/containers readOnly: false volumes: - name: containers hostPath: path: /var/lib/docker/containers - name: varlog hostPath: path: /var/log
使用 kubectl create 命令创建该 DaemonSet:
# kubectl create -f fluentd-ds.yaml daemons et "fluentd-cloud-logging" created
查看创建好的 DaemonSet 和 Pod , 可 以看到在每个 Node 上都创建了一个 Pod:
# kubectl get po -n kube-system NAME READY STATUS RESTARTS AGE fluentd-cloud-logging-dfg6v 1/1 Running 0 5d2h fluentd-cloud-logging-nln9v 1/1 Running 0 5d2h fluentd-cloud-logging-xpmqq 1/1 Running 0 5d2h 参考技术C 如果一个Node上面没有重复的Pod,这意味着该Node可以满足容量,也可以正常地进行调度,用户就可以正常使用其服务。 参考技术D 一个node没有重复pod的话,就意味着该node上每个pod都是独特的,不会出现重复的情况。这样可以确保pod的安全性,同时也就避免了资源的浪费,提高了集群的利用率。
k8s一个pod加载多个containers,指定pod运行的node
参考技术A 问题描述Kubernetes有着自己特定的调度算法与策略,有Master中的Scheduler组件来实现,根据Node资源使用情况自动调度Pod的创建,通常可以满足我们大部分的需求。但是有时我们希望可以将某些Pod调度到特定硬件节点上,这里采用目前最为简单的nodeName和nodeSelector来实现Pod调度。
假设以下场景:有三个Node,分别为107、108、109,创建Deployments来部署Tomcat应用,指定在107节点上创建Pod。
解决方案
nodeName
Pod.spec.nodeName将Pod直接调度到指定的Node节点上,会跳过Scheduler的调度策略,该匹配规则是强制匹配。
Tomcatl.yaml文件
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myweb
spec:
replicas: 2
template:
metadata:
labels:
app: myweb
spec:
nodeSelector: 107 #直接通过节点名称调度到指定节点
containers:
- name: myweb
image: harbor/tomcat:8.5-jre8
ports:
- containerPort: 80
nodeSelector
Pod.spec.nodeSelector通过kubernetes的label-selector机制选择节点,由调度器调度策略匹配label,而后调度Pod到目标节点,该匹配规则属于强制约束。
设置 Node Lable
kubectl label nodes 107 type=backEndNode1
1
Tomcatl.yaml文件
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myweb
spec:
replicas: 2
template:
metadata:
labels:
app: myweb
spec:
nodeSelector:
type: backEndNode1
containers:
- name: myweb
image: harbor/tomcat:8.5-jre8
ports:
- containerPort: 80
创建Deployment
kubectl create -f Tomcat.yaml
以上是关于一个node没有重复pod的主要内容,如果未能解决你的问题,请参考以下文章