Kubernetes 使用Kops创建的集群-使用守护程序逐节点部署一个pod避免主节点
我试着一个节点一个节点地部署一个吊舱。当使用kubeup创建集群时,它可以很好地处理这类守护程序。但是我们使用kops迁移了集群创建,并且使用kops,主节点是集群的一部分 我注意到主节点定义了一个特定的标签:Kubernetes 使用Kops创建的集群-使用守护程序逐节点部署一个pod避免主节点,kubernetes,Kubernetes,我试着一个节点一个节点地部署一个吊舱。当使用kubeup创建集群时,它可以很好地处理这类守护程序。但是我们使用kops迁移了集群创建,并且使用kops,主节点是集群的一部分 我注意到主节点定义了一个特定的标签:kubernetes.io/role=master 并带有污点:scheduler.alpha.kubernetes.io/taints:[{“key”:“专用”、“值”:“master”、“effect”:“NoSchedule”}] 但它并没有停止部署带有守护程序的pod 所以我尝试添
kubernetes.io/role=master
并带有污点:scheduler.alpha.kubernetes.io/taints:[{“key”:“专用”、“值”:“master”、“effect”:“NoSchedule”}]
但它并没有停止部署带有守护程序的pod
所以我尝试添加调度器.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的节点添加标签,但我会避免在集群创建过程中添加标签,因为这是一个额外的步骤,如果我可以避免,这将是最好的:)
编辑:
我改变了主意(给出了答案),我认为这是对的,但没有帮助,我仍然在上面部署了一个吊舱:
- 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
模板:
部分(在元数据:
下)
或者,主节点(您可以删除注释):
我建议您继续阅读。我认为kops正在这样做,这就是为什么部署类不在其上部署,但由于某些原因,它对守护进程不起作用将注释移动到pod定义没有帮助(查看我问题的编辑部分)您能做什么
kubectl获取版本
?我这样问是因为守护程序有一个关于污点的问题,您的特定版本可能不支持该功能。看见jenkins@jenkins:/home/azureuser$kubectl version客户端版本:version.Info{Major:“1”,Minor:“4”,GitVersion:“v1.4.0”,GitCommit:“a16c0a7f71a6f93c7e0f22d961f4675cd97a46b”,gittrestate:“clean”,BuildDate:“2016-09-26T18:16:57Z”,GoVersion:“go1.6.3”,编译器:“gc”,平台:“linux/amd64”}无法从服务器读取服务器版本:服务器不允许访问请求的资源您可以尝试对主机的主机名(kubernetes.io/hostname
)进行反关联吗?
kubectl taint nodes nameofmaster dedicated=master:NoSchedule