Kubernetes Fullstack 응용 프로그램을 Heroku 컨테이너로 변환
9829 단어 kubernetesdevops
비록 이것은 위대한 프로젝트로 많은 용도가 있지만, 그것은 여전히 복잡한 거대한 것이다.주요 클라우드 공급업체로부터 위탁 관리되는 Kubernetes 서비스가 있어도 팀은 끊임없이 확장된 플러그인과 패턴 변환을 사용하여 복잡하고 얽힌 구조를 유지해야 한다.그 유연성이 고유한 복잡성 때문에 Kubernetes는 자신의 기술로 이 다양한 편성 생태계를 실현하고 유지하며 업그레이드하고 조작해야 한다.
PaaS의 단순성
이러한 밀집적이고 기능 기반의 수요는 일부 상업 모델에 적용될 수 있다.그러나 서버와 보안을 관리하는 대신 응용 프로그램을 구축하는 데 시간이 걸리려면 Kubernetes가 아닌 플랫폼 즉 서비스(PaaS)를 고려해야 할 수도 있습니다.이러한 공급업체는 환경의 인프라, 보안, 가시성, 전체적인 복지를 유지하기 때문에 비즈니스 크리티컬 어플리케이션에 집중할 수 있습니다.
Kubernetes의 장점 중 하나는 통일된 환경 체험을 제공할 수 있다는 것이다.Kubernetes에 적응하기 위해 구축된 응용 프로그램은 디자인상 이식이 가능하고 본질적으로 짧으며 어떠한 용기 구동 세계에서도 생활할 수 있으며 인프라 시설과 무관하다( Twelve Factor Apps 응용 프로그램 구축에 대한 더 많은 안내서를 참조).그렇다면 한 응용 프로그램 팀이 쿠베르니테스가 관리하는 인프라 시설의 복잡성에서 벗어나 기획된 PaaS를 지원하려면 어떤 모습일까?
오늘 이 간단한 것 Kubernetes driven Flask application을 봅시다.우리는 그것이 어떻게 작동하는지 보고, 그것의 요구를 이해하며, 그것을 어떻게 Heroku로 변환하는지 탐색할 것이다.
응용 프로그램 설계
이 프로그램은 간단한 Flask 전단으로 Postgres 데이터베이스에서 배우 목록을 추출하여 사이트에 표시합니다.보시다시피 모니터링, 기록, 서비스, 정상적인 운행 시간을 제공하는 인프라 시설은 응용 프로그램 자체보다 더 많은 구성 요소를 구성한다.
Kubernetes에 응용 프로그램을 배치하기 위해서는 선결 조건의 기초 구조 구성 요소, 응용 프로그램 자체의 몇 개의 YAML과 데이터베이스의 Helm 그림이 필요합니다.
PaaS 공급업체가 기술 결정을 내렸기 때문에 공급업체의 결정과 의견을 준수해야 합니다.그러나 보답으로 당신은 상자를 열면 바로 사용할 수 있는 긴밀하게 통합된 서비스 제품을 얻을 수 있습니다.서비스 격자와 로그 내보내기를 연구하고 실현하는 데 몇 주가 걸렸는데, 지금은 몇 분과 몇 개의 명령만 있으면 된다.
Heroku에 동일한 응용 프로그램을 배치하려면 시작 the database 및 the application.
이제 이 프로그램을 Kubernetes에서 Heroku로 전환하는 방법을 살펴보겠습니다.우리는 네 가지 절차를 볼 것이다.
1. 인프라 시설 건설
우리는 Kubernetes의 많은 구성 요소를 보았습니다. 이것은 제품의 조작성을 확보하는 데 필요한 것입니다. 모든 구성 요소는 설치 안내서와 건의가 있지만, 패턴은 보통 매우 비슷합니다.
이러한 절차는 TLS와 데이터 관리, 확장성, 관찰성, 중복성 등 두 가지 환경의 응용 프로그램에 핵심 인프라 서비스를 제공합니다.
2. 애플리케이션 변환
현재, 우리는 모든 환경이 우리의 예시 응용 프로그램을 어떻게 찾는지 결정했고, 우리는 응용 프로그램을 어떻게 조정하여 새로운 PaaS 홈페이지에서 작업해야 하는지 볼 수 있다.많은 구성 요소들이 우리의 이름으로 이루어지기 때문에 응용 프로그램을 배치하기 전에 필요한 전환을 해야 한다.
이 절차는 응용 프로그램을 용기로 배치하고, stdout에서 응용 프로그램 로그를 보고, 실행할 때 용기에 원격 로그인하고, 인프라 시설에서 응용 프로그램의 매개 변수를 사용자 정의할 수 있도록 합니다.
우선 Dockerfile을 변경해야 합니다.초기화할 때 응용 프로그램을 정의하는 Kubernetes Dockerfile의 경우 기본적으로 원하는 대로 설계할 수 있습니다.
FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
RUN touch /tmp/healthy && echo "healthy" >> /tmp/healthy && cat /tmp/healthy
ENV FLASK_ENV=development
ENV FLASK_APP=myapp.py
COPY myapp.py .
CMD [ "flask", "run", "--host=0.0.0.0" ]
이미지는 간단합니다. 유지보수의 기본 이미지를 사용하고 작업 디렉터리를 설정하고python 수요를 추가하며 기본 환경 변수를 설정하고 응용 프로그램 코드를 추가한 다음 서버를 시작합니다.다음 단계에서 이 Dockerfile을 사용하여 응용 프로그램을 구축하여 Docker 등록표로 전송하고 Kubernetes가 로컬 서버로 이미지를 끌어다 응용 프로그램을 시작하도록 합니다.
Heroku에서, 우리는Python에 특정한 기본 이미지를 사용하기를 원하기 때문에, Heroku의 용기 관리 인터페이스에 몇 개의 패키지를 추가해야 합니다.새 Dockerfile은 다음과 같습니다.
FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
RUN apt-get update && \
apt-get install -y \
curl \
openssh-server
ADD ./.profile.d /app/.profile.d
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN echo "healthy" >> /tmp/healthy && \
cat /tmp/healthy
ENV FLASK_ENV=development
ENV FLASK_APP=myapp.py
COPY myapp.py .
CMD python3 myapp.py
여기에서 우리는 이전과 같은 이미지를 정의했지만 약간의 조정이 있었다.[ -z "$SSH_CLIENT" ] && source <(curl --fail --retry 3 -sSL "$HEROKU_EXEC_URL")
다음은 myapp에서flask가 실행될 때 파라미터를 지정해서 이미지 실례화 방식을 변경해야 합니다.py 파일은 Heroku가 정의한 환경 변수를 사용하여 프로그램이 배치된 후에 데이터를 얻을 수 있도록 합니다.
if __name__ == "__main__":
port = int(os.getenv("PORT", 5000))
app.run(debug=True, host='0.0.0.0', port=port)
그러나 위탁 관리 서비스를 사용할 때 이것은 필수적인 것이 아니다.Heroku를 사용하면 대시보드를 통해 위탁 관리 데이터베이스를 추가할 수 있습니다.복제와 복구 능력은 공급업체가 관리해야 할 문제가 된다.
(이 두 가지 데이터베이스 구현에서 복제와 복구 능력은 테스트를 거친 백업을 대체할 수 없습니다. 항상 핵심 데이터를 백업하고 검증합니다.)
이렇게 하면 우리는 응용 프로그램 용기 이미지와 데이터베이스를 배치할 수 있다.
3, 응용 프로그램 실행
만약에 우리가 핵심 인프라 시설을 설치하고 집단을 위해 데이터베이스를 설정하며 서비스 계정과 관련된 적당한 역할 기반 접근 제어(RBAC) 설정을 설치한다면 우리는 현재 응용 프로그램 배치에 전념할 수 있다.
예제에서는 명시적 CI/CD 파이프를 정의하지 않았습니다.따라서 Kubernetes에 응용 프로그램을 수동으로 배치하려면 kubectl 바이너리 파일을 사용하여 다음과 같은 작업을 수행해야 합니다.
docker login
docker build -t myorg/myapp:0.0.1 -t myorg/myapp:latest .
docker push myorg/myapp:0.0.1; docker push myorg/myapp:latest
kubectl apply -f ./spec/
보시다시피 핵심 인프라를 배치하고 YAML을 검증하면 수동으로 코드를 Kubernetes 집단으로 스크롤하는 것이 어렵지 않습니다.Heroku의 배치 방안을 보면 사용자 정의 바이너리 파일이 있고 그들의 API와 상호작용을 할 수 있습니다.
heroku login
heroku container:login
heroku container:push web -a myapp
heroku container:release web -a myapp
여기에서 우리는 Heroku가 응용 프로그램에 대한 표시와 배치를 신뢰합니다. 비록 이것은 어느 정도 수동 발표와 같이 엄격하지만.마찬가지로 공평한 것은 두 플랫폼에 내장된 배치와 발표 파이프가 이 모든 업무를 완전히 혼동할 수 있다는 것이다.그러나 이것도 반드시 어떤 환경에서도 설계, 건조, 유지보수를 해야 한다.
현재, 우리는 이미 이 두 가지 환경에서 응용 프로그램을 배치하는 절차를 정의했다.
4. 애플리케이션 업데이트
기존 응용 프로그램을 Kubernetes에 배포할 때 응용 프로그램이 아닌 다른 명령을 사용합니다.
docker build -t myorg/myapp:0.0.2 -t myorg/myapp:latest .
kubectl rollout deployment/myapp -n myapp --record --image=myapp:0.0.2
Heroku에 대해 우리는 같은 과정을 다시 따르기만 하면 된다.heroku container:push web -a myapp
heroku container:release web -a myapp
이 마지막 단계에서, 우리는 응용 프로그램을 환경에 교체하여 배치하는 과정이 있다.결론
셰익스피어는 "어떤 이름이든 장미 한 송이는 맡아도 똑같이 달콤하다."라고 썼다.이와 유사하게 우리 응용 프로그램의 작업 원리는 모든 용기화 환경(Capulet 또는 Montague)에서의 작업 원리와 같다. 왜냐하면 응용 프로그램 자체가 아니라 그 주변 환경을 따라야 하기 때문이다.
그 밖에 복잡하고 고도로 맞춤형 Kubernetes 환경에서 간단한 응용 프로그램을 실행하는 데 무엇이 필요한지, 그리고 우리의 위탁 관리 인프라 공급업체 Heroku에서 같은 등급의 기능을 얻는 데 무엇이 필요한지 연구했다.마지막으로 둘 다 배치와 운행이 쉽지만 Heroku는 입문의 선결 조건에 있어 그렇게 밀집되어 있지 않다.
Reference
이 문제에 관하여(Kubernetes Fullstack 응용 프로그램을 Heroku 컨테이너로 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/heroku/converting-a-kubernetes-fullstack-application-to-heroku-containers-k3n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)