Kubernetes를 사용하여 프로그램 배포 완료

본 논문에서, 우리는 Kubernetes를 사용하여 완전한 단말기부터 단말기까지의 응용 프로그램을 배치할 것이다.Kubernetes의 다양한 구성 요소가 어떻게 서로 보완되고 응용 프로그램 배치 과정이 순조롭게 진행되는지 보고 토론할 것입니다.
Minikube를 사용하여 로컬 시스템에 응용 프로그램을 배치합니다.Minikube에 대한 자세한 내용은 이 링크를 참조하십시오. https://minikube.sigs.k8s.io/docs/start/
이 글을 다 읽으면 Kubernetes의 다음 개념에 익숙해집니다.
  • 은 YAML 파일을 사용하여 배포를 작성하고 있습니다.
  • Pod 소개 및 YAML 구성 파일에서 Pod 정의 방법
  • 은 내부 서비스를 만들고 그룹의 다른 구성 요소를pod에 접근할 수 있도록 하는 방법입니다.
  • 외부 서비스를 만들고pod가 집단 외부에서 접근할 수 있도록 하는 방법입니다.
  • Kubernetes 클러스터에 배포할 예제 응용 프로그램은 다음과 같습니다.몬godb와 몬고 express docker 이미지를 배치하고 브라우저에서 몬고 express에 접근할 것입니다.

    이러한 응용 프로그램을 Kubernetes에 배치하려면 다음 절차를 따르겠습니다.
    1. 먼저 mongodb secret을 작성하여 암호화된 형식의 민감한 정보를 포함할 것입니다. 예를 들어 mongodb usernamepassword입니다.
  • 을 만들고 mongodb deployment and service을 만듭니다. 몬gdb pod를 만들고 몬godb를 다른 내부 구성 요소에 노출합니다.
  • 이제 mongodb configmap을 생성하여 mongodb url 및 기타 구성을 저장합니다.
  • 에서 설정도를 만들고 배치하면 mongo-express deployment 파일을 만들어mongo expresspod를 만들 것입니다.
  • 브라우저에서 애플리케이션에 액세스합니다.
  • 상기 절차를 실행하여 Kubernetes에 몬godb 프로그램을 배치하기 전에, 프로그램을 배치할 때 사용하는 몇 개의 Kubernetes 구성 요소를 간단하게 수정합니다.
    콩꼬투리: 콩꼬투리는 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/

    좋은 웹페이지 즐겨찾기