我尝试按节点部署一个POD。它可以和daemonSet一起工作,并且当使用kubeup创建集群时。但是我们使用kops和kops迁移了集群创建,主节点是集群的一部分。使用Kops创建的集群 - 使用DaemonSet部署一个节点以避免主节点
我注意到主节点与特定的标签定义:kubernetes.io/role=master
和一个污点:scheduler.alpha.kubernetes.io/taints:[{"key":"dedicated","value":"master","effect":"NoSchedule"}]
但它不会停下来荚部署在它DaemonSet
所以我尝试添加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
但我t不起作用。有人知道为什么吗? 我现在使用的解决方法是使用nodeSelector
并向只有小爪子的节点添加标签,但是我会避免在群集创建期间添加标签,因为这是一个额外的步骤,如果我可以避免它,它将用于最好的:)
编辑:
我更改为(给出的答案),我认为这是正确的,但它并没有帮助,我仍然有一个吊舱上部署:
- 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
我认为kops是这样做的,为什么使用部署类它不部署它,但由于某种原因它不适用于守护进程集 –
将注释移动到pod定义没有帮助(请看我的问题的编辑部分) –
你可以做'kubectl获取版本'吗?我在问,因为DaemonSet表明存在一个问题,并且该特性可能不支持您的特定版本。请参阅https://github.com/kubernetes/kubernetes/pull/31907 –