Kubernetesを使用した完全なアプリケーション展開


このポストでは、Kubernetesを使用して完全なエンドツーエンドアプリケーションを展開します.Kubernetesのさまざまなコンポーネントが互いに補完し、アプリケーション展開プロセスをスムーズにする方法を見てみましょう.
Minikubeを使用して、ローカルシステムにアプリケーションを配備します.このリンクはMinikubeについての詳細を参照することができます
一旦このポストを終えたら、Kubernetesの以下の概念に精通しています.
  • YAMLファイルを使用して展開を作成します.
  • podとどのようにYAML設定ファイルでpodを定義する方法です.
  • 内部サービスを作成し、ポッドをクラスタ内の他のコンポーネントにアクセスする方法.
  • 外部サービスを作成し、クラスタの外側にあるpodをアクセスする方法.
  • Kubernetesクラスタに展開するサンプルアプリケーションは以下の通りです.我々はMongoDBとMongo ExpressのDocker画像を展開し、ブラウザからMongo Expressにアクセスします.
    https://minikube.sigs.k8s.io/docs/start/
    Kubernetesに上記のアプリケーションを配備するには、次の手順に従います.
    まず、mongodb secretmongodb usernameなどの機密情報を暗号化形式で含むpasswordを作成します.
  • は、mongdbポッドを作成し、他の内部コンポーネントにMongoDBを公開する責任があるmongodb deployment and serviceを作成します.
  • 私たちはmongodb configmapと他の設定を保存するmongodb urlを作成します.
  • 設定マップが作成され、展開されたら、私たちはmongo express podを作成するためにmongo-express deploymentファイルを作成します.
  • ブラウザからアプリケーションにアクセスする
  • .
  • 上記の手順を実行する前に、KubernetesにMongoDBアプリケーションを配備する前に、アプリケーションを簡単に展開する際に使用されるいくつかのKubernetesコンポーネントを修正できます.
    ポッド:ポッドはKubernetesのsmallest, most basic deployableオブジェクトです.PODはクラスタ内の実行中のプロセスの1つのインスタンスを表します.ポッドは、Dockerコンテナのようなone or more containersを含みます.
    秘密:秘密を保存し、パスワード、OAuthトークン、およびSSHキーなどsensitive informationを管理することができます.秘密の情報を秘密に保管することは、pod定義またはコンテナイメージで逐語的にそれを置くより安全で、より柔軟です
    ConfigMap : non-confidential data in key-value pairsを格納するAPIオブジェクトです.PODは、環境変数、コマンドライン引数、またはボリュームの設定ファイルとしてコンフィギュレーションを消費することができます.ConfigMapを使用すると、コンテナーイメージから環境固有の構成を分離することができます.
    配備:配備はアプリケーションにdeclarative updatesを提供するKubernetesのリソースオブジェクトです.展開を使用すると、アプリケーションのために使用する画像のようなアプリケーションのライフサイクルを記述することができます、ポッドの数がある必要がありますし、それらを更新する方法.
    サービス:サービスは、クラスタ(すべて同じ機能を実行する)のポッドの配備されたグループのためのlogical abstractionです.PODSは一時的であるので、サービスは特定の機能(Webサービス、画像処理など)を提供するPODのグループを可能にします.

    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.


    では、上記の手順に従って、完全なMongoDBアプリケーションを配備しましょう.異なるコンポーネントを持つアプリケーションのアーキテクチャは以下の通りです.

    ステップ1:作成MongoDBのユーザー名とパスワードを保存する秘密。


    私たちのMongoDBアプリケーションとしてユーザー名とパスワードをアクセスするために必要なユーザー名とパスワードは、秘密の情報ですので、それらを保存する秘密を作成されます.「パスワード」として「ユーザ名」とパスワードとしてユーザ名を持ちます.

    秘密。ヤル


    apiVersion: v1
    kind: Secret
    metadata:
        name: mongodb-secret
    type: Opaque
    data:
        mongo-root-username: dXNlcm5hbWU=
        mongo-root-password: cGFzc3dvcmQ=
    
    これはクラスタが使用するAPIのバージョンです.
    種類:それが展開、秘密、またはConfigMapのかどうかを定義します.
    メタデータ:ここで作成するオブジェクトに関するデータを定義できます.この例では、podの名前だけを指定します.しかし、あなたは名前空間のような他の詳細を提供することができます.
    型:不透明なKubernetesの視点からこの秘密の内容が構造化されていないので、任意のキー値ペアを含めることができます.
    データ:データには、秘密として保存したいデータが含まれます.kubectl apply -f mongo-secret.yaml経由で秘密設定ファイルを展開します.


    ステップ2:Mongoのポッドを作成するMongo展開とサービスを作成します。


    今、我々はMongoDBポッドを作成するMongo展開を作成します、Mongo DB展開はSTOP 1で作成されたMongoの秘密からMongoDBのユーザ名とパスワードを取得されます.

    門後。ヤル


    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ファイルでは2つの定義を行いました.
    1 .展開- podのpodとレプリカを作成する責任があります.(ここではレプリカを1つだけ作成します).
    2 .サービス-内部コンポーネントにPODを公開する.
    より詳細に展開の各フィールドを見てみましょう.
    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
    
    これはクラスタが使用するAPIのバージョンです.
    種類:それが展開、秘密、またはConfigMapのかどうかを定義します.
    メタデータ:ここで作成するオブジェクトに関するデータを定義できます.この例では、podの名前だけを指定します.しかし、あなたは名前空間のような他の詳細を提供することができます.
    Spec :展開型ファイルでは、レプリカ、セレクタ、コンテナテンプレートの定義に責任がある仕様化を行います.
    複製:このコンテナのためにつくられるPODの数を定義してください.
    セレクタ:内部セレクタでは、一致するラベルを定義します.
    テンプレート:テンプレートは、作成されるコンテナとpodの実際の青い印刷です.
    テンプレート.メタデータ:podのようなラベルなどの情報が含まれます.
    テンプレート.仕様:作成する必要があるコンテナの青写真.
    コンテナー:作成する別のポッドを定義します.
    名前:コンテナーの名前.
    イメージ:Dockerハブから引っ張られるDockerイメージ.
    ポート:このコンテナがアクセス可能になります.
    Env : Container MongoDBのユーザー名とパスワードのような環境変数我々のケースです.

    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フィールドだけが異なります.

    ステップ3:mongodbのユーザ名とパスワードを保存する秘密を作成します


    ここでMongoDB URLを含むConfigMapを作成します.

    MONGOコンフィギュレーションマップヤル


    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mongodb-configmap
    data:
      database_url: mongodb-service
    
    ConfigMapファイルは他のYAMLファイルとほぼ似ています.

    ステップ4:モンゴエクスプレスポッドを作成し、クラスタの外側にそれを公開する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 Explorerの配備設定は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
    
    このサービスファイルには、MongoDBのサービスファイルに比べて2つのフィールドが追加されます.
    タイプ:loadbalancer:サービス外部IPアドレスを割り当てることによってサービスを外部にします.
    NodePort :このポッドをクラスタの外部にアクセスできるポート.

    ステップ5:ブラウザからMongoエクスプレスにアクセスします。


    ブラウザからMongo Expressにアクセスするには、Kubernetesによって割り当てられたサービスのIPアドレスを見つける必要があります.
    サービスが作成され、次のコマンドでサービス名を取得するかどうか最初に確認します
    kubectl get service
    

    私たちが外部サービスを見ることができるように、モンゴ急行サービスと内部サービスMongoDBサービスの名前が両方ともつくられました.
    サービスのために作成されたURLを以下のコマンドを使用してアクセスできるようにするために、外部サービスを実行します.
    minikube service mongo-express-service
    

    今すぐコピーをブラウザでURLをペーストし、アプリケーションがアクセス可能かどうかを確認します.

    我々は、外部サービスYAMLファイルで指定されたポート30000上で我々のブラウザでアプリケーションにアクセスできることがわかります.

    結論


    このように、我々はKubernetesで完全な終わりMongo DBアプリケーションを配備して、我々のブラウザーでそれにアクセスします.私たちはmongodb podを作成し、それを内部サービスによって他のコンポーネントにアクセス可能にしました.また、MongoDBへの変更を行うためにMongo Express用の1つのpodを作成し、外部のサービスを作成して外部または外部のソースにアクセスできます.
    何か質問があるか、何か間違ったものを見つけるならば、これはこのポストからすべてです.
    この投稿は私の個人的なブログで初めて公開されました.あなたがこのブログ内容に関連するとわかるならば、あなたは同様の内容のために私のブログを訪問することができます: