Как свернуть контейнер, развернутый на Кубернетес? - PullRequest
0 голосов
/ 06 февраля 2020
  1. Я создал свой Docker образ и загрузил его в Amazon ECS (репозиторий изображений).
  2. Я написал файл deployment.yaml и запустил kubectl apply -f deployment.yaml.

Стоит отметить, что я использовал kops для развертывания кластера K8s на AWS EC2

Я вижу, что контейнеры работают в модулях Kubernetes с использованием панели инструментов Kubernetes. Также kubectl get pods -o wide также показывает мне pods.

Развернутый образ - это простой API, который предоставляет один маршрут. Моя проблема в том, что я не знаю, как запросить только что развернутый контейнер.

Dockerfile развернутого образа:

FROM node:lts
COPY package*.json tsconfig.json ./
RUN npm ci
COPY . .
RUN npm run build

EXPOSE 3000
CMD ["node", "dist/index.js"]

deploy.yaml (kubectl apply -f deployment.yaml):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: vuekcal
spec:
  selector:
    matchLabels:
      app: vuekcal
  replicas: 2
  template:
    metadata:
      labels:
        app: vuekcal
    spec:
      containers:
        - name: search
          image: [my-repo-id].dkr.ecr.eu-central-1.amazonaws.com/k8s-search
          ports:
            - containerPort: 3000

Что я пробовал:

  1. Выполнить kubectl get pods -o wide
NAME                       READY   STATUS    RESTARTS   AGE   IP           NODE                                            NOMINATED NODE   READINESS GATES
vuekcal-6956589484-7f2kx   1/1     Running   0          16m   100.96.2.6   ip-172-20-54-21.eu-central-1.compute.internal   <none>           <none>
vuekcal-6956589484-f4pqf   1/1     Running   0          16m   100.96.1.7   ip-172-20-59-29.eu-central-1.compute.internal   <none>           <none>

Если получить и IP-адрес из столбца IP и попытаться свернуть его ничего не происходит:

curl not working for ports 80 and 3000 on an example copied ip

Я предполагаю, что это потому, что эти IP-адреса являются локальными.

Поиск узла K8s, на котором запущен мой модуль K8s, с моим контейнером и попытка свернуть публичные c IP-адреса этого узла

external ip of aws ec2 node

И то же самое: нет ответа. enter image description here

Все нормально, если я запускаю контейнер локально docker run k8s-search.

Я понятия не имею, что здесь делать. Как запросить образ, который развертывание развертывает внутри узла Kubernetes?

1 Ответ

2 голосов
/ 06 февраля 2020

Чтобы получить доступ к модулю из-за пределов кластера, вам нужно создать либо Nodeport , либо LoadBalancer тип сервиса.

kubectl expose deployment vuekcal --type=NodePort --name=example-service

Затем получить доступ к нему через curl http://<public-node-ip>:<node-port>


! Убедитесь, что вы выполнили указанную выше команду kubectl expose!

Publi c IP-адрес узла

Чтобы получить доступ c IP-адрес узла, выполните следующую команду:

kubectl get nodes -o wide

и посмотрите на столбец «EXTERNAL-IP». Это publi c ip узла, на котором работает ваш контейнер. Здесь вы должны попытаться подключиться. Например, внешний IP вашего узла может быть 133.71.33.7. Запомните этот IP.

NodePort

Он отличается от containerPort в вашем deploy.yaml.
Чтобы найти NodePort, выполните следующую команду:

kubectl describe service example-service

Заменить example-service с тем, что вы написали в --name= при запуске kubectl expose deployment ... (первая команда в этом посте)

После выполнения команды вы увидите что-то вроде этого: enter image description here

Этот порт следует использовать при подключении.

Соединение его

133.73.133.7: 31110

...