DaemonSets в Google Container Engine (Кубернетес)

У меня есть кластер Google Container Engine с 21 узлом, есть, в частности, один модуль, который мне всегда нужно запускать на node со статическим IP-адресом (для исходящих целей).

Kubernetes поддерживает DaemonSets

Это способ развертывания pod для определенного node (или в наборе узлов), указав метку node, которая соответствует узлуSelector в DaemonSet. Затем вы можете назначить статический IP-адрес экземпляра виртуальной машины, на который помечен помеченный node. Однако GKE не поддерживает тип DaemonSet.

$ kubectl create -f go-daemonset.json 
error validating "go-daemonset.json": error validating data: the server could not find the requested resource; if you choose to ignore these errors, turn validation off with --validate=false

$ kubectl create -f go-daemonset.json --validate=false
unable to recognize "go-daemonset.json": no kind named "DaemonSet" is registered in versions ["" "v1"]

Когда эта функция будет поддерживаться и каковы обходные пути?

Ответ 1

Если вы хотите только запустить модуль на одном node, вы фактически не хотите использовать DaemonSet. DaemonSets предназначены для запуска модуля на каждом node, а не в одном конкретном node.

Чтобы запустить модуль на конкретном node, вы можете использовать nodeSelector в спецификации pod, как описано в Node примере выбора в документах..


edit: Но для тех, кто читает это, который хочет что-то запускать на каждом node в GKE, есть две вещи, которые я могу сказать:

Во-первых, DaemonSet будет включен в GKE в версии 1.2, которая запланирована на март. Он не включен в GKE в версии 1.1, потому что он не считался достаточно стабильным в то время, когда был сокращен 1.1.

Во-вторых, если вы хотите что-то запускать на каждом node до выхода 1.2, мы рекомендуем создать контроллер репликации с количеством реплик, превышающим количество узлов, и запросить hostPort в спецификации контейнера. hostPort гарантирует, что не будет загружено не более одного модуля из RC за node.

Ответ 2

DaemonSets по-прежнему является альфа-функцией, а Google Container Engine поддерживает только производственные функции Kubernetes. Обходной путь: создайте собственный кластер Kubernetes (GCE, AWS, голый металл,...) и включите функции альфа/бета.