ESTE REPO AGORA ESTÁ SENDO ABANDONADO
Se você estiver interessado em usar um fork mantido deste repositório, use pelotech-nidhogg, o fork que a equipe de engenharia da Pelotech gentilmente concordou em manter.
Veja esta edição para mais detalhes
Somos apenas uma equipe pequena e não temos capacidade para manter uma ferramenta que não usamos mais, então a partir de agora iremos mover este repositório para Abandonado, mas estamos felizes que uma equipe como a da Pelotech esteja investindo nesta solução e retribuindo à comunidade de código aberto, mantendo um fork ativo.
Nidhogg é um controlador que contamina nós com base no fato de um Pod de um Daemonset específico estar sendo executado neles.
Às vezes você tem um Daemonset que é tão importante que você não quer que outros pods sejam executados em seu nó até que esse Daemonset esteja instalado e funcionando no nó. Nidhogg resolve esse problema contaminando o nó até que seu pod Daemonset esteja pronto, evitando que pods que não toleram a contaminação sejam agendados lá.
Nidhogg anota o nó quando todos os contaminantes necessários forem removidos: nidhogg.uswitch.com/first-time-ready: 2006-01-02T15:04:05Z
Nidhogg foi construído usando Kubebuilder
Nidhogg requer um arquivo de configuração yaml/json para informar quais Daemonsets observar e em quais nós agir. nodeSelector
é um mapa de chaves/valores correspondentes aos rótulos dos nós. daemonsets
é uma matriz de Daemonsets para observar, cada um contendo dois campos name
e namespace
. Os nós são contaminados com contaminação que segue o formato de nidhogg.uswitch.com/namespace.name:NoSchedule
.
Exemplo:
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 "
}
]
}
Este exemplo selecionará quaisquer nós em ASGs da AWS chamados "padrão" ou "especial" que tenham o rótulo node-role.kubernetes.io/node
presente e nenhum nó com o rótulo node-role.kubernetes.io/master
. Se os nós correspondentes não tiverem um pod em execução e pronto do daemonset kiam
no namespace kube-system
. Ele adicionará uma mancha de nidhogg.uswitch.com/kube-system.kiam:NoSchedule
até que haja um pod kiam pronto no nó.
Se você deseja que os pods possam ser executados nos nós contaminados do nidhogg, você pode adicionar uma tolerância:
spec :
tolerations :
- key : nidhogg.uswitch.com/kube-system.kiam
operator : " Exists "
effect : NoSchedule
As imagens do Docker podem ser encontradas em https://quay.io/uswitch/nidhogg
Exemplos de manifestos do Kustomize podem ser encontrados aqui para implantar isso rapidamente em um cluster.
-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")