Kubernetes를 Docker Compose처럼 사용할 수 있습니까?
몇 시간 동안 Kubernetes 문서를 살펴 보았습니다. 핵심 디자인과 서비스, 컨트롤러, 포드 등의 개념을 이해합니다.
그러나 내가 이해하지 못하는 것은 클러스터를 선언적으로 구성 할 수있는 프로세스입니다. 즉, 구성 파일 (또는 그 집합)을 작성하여 클라우드 배포의 구성 및 확장 옵션을 정의하는 방법입니다. 많은 cli 명령을 실행하지 않고도 어떤 pod에서 어떤 컨테이너를 원하는지, 통신하는 방법, 확장하는 방법 등을 선언 할 수 있기를 원합니다.
거기에 고정 표시기-작성 는 Kubernetes에 대한 기능은?
필자는 수동 CLI 상호 작용에 의존하지 않고 내 애플리케이션을 git에서 정의하여 버전을 제어하고 싶습니다.
간결하게 할 수 있습니까? 공식 문서보다 더 명확한 참조가 있습니까?
Docker는 docker-compose
kubernetes 클러스터 의 기능을 공식적으로 발표했습니다 . 이제부터 파일에 kubernetes 리소스를 구성하고 해당 단일 파일을 사용하여 적용 할 수 있습니다.
먼저 Kubernetes 클러스터에 Compose on Kubernetes 컨트롤러를 설치해야합니다. 이 컨트롤러는 표준 Kubernetes 확장 점을 사용 Stack
하여 Kubernetes API 를 소개합니다 . Docker Compose 컨트롤러를 설치하려면 전체 설명서를 확인하십시오.
간단한 compose yaml 파일을 작성해 보겠습니다.
version: "3.7"
services:
web:
image: dockerdemos/lab-web
ports:
- "33000:80"
words:
image: dockerdemos/lab-words
deploy:
replicas: 3
endpoint_mode: dnsrr
db:
image: dockerdemos/lab-db
그런 다음 docker 클라이언트를 사용하여 컨트롤러를 실행하는 Kubernetes 클러스터에 배포합니다.
$ docker stack deploy --orchestrator=kubernetes -c docker-compose.yml words
Waiting for the stack to be stable and running...
db: Ready [pod status: 1/1 ready, 0/1 pending, 0/1 failed]
web: Ready [pod status: 1/1 ready, 0/1 pending, 0/1 failed]
words: Ready [pod status: 1/3 ready, 2/3 pending, 0/3 failed]
Stack words is stable and running
그런 다음 Kubernetes API를 통해 이러한 개체와 상호 작용할 수 있습니다. 여기에서 Services, Pods, Deployments 및 ReplicaSets와 같은 하위 수준 개체가 자동으로 생성되었음을 확인할 수 있습니다.
$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.apps/db 1 1 1 1 57s
deployment.apps/web 1 1 1 1 57s
deployment.apps/words 3 3 3 3 57s
이는 일회성 전환이 아니라는 점에 유의해야합니다. Compose on Kubernetes API Server는 Kubernetes API에 Stack 리소스를 도입합니다. 따라서 애플리케이션을 구축 할 때와 동일한 추상화 수준에서 모든 것을 쿼리하고 관리 할 수 있습니다. 따라서 위의 세부 정보를 자세히 살펴보면 작동 방식을 이해하거나 문제를 디버깅하는 데 유용하지만 대부분의 시간이 필요하지는 않습니다.
$ kubectl get stack
NAME STATUS PUBLISHED PORTS PODS AGE
words Running 33000 5/5 4m
여전히 찾고 있다면이 도구가 도움이 될 수 있습니다 : https://github.com/kelseyhightower/compose2kube
작성 파일을 만들 수 있습니다.
# sample compose file with 3 services
web:
image: nginx
ports:
- "80"
- "443"
database:
image: postgres
ports:
- "5432"
cache:
image: memcached
ports:
- "11211"
그런 다음 도구를 사용하여 kubernetes 객체로 변환합니다.
compose2kube -compose-file docker-compose.yml -output-dir output
다음 파일을 생성합니다.
output/cache-rc.yaml
output/database-rc.yaml
output/web-rc.yaml
Then you can use kubectl
to apply them to kubernetes.
If you have existing Docker Composer files, you may take a look at the Kompose project.
kompose
is a tool to help users who are familiar with docker-compose move to Kubernetes. kompose takes a Docker Compose file and translates it into Kubernetes resources.
kompose
is a convenience tool to go from local Docker development to managing your application with Kubernetes. Transformation of the Docker Compose format to Kubernetes resources manifest may not be exact, but it helps tremendously when first deploying an application on Kubernetes.
To run docker-compose.yaml
file or your own, run:
kompose up
To convert docker-compose.yaml
into Kubernetes deployments and services with one simple command:
$ kompose convert -f docker-compose.yaml
INFO Kubernetes file "frontend-service.yaml" created
INFO Kubernetes file "redis-master-service.yaml" created
INFO Kubernetes file "redis-slave-service.yaml" created
INFO Kubernetes file "frontend-deployment.yaml" created
INFO Kubernetes file "redis-master-deployment.yaml" created
INFO Kubernetes file "redis-slave-deployment.yaml" created
For more info, check: http://kompose.io/
Kubernetes certainly has its own yaml (as shown in "Deploying Applications")
But as "Docker Clustering Tools Compared: Kubernetes vs Docker Swarm", it was not written (just) for Docker, and it has its own system.
You could use docker-compose to start Kubernetes though, as shown in "vyshane/kid
": that does mask some of the kubectl
commands cli in scripts (which can be versioned).
참고URL : https://stackoverflow.com/questions/37845715/can-kubernetes-be-used-like-docker-compose
'Programing' 카테고리의 다른 글
R markdown, knitr, pandoc, beamer를 사용한 플롯 크기 및 해상도 (0) | 2020.12.13 |
---|---|
Django Rest Framework + Angular.js 웹 앱의 사용자 인증 (0) | 2020.12.13 |
Linux 디렉토리 권한은 쓰기를 읽고 삭제하지는 않습니다. (0) | 2020.12.13 |
자바 스크립트 디자인 패턴 (0) | 2020.12.13 |
JSON 스키마에서 C # 클래스 생성 (0) | 2020.12.13 |