このリポジトリは現在放棄されています
このリポジトリのメンテナンス済みフォークの使用に興味がある場合は、Pelotech のエンジニアリング チームがメンテナンスすることに親切に同意したフォークである pelotech-nidhogg を使用してください。
詳細については、この問題を参照してください
私たちは小さなチームにすぎず、もう使用しなくなったツールを保守する能力がないため、今後はこのリポジトリを Abandoned に移動する予定ですが、Pelotech のようなチームが存在することを嬉しく思います。このソリューションに投資し、アクティブなフォークを維持することでオープンソース コミュニティに還元します。
Nidhogg は、特定の Daemonset の Pod がノード上で実行されているかどうかに基づいてノードを汚染するコントローラーです。
場合によっては、Daemonset が非常に重要であるため、その Daemonset がノード上で起動して実行されるまで、ノード上で他のポッドを実行したくない場合があります。 Nidhogg は、Daemonset ポッドの準備ができるまでノードを汚染し、汚染を許容しないポッドがそこでスケジュールされるのを防ぐことで、この問題を解決します。
必要なテイントがすべて削除されると、Nidhogg はノードに注釈を付けます: nidhogg.uswitch.com/first-time-ready: 2006-01-02T15:04:05Z
Nidhogg は Kubebuilder を使用して構築されました
Nidhogg には、どの Daemonset を監視し、どのノードで動作するかを指示する yaml/json 構成ファイルが必要です。 nodeSelector
ノード ラベルに対応するキー/値のマップです。 daemonsets
、監視する Daemonset の配列であり、それぞれに 2 つのフィールド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 "
}
]
}
この例では、「standard」または「special」という名前の AWS ASG 内のノードのうち、ラベルnode-role.kubernetes.io/node
存在するノードを選択しますが、ラベルnode-role.kubernetes.io/master
のノードは選択しません。一致するノードに、 kube-system
名前空間のkiam
daemonset からの実行可能で準備完了のポッドがない場合。ノード上に準備の整った kiam ポッドができるまで、 nidhogg.uswitch.com/kube-system.kiam:NoSchedule
-system.kiam:NoSchedule のテイントが追加されます。
ポッドを 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")