쿠베르네테스의 지역 개발 환경 조성 방법은?
Kubernetes는 클러스터의 클라우드에 컨테이너를 배포하는 것에 대한 모든 것인 것 같습니다.이것은 개발 및 스테이징 환경(또는 그러한 환경)에 영향을 미치지 않는 것 같습니다.
개발 중에 몇 가지 중요한 변경 사항이 있는 운영 환경에 최대한 가까이 접근하고자 합니다.
- 로컬(또는 사용자만이 액세스할 수 있는 최소한 어딘가에) 구축
- 페이지 새로 고침 시 최신 소스 코드를 사용합니다(웹 사이트라고 가정할 때, 이상적으로 로컬 파일 저장 시 페이지 자동 새로 고침이 가능하며, 소스 코드를 마운트하고 Yeoman과 같은 것을 사용하면 가능합니다).
마찬가지로 비공공 환경에서도 지속적인 통합이 이루어지길 원할 수 있습니다.
Kubernetes는 그러한 종류의 개발 환경을 지원합니까? 아니면 생산 중에도 작동하기를 바라며 구축해야 하는 것입니까?
업데이트(2016-07-15)
Kubernetes 1.3이 출시되면서 Minikube는 개발을 위해 로컬 머신에서 Kubernetes를 실행하는 데 권장되는 방법이 되었습니다.
도커를 통해 Kubernetes를 로컬로 실행할 수 있습니다.실행 중인 노드가 있으면 간단한 웹 서버가 있는 포드를 실행하고 호스트 시스템에서 볼륨을 마운트할 수 있습니다.웹 서버를 누르면 볼륨에서 읽을 수 있으며 로컬 디스크의 파일을 변경한 경우 최신 버전을 제공할 수 있습니다.
우리는 이것을 하기 위한 도구를 연구해 왔습니다.기본적인 아이디어는 원격 Kubernetes 클러스터가 있고, 효과적으로 스테이징 환경을 구축한 다음 로컬에서 코드를 실행하면 원격 클러스터로 프록시됩니다.투명한 네트워크 액세스, 환경 변수 복사, 볼륨 액세스...원격 환경에 최대한 가깝지만 코드를 로컬에서 실행하고 전체 제어하에 실행할 수 있습니다.
그래서 라이브 개발을 할 수 있습니다.문서: http://telepresence.io
"핫 리로드"와 같은 것은 우리가 추가할 계획을 가지고 있지만, 오늘처럼 쉽지는 않습니다.그러나 모험심이 강한 경우 도커 exec, kubectl exec 또는 osc exec(모두 대략적으로 동일한 작업을 함)과 함께 rsync를 사용하여 로컬 디렉토리가 변경될 때마다 컨테이너에 로컬 디렉토리를 동기화할 수 있습니다.다음과 같이 kubectl 또는 osc exec에서 rsync를 사용할 수 있습니다.
# rsync using osc as netcat
$ rsync -av -e 'osc exec -ip test -- /bin/bash' mylocalfolder/ /tmp/remote/folder
스카폴드를 막 시작했어요
코드의 변경 사항을 로컬 클러스터에 자동으로 적용하는 것은 정말 유용합니다.
로컬 클러스터를 배포하려면 Minikube를 사용하거나 Mac 및 Windows용 Docker를 사용하는 것이 가장 좋습니다. 둘 다 Kubernetes 인터페이스를 포함합니다.
편집 2022: k8을 사용하기 시작한 2015년과 달리 지금까지 k8을 프로비저닝할 수 있는 방법은 분명히 수십 가지가 있습니다. 쿠베뎀, 마이크로 k8, k3, kube-spray.
조언: (클러스터가 워크스테이션/노트북에 맞지 않을 경우) Hetzner 서버를 월 40유로에 임대하고 Windows에서 WSL2를 실행하십시오.
원격 기계에 k8s 클러스터를 설정합니다(위 중 하나라도 있으면 요즘은 microk8을 선호합니다).로컬 Linux/Mac/WSL2 환경에서 도커(Docker) 및 텔레프레젠스(Telepresence)를 설정합니다.kubectl을 설치하고 원격 클러스터에 연결합니다.
Telepresence를 사용하면 원격 포드를 로컬 도커 포드로 교체할 수 있으며, 로컬 파일(개발/교체 중인 포드를 구축하는 데 사용되는 깃레포와 동일한 깃레포)에 액세스할 수 있으며, 데모(또는 기타 언어별 자동 소스 코드 재로드 시스템)도 없을 수 있습니다.
bash 함수 쓰기.이것을 충분히 강조할 수 없습니다. 이것은 수백 시간의 시간을 절약할 것입니다.포드를 교체하고 개발을 시작하는 것이 한 줄 두 단어가 아니라면, 이 작업을 제대로 수행하지 못하고 있는 것입니다.
2016년 답변 아래:
또 하나의 훌륭한 시작점은, 특히 호스트 OS가 Windows인 경우의 Vagrant 설정입니다.명백한 이점은
- 빠르고 통증이 없는 셋업
- 기계를 파괴/재창조하기 쉬운
- 자원에 대한 암묵적 제한
- 여러 노드를 만들어 수평 스케일링을 테스트하는 기능
단점: 많은 RAM이 필요하고 VirtualBox는 VirtualBox입니다.좋든 나쁘든.
NFS를 통해 파일을 매핑하는 것은 장점/단점이 혼재되어 있습니다.우리는 애플리케이션 서버의 도커 이미지를 다운로드하는 두 가지 RC 정의 세트를 만들었고, 다른 하나는 HostOS -> Vagrant -> VirtualBox -> CoreOS -> Kubernetes pod에서 파일 매핑을 설정하는 7개의 추가 줄로 구성된 RC 정의 세트를 만들었습니다. 도커 이미지에서 소스 코드를 덮어씁니다.
이것의 단점은 NFS 파일 캐시입니다. NFS 파일 캐시를 사용하면 문제가 되고 없으면 문제가 발생합니다. 설정mount_options: 'nolock,vers=3,udp,noac'
캐싱 문제를 완전히 제거하는 것은 아니지만 대부분의 경우 효과가 있습니다.컨테이너에서 실행되는 일부 Gulp 작업은 호스트 OS에서 8초가 걸릴 때 5분이 걸릴 수 있습니다.은인 것 .mount_options: 'nolock,vers=3,udp,ac,hard,noatime,nodiratime,acregmin=2,acdirmin=5,acregmax=15,acdirmax=15'
.
자동 코드 재로드의 경우, 그것은 언어별이지만, 우리는 Python용 Django의 개발 서버와 Node.js용 Nodemon에 만족합니다.프론트엔드 프로젝트의 경우, 물론 gulp+browserSync+watch와 같은 것으로 많은 작업을 수행할 수 있지만, 많은 개발자들에게는 Apache에서 제공하는 것이 어렵지 않고 기존의 하드 리프레시만 수행할 수 있습니다.
우리는 쿠버네티스를 위해 yaml 파일 4세트를 보관하고 있습니다.데브, "데브스타블", 무대, 프로드.그것들의 차이점은
- 환경 변수 환경을 명시적으로 설정(dev/stage/dev)
- 복제본 수
- devstable, stage, produce 도커 이미지
- dev는 도커 이미지를 사용하고 NFS 폴더 위에 소스 코드를 매핑합니다.
완성하는합니다. bash 과 을 합니다 합니다 과 을 입력만 하면 됩니다.rec users
그러면 될 것입니다kubectl delete -f ... ; kubectl create -f ...
합니다. 을 하고 을 을 을 하고 .recfo
이미지를 , 덤프 , 등 서비스를 합니다.
호스트 시스템에서 볼륨을 마운트하는 방법에 대해서는 https://github.com/kubernetes/kubernetes/issues/12278 을 참조하십시오.
docker run -v hostPath:ContainerPath
좋은 지역 개발 피드백 루프를 갖는 것은 쿠버네티스 생태계의 빠른 발전 주제입니다.
이 질문을 깨고, 이 목표를 잘 뒷받침한다고 생각하는 몇 가지 도구가 있습니다.
맥쿠버네티스용 도커
맥 쿠버네티스용 도커(Docker Desktop은 일반 크로스 플랫폼 이름)는 지역 개발에 탁월한 옵션을 제공합니다.가상화의 경우 VirtualBox 대신 macOS의 네이티브 하이퍼바이저 프레임워크를 기반으로 구축된 HyperKit을 사용합니다.
쿠버네티스 기능은 2018년 1월 엣지 채널에서 베타로 처음 출시되어 그 후 큰 발전을 이루었고, 2018년 4월 인증된 쿠버네티스가 되었고, 2018년 7월 안정적인 채널로 졸업했습니다.
제 경험으로는 특히 macOS에서 Minikube보다 작업하기가 훨씬 쉬우며, 특히 RBAC, Helm, 하이퍼바이저, 개인 레지스트리 등과 같은 문제에 관해서는 더욱 그렇습니다.
헬름
코드를 배포하고 업데이트를 로컬로 가져오는 한 헬름은 가장 인기 있는 옵션 중 하나입니다.CI/CD를 통해 애플리케이션을 헬름 차트(및 참조하는 기본 도커 영상)로 게시할 수 있습니다.그런 다음 헬름 차트 레지스트리에서 이 차트를 로컬로 꺼내고 로컬 클러스터에서 업그레이드할 수 있습니다.
애저 드래프트
Azure Draft와 같은 도구를 사용하여 간단한 로컬 배포를 수행하고 빌드팩과 같은 공통 언어 템플릿에서 기본 헬름 차트를 생성하여 퍼즐 조각을 자동화할 수도 있습니다.
스카폴드
Scaffold는 Azure Draft와 비슷하지만 더 성숙하고 범위가 훨씬 넓으며 Google이 만들었습니다.플러그를 꽂을 수 있는 구조를 가지고 있습니다.앞으로 더 많은 사람들이 쿠버네티스 지역 앱 개발에 사용할 것으로 생각합니다.
만약 당신이 리액트를 사용해본 적이 있다면, 저는 스카폴드를 "쿠버네티스용 리액트 앱 만들기"라고 생각합니다.
Kompose 또는 Composes on Kubernetes
Docker Composes는 Kubernetes와 관련이 없지만 일부 기업이 운영 중인 Kubernetes 환경과 유사한 간단하고 쉽고 휴대 가능한 로컬 개발 환경을 제공하기 위해 사용하는 대안 중 하나입니다.그러나 이 길을 간다는 것은 생산 및 지역 개발 설정을 분산한다는 것을 의미합니다.
콤포스는 도커 컴포지트와 쿠버네티스 컨버터입니다.이것은 응용프로그램을 로컬에서 컨테이너 집합으로 이미 실행 중인 사용자에게 유용한 경로가 될 수 있습니다.
Composition on Kubernetes는 최근 Docker의 오픈 소스(2018년 12월) 제품으로 사용자 지정 컨트롤러를 통해 Docker Composition 파일을 Kubernetes 클러스터에 직접 배포할 수 있습니다.
큐브스페리는 로컬 클러스터를 설정하는 데 도움이 됩니다.주로 로컬 머신에서 부랑자 기반 클러스터를 사용했습니다.
Kubespray configuration 원하는 Kubernetes 버전을 갖도록 변수를 조정할 수 있습니다.
을 사용할 minkube
다른 가상 시스템을 컴퓨터에 생성한다는 것입니다.에 나온한,에.minikube
버전은 시스템에서 CPU 2개와 RAM 2GB를 필요로 하기 때문에 리소스가 충분하지 않은 시스템에서는 매우 무겁습니다.
이것이 제가 여기로 전환한 이유입니다.microk8s
Kubernetes에 대한 개발을 위해 그리고 나는 그것을 좋아합니다.microk8s
는 DNS, 로컬 스토리지, 대시보드, 아이스티오, 인그레스 등 마이크로 서비스를 테스트하는 데 필요한 모든 것을 지원합니다.
로컬 환경에서 격리된 빠르고 가벼운 업스트림 Kubernetes 설치 환경으로 설계되었습니다.이러한 분리는 Kubernetes, Docker.io , iptables 및 CNI에 대한 모든 이진 파일을 단일 스냅 패키지로 패키징함으로써 달성됩니다.
단일 노드 kubernetes 클러스터는 명령 하나로 1분 이내에 설치할 수 있습니다.
snap install microk8s --classic
시스템에 도커 또는 쿠벨렛 서비스가 실행되고 있지 않은지 확인합니다.Microk8s
필요한 모든 서비스를 자동으로 설치합니다.
다음 링크를 참조하여 다른 추가 기능을 사용할 수 있도록 하십시오.microk8s
.
상태를 확인할 수 있는 방법은 다음과 같습니다.
velotio@velotio-ThinkPad-E470:~/PycharmProjects/k8sClient$ microk8s.status
microk8s is running
addons:
ingress: disabled
dns: disabled
metrics-server: disabled
istio: disabled
gpu: disabled
storage: disabled
dashboard: disabled
registry: disabled
https://github.com/okteto/okteto 과 Okteto Cloud를 살펴보십시오.가치 제안은 현지에서 일하는 것보다 고전적인 개발 경험을 갖추는 것입니다. 도커 이전에 핫리로드, 증분 빌드, 디버거 등을 수행할 수 있습니다.그러나 모든 로컬 변경사항은 원격 컨테이너에 즉시 동기화됩니다.원격 컨테이너를 사용하면 클라우드 속도에 액세스할 수 있고, 새로운 수준의 협업이 가능하며, 프로덕션과 같은 환경에서 개발을 통합할 수 있습니다.또한 현지 설치에 대한 부담도 없앱니다.
로버트가 전에 명시한 대로 미니큐브가 가야 할 길입니다.
여기 미니큐브를 시작할 수 있는 간단한 가이드가 있습니다.일반적인 단계는 다음과 같습니다.
미니큐브설치
미니큐브 클러스터 생성(가상 시스템에서 Mac 또는 HyperV용 VirtualBox 또는 Docker일 수 있음)
응용프로그램 파일의 도커 이미지 만들기(도커 파일 사용)
배포를 생성하여 이미지 실행
응용프로그램에 액세스할 수 있도록 응용프로그램을 노출하는 서비스를 만듭니다.
Windows 10에서 Kubernetes에 대한 로컬 설정을 수행한 방법은 다음과 같습니다. -
도커 데스크톱 사용
Docker Desktop의 설정 옵션에서 Kubernetes 사용
Docker Desktop에서 기본적으로 메모리에 할당된 리소스는 2GB이므로 Docker Desktop과 함께 Kubernetes를 사용하면 메모리가 늘어납니다.
Kubernetes 클러스터와 대화할 클라이언트로 kubectl 설치
명령 kubectl config get-context를 실행하여 사용 가능한 클러스터를 가져옵니다.
명령어 kubectl config use-context docker-desktop을 실행하여 docker Desktop을 사용합니다.
응용프로그램의 도커 이미지 작성
위 단계 클러스터에서 생성된 이미지를 가리키는 YAML 파일(Kubernetes에서 배포를 생성하는 방법을 설명하는 방법) 작성
각 배포에 대한 유형 노드 포트의 서비스를 외부에서 사용할 수 있도록 노출
언급URL : https://stackoverflow.com/questions/29746926/how-to-create-a-local-development-environment-for-kubernetes
'bestsource' 카테고리의 다른 글
가깝고 멀고 거대한 포인터는 무엇입니까? (0) | 2023.09.16 |
---|---|
포드를 생성할 때는 CrashLoopBackoff로 들어갑니다.로그에 "exec /usr/local/bin/docker-entry point"가 표시됩니다.sh: exec 형식 오류." (0) | 2023.09.16 |
iframe 문서 개체에 액세스할 때 "액세스 거부" 오류가 발생했습니다. (0) | 2023.09.16 |
스트리밍 대용량 파일이 ASP에 업로드됩니다.NET MVC (0) | 2023.09.16 |
엔터티 유형 ApplicationUser가 현재 컨텍스트의 모델에 속하지 않습니다. (0) | 2023.09.16 |