OpenShift是Red Hat的开源PaaS平台。 OpenShift v3 (将于今年发布)将提供使用Docker和Kubernetes运行微服务的整体体验。 以经典的Red Hat方式,所有工作都在OpenShift Origin的开源中完成。 这也将推动OpenShift Online和OpenShift Enterprise的下一个主要版本。
OpenShift v3使用了一个新的平台堆栈,该平台使用了Red Hat贡献的大量社区项目,例如Fedora,Centos,Docker,Project Atomic,Kubernetes和OpenStack。 结合了Docker,Kubernetes,Atomic和更多内容的OpenShift v3平台详细解释了该平台堆栈。
该技术提示将说明如何开始使用OpenShift v3,让我们开始吧!
OpenShift v3入门
可以从GitHub的Origin下载用于OpenShift v3的预构建二进制文件。 但是,最简单的入门方法是将OpenShift Origin作为Docker容器运行。
OpenShift Application Lifecycle提供了从头开始运行示例应用程序所需的完整详细信息。 本博客将使用这些步骤,并使它们适应于在Mac上使用boot2docker VM运行。 在此过程中,我们还将在WildFly上部署Java EE 7应用程序,该应用程序将访问单独的MySQL容器上的数据库。
这是我们的部署图:
- WildFly和MySQL在不同的Pod上运行。
- 它们每个都包装在Replication Controller中,以简化扩展。
- 每个复制控制器均作为服务发布。
- WildFly与MySQL服务对话,而不是直接与pod对话。 这一点很重要,因为Pod和分配给它们的IP地址都是短暂的。
让我们开始吧!
配置Docker守护程序
- 在主机上配置Docker守护程序以信任将要启动的Docker注册表服务。 该注册表将用于推送映像以进行构建/测试/部署。
- 以以下方式登录到boot2docker VM:
boot2docker ssh
- 编辑档案
sudo vi /var/lib/boot2docker/profile
这将是一个空文件。
- 添加以下名称/值对:
EXTRA_ARGS="--insecure-registry 172.30.17.0/24"
保存文件,然后退出编辑器。
这将指示Docker守护程序信任172.30.17.0/24子网中的任何Docker注册表。
- 以以下方式登录到boot2docker VM:
查看OpenShift v3和Java EE 7示例
- 下载并安装Go并设置GOPATH和PATH环境变量 。 签出OpenShift原始目录:
openshift> git clone https://github.com/openshift/origin.git Cloning into 'origin'... remote: Counting objects: 21451, done. remote: Compressing objects: 100% (76/76), done. remote: Total 21451 (delta 26), reused 15 (delta 1) Receiving objects: 100% (21451/21451), 35.11 MiB | 1.24 MiB/s, done. Resolving deltas: 100% (11392/11392), done. Checking connectivity... done.
请注意其检出的目录。 在这种情况下,它的〜
/workspaces/openshift
。构建工作空间:
make release origin> make release rm -rf _output Godeps/_workspace/pkg hack/build-release.sh Unable to find image 'openshift/origin-release' locally Pulling repository openshift/origin-release c59f040a4054: Download complete 511136ea3c5a: Download complete 5b12ef8fd570: Download complete dade6cb4530a: Download complete bd195712b86c: Download complete 4aae29c1c846: Download complete d8738da3ed4c: Download complete 7f7491063665: Download complete b5cfa9eebdb5: Download complete 2f6297477756: Download complete dc98bd93df2f: Download complete 1be2a7550a3d: Download complete 42fd088f8c55: Download complete b6f6ad4012df: Download complete Status: Downloaded newer image for openshift/origin-release:latest
- 检出已转换为Kubernetes应用程序的javaee7-hol工作区 :
origin> git clone https://github.com/bparees/javaee7-hol Cloning into 'javaee7-hol'... remote: Counting objects: 1159, done. remote: Compressing objects: 100% (49/49), done. remote: Total 1159 (delta 35), reused 37 (delta 21) Receiving objects: 100% (1159/1159), 20.35 MiB | 1.78 MiB/s, done. Resolving deltas: 100% (605/605), done. Checking connectivity... done.
这也可以在
~/workspaces/openshift
目录中完成。
启动OpenShift v3容器
- 将OpenShift Origin作为Docker容器启动:
~> docker run -d --name "openshift-origin" --net=host --privileged \-v /var/run/docker.sock:/var/run/docker.sock \-v /Users/arungupta/workspaces/openshift:/workspaces/openshift \-v /usr/local/bin/docker:/usr/bin/docker \openshift/origin start --public-master=$(boot2docker ip)The VM's Host only interface IP address is: 0ae85091e7ad7e85697575369f008273a6673d112b49860f5557a61d9e82d908
注意
~/workspaces/openshift
目录在容器中作为/workspaces/openshift
卷挂载。 还安装了一些其他卷。检查容器是否正在运行:
~> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0ae85091e7ad openshift/origin:beta1 "/usr/bin/openshift 2 minutes ago Up 2 minutes openshift-origin
- 以以下方式登录到容器:
openshift> docker exec -it `docker ps | grep origin:beta1 | awk '{ print $1 }'` bash [root@boot2docker openshift]#
- 通过提供以下命令在容器中安装Docker注册表:
export CERT_DIR=/var/lib/openshift/openshift.local.certificates/openshift-client && \ export KUBECONFIG=/var/lib/openshift/openshift.local.certificates/admin/.kubeconfig && \ cd /workspaces/openshift/origin && hack/install-registry.sh
- 通过获取Pod列表来确认注册表正在运行:
[root@boot2docker origin]# osc get pods POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS docker-registry-1-gfkbz 172.17.0.14 registry-container openshift/docker-registry boot2docker/127.0.0.1 deployment=docker-registry-1,deploymentconfig=docker-registry,name=registrypod,template=docker-registry-template Running
osc
是OpenShift Client CLI ,可用于创建和管理OpenShift项目。 一些kubectl命令也可以使用此脚本。 - 确认注册表服务正在运行。 请注意,实际IP地址可能会有所不同:
[root@boot2docker origin]# osc get services NAME LABELS SELECTOR IP PORT docker-registry template=docker-registry-template name=registrypod 172.30.17.142 5001 kubernetes component=apiserver,provider=kubernetes <none> 172.30.17.2 443 kubernetes-ro component=apiserver,provider=kubernetes <none> 172.30.17.1 80
- 确认注册表服务可访问:
curl `osc get services docker-registry -o template --template="{{ .portalIP}}:{{ .port }}"`
并寻找输出:
"docker-registry server (dev) (v0.9.0)"
访问OpenShift v3 Web控制台
- OpenShift Origin服务器现在已启动并正在运行。 使用
boot2docker ip
查找主机的IP地址,然后打开http:// <boot2docker主机的IP地址>:8444在浏览器中查看OpenShift Web控制台,例如,可通过https://192.168.59.103:8444访问该控制台/在这台机器上。您需要让浏览器在
https://<host>:8444
处接受证书,然后控制台才能查询OpenShift API。 当然,使用合法证书就不需要这样做。 - 出现OpenShift Origin登录屏幕。 输入用户名/密码作为admin / admin:
然后点击“登录”按钮。 默认的Web控制台如下所示:
创建OpenShift v3项目
- 在OpenShift v3容器中使用github.com/openshift/origin/blob/master/examples/sample-app/project.json中的
project.json
并创建一个测试项目,如下所示:[root@boot2docker origin]# osc create -f /workspaces/openshift/origin/examples/sample-app/project.json test
现在刷新Web控制台将显示:
单击“ OpenShift 3 Sample”将显示一个空的项目描述:
- 请求创建应用程序模板:
[root@boot2docker openshift]# cd javaee7-hol/ [root@boot2docker javaee7-hol]# osc process -n test -f application-template-jeebuild.json | osc create -n test -f - frontend origin-jee-sample wildfly-8-centos jee-sample-build frontend mysql database
- Web控制台自动刷新并显示:
正在运行的服务列表可以看成是:
建立项目
- 触发项目的初始构建:
[root@boot2docker javaee7-hol]# osc start-build -n test jee-sample-build cee73fbc-b32d-11e4-a0f2-5282784576db
- 监视构建并等待状态变为“完成”(这可能需要几分钟):
[root@boot2docker javaee7-hol]# osc get -n test builds NAME TYPE STATUS POD cee73fbc-b32d-11e4-a0f2-5282784576db STI Running build-cee73fbc-b32d-11e4-a0f2-5282784576db
您可以添加–watch标志以等待更新,直到构建完成:
[root@boot2docker javaee7-hol]# osc get -n test builds --watch NAME TYPE STATUS POD cee73fbc-b32d-11e4-a0f2-5282784576db STI Running build-cee73fbc-b32d-11e4-a0f2-5282784576db NAME TYPE STATUS POD cee73fbc-b32d-11e4-a0f2-5282784576db STI Complete build-cee73fbc-b32d-11e4-a0f2-5282784576db
等待
STATUS
栏显示Complete
。 设置所有组件(WIldFly,MySQL,Java EE 7应用程序)将花费几分钟。 实际上,将创建它们的新Docker映像并将其推送到较早启动的本地注册表中。状态更改为
Complete
后,Ctrl+C
停止监视构建。 - 构建的完整日志可以看成是:
[root@boot2docker javaee7-hol]# osc build-logs -n test cee73fbc-b32d-11e4-a0f2-5282784576db 2015-02-13T03:10:07.065718606Z Cloning into '/tmp/sti552730161/upload/src'... 2015-02-13T03:11:03.184576532Z I0213 03:11:03.184326 1 build.go:160] Successfully built 172.30.17.142:5001/test/origin-jee-sample 2015-02-13T03:11:07.261489310Z The push refers to a repository [172.30.17.142:5001/test/origin-jee-sample] (len: 1) 2015-02-13T03:11:07.261489310Z Sending image list 2015-02-13T03:11:07.275256699Z Pushing repository 172.30.17.142:5001/test/origin-jee-sample (1 tags) 2015-02-13T03:11:07.307836081Z Pushing Buffering to disk07.314345045Z Buffering to disk 1.024 kB 2015-02-13T03:11:07.315452728Z Buffering to disk Pushing-13T03:11:07.323973430Z Pushing [=========================> ] 512 B/1.024 kB 0. . .Pushing-13T03:13:05.932725921Z Pushing [================================================> ] 6.56 MB/6.704 MB 0 Pushing-13T03:13:05.942989165Z Pushing [=================================================> ] 6.635 MB/6.704 MB 0 Pushing-13T03:13:05.943025109Z Pushing [=================================================> ] 6.702 MB/6.704 MB 0 Pushing-13T03:13:05.947665528Z Pushing [==================================================>] 6.704 MB/6.704 MB 2015-02-13T03:13:05.953476634Z Image successfully pushed 2015-02-13T03:13:05.953476634Z Pushing tag for rev [b0a7868377c1] on {http://172.30.17.142:5001/v1/repositories/test/origin-jee-sample/tags/latest}
- 检查要启动的应用程序容器:
[root@boot2docker javaee7-hol]# osc get -n test pods POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS build-cee73fbc-b32d-11e4-a0f2-5282784576db 172.17.0.17 sti-build openshift/origin-sti-builder:v0.3 boot2docker/127.0.0.1 <none> Succeeded database-1-axe6d 172.17.0.16 jee-database mysql boot2docker/127.0.0.1 deployment=database-1,deploymentconfig=database,name=database,template=jee-sample Running frontend-1-pkcia 172.17.0.20 jee-sample 172.30.17.142:5001/test/origin-jee-sample:b0a7868377c10a50b40019be70e22d040b9a2bb2d87fa3932b700494e50a4de6 boot2docker/127.0.0.1 deployment=frontend-1,deploymentconfig=frontend,name=frontend,template=jee-sample Running
请注意,“前端”和“数据库”窗格现在正在运行。
- 确定“前端”服务的IP:
[root@boot2docker javaee7-hol]# osc get -n test services NAME LABELS SELECTOR IP PORT frontend template=jee-sample name=frontend 172.30.17.115 8080 mysql template=jee-sample name=database 172.30.17.75 3306
- 通过http:// <“前端”的IP地址>:8080 / movieplex7-1.0-SNAPSHOT可以访问应用程序。 请注意,IP地址可能(很可能会)有所不同。 在这种情况下,它将是http://172.30.17.115:8080/moviexplex7-1.0-SNAPSHOT。由于将OpenShift v3用作Docker容器时,在Mac上配置防火墙,需要进一步调试才能配置该应用程序。 在弄清楚这一点之前,您可以在boot2docker VM中执行docker
docker ps
以查看所有容器的列表:origin> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c776cabb72f8 172.30.17.17:5001/test/origin-jee-sample:91d1b5a5ed58e1642aafbd652eba0b7eae3a0ac08c17729d205ae88204f64449 "/tmp/scripts/run" 2 hours ago Up 2 hours k8s_jee-sample.7af25557_frontend-2-9ciae.test.api_12a0d77e-b3b5-11e4-81f6-5282784576db_53f91f55 e7f87112c473 openshift/origin-pod:beta1 "/pod" 2 hours ago Up 2 hours k8s_POD.9cbfdefa_frontend-2-9ciae.test.api_12a0d77e-b3b5-11e4-81f6-5282784576db_64263b61 7e7579db5f82 openshift/origin-pod:beta1 "/pod" 2 hours ago Up 2 hours k8s_POD.123cbdd6_build-e075047d-b3b4-11e4-81f6-5282784576db.test.api_e07bcdb2-b3b4-11e4-81f6-5282784576db_376c0e63 74082d7791ec openshift/origin-pod:beta1 "/pod" 2 hours ago Up 2 hours k8s_POD.123cbdd6_build-76364bb6-b3b2-11e4-81f6-5282784576db.test.api_7639e3a5-b3b2-11e4-81f6-5282784576db_f653c7fd 3e42dacb0da7 mysql:latest "/entrypoint.sh mysq 3 hours ago Up 3 hours k8s_jee-database.f12628ae_database-1-bqg8v.test.api_56093bac-b3b2-11e4-81f6-5282784576db_193dddf7 cb551c8cf7bf openshift/origin-pod:beta1 "/pod" 3 hours ago Up 3 hours k8s_POD.95f2def6_database-1-bqg8v.test.api_56093bac-b3b2-11e4-81f6-5282784576db_295fc320 e8719152df42 openshift/docker-registry:latest "\"sh -c 'echo \"$OP 3 hours ago Up 3 hours k8s_registry-container.4e338487_docker-registry-1-bt49s.default.api_177a691c-b3b0-11e4-81f6-5282784576db_a6f4f83b d3ecc5841c3b openshift/origin-pod:beta1 "/pod" 3 hours ago Up 3 hours k8s_POD.8a29deef_docker-registry-1-bt49s.default.api_177a691c-b3b0-11e4-81f6-5282784576db_ba53d62b a506222fae91 openshift/origin:beta1 "/usr/bin/openshift 3 hours ago Up 3 hours openshift-origin
然后以以下方式登录到与前端关联的容器:
docker exec -it `docker ps | grep origin-jee-sample | awk '{ print $1 }'` bash
这将登录到Docker容器,您可以通过提供以下命令来检查应用程序是否已成功部署:
bash-4.2$ curl http://localhost:8080/movieplex7-1.0-SNAPSHOT/
这将从应用程序中打印
index.html
页面,该应用程序的顶部和顶部都有许可证。现在,一旦防火墙问题解决,此页面也将在主机Mac上也可以访问。
让我们总结一下:
- 克隆了OpenShift Origin和Java EE 7示例存储库
- 将OpenShift v3作为Docker容器启动
- 加载了OpenShift v3 Web控制台
- 创建一个OpenShift v3项目
- 加载的Java EE 7应用程序模板
- 触发了构建,从而部署了应用程序
- 如果遇到问题,这里有一些故障排除技巧 。
请享用!
翻译自: https://www.javacodegeeks.com/2015/02/openshift-v3-getting-started-java-ee-7-using-wildfly-mysql.html