Kubernetesを使用した完全なアプリケーション展開
20945 ワード
このポストでは、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に上記のアプリケーションを配備するには、次の手順に従います.
まず、は、mongdbポッドを作成し、他の内部コンポーネントにMongoDBを公開する責任がある 私たちは 設定マップが作成され、展開されたら、私たちはmongo express podを作成するために ブラウザからアプリケーションにアクセスする. 上記の手順を実行する前に、KubernetesにMongoDBアプリケーションを配備する前に、アプリケーションを簡単に展開する際に使用されるいくつかのKubernetesコンポーネントを修正できます.
ポッド:ポッドはKubernetesの
秘密:秘密を保存し、パスワード、OAuthトークン、およびSSHキーなど
ConfigMap :
配備:配備はアプリケーションに
サービス:サービスは、クラスタ(すべて同じ機能を実行する)のポッドの配備されたグループのための
では、上記の手順に従って、完全なMongoDBアプリケーションを配備しましょう.異なるコンポーネントを持つアプリケーションのアーキテクチャは以下の通りです.
私たちのMongoDBアプリケーションとしてユーザー名とパスワードをアクセスするために必要なユーザー名とパスワードは、秘密の情報ですので、それらを保存する秘密を作成されます.「パスワード」として「ユーザ名」とパスワードとしてユーザ名を持ちます.
種類:それが展開、秘密、またはConfigMapのかどうかを定義します.
メタデータ:ここで作成するオブジェクトに関するデータを定義できます.この例では、podの名前だけを指定します.しかし、あなたは名前空間のような他の詳細を提供することができます.
型:不透明なKubernetesの視点からこの秘密の内容が構造化されていないので、任意のキー値ペアを含めることができます.
データ:データには、秘密として保存したいデータが含まれます.
今、我々はMongoDBポッドを作成するMongo展開を作成します、Mongo DB展開はSTOP 1で作成されたMongoの秘密からMongoDBのユーザ名とパスワードを取得されます.
1 .展開- podのpodとレプリカを作成する責任があります.(ここではレプリカを1つだけ作成します).
2 .サービス-内部コンポーネントにPODを公開する.
より詳細に展開の各フィールドを見てみましょう.
種類:それが展開、秘密、またはConfigMapのかどうかを定義します.
メタデータ:ここで作成するオブジェクトに関するデータを定義できます.この例では、podの名前だけを指定します.しかし、あなたは名前空間のような他の詳細を提供することができます.
Spec :展開型ファイルでは、レプリカ、セレクタ、コンテナテンプレートの定義に責任がある仕様化を行います.
複製:このコンテナのためにつくられるPODの数を定義してください.
セレクタ:内部セレクタでは、一致するラベルを定義します.
テンプレート:テンプレートは、作成されるコンテナとpodの実際の青い印刷です.
テンプレート.メタデータ:podのようなラベルなどの情報が含まれます.
テンプレート.仕様:作成する必要があるコンテナの青写真.
コンテナー:作成する別のポッドを定義します.
名前:コンテナーの名前.
イメージ:Dockerハブから引っ張られるDockerイメージ.
ポート:このコンテナがアクセス可能になります.
Env : Container MongoDBのユーザー名とパスワードのような環境変数我々のケースです.
サービスをもっと詳しく見ましょう.
ここでMongoDB URLを含むConfigMapを作成します.
我々は、下記のMongo Express外部サービスにある余分なフィールドのいくつかを議論します.
タイプ:loadbalancer:サービス外部IPアドレスを割り当てることによってサービスを外部にします.
NodePort :このポッドをクラスタの外部にアクセスできるポート.
ブラウザからMongo Expressにアクセスするには、Kubernetesによって割り当てられたサービスのIPアドレスを見つける必要があります.
サービスが作成され、次のコマンドでサービス名を取得するかどうか最初に確認します
私たちが外部サービスを見ることができるように、モンゴ急行サービスと内部サービスMongoDBサービスの名前が両方ともつくられました.
サービスのために作成されたURLを以下のコマンドを使用してアクセスできるようにするために、外部サービスを実行します.
今すぐコピーをブラウザでURLをペーストし、アプリケーションがアクセス可能かどうかを確認します.
我々は、外部サービスYAMLファイルで指定されたポート30000上で我々のブラウザでアプリケーションにアクセスできることがわかります.
このように、我々はKubernetesで完全な終わりMongo DBアプリケーションを配備して、我々のブラウザーでそれにアクセスします.私たちはmongodb podを作成し、それを内部サービスによって他のコンポーネントにアクセス可能にしました.また、MongoDBへの変更を行うためにMongo Express用の1つのpodを作成し、外部のサービスを作成して外部または外部のソースにアクセスできます.
何か質問があるか、何か間違ったものを見つけるならば、これはこのポストからすべてです.
この投稿は私の個人的なブログで初めて公開されました.あなたがこのブログ内容に関連するとわかるならば、あなたは同様の内容のために私のブログを訪問することができます:
Minikubeを使用して、ローカルシステムにアプリケーションを配備します.このリンクはMinikubeについての詳細を参照することができます
一旦このポストを終えたら、Kubernetesの以下の概念に精通しています.
https://minikube.sigs.k8s.io/docs/start/
Kubernetesに上記のアプリケーションを配備するには、次の手順に従います.
まず、
mongodb secret
やmongodb username
などの機密情報を暗号化形式で含むpassword
を作成します.mongodb deployment and service
を作成します.mongodb configmap
と他の設定を保存するmongodb url
を作成します.mongo-express deployment
ファイルを作成します.ポッド:ポッドは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を作成し、外部のサービスを作成して外部または外部のソースにアクセスできます.
何か質問があるか、何か間違ったものを見つけるならば、これはこのポストからすべてです.
この投稿は私の個人的なブログで初めて公開されました.あなたがこのブログ内容に関連するとわかるならば、あなたは同様の内容のために私のブログを訪問することができます:
Reference
この問題について(Kubernetesを使用した完全なアプリケーション展開), 我々は、より多くの情報をここで見つけました https://dev.to/ishant14/complete-application-deployment-using-kubernetes-1b4bテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol