在本文中,我将向您展示如何在OpenShift(Minishift)上部署应用程序,将它们与其中暴露的其他服务连接起来,还是使用由OpenShift提供的其他一些有趣的部署功能。OpenShift构建在Docker容器和Kubernetes容器集群协调器之上。
运行Minishift
我们使用Minishift在本地机器上运行单节点OpenShift集群。安装MiniShift之前的唯一要求是安装虚拟化工具。我使用Oracle VirtualBox作为管理程序,所以我应该将 --vm-driver参数设置 为virtualbox 在我的运行命令中。
$ minishift start --vm -driver = virtualbox --memory = 3G
运行Docker
事实证明,您可以轻松地重用由Minishift管理的Docker守护进程,以便直接从命令行运行Docker命令而无需任何额外的安装。要实现这一点,只需在启动Minishift后运行以下命令。
@FOR / f “tokens = * delims = ^ L”%i IN('minishift docker-env')DO @call%i
运行OpenShift CLI
在开始Minishift任何实践练习之前,需要使用的最后一个工具是CLI。它在命令下可用oc。要在命令行上启用它,请运行以下命令:
$ minishift oc-env
$ SET PATH = C:\ Users \ minkowp \ .minishift \ cache \ oc \ v 3 .9.0 \ windows;%PATH%
$ REM @FOR / f “tokens = *”%i IN('minishift oc-env')DO @call%i
或者,您可以使用端口8443下提供的OpenShift Web控制台。在我的Windows机器上,默认情况下,它是在地址192.168.99.100下启动的。
构建示例应用程序的Docker镜像
我准备了用于呈现OpenShift部署过程的两个示例应用程序。这些简单的Java和Vert.x应用程序提供了一个HTTP API并将数据存储在MongoDB中。我们需要用这些应用程序构建Docker镜像。源代码在分支openshift的GitHub上可用。这里有一个示例Dockerfile 。account-vertx-service
FROM openjdk:8-jre-alpine
ENV VERTICLE_FILE account-vertx-service-1.0-SNAPSHOT.jar
ENV VERTICLE_HOME / usr / verticles
ENV DATABASE_USER mongo
ENV DATABASE_PASSWORD mongo
ENV DATABASE_NAME db
EXPOSE 8095
COPY target / $ VERTICLE_FILE $ VERTICLE_HOME /
WORKDIR $ VERTICLE_HOME
入口点[“sh”,“-c”]
CMD [“exec java -jar $ VERTICLE_FILE”]
转到 account-vertx-service目录并运行以下命令以从上面可见的Dockerfile构建一个映像。
$ docker build -t piomin / account-vertx-service。
应执行相同的步骤customer-vertx-service。之后,您将创建两个图像,两个图像都是相同的版本latest,现在可以在Minishift上进行部署和运行。
准备OpenShift部署描述符
在使用OpenShift时,我们应用程序部署的第一步是创建一个YAML配置文件。该文件包含有关部署的基本信息,例如用于运行应用程序(1)的容器,扩展(2),响应事件驱动自动部署的触发器(3),或者在平台上部署Pod的策略(4)。
kind: "DeploymentConfig"
apiVersion: "v1"
metadata:
name: "account-service"
spec:
template:
metadata:
labels:
name: "account-service"
spec:
containers: # (1)
- name: "account-vertx-service"
image: "piomin/account-vertx-service:latest"
ports:
- containerPort: 8095
protocol: "TCP"
replicas: 1 # (2)
triggers: # (3)
- type: "ConfigChange"
- type: "ImageChange"
imageChangeParams:
automatic: true
containerNames:
- "account-vertx-service"
from:
kind: "ImageStreamTag"
name: "account-vertx-service:latest"
strategy: # (4)
type: "Rolling"
paused: false
revisionHistoryLimit: 2
部署配置可以oc像使用其他资源一样使用该命令进行管理。您可以使用该 oc apply命令创建新配置或更新现有配置 。
$ oc apply -f account-deployment.yaml
你可能会有点惊讶,但这个命令不会触发任何构建,也不会启动这个窗格。实际上,您只创建了deploymentConfig描述部署过程的类型资源。您可以使用其他一些oc命令来启动此过程,但首先,让我们仔细查看应用程序所需的资源。
注入环境变量
正如我之前提到的,我们的示例应用程序使用外部数据源。他们需要打开与现有MongoDB实例的连接,以便存储使用应用程序公开的HTTP端点传递的数据。这里是我们的 MongoVerticle类,它负责与MongoDB建立客户端连接。它使用环境变量来设置安全证书和数据库名称。
publicclassMongoVerticleextendsAbstractVerticle {
@Override
publicvoidstart() throwsException {
ConfigStoreOptionsenvStore=newConfigStoreOptions()
.setType("env")
.setConfig(newJsonObject().put("keys", newJsonArray().add("DATABASE_USER").add("DATABASE_PASSWORD").add("DATABASE_NAME")));
ConfigRetrieverOptionsoptions=newConfigRetrieverOptions().addStore(envStore);
ConfigRetrieverretriever=ConfigRetriever.create(vertx, options);
retriever.getConfig(r-> {
Stringuser=r.result().getString("DATABASE_USER");
Stringpassword=r.result().getString("DATABASE_PASSWORD");
Stringdb=r.result().getString("DATABASE_NAME");
JsonObjectconfig=newJsonObject();
config.put("connection_string", "mongodb://"+user+":"+password+"@mongodb/"+db);
finalMongoClientclient=MongoClient.createShared(vertx, config);
finalAccountRepositoryservice=newAccountRepositoryImpl(client);
ProxyHelper.registerService(AccountRepository.class, vertx, service, "account-service");
});
}
}
MongoDB在OpenShift预定义的Docker镜像目录中提供。只需单击“目录”选项卡中的“MongoDB”图标,即可轻松将其部署到Minishift实例上 。如果您在部署设置期间未提供您的用户名和密码,它们将自动生成。所有属性都可用作部署环境变量,并存储为,其中是部署的名称。
secrets/mongodbmongodb