该回购协议现已被放弃
如果您有兴趣使用此存储库的维护分叉,请使用 pelotech-nidhogg,Pelotech 的工程团队已同意维护该分叉。
请参阅此问题了解更多详细信息
我们只是一个小团队,我们没有能力维护我们不再使用的工具,因此从现在开始,我们将把这个存储库移至“废弃”,但我们很高兴像 Pelotech 这样的团队投资该解决方案并通过维护活跃的分叉来回馈开源社区。
Nidhogg 是一个控制器,它根据特定 Daemonset 中的 Pod 是否在节点上运行来污染节点。
有时,您有一个非常重要的 Daemonset,以至于您不希望其他 Pod 在您的节点上运行,直到该 Daemonset 在该节点上启动并运行。 Nidhogg 通过污染节点直到 Daemonset pod 准备就绪来解决这个问题,从而防止不能容忍污染的 pod 调度到那里。
当所有必需的污点被删除时,Nidhogg 注释节点: nidhogg.uswitch.com/first-time-ready: 2006-01-02T15:04:05Z
Nidhogg 是使用 Kubebuilder 构建的
Nidhogg 需要一个 yaml/json 配置文件来告诉它要监视哪些 Daemonsets 以及要对哪些节点进行操作。 nodeSelector
是与节点标签对应的键/值的映射。 daemonsets
是要监视的 Daemonsets 数组,每个 Daemonsets 包含两个字段name
和namespace
。节点受到以下格式的污点污染: nidhogg.uswitch.com/namespace.name:NoSchedule
。
例子:
yaml:
nodeSelector :
node-role.kubernetes.io/node
daemonsets :
- name : kiam
namespace : kube-system
JSON:
{
"nodeSelector" : [
" node-role.kubernetes.io/node " ,
" !node-role.kubernetes.io/master " ,
" aws.amazon.com/ec2.asg.name in (standard, special) "
],
"daemonsets" : [
{
"name" : " kiam " ,
"namespace" : " kube-system "
}
]
}
此示例将选择 AWS ASG 中名为“standard”或“special”且具有标签node-role.kubernetes.io/node
的任何节点,并且不选择具有标签node-role.kubernetes.io/master
的节点。如果匹配节点没有来自kube-system
命名空间中的kiam
daemonset 的正在运行且准备就绪的 pod。它将添加nidhogg.uswitch.com/kube-system.kiam:NoSchedule
污点,直到节点上有就绪的 kiam pod。
如果您希望 pod 能够在 nidhogg 污染的节点上运行,您可以添加一个容忍度:
spec :
tolerations :
- key : nidhogg.uswitch.com/kube-system.kiam
operator : " Exists "
effect : NoSchedule
Docker 镜像可以在 https://quay.io/uswitch/nidhogg 找到
可以在此处找到示例 Kustomize 清单,以将其快速部署到集群。
-config-file string
Path to config file (default "config.json")
-kubeconfig string
Paths to a kubeconfig. Only required if out-of-cluster.
-leader-configmap string
Name of configmap to use for leader election
-leader-election
enable leader election
-leader-namespace string
Namespace where leader configmap located
-master string
The address of the Kubernetes API server. Overrides any value in kubeconfig. Only required if out-of-cluster.
-metrics-addr string
The address the metric endpoint binds to. (default ":8080")