Kubernetes 용 로컬 개발 환경을 만드는 방법은 무엇입니까?


115

Kubernetes 는 클러스터 클라우드에 컨테이너를 배포하는 것입니다. 건드리지 않는 것처럼 보이는 것은 개발 및 스테이징 환경입니다.

개발 중에는 다음과 같은 몇 가지 중요한 변경 사항을 포함하여 프로덕션 환경에 최대한 가깝게되기를 원합니다.

  • 로컬로 배포 (또는 최소한 귀하와 귀하 만 액세스 할 수있는 곳 )
  • 페이지 새로 고침에 최신 소스 코드 를 사용 합니다 (웹 사이트라고 가정하고 소스 코드를 마운트하고 Yeoman 과 같은 일부 항목을 사용하는 경우 수행 할 수있는 로컬 파일 저장시 페이지 자동 새로 고침 ).

마찬가지로 비공개 환경에서 지속적인 통합 을 수행하기를 원할 수 있습니다 .

Kubernetes는 이러한 종류의 개발 환경을 지원합니까, 아니면 프로덕션 중에 여전히 작동하기를 바라면서 구축해야하는 것이 있습니까?


Openshift Origin을 살펴보십시오. Openshift의 다음 버전이며 Kubernetes를 기반으로 구축되었습니다. Docker 컨테이너에서 독립 실행 형으로 실행됩니다.
Mark O'Connor

@ MarkO'Connor 저는 Google Cloud에도 배포하려고했지만 더 많은 배포 솔루션입니다. 로컬 개발 (대부분 최신 로컬 파일 다시로드)을 허용하는 OpenShift Origin 솔루션이있는 경우 답변으로 공유해주세요. 관심이있을 것입니다.
Wernight

이것에 대한 해결책을 찾았습니까? 내 로컬 개발 클러스터의 메소 위에서 kubernetes가 실행되고 있습니다. kubernetes의 컨테이너에 배포 될 마이크로 서비스를 이동 중에 구축 할 계획입니다. 변경 사항을 저장하고 자동으로 바이너리를 빌드하고 포드를 다시 시작할 수 있기를 바랍니다. 실제로 테스트 할 변경 사항이 없지만 vms에서 바이너리를 빌드 한 다음 포드를 다시 시작하는 것이 약간 느릴 수 있다고 생각합니다.
F21

2
@ F21 게시 된 지 1 년이 넘었습니다. Kubernetes에 좋은 로컬 개발 워크 플로가 있습니까?
Jatin

를 볼 수 microk8s있습니다. 로컬 컴퓨터에 대한 경량 k8s 설치입니다. 나는 그것을 설치하는 방법에 대한 답변을 게시했습니다. 설치는 1 분 정도 밖에 걸리지 않습니다.
Prafull Ladha

답변:


67

업데이트 (2016-07-15)

Kubernetes 1.3이 출시됨에 따라 Minikube 는 이제 개발을 위해 로컬 머신에서 Kubernetes를 실행하는 데 권장되는 방법입니다.


Docker를 통해 Kubernetes를 로컬에서 실행할 수 있습니다 . 노드가 실행되면 간단한 웹 서버가있는 포드를 시작하고 호스트 머신에서 볼륨을 마운트 할 수 있습니다. 웹 서버에 접속하면 볼륨에서 읽으며 로컬 디스크의 파일을 변경 한 경우 최신 버전을 제공 할 수 있습니다.


3
문서에 따르면 더 이상 권장되는 방법이 아니며 "Minikube는 로컬 컴퓨터에서 Kubernetes를 실행하는 데 권장되는 방법입니다."
Jatin

나는 minikube가 k8s 자체 개발에 적합하지 않다고 생각합니다. 맞습니까?
harryz

그것은 당신이 개발하고있는 것에 달려 있습니다. 개발을 위해 minikube를 사용하는 것이 합당한 k8s의 많은 부분이 있습니다. 포드 네트워킹 보안 정책 또는 CNI 플러그인에 대해 작업하는 경우에는 별 의미가 없습니다.
Robert Bailey

1
"Docker를 통해 로컬로 Kubernetes"링크가 끊어졌습니다. 누구든지 업데이트가 있습니까?
Pwnosaurus

1
Minikube는 잠시 전에 로컬 도커 설정을 교체했으며 이후에 로컬 도커 버전에 대한 문서가 제거되었습니다. Minikube가 귀하의 필요에 적합합니까? VM 내부에서 kubeadm을 사용하여 로컬 단일 노드 클러스터를 인스턴스화 할 수도 있습니다.
Robert Bailey

9

이를위한 도구를 개발 중입니다. 기본 아이디어는 원격 Kubernetes 클러스터, 효과적으로 스테이징 환경이 있고 로컬에서 코드를 실행하고 원격 클러스터에 프록시되는 것입니다. 투명한 네트워크 액세스, 환경 변수 복사, 볼륨 액세스 ... 원격 환경에 최대한 가깝지만 코드가 로컬에서 실행되고 전체 제어하에 실행됩니다.

그래서 당신은 라이브 개발을 할 수 있습니다. http://telepresence.io의 문서


5

일종의 "핫 리로드"는 추가 할 계획이 있지만 오늘날만큼 쉽지는 않습니다. 그러나 모험심이 든다면 docker 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

핫 리로드는 그 자체로 사용하는 웹 프레임 워크에 의해 처리되어야하며 여기에서 보통 설정합니다. 누락 된 것은 활성화하는 방법입니다. 마운트하려면 로컬 볼륨이 필요합니다. @Robert의 answser가 작동하면 유효한 솔루션이어야합니다.
Wernight

4

또 다른 좋은 출발점은이 Vagrant 설정 , esp입니다. 호스트 OS가 Windows 인 경우. 명백한 이점은

  • 빠르고 간편한 설정
  • 기계를 쉽게 파괴 / 재생성
  • 자원에 대한 암시 적 제한
  • 여러 노드를 생성하여 수평 확장을 테스트하는 기능

단점-많은 RAM이 필요하고 VirtualBox는 VirtualBox입니다 ...

혼합 된 장점 / 단점은 NFS를 통한 파일 매핑입니다. 설정 과정에서 두 세트의 RC 정의를 만들었습니다. 하나는 애플리케이션 서버의 도커 이미지 만 다운로드하는 것입니다. 다른 하나는 HostOS-> Vagrant-> VirtualBox-> CoreOS-> Kubernetes pod에서 파일 매핑을 설정하는 7 개의 추가 라인이 있습니다. Docker 이미지에서 소스 코드를 덮어 씁니다.

이것의 단점은 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' .

자동 코드 재로드는 언어별로 다르지만 Django의 Python 용 devserver와 Node.js 용 Nodemon에 만족합니다. 프론트 엔드 프로젝트의 경우 물론 gulp + browserSync + watch와 같은 작업으로 많은 작업을 수행 할 수 있지만 많은 개발자에게 Apache에서 제공하는 것은 어렵지 않고 기존의 하드 새로 고침 만 수행합니다.

Kubernetes 용 yaml 파일 4 세트를 보관합니다. Dev, "devstable", stage, prod. 그들 사이의 차이점은

  • 환경을 명시 적으로 설정하는 env 변수 (dev / stage / prod)
  • 복제본 수
  • devstable, stage, prod는 docker 이미지를 사용합니다.
  • dev는 도커 이미지를 사용하고 그 위에 소스 코드가있는 NFS 폴더를 매핑합니다.

많은 bash 별칭과 자동 완성을 만드는 것은 매우 유용합니다 . 입력 만하면 rec users됩니다 kubectl delete -f ... ; kubectl create -f .... 전체 설정을 시작하려면을 입력 recfo하고 12 개의 서비스를 다시 생성하여 최신 도커 이미지를 가져오고 Staging 환경에서 최신 db 덤프를 가져오고 공간을 절약하기 위해 오래된 Docker 파일을 정리합니다.


4

Skaffold로 시작했습니다.

코드의 변경 사항을 로컬 클러스터에 자동으로 적용하는 것은 정말 유용합니다.

로컬 클러스터를 배포하는 가장 좋은 방법은 Minikube 또는 Mac 및 Windows 용 Docker이며 둘 다 Kubernetes 인터페이스를 포함합니다.



2

멋진 로컬 개발 피드백 루프를 갖는 것은 Kubernetes 생태계의 빠른 개발 주제입니다.

이 질문을 세분화하여이 목표를 잘 지원한다고 생각하는 몇 가지 도구가 있습니다.

Mac Kubernetes 용 Docker

Mac 용 Docker Kubernetes ( Docker Desktop 은 일반적인 교차 플랫폼 이름 임)는 로컬 개발을위한 훌륭한 옵션을 제공합니다. 가상화를 위해 HyperKit 을 사용 합니다. 의 경우 VirtualBox 대신 macOS의 기본 Hypervisor 프레임 워크에 구축 된 을 .

Kubernetes 기능은 2018 년 1 월에 엣지 채널에서 베타로 처음 출시되었으며 2018 년 4 월에 인증 된 Kubernetes가되고 2018 년 7 월에 안정적인 채널로 졸업 한 이후 먼 길을 왔습니다 .

내 경험상, 특히 macOS에서 Minikube보다 작업하기가 훨씬 쉽습니다. 특히 RBAC, Helm, 하이퍼 바이저, 개인 레지스트리 등과 같은 문제에 관해서는 더욱 그렇습니다.

지배

코드를 배포하고 로컬에서 업데이트를 가져 오는 한 Helm 를 가져 오는 한 은 가장 인기있는 옵션 중 하나입니다. CI / CD를 통해 애플리케이션을 Helm 차트 (및 참조하는 기본 Docker 이미지)로 게시 할 수 있습니다. 그런 다음 Helm 차트 레지스트리에서 이러한 차트를 로컬로 가져와 로컬 클러스터에서 업그레이드 할 수 있습니다.

Azure 초안

또한 Azure Draft 와 같은 도구를 사용하여 간단한 로컬 배포를 수행하고 빌드 팩과 같은 일종의 공통 언어 템플릿에서 기본 Helm 차트를 생성하여 퍼즐 조각을 자동화 할 수 있습니다.

Skaffold

Skaffold 는 Azure Draft와 비슷하지만 더 성숙하고 범위가 훨씬 넓으며 Google에서 제작했습니다. 매우 플러그 가능한 아키텍처를 가지고 있습니다. 앞으로 더 많은 사람들이 쿠 버네 티스 용 로컬 앱 개발에이를 사용할 것이라고 생각합니다.

React를 사용 해본 적이 있다면 Skaffold를 " Create React App for Kubernetes" 합니다.

Kubernetes에서 Kompose 또는 Compose

Docker Compose 는 Kubernetes와 관련이 없지만 일부 회사는 프로덕션에서 실행하는 Kubernetes 환경과 유사한 간단하고 쉬운 휴대용 로컬 개발 환경을 제공하기 위해 사용하는 대안 중 하나입니다. 그러나이 경로를 사용한다는 것은 프로덕션 및 로컬 개발 설정을 다양 화하는 것을 의미합니다.

Kompose 는 Docker Compose에서 Kubernetes 로의 변환기입니다. 이는 이미 로컬에서 컨테이너 모음으로 애플리케이션을 실행중인 사람에게 유용한 경로가 될 수 있습니다.

Compose on Kubernetes 는 Docker에서 제공 하는 최근 오픈 소스 (2018 년 12 월) 제품으로, 사용자 지정 컨트롤러를 통해 Docker Compose 파일을 Kubernetes 클러스터에 직접 배포 할 수 있습니다.


1

Kubespary 는 로컬 클러스터 설정에 도움이됩니다. 주로 로컬 머신에서 방랑 기반 클러스터를 사용했습니다.

Kubespray 구성 원하는 kubernetes 버전을 갖도록 이러한 변수를 조정할 수 있습니다.


1

사용의 단점은 minkube머신 위에 다른 가상 머신을 생성한다는 것입니다. 또한 최신minikube 버전을 사용하려면 시스템에 2 개의 CPU와 2GB의 RAM이 있어야하므로 시스템에 리소스가 충분하지 않으면 상당히 무겁습니다.

이것이 내가 전환 한 이유입니다 microk8s kubernetes 개발 위해 이며 저는 그것을 좋아합니다. microk8sDNS, 로컬 스토리지, 대시 보드, istio, 인 그레스 등 마이크로 서비스를 테스트하는 데 필요한 모든 것을 지원합니다.

로컬 환경에서 격리 된 빠르고 가벼운 업스트림 Kubernetes 설치로 설계되었습니다. 이러한 격리는 Kubernetes, Docker.io, iptables 및 CNI의 모든 바이너리를 단일 스냅 패키지로 패키징하여 이루어집니다.

단일 노드 kubernetes 클러스터는 단일 명령으로 1 분 내에 설치할 수 있습니다.

snap install microk8s --classic

시스템에 실행중인 도커 또는 kubelet 서비스가 없는지 확인하십시오. Microk8s필요한 모든 서비스를 자동으로 설치합니다.

에서 다른 추가 기능을 활성화하려면 다음 링크를 참조하십시오 microk8s.

https://github.com/ubuntu/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

> 시스템에 실행중인 도커 또는 kubelet 서비스가 없는지 확인하십시오. 하지만 이미 Docker가 로컬에 설치되어 있고 Kubernetes와 별도로 컨테이너를 실행하고 있습니다. 로컬에 microk8s를 설치할 수 없다는 의미입니까?
Attila Szeremi

1

https://github.com/okteto/oktetoOkteto Cloud를 살펴보십시오 . 가치 제안은 Docker 이전에 로컬로 작업하는 것보다 고전적인 개발 경험을 갖는 것입니다. 여기서 핫 리로드, 증분 빌드, 디버거를 가질 수 있지만 모든 로컬 변경 사항은 즉시 원격 컨테이너에 동기화됩니다. 원격 컨테이너는 클라우드 속도에 대한 액세스를 제공하고 새로운 수준의 협업을 허용하며 프로덕션과 유사한 환경에서 개발을 통합합니다. 또한 로컬 설치의 부담을 제거합니다.


0

Robert가 이전에 지정한 것처럼 minikube가 갈 길입니다.

다음 은 minikube를 시작하기위한 빠른 가이드입니다. 일반적인 단계는 다음과 같습니다.

  • minikube 설치

  • minikube 클러스터 생성 (VirtualBox 또는 Docker for Mac 또는 HyperV (Windows의 경우) 일 수있는 가상 머신에서)

  • 애플리케이션 파일의 Docker 이미지 만들기 (Dockerfile 사용)

  • 배포를 만들어 이미지 실행

  • 액세스 할 수 있도록 애플리케이션을 노출하는 서비스를 만듭니다.


0

Windows 10에서 Kubernetes에 대한 로컬 설정을 수행 한 방법은 다음과 같습니다.-

  • Docker Desktop 사용

  • Docker Desktop의 설정 옵션에서 Kubernetes 활성화

  • Docker Desktop에서 기본적으로 메모리에 할당 된 리소스는 2GB이므로 Kubernetes를 Docker Desktop과 함께 사용하려면 메모리를 늘립니다.

  • Kubernetes 클러스터와 통신하기 위해 kubectl을 클라이언트로 설치

  • kubectl config get-contexts 명령을 실행 하여 사용 가능한 클러스터를 가져옵니다.

  • Docker 데스크톱 을 사용하려면 kubectl config use-context docker-desktop 명령을 실행하십시오.

  • 애플리케이션의 Docker 이미지 빌드

  • 위 단계 클러스터에서 생성 된 이미지를 가리키는 YAML 파일 (Kubernetes에서 배포를 생성하는 설명 방법)을 작성합니다.

  • 각 배포에 대해 노드 포트 유형의 서비스를 노출하여 외부에서 사용할 수 있도록합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.