Не удается обновить конфигурацию 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.

Другие вопросы по тегам