Kubernetes를 사용하여 프로그램 배포 완료
Minikube를 사용하여 로컬 시스템에 응용 프로그램을 배치합니다.Minikube에 대한 자세한 내용은 이 링크를 참조하십시오. https://minikube.sigs.k8s.io/docs/start/
이 글을 다 읽으면 Kubernetes의 다음 개념에 익숙해집니다.
이러한 응용 프로그램을 Kubernetes에 배치하려면 다음 절차를 따르겠습니다.
1. 먼저
mongodb secret
을 작성하여 암호화된 형식의 민감한 정보를 포함할 것입니다. 예를 들어 mongodb username
과 password
입니다.mongodb deployment and service
을 만듭니다. 몬gdb pod를 만들고 몬godb를 다른 내부 구성 요소에 노출합니다.mongodb configmap
을 생성하여 mongodb url
및 기타 구성을 저장합니다.mongo-express deployment
파일을 만들어mongo expresspod를 만들 것입니다.콩꼬투리: 콩꼬투리는 Kubernetes의
smallest, most basic deployable
개 대상이다.Pod는 클러스터에서 실행 중인 프로세스의 단일 인스턴스를 나타냅니다.POD에는 Docker 컨테이너와 같은 one or more containers
이 포함됩니다.기밀: 기밀은 비밀번호, OAuth 영패, ssh 키 등
sensitive information
을 저장하고 관리할 수 있습니다.Pod 정의 또는 컨테이너 이미지에 기밀 정보를 저장하는 것보다 기밀 정보를 기밀에 저장하는 것이 훨씬 안전하고 유연합니다.ConfigMap: ConfigMap은
non-confidential data in key-value pairs
을 저장하는 API 객체입니다.POD는 ConfigMaps를 환경 변수, 명령행 매개변수 또는 볼륨의 구성 파일로 사용할 수 있습니다.ConfigMap에서는 응용 프로그램을 쉽게 마이그레이션할 수 있도록 환경에 맞는 구성을 컨테이너 이미지와 분리할 수 있습니다.배치: 배치는 Kubernetes의 자원 대상으로 응용 프로그램에
declarative updates
을 제공합니다.배치는 응용 프로그램의 생명 주기를 설명할 수 있습니다. 예를 들어 응용 프로그램이 어떤 그림을 사용해야 하는지, 몇 개의 선실이 있어야 하는지, 그리고 응용 프로그램을 업데이트하는 방식을 설명할 수 있습니다.서비스: 서비스는
logical abstraction
으로 집단에 배치된 하나의 POD(모든 POD가 같은 기능을 수행한다).POD는 짧기 때문에 서비스는 특정한 기능(웹 서비스, 이미지 처리 등)의 POD 분배 이름과 유일한 IP 주소(clusterIP)를 한 그룹에 제공할 수 있다.Note: ConfigMap does not provide secrecy or encryption. If the data you want to store are confidential, use a Secret rather than a ConfigMap, or use additional (third party) tools to keep your data private.
이제 위에서 논의한 절차에 따라 완전한 몬godb 응용 프로그램을 배치합시다.다양한 구성 요소를 사용하는 응용 프로그램 구조는 다음과 같습니다.
1단계: Mongodb 사용자 이름과 암호를 저장할 기밀을 만듭니다.
저희 몬godb 프로그램은 사용자 이름과 비밀번호가 있어야만 접근할 수 있습니다. 사용자 이름과 비밀번호는 기밀 정보이기 때문에 기밀을 만들어서 저장하는 것도 마찬가지입니다.사용자 이름은 '사용자 이름' 이고, 암호는 '암호' 입니다. 베이스 64 인코딩으로 저장합니다.
몽고의 비밀.아마르
apiVersion: v1
kind: Secret
metadata:
name: mongodb-secret
type: Opaque
data:
mongo-root-username: dXNlcm5hbWU=
mongo-root-password: cGFzc3dvcmQ=
apiVersion: 클러스터에서 사용하는 API 버전입니다.종류: 종류 정의는 배치, 기밀 또는 설정 맵입니다.
메타데이터: 여기서 우리는 만들 대상에 대한 데이터를 정의할 수 있습니다.이 예에서pod의 이름만 제공합니다.그러나 명칭 공간 같은 다른 세부 사항을 제공할 수 있습니다.
유형: 형식이 불투명하다는 것은kubernetes의 관점에서 볼 때 이 비밀의 내용은 비구조적이며 임의의 키 값을 포함할 수 있음을 의미한다.
데이터: 데이터는 기밀로 저장할 데이터를 포함합니다.
kubectl apply -f mongo-secret.yaml
을 통해 기밀 프로파일을 배포합니다.2단계: mongo 배치와 서비스를 만들어서 mongo pod를 만듭니다.
현재 몬고 배치를 만들어서 몬godb pod를 만들 것입니다. 몬godb 배치는 단계 1에서 만든 몬고 시크릿에서 몬godb 사용자 이름과 비밀번호를 가져옵니다.
몽고아마르
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb-deployment
labels:
app: mongodb
spec:
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongodb
image: mongo
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-username
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-password
---
apiVersion: v1
kind: Service
metadata:
name: mongodb-service
spec:
selector:
app: mongodb
ports:
- protocol: TCP
port: 27017
targetPort: 27017
위 yaml 파일에서 두 가지를 정의했습니다.1. 배치 -pod와pod의 복제 집합을 만드는 것을 책임진다.(이곳에서 우리는 던전 하나만 만들 수 있다).
2. 수리 – 기중기를 내부 부품에 노출시킨다.
이제 배포의 각 필드에 대해 자세히 살펴보겠습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb-deployment
labels:
app: mongodb
spec:
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongodb
image: mongo
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-username
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-password
apiVersion: 클러스터에서 사용하는 API 버전입니다.종류: 종류 정의는 배치, 기밀 또는 설정 맵입니다.
메타데이터: 여기서 우리는 만들 대상에 대한 데이터를 정의할 수 있습니다.이 예에서pod의 이름만 제공합니다.그러나 명칭 공간 같은 다른 세부 사항을 제공할 수 있습니다.
spec: 배치 클래스 파일에 specification이 있습니다. 사본, 선택기, 용기 템플릿을 정의합니다.
복사본: 이 용기에 만든pod의 수량을 정의합니다.
선택기: 선택기에서 일치하는 탭을 정의합니다.
템플릿: 템플릿은 만들 용기와 선실의 실제 청사진입니다.
거푸집.메타데이터: 콩꼬투리 모양 라벨 등 정보를 포함합니다.
거푸집.규격: 만들어야 할 용기의 청사진입니다.
용기: 만들 다른pod를 정의합니다.
이름: 컨테이너의 이름입니다.
그림: docker hub에서 추출한 docker 그림입니다.
포트: 이 용기에 접근할 수 있는 포트입니다.
env: 우리의 예에서 용기는 환경 변수를 포함합니다. 예를 들어 몬godb 사용자 이름과 비밀번호입니다.
Note: Secrets needs to be created first before the applying the deployment as they are being used in the deployment as environment variable.
이제 서비스에 대해 자세히 살펴보겠습니다.
apiVersion: v1
kind: Service
metadata:
name: mongodb-service
spec:
selector:
app: mongodb
ports:
- protocol: TCP
port: 27017
targetPort: 27017
서비스yaml의 필드는 배치된 필드와 유사합니다. targetPort 필드와 달리 targetPort
은 다른pod에 접근할 수 있는 포트입니다.3단계: Mongodb 사용자 이름과 암호를 저장할 기밀 생성
이제 몬godb URL을 포함하는 configMap을 만들 것입니다.
몽고 지도.아마르
apiVersion: v1
kind: ConfigMap
metadata:
name: mongodb-configmap
data:
database_url: mongodb-service
ConfigMap 파일은 다른 yaml 파일과 거의 비슷합니다.4단계:mongoexpress배치와 외부 서비스를 만들어서mongoexpress 크레인을 만들고 그룹 외부에 공개합니다.
mongo express。아마르
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongo-express
labels:
app: mongo-express
spec:
replicas: 1
selector:
matchLabels:
app: mongo-express
template:
metadata:
labels:
app: mongo-express
spec:
containers:
- name: mongo-express
image: mongo-express
ports:
- containerPort: 8081
env:
- name: ME_CONFIG_MONGODB_ADMINUSERNAME
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-username
- name: ME_CONFIG_MONGODB_ADMINPASSWORD
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-password
- name: ME_CONFIG_MONGODB_SERVER
valueFrom:
configMapKeyRef:
name: mongodb-configmap
key: database_url
---
apiVersion: v1
kind: Service
metadata:
name: mongo-express-service
spec:
selector:
app: mongo-express
type: LoadBalancer
ports:
- protocol: TCP
port: 8081
targetPort: 8081
nodePort: 30000
mongo express 배치 설정은 mongodb 배치 설정과 유사하기 때문에 이 점을 논의하지 않겠습니다.다음은 Mongo express 외부 서비스의 몇 가지 추가 영역에 대해 살펴보겠습니다.
apiVersion: v1
kind: Service
metadata:
name: mongo-express-service
spec:
selector:
app: mongo-express
type: LoadBalancer
ports:
- protocol: TCP
port: 8081
targetPort: 8081
nodePort: 30000
몬godb의 서비스 파일에 비해 이 서비스 파일은 두 개의 추가 필드 (유형, 노드 포트) 를 포함합니다.유형: LoadBalancer: 서비스의 외부 IP 주소를 할당하여 서비스를 외부 서비스로 만듭니다.
nodePort: 그룹 외부에서 이pod의 포트에 접근할 수 있습니다.
5단계: 브라우저에서 Mongo Express에 액세스합니다.
브라우저에서 mongo express에 접근하려면kubernetes가 분배한 서비스의 IP 주소를 찾아야 합니다.
저희는 먼저 서비스가 만들어졌는지 확인하고 다음 명령을 통해 서비스 이름을 얻습니다
kubectl get service
몬고 익스프레스 서비스라는 외부 서비스와 몬godb 서비스라는 내부 서비스가 만들어진 것을 볼 수 있습니다.
현재, 우리는 외부 서비스를 실행할 것입니다. 다음 명령을 사용하여 이 서비스에 대한 URL을 가져옵니다.
minikube service mongo-express-service
현재 브라우저에서 붙여넣은 URL을 복사하고 프로그램이 접근할 수 있는지 확인합니다.
외부 서비스yaml 파일과 같이 브라우저에서 포트 30000에 접근할 수 있는 프로그램을 볼 수 있습니다.
결론
따라서, 우리는kubernetes에 온전한 단말기부터 단말기까지의 mongodb 프로그램을 배치하고 브라우저를 통해 접근합니다.몬godbpod를 만들고 내부 서비스를 통해 다른 구성 요소에 접근할 수 있도록 합니다.몬고 express를 위한pod를 만들었습니다. 몬godb를 변경하고, 그룹이나 외부 원본에서 접근할 수 있도록 외부 서비스를 만들었습니다.
이것은 본문의 전체 내용입니다. 만약 문제가 있거나 오류가 발견되면 아래에서 평론해 주십시오.
이 글은 먼저 나의 개인 블로그에 발표되었다.만약 당신이 이 블로그의 내용이 관련이 있다고 생각한다면, 당신은 나의 블로그를 방문하여 비슷한 내용을 얻을 수 있습니다: https://ishantgaurav.in/
Reference
이 문제에 관하여(Kubernetes를 사용하여 프로그램 배포 완료), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ishant14/complete-application-deployment-using-kubernetes-1b4b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)