Я новичок в мире Kubernetes и тестировал пример развертывания приложения Django "Hello world". Используя docker-compose, я смог получить доступ к странице адского мира в браузере, но мне нужно использовать Kubernetes. Итак, я протестировал два варианта, и ни один из них не сработал. 1) Я создал конвейер Azure CICD для построения и отправки изображения в ACR с помощью следующего файла Dockerfile,
FROM python:3.8
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN mkdir /hello_world
WORKDIR /hello_world
COPY . /hello_world/
RUN pip install -r requirements.txt
CMD [ "python", "manage.py", "runserver", "0.0.0.0:8000" ]
. Конвейер успешно завершается и загружает изображение в репозиторий.
Теперь яиспользуйте kubectl для развертывания с использованием файла развертывания,
apiVersion: apps/v1
kind: Deployment
metadata:
name: django-helloworld
spec:
replicas: 3
selector:
matchLabels:
app: django-helloworld
template:
metadata:
labels:
app: django-helloworld
spec:
containers:
- name: django-helloworld
image: acrshgpdev1.azurecr.io/django-helloworld:194
#imagePullPolicy: Always
ports:
- containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:
name: django-helloworld-service
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: django-helloworld
Развертывание и служба создаются, но когда я пытаюсь получить доступ к внешнему IP-адресу службы LB через браузер, страница недоступна. Я использовал внешний порт ip: и он не работал. Любые мысли, почему это могло бы произойти?
2) Я использовал тот же Dockerfile, но другой файл развертывания (изменил образ на локально созданный образ и удалил LB-сервис), чтобы развернуть приложение в моем локальном Kubernetes. файл развертывания был следующим:
apiVersion: v1
kind: Service
metadata:
name: django-helloworld-service
spec:
selector:
app: django-helloworld
ports:
- protocol: TCP
port: 80
targetPort: 30800
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: django-helloworld
spec:
replicas: 3
selector:
matchLabels:
app: django-helloworld
template:
metadata:
labels:
app: django-helloworld
spec:
containers:
- name: django-helloworld
image: django-helloworld:1.0
#imagePullPolicy: Always
ports:
- containerPort: 8000
Он создает развертывание и службу, но не назначает внешний IP-адрес службе NodePort, поэтому я не могу определить, какую службу выбрать для тестированияПриложение успешно. Я знаю, что не могу выбрать LB, поскольку он не работает локально, и мне нужно развернуть его с помощью облачной службы.