gpt4 book ai didi

kubernetes - 用Kops创建的集群-使用DaemonSet逐节点部署一个Pod避免主节点

转载 作者:行者123 更新时间:2023-12-04 16:36:38 26 4
gpt4 key购买 nike

我尝试按节点部署一个Pod。当使用kubeup创建集群时,它可以与daemonSet类型配合使用。但是,我们使用kops迁移了集群创建,而使用kops时,主节点是集群的一部分。

我注意到主节点是用特定标签定义的:kubernetes.io/role=master
并带有污点:scheduler.alpha.kubernetes.io/taints:[{"key":"dedicated","value":"master","effect":"NoSchedule"}]
但是用DaemonSet在其上部署pod并不会停止

所以我试图添加scheduler.alpha.kubernetes.io/affinity:

- apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: elasticsearch-data
namespace: ess
annotations:
scheduler.alpha.kubernetes.io/affinity: >
{
"nodeAffinity": {
"requiredDuringSchedulingRequiredDuringExecution": {
"nodeSelectorTerms": [
{
"matchExpressions": [
{
"key": "kubernetes.io/role",
"operator": "NotIn",
"values": ["master"]
}
]
}
]
}
}
}
spec:
selector:
matchLabels:
component: elasticsearch
type: data
provider: fabric8
template:
metadata:
labels:
component: elasticsearch
type: data
provider: fabric8
spec:
serviceAccount: elasticsearch
serviceAccountName: elasticsearch
containers:
- env:
- name: "SERVICE_DNS"
value: "elasticsearch-cluster"
- name: "NODE_MASTER"
value: "false"
image: "essearch/ess-elasticsearch:1.7.6"
name: elasticsearch
imagePullPolicy: Always
ports:
- containerPort: 9300
name: transport
volumeMounts:
- mountPath: "/usr/share/elasticsearch/data"
name: task-pv-storage
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pv-claim
nodeSelector:
minion: true

但这是行不通的。有人知道为什么吗?
我现在的解决方法是使用 nodeSelector并将标签添加到仅属于minion的节点上,但是我会避免在集群创建期间添加标签,因为这是一个额外的步骤,如果我可以避免使用它,那将是最好 :)

编辑:

我改变了(给出答案),我认为这是正确的,但没有帮助,我仍然在上面部署了一个 pods :
- apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: elasticsearch-data
namespace: ess
spec:
selector:
matchLabels:
component: elasticsearch
type: data
provider: fabric8
template:
metadata:
labels:
component: elasticsearch
type: data
provider: fabric8
annotations:
scheduler.alpha.kubernetes.io/affinity: >
{
"nodeAffinity": {
"requiredDuringSchedulingRequiredDuringExecution": {
"nodeSelectorTerms": [
{
"matchExpressions": [
{
"key": "kubernetes.io/role",
"operator": "NotIn",
"values": ["master"]
}
]
}
]
}
}
}
spec:
serviceAccount: elasticsearch
serviceAccountName: elasticsearch
containers:
- env:
- name: "SERVICE_DNS"
value: "elasticsearch-cluster"
- name: "NODE_MASTER"
value: "false"
image: "essearch/ess-elasticsearch:1.7.6"
name: elasticsearch
imagePullPolicy: Always
ports:
- containerPort: 9300
name: transport
volumeMounts:
- mountPath: "/usr/share/elasticsearch/data"
name: task-pv-storage
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pv-claim

最佳答案

只需将注释移到 pod template:部分(在metadata:下)。

或者,taint主节点(您可以删除注释):

kubectl taint nodes nameofmaster dedicated=master:NoSchedule

我建议您阅读 taints and tolerations

关于kubernetes - 用Kops创建的集群-使用DaemonSet逐节点部署一个Pod避免主节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42134518/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com