OpenShift-はじめに
OpenShiftは、GUIまたはCLIによってアプリケーションを作成およびデプロイするための2種類の中央値で構成されています。 この章では、CLIを使用して新しいアプリケーションを作成します。 OCクライアントを使用してOpenShift環境と通信します。
新しいアプリケーションを作成する
OpenShiftには、新しいアプリケーションを作成する3つの方法があります。
ソースコードから
ソースコードからアプリケーションを作成しようとすると、OpenShiftは、アプリケーションビルドフローを定義するレポジトリ内に存在するDockerファイルを探します。 oc new-appを使用してアプリケーションを作成します。
レポジトリを使用する際に最初に留意すべきことは、OpenShiftがコードをプルしてビルドするレポジトリのオリジンを指す必要があるということです。
レポジトリがOCクライアントがインストールされているDockerマシンで複製され、ユーザーが同じディレクトリ内にある場合、次のコマンドを使用して作成できます。
以下は、特定のブランチのリモートリポジトリからビルドしようとする例です。
ここで、test1はOpenShiftで新しいアプリケーションを作成しようとしているブランチです。
リポジトリでDockerファイルを指定する場合、以下に示すようにビルド戦略を定義する必要があります。
画像から
イメージを使用してアプリケーションを構築している間、イメージはローカルDockerサーバー、社内ホストDockerリポジトリ、またはDockerハブに存在します。 ユーザーが確認する必要があるのは、ハブから問題なく画像をプルするアクセス権があることだけです。
OpenShiftには、Dockerイメージまたはソースストリームのどちらであるかを使用するソースを決定する機能があります。 ただし、ユーザーが希望する場合は、イメージストリームかDockerイメージかを明示的に定義できます。
画像ストリームを使用する-
テンプレートから
テンプレートは、新しいアプリケーションの作成に使用できます。 既存のテンプレートまたは新しいテンプレートを作成できます。
次のyamlファイルは、基本的に展開に使用できるテンプレートです。
Webアプリケーションの開発と展開
OpenShiftでの新しいアプリケーションの開発
OpenShiftで新しいアプリケーションを作成するには、新しいアプリケーションコードを記述し、OpenShift OCビルドコマンドを使用してビルドする必要があります。 説明したように、新しいイメージを作成する方法は複数あります。 ここでは、テンプレートを使用してアプリケーションを構築します。 このテンプレートは、oc new-appコマンドで実行すると、新しいアプリケーションを構築します。
次のテンプレートが作成されます-2つのフロントエンドアプリケーションと1つのデータベース。 それとともに、2つの新しいサービスを作成し、それらのアプリケーションをOpenShiftクラスターにデプロイします。 アプリケーションをビルドおよびデプロイする際、最初にOpenShiftでネームスペースを作成し、そのネームスペースの下にアプリケーションをデプロイする必要があります。
新しい名前空間を作成
テンプレート
オブジェクト定義
テンプレートの秘密の定義
テンプレート内のサービス定義
テンプレートでのルート定義
テンプレートで構成定義を作成
テンプレートでの展開設定
"status": {
"lastVersion": 0
}
{
"kind": "DeploymentConfig",
"apiVersion": "v1",
"metadata": {
"name": "frontend",
"creationTimestamp": null
}
},
"spec": {
"strategy": {
"type": "Rolling",
"rollingParams": {
"updatePeriodSeconds": 1,
"intervalSeconds": 1,
"timeoutSeconds": 120,
"pre": {
"failurePolicy": "Abort",
"execNewPod": {
"command": [
"/bin/true"
],
"env": [
{
"name": "CUSTOM_VAR1",
"value": "custom_value1"
}
]
}
}
}
}
}
"triggers": [
{
"type": "ImageChange",
"imageChangeParams": {
"automatic": true,
"containerNames": [
"openshift-helloworld"
],
"from": {
"kind": "ImageStreamTag",
"name": "origin-openshift-sample:latest"
}
}
},
{
"type": "ConfigChange"
}
],
"replicas": 2,
"selector": {
"name": "frontend"
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"name": "frontend"
}
},
"spec": {
"containers": [
{
"name": "openshift-helloworld",
"image": "origin-openshift-sample",
"ports": [
{
"containerPort": 8080,
"protocol": "TCP”
}
],
"env": [
{
"name": "MYSQL_USER",
"valueFrom": {
"secretKeyRef" : {
"name" : "dbsecret",
"key" : "mysql-user"
}
}
},
{
"name": "MYSQL_PASSWORD",
"valueFrom": {
"secretKeyRef" : {
"name" : "dbsecret",
"key" : "mysql-password"
}
}
},
{
"name": "MYSQL_DATABASE",
"value": "${MYSQL_DATABASE}"
}
],
"resources": {},
"terminationMessagePath": "/dev/termination-log",
"imagePullPolicy": "IfNotPresent",
"securityContext": {
"capabilities": {},
"privileged": false
}
}
],
"restartPolicy": "Always",
"dnsPolicy": "ClusterFirst"
},
"status": {}
},
テンプレート内のサービス定義
{
"kind": "DeploymentConfig",
"apiVersion": "v1",
"metadata": {
"name": "database",
"creationTimestamp": null
},
"spec": {
"strategy": {
"type": "Recreate",
"resources": {}
},
"triggers": [
{
"type": "ConfigChange"
}
],
"replicas": 1,
"selector": {"name": "database"},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {"name": "database"}
},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"name": "database"
}
},
"spec": {
"containers": [
{
"name": "openshift-helloworld-database",
"image": "ubuntu/mysql-57-ubuntu7:latest",
"ports": [
{
"containerPort": 3306,
"protocol": "TCP"
}
],
"env": [
{
"name": "MYSQL_USER",
"valueFrom": {
"secretKeyRef" : {
"name" : "dbsecret",
"key" : "mysql-user"
}
}
},
{
"name": "MYSQL_PASSWORD",
"valueFrom": {
"secretKeyRef" : {
"name" : "dbsecret",
"key" : "mysql-password"
}
}
},
{
"name": "MYSQL_DATABASE",
"value": "${MYSQL_DATABASE}"
}
],
"resources": {},
"volumeMounts": [
{
"name": "openshift-helloworld-data",
"mountPath": "/var/lib/mysql/data"
}
],
"terminationMessagePath": "/dev/termination-log",
"imagePullPolicy": "Always",
"securityContext": {
"capabilities": {},
"privileged": false
}
}
],
"volumes": [
{
"name": "openshift-helloworld-data",
"emptyDir": {"medium": ""}
}
],
"restartPolicy": "Always",
"dnsPolicy": "ClusterFirst”
}
}
},
"status": {}
},
"parameters": [
{
"name": "MYSQL_USER",
"description": "database username",
"generate": "expression",
"from": "user[A-Z0-9]{3}",
"required": true
},
{
"name": "MYSQL_PASSWORD",
"description": "database password",
"generate": "expression",
"from": "[a-zA-Z0-9]{8}",
"required": true
},
{
"name": "MYSQL_DATABASE",
"description": "database name",
"value": "root",
"required": true
}
],
"labels": {
"template": "application-template-dockerbuild"
}
}
上記のテンプレートファイルは、一度にコンパイルする必要があります。 最初にすべてのコンテンツを1つのファイルにコピーし、完了したらyamlファイルとして名前を付ける必要があります。
アプリケーションを作成するには、次のコマンドを実行する必要があります。
ビルドを監視したい場合、それを使用して行うことができます-
以下を使用して、OpenShiftにデプロイされたアプリケーションを確認できます-
サービス定義に従ってアプリケーションサービスが作成されているかどうかを確認できます。