Pod застрял в состоянии ожидания при попытке запланировать его на AWS Fargate - PullRequest
1 голос
/ 08 января 2020

У меня есть кластер EKS, в который я добавил поддержку для работы в гибридном режиме (другими словами, я добавил в него профиль Fargate). Я намерен запустить только указанную c рабочую нагрузку на AWS Fargate, сохраняя рабочие узлы EKS для других видов рабочей нагрузки.

Чтобы проверить это, мой профиль Fargate определен так:

  • Ограничено указанием c пространства имен (скажем, mynamespace )
  • Имеет специфицированную c метку, так что стручки должны соответствовать ей для того, чтобы быть запланированным на Fargate (метка: fargate: myvalue )

Для тестирования ресурсов k8s я пытаюсь развернуть простое развертывание nginx, которое выглядит следующим образом:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: mynamespace
  labels:
    fargate: myvalue
spec:
  selector:
    matchLabels:
      app: nginx
      version: 1.7.9
      fargate: myvalue
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
        version: 1.7.9
        fargate: myvalue
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

Когда я пытаюсь применить этот ресурс, я получаю следующее:

$ kubectl get pods -n mynamespace -o wide
NAME                                                        READY   STATUS      RESTARTS   AGE     IP            NODE                          NOMINATED NODE                                READINESS GATES
nginx-deployment-596c594988-x9s6n                           0/1     Pending     0          10m     <none>        <none>                        07c651ad2b-7cf85d41b2424e529247def8bda7bf38   <none>

Pod остается в состоянии Pending и никогда не запланируется для AWS экземпляров Fargate.

Это вывод описания модуля:

$ kubectl describe pod nginx-deployment-596c594988-x9s6n -n mynamespace
Name:               nginx-deployment-596c594988-x9s6n
Namespace:          mynamespace
Priority:           2000001000
PriorityClassName:  system-node-critical
Node:               <none>
Labels:             app=nginx
                    eks.amazonaws.com/fargate-profile=myprofile
                    fargate=myvalue
                    pod-template-hash=596c594988
                    version=1.7.9
Annotations:        kubernetes.io/psp: eks.privileged
Status:             Pending
IP:
Controlled By:      ReplicaSet/nginx-deployment-596c594988
NominatedNodeName:  9e418415bf-8259a43075714eb3ab77b08049d950a8
Containers:
  nginx:
    Image:        nginx:1.7.9
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-784d2 (ro)
Volumes:
  default-token-784d2:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-784d2
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>

Из этого вывода я могу сделать вывод, что был выбран правильный профиль Fargate:

eks.amazonaws.com/fargate-profile=myprofile

Кроме того, я вижу, что какое-то значение добавляется в поле NOMINATED NODE, но не уверен, что он представляет.

Есть какие-нибудь идеи или обычные проблемы, которые могут возникнуть, и которые, возможно, стоит устранить в этом случае? Спасибо

1 Ответ

2 голосов
/ 09 января 2020

Оказывается, проблема заключалась в постоянной настройке сети частных подсетей, связанных с профилем Fargate.

Чтобы дать больше информации, вот что у меня изначально было:

  1. Кластер EKS с несколькими рабочими узлами, где я назначил только публичные c подсети для самого кластера EKS
  2. Когда я попытался добавить профиль Fargate в кластер EKS, из-за текущего ограничения на Fargate невозможно связать профиль с подсетями publi c. Чтобы решить эту проблему, я создал частные подсети с тем же тегом, что и publi c, чтобы кластер EKS знал о них
  3. Что я забыл, так это то, что мне нужно было включить подключение из частных подсетей vp c во внешний мир (мне не хватало шлюза NAT). Итак, я создал шлюз NAT в Publi c su bnet, который связан с EKS, и добавил в дополнительную подсеть дополнительную запись в связанной таблице маршрутизации, которая выглядит следующим образом:

    0.0.0.0 / 0 nat-xxxxxxxx

Это решило проблему, с которой я столкнулся выше, хотя я не уверен насчет реальной причины, по которой профиль AWS Fargate должен быть связан только с частными подсетями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...