반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Continuous Deployment
- Kopf
- seldon core
- opensearch
- Kubernetes
- Kubeflow
- eBPF
- Kubernetes 인증
- nginx ingress
- blue/green
- CANARY
- tekton
- CI/CD
- 오퍼레이터
- Model Serving
- keda
- operator
- knative
- serving
- xdp
- 카오스 엔지니어링
- Pulumi
- Litmus
- gitops
- kubernetes operator
- mlops
- argocd
- Argo
- opentelemetry
- MLflow
Archives
- Today
- Total
Kubernetes 이야기
DevSpace 본문
반응형
DevSpace는 Kubernetes용 클라이언트 전용 오픈 소스 개발자 도구이다.
- Kubernetes 내에서 직접 애플리케이션 빌드, 테스트 및 디버그
- 핫 리로딩으로 개발 : 이미지를 다시 빌드하거나 컨테이너를 다시 시작하지 않고 실행 중인 컨테이너를 업데이트 한다.
- 팀 내, 그리고 개발, 스테이징 및 프로덕션 전반에 걸쳐 배포 워크플로 를 통합한다.
- 이미지 구축 및 배포를 위한 반복 작업 자동화
아키텍처
설치
DevSpace는 client 에서 실행하는 바이너리 파일 한개로 구성된다. (서버쪽에 별도 설치할 구성요소는 없다)
# curl -L -o devspace "https://github.com/loft-sh/devspace/releases/latest/download/devspace-linux-amd64" && sudo install -c -m 0755 devspace /usr/local/bin
시작하기
프로젝트 준비
# git clone https://github.com/kmaster8/flask-helloworld
# cd flask-helloworld
프로젝트 초기화
# devspace init
%########%
%###########% ____ _____
%#########% | _ \ ___ __ __ / ___/ ____ ____ ____ ___
%#########% | | | | / _ \\ \ / / \___ \ | _ \ / _ | / __// _ \
%#############% | |_| |( __/ \ V / ____) )| |_) )( (_| |( (__( __/
%#############% |____/ \___| \_/ \____/ | __/ \__,_| \___\\___|
%###############% |_|
%###########%
info Detecting programming language...
? Select the programming language of this project [Use arrows to move, type to filter]
java-maven
javascript
php
> python
ruby
typescript
other
프로젝트의 언어를 선택한다. (Python)
? How do you want to deploy this project? [Use arrows to move, type to filter]
> helm
kubectl
kustomize
배포할 유형을 선택한다. (helm)
? Do you already have a Helm chart for this project? [Use arrows to move, type to filter]
> No
Yes
작성된 Helm 차트 유무를 선택한다. (No)
? Do you want to develop this project with DevSpace or just deploy it? [Use arrows to move, type to filter] [Use arrows to move, type to filter]
> I want to develop this project and my current working dir contains the source code
I just want to deploy this project
DevSpace를 초기화할 때 소스 코드의 변경 사항을 모니터링하거나 애플리케이션 배포에 필요한 것만 설정하도록 요청할 수 있다.
? How should DevSpace build the container image for this project? [Use arrows to move, type to filter]
> Use this existing Dockerfile: ./Dockerfile
Use a different Dockerfile (e.g. ./backend/Dockerfile)
Use alternative build tool (e.g. jib, bazel)
Skip / I don't know
Dockerfile 위치를 선택한다. 기타 registry server 등의 옵션을 선택하면 초기화가 완료된다.
개발하기
DevSpace를 사용하면 매우 빠른 핫 리로딩 워크플로를 통해 Kubernetes 클러스터 내에서 직접 애플리케이션을 개발할 수 있다.
DevSpace에서 개발 모드를 시작하기 전에 DevSpace가 올바른 클러스터와 네임스페이스를 사용하는지 확인해야 한다.
# devspace use context
? Which context do you want to use? kubernetes-admin@kubernetes
done Successfully set kube-context to 'kubernetes-admin@kubernetes'
# devspace use namespace test
info The default namespace of your current kube-context 'kubernetes-admin@kubernetes' has been updated to 'test'
To revert this operation, run: devspace use namespace
done Successfully set default namespace to 'test'
다음 명령을 실행하여 프로젝트를 배포하고 개발 컨테이너를 시작한다.
# devspace dev
info Using namespace 'test'
info Using kube context 'kubernetes-admin@kubernetes'
deploy:app Deploying chart /root/.devspace/component-chart/component-chart-0.8.5.tgz (app) with helm...
deploy:app Deployed helm chart (Release revision: 1)
deploy:app Successfully deployed app with helm
dev:app Waiting for pod to become ready...
dev:app DevSpace is waiting, because Pod app-devspace-7c8fbb95f5-2qmkl has status: ContainerCreating
dev:app Selected pod app-devspace-7c8fbb95f5-2qmkl
dev:app open Opening 'http://localhost:8080' as soon as application will be started
dev:app ports Port forwarding started on: 8080 -> 8080
dev:app sync Sync started on: ./ <-> ./
dev:app sync Waiting for initial sync to complete
dev:app sync Initial sync completed
dev:app ssh Port forwarding started on: 10273 -> 8022
dev:app proxy Port forwarding started on: 10813 <- 10567
dev:app ssh Use 'ssh app.flask-helloworld.devspace' to connect via SSH
dev:app term Opening shell to container-0:app-devspace-7c8fbb95f5-2qmkl (pod:container)
%########%
%###########% ____ _____
%#########% | _ \ ___ __ __ / ___/ ____ ____ ____ ___
%#########% | | | | / _ \\ \ / / \___ \ | _ \ / _ | / __// _ \
%#############% | |_| |( __/ \ V / ____) )| |_) )( (_| |( (__( __/
%#############% |____/ \___| \_/ \____/ | __/ \__,_| \___\\___|
%###############% |_|
%###########%
Welcome to your development container!
This is how you can work with it:
- Files will be synchronized between your local machine and this container
- Some ports will be forwarded, so you can access this container via localhost
- Run `python main.py` to start the application
devspace ./app #
개발 컨테이너에 대한 터미널이 열리면 명령을 실행하여 애플리케이션을 시작한다.
# k get all
NAME READY STATUS RESTARTS AGE
pod/app-devspace-5b7f968d78-k6zgt 1/1 Running 0 70s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/app ClusterIP 10.103.218.7 <none> 8080/TCP 71s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/app 0/0 0 0 71s
deployment.apps/app-devspace 1/1 1 1 70s
NAME DESIRED CURRENT READY AGE
replicaset.apps/app-6f9f978d88 0 0 0 71s
replicaset.apps/app-devspace-5b7f968d78 1 1 1 70s
# pip install --no-cache-dir -r requirements.txt
# python app.py
이제 app.py를 수정하게 되면 로컬의 app.py가 동일하게 수정된다. 작업이 모두 완료되면 deploy를 진행한다.
# devspace deploy
info Using namespace 'test'
info Using kube context 'kubernetes-admin@kubernetes'
build:app Couldn't find a running docker daemon. Will fallback to kaniko
build:app Ensuring image pull secret for registry: ghcr.io...
build:app Created image pull secret test/devspace-pull-secrets
build:app Rebuild image because tag is missing
build:app Building image 'ghcr.io/kmaster8/flask-helloworld/app:52e4a79' with engine 'kaniko'
build:app Waiting for build init container to start...
build:app Uploading files to build container...
build:app Uploaded files to container
build:app Waiting for kaniko container to start...
build:app Build pod has started
build:app Printing logs of pod:container devspace-build-kaniko-5l7wp:kaniko
build:app INFO[0000] Retrieving image manifest python:3.10-alpine
build:app INFO[0000] Retrieving image python:3.10-alpine from registry index.docker.io
build:app INFO[0005] Retrieving image manifest python:3.10-alpine
build:app INFO[0005] Returning cached image manifest
build:app INFO[0005] Built cross stage deps: map[]
...
다음과 같이 배포가 완료됨을 알 수 있다.
# k get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
app 1/1 1 1 19m
app-devspace 1/1 1 1 19m
반응형
'Kubernetes > devops' 카테고리의 다른 글
Backstage (0) | 2022.10.02 |
---|---|
dapr (0) | 2022.09.30 |
Tekton Trigger (0) | 2022.09.14 |
Tekton을 이용한 CI/CD (0) | 2022.09.12 |
Jenkins와 Keycloak을 이용한 OIDC 연동 (0) | 2022.09.10 |
Comments