DIESES REPO WIRD JETZT AUFGEGEBEN
Wenn Sie daran interessiert sind, einen gewarteten Fork dieses Repos zu verwenden, verwenden Sie bitte pelotech-nidhogg, den Fork, dessen Wartung das Ingenieurteam von Pelotech freundlicherweise zugestimmt hat.
Weitere Einzelheiten finden Sie in dieser Ausgabe
Wir sind nur ein kleines Team und haben nicht die Kapazitäten, ein Tool zu warten, das wir nicht mehr verwenden. Deshalb werden wir dieses Repo von nun an nach Abandoned verschieben, aber wir freuen uns, dass es ein Team wie das von Pelotech gibt Investieren Sie in diese Lösung und geben Sie der Open-Source-Community etwas zurück, indem Sie einen aktiven Fork unterhalten.
Nidhogg ist ein Controller, der Knoten basierend darauf markiert, ob ein Pod aus einem bestimmten Daemonset auf ihnen ausgeführt wird.
Manchmal haben Sie ein Daemonset, das so wichtig ist, dass Sie nicht möchten, dass andere Pods auf Ihrem Knoten ausgeführt werden, bis dieses Daemonset auf dem Knoten läuft. Nidhogg löst dieses Problem, indem es den Knoten verunreinigt, bis Ihr Daemonset-Pod bereit ist, und so verhindert, dass Pods, die die Verunreinigung nicht tolerieren, dort eingeplant werden.
Nidhogg kommentiert den Knoten, wenn alle erforderlichen Taints entfernt wurden: nidhogg.uswitch.com/first-time-ready: 2006-01-02T15:04:05Z
Nidhogg wurde mit Kubebuilder erstellt
Nidhogg benötigt eine Yaml/JSON-Konfigurationsdatei, um ihm mitzuteilen, welche Daemonsets überwacht werden sollen und auf welche Knoten es reagieren soll. nodeSelector
ist eine Zuordnung von Schlüsseln/Werten, die den Knotenbezeichnungen entsprechen. daemonsets
ist ein Array von zu überwachenden Daemonsets, die jeweils zwei Felder name
und namespace
enthalten. Knoten sind mit einem Taint versehen, der dem Format nidhogg.uswitch.com/namespace.name:NoSchedule
folgt.
Beispiel:
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 "
}
]
}
In diesem Beispiel werden alle Knoten in AWS ASGs mit den Namen „Standard“ oder „Special“ ausgewählt, die über die Bezeichnung node-role.kubernetes.io/node
verfügen, und keine Knoten mit der Bezeichnung node-role.kubernetes.io/master
. Wenn die übereinstimmenden Knoten keinen laufenden und bereiten Pod aus dem kiam
Daemonset im kube-system
-Namespace haben. Es wird ein Taint von nidhogg.uswitch.com/kube-system.kiam:NoSchedule
hinzugefügt, bis ein fertiger Kiam-Pod auf dem Knoten vorhanden ist.
Wenn Sie möchten, dass Pods auf den mit Nidhogg infizierten Knoten ausgeführt werden können, können Sie eine Toleranz hinzufügen:
spec :
tolerations :
- key : nidhogg.uswitch.com/kube-system.kiam
operator : " Exists "
effect : NoSchedule
Docker-Images finden Sie unter https://quay.io/uswitch/nidhogg
Beispielhafte Kustomize-Manifeste finden Sie hier, um dies schnell in einem Cluster bereitzustellen.
-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")