Не удается обновить конфигурацию Calico CNI в кластере Kubernetes
Я обнаружил, что еще несколько месяцев назад конфигурация "hostPort" для модулей не собиралась работать с интеграциями на основе CNI. Это означало, что для любого кластера Kubernetes, использующего Calico, было невозможно напрямую выставить порт Pod непосредственно на порту определенного узла, без использования службы или пометки hostNetwork=true
(что немного экстремально).
Начиная с Kubernetes 1.7.0 это возможно, но необходимо изменить конфигурацию Calico, чтобы позволить новому плагину CNI "portmap", что я и пытаюсь сделать, безуспешно. Я начинаю с нового кластера IBM Bluemix Container Service.
Мой ситцевый узел DaemonSet имеет следующую переменную среды CNI_NETWORK_CONFIG:
{
"name": "k8s-pod-network",
"cniVersion": "0.3.1",
"type": "calico",
"etcd_endpoints": "__ETCD_ENDPOINTS__",
"etcd_key_file": "__ETCD_KEY_FILE__",
"etcd_cert_file": "__ETCD_CERT_FILE__",
"etcd_ca_cert_file": "__ETCD_CA_CERT_FILE__",
"log_level": "info",
"mtu": 1480,
"ipam": {
"type": "calico-ipam"
},
"policy": {
"type": "k8s",
"k8s_api_root": "https://__KUBERNETES_SERVICE_HOST__:__KUBERNETES_SERVICE_PORT__",
"k8s_auth_token": "__SERVICEACCOUNT_TOKEN__"
},
"kubernetes": {
"kubeconfig": "__KUBECONFIG_FILEPATH__"
}
}
То, что я сделал здесь, просто пытался заменить его следующей конфигурацией:
{
"name": "k8s-pod-network",
"cniVersion": "0.3.1",
"plugins": [{
"type": "calico",
"etcd_endpoints": "__ETCD_ENDPOINTS__",
"etcd_key_file": "__ETCD_KEY_FILE__",
"etcd_cert_file": "__ETCD_CERT_FILE__",
"etcd_ca_cert_file": "__ETCD_CA_CERT_FILE__",
"log_level": "info",
"mtu": 1480,
"ipam": {
"type": "calico-ipam"
},
"policy": {
"type": "k8s",
"k8s_api_root": "https://__KUBERNETES_SERVICE_HOST__:__KUBERNETES_SERVICE_PORT__",
"k8s_auth_token": "__SERVICEACCOUNT_TOKEN__"
},
"kubernetes": {
"kubeconfig": "__KUBECONFIG_FILEPATH__"
}
},
{
"type": "portmap",
"snat": true,
"capabilities": {
"portMappings": true
}
}
]
}
calico-node
модули успешно запускались после принудительной перезагрузки, но мои собственные модули продолжают зависать в состоянии "Ожидание" во время инициализации с событием "Ошибка синхронизации модуля" из "kubelet NODE_IP".
Буду признателен за помощь в этом вопросе. Заранее спасибо.
1 ответ
То, что у вас есть, выглядит разумным в отношении содержания, я думаю, что проблема может заключаться в том, что вам нужно изменить имя файла конфигурации, заканчивая на .conf
в .conflist
, Существует PR с некоторыми изменениями WIP https://github.com/projectcalico/calico/pull/903 для включения hostport в манифестах ситца, вы можете сравнить его с тем, что вы сделали.
Если вы задали имя файла с помощью daemonset, вы должны удалить предыдущий файл конфигурации на хостах, поскольку освобожденный контейнер install-cni не очищает предыдущий файл конфигурации, и я не уверен, какой файл конфигурации будет использовать kubelet.