我嘗試按節點部署一個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 –