MySQL作为Kubernetes服务,可从WildFly Pod访问

Kubernetes上使用Vagrant的Java EE 7和WildFly(技术提示#71)介绍了如何在使用Kubernetes和Docker托管的WildFly上运行琐碎的Java EE 7应用程序。 Java EE 7应用程序是在世界范围内交付的动手实验室 。 它使用与WildFly捆绑在一起的内存数据库,并允许了解Kubernetes的关键构建块。 这是使您开始进行初始开发工作的好方法,但是当应用程序服务器宕机时数据库丢失时,这很快就会成为瓶颈。 该技术提示将展示如何运行另一个普通的Java EE 7应用程序,以及如何使用MySQL作为数据库服务器。 它将使用Kubernetes Services解释如何轻松地将MySQL和WildFly分离。

让我们开始吧!

确保使用Kubernetes中使用Vagrant进行的 Kubernetes设置有效 。

可以在github.com/arun-gupta/kubernetes-java-sample上找到此博客中使用的完整源代码。

启动MySQL Kubernetes pod

第一步是启动MySQL pod。 这可以通过使用MySQL Kubernetes配置文件启动:

kubernetes> ./cluster/kubectl.sh create -f ../kubernetes-java-sample/mysql.json
KUBE_MASTER_IP: 10.245.1.2
Running: ./cluster/../cluster/vagrant/../../_output/dockerized/bin/darwin/amd64/kubectl --auth-path=/Users/arungupta/.kubernetes_vagrant_auth create -f ../kubernetes-java-sample/mysql.json
mysql

使用的配置文件位于github.com/arun-gupta/kubernetes-java-sample/blob/master/mysql.json 。

检查MySQL pod的状态:

kubernetes> ./cluster/kubectl.sh get pods
KUBE_MASTER_IP: 10.245.1.2
Running: ./cluster/../cluster/vagrant/../../_output/dockerized/bin/darwin/amd64/kubectl --auth-path=/Users/arungupta/.kubernetes_vagrant_auth get pods
POD                 IP                  CONTAINER(S)        IMAGE(S)            HOST                    LABELS              STATUS
mysql               10.246.1.3          mysql               mysql:latest        10.245.1.3/10.245.1.3   name=mysql          Pending

等待状态更改为“正在运行”。 它看起来像:

KUBE_MASTER_IP: 10.245.1.2
Running: ./cluster/../cluster/vagrant/../../_output/dockerized/bin/darwin/amd64/kubectl --auth-path=/Users/arungupta/.kubernetes_vagrant_auth get pods
POD                 IP                  CONTAINER(S)        IMAGE(S)            HOST                    LABELS              STATUS
mysql               10.246.1.3          mysql               mysql:latest        10.245.1.3/10.245.1.3   name=mysql          Running

MySQL服务器需要几分钟的时间才能进入该状态,因此请喝杯咖啡或一小杯速食!

启动MySQL Kubernetes服务

Pod和分配给它们的IP地址都是短暂的。 如果某个Pod死了,那么Kubernetes会由于其自愈功能而重新创建该Pod,但是它可能会在其他主机上重新创建它。 即使它在同一主机上,也可以为其分配不同的IP地址。 因此,任何应用程序都不能依赖容器的IP地址。

Kubernetes 服务是一种抽象,定义了一组逻辑上的Pod。 一个服务通常由一个或多个物理Pod(使用标签关联)后端,并且它具有一个永久IP地址,该IP地址可以被其他Pod /应用程序使用。 例如,WildFly容器不能直接连接到MySQL容器,但是可以连接到MySQL服务。 本质上,Kubernetes服务为客户端提供了一个IP和端口对,该IP和端口对在被访问时会重定向到适当的后端。

techtip72-kubernetes-服务

让我们启动MySQL服务。

kubernetes> ./cluster/kubectl.sh create -f ../kubernetes-java-sample/mysql-service.json
KUBE_MASTER_IP: 10.245.1.2
Running: ./cluster/../cluster/vagrant/../../_output/dockerized/bin/darwin/amd64/kubectl --auth-path=/Users/arungupta/.kubernetes_vagrant_auth create -f ../kubernetes-java-sample/mysql-service.json
mysql

使用的配置文件位于github.com/arun-gupta/kubernetes-java-sample/blob/master/mysql-service.json 。 在这种情况下,仅启动一个MySQL实例。 但是可以轻松启动多个MySQL实例,WildFly Pod将继续使用MySQL Service引用所有实例。

检查MySQL服务的状态/ IP:

kubernetes> ./cluster/kubectl.sh get services
KUBE_MASTER_IP: 10.245.1.2
Running: ./cluster/../cluster/vagrant/../../_output/dockerized/bin/darwin/amd64/kubectl --auth-path=/Users/arungupta/.kubernetes_vagrant_auth get services
NAME                LABELS                                    SELECTOR            IP                  PORT
kubernetes          component=apiserver,provider=kubernetes   <none>              10.247.0.2          443
kubernetes-ro       component=apiserver,provider=kubernetes   <none>              10.247.0.1          80
mysql               name=mysql                                name=mysql          10.247.202.104      3306
skydns              k8s-app=skydns                            k8s-app=skydns      10.247.0.10         53

启动WildFly Kubernetes Pod

必须在MySQL服务启动后启动WildFly Pod。 这是因为用于在WildFly中创建JDBC资源的环境变量仅在服务启动并运行后才可用。 具体来说,JDBC资源创建为:

data-source add --name=mysqlDS --driver-name=mysql --jndi-name=java:jboss/datasources/ExampleMySQLDS --connection-url=jdbc:mysql://$MYSQL_SERVICE_HOST:$MYSQL_SERVICE_PORT/sample?useUnicode=true&characterEncoding=UTF-8 --user-name=mysql --password=mysql --use-ccm=false --max-pool-size=25 --blocking-timeout-wait-millis=5000 --enabled=true

$MYSQL_SERVICE_HOST$MYSQL_SERVICE_PORT环境变量由Kubernetes填充,如此处所述 。

这在github.com/arun-gupta/docker-images/blob/master/wildfly-mysql-javaee7/customization/execute.sh#L44中显示 。

启动WildFly pod:

kubernetes> ./cluster/kubectl.sh create -f ../kubernetes-java-sample/wildfly.json
KUBE_MASTER_IP: 10.245.1.2
Running: ./cluster/../cluster/vagrant/../../_output/dockerized/bin/darwin/amd64/kubectl --auth-path=/Users/arungupta/.kubernetes_vagrant_auth create -f ../kubernetes-java-sample/wildfly.json
wildfly

使用的配置文件位于github.com/arun-gupta/kubernetes-java-sample/blob/master/wildfly.json中 。

检查吊舱的状态:

KUBE_MASTER_IP: 10.245.1.2
Running: ./cluster/../cluster/vagrant/../../_output/dockerized/bin/darwin/amd64/kubectl --auth-path=/Users/arungupta/.kubernetes_vagrant_auth get pods
POD                 IP                  CONTAINER(S)        IMAGE(S)                                 HOST                    LABELS              STATUS
mysql               10.246.1.3          mysql               mysql:latest                             10.245.1.3/10.245.1.3   name=mysql          Running
wildfly             10.246.1.4          wildfly             arungupta/wildfly-mysql-javaee7:knetes   10.245.1.3/10.245.1.3   name=wildfly        Pending

等待,直到WildFly pod的状态更改为“正在运行”。 这可能需要几分钟的时间,因此可能是时候再抓紧另一个miler了!

容器启动并运行后,您可以检查WildFly容器中的/opt/jboss/wildfly/standalone/configuration/standalone.xml并验证连接URL确实包含正确的IP地址。 这是它在我的机器上的外观:

[jboss@wildfly ~]$ grep 3306 /opt/jboss/wildfly/standalone/configuration/standalone.xml <connection-url>jdbc:mysql://10.247.202.104:3306/sample?useUnicode=true&amp;characterEncoding=UTF-8</connection-url>

更新状态(在容器运行之后)如下所示:

kubernetes> ./cluster/kubectl.sh get pods
KUBE_MASTER_IP: 10.245.1.2
Running: ./cluster/../cluster/vagrant/../../_output/dockerized/bin/darwin/amd64/kubectl --auth-path=/Users/arungupta/.kubernetes_vagrant_auth get pods
POD                 IP                  CONTAINER(S)        IMAGE(S)                                 HOST                    LABELS              STATUS
mysql               10.246.1.3          mysql               mysql:latest                             10.245.1.3/10.245.1.3   name=mysql          Running
wildfly             10.246.1.4          wildfly             arungupta/wildfly-mysql-javaee7:knetes   10.245.1.3/10.245.1.3   name=wildfly        Running

访问Java EE 7应用程序

记下WildFly容器的HOST IP地址,并按以下方式访问应用程序:

curl http://10.245.1.3:8080/employees/resources/employees

看到的输出为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><collection><employee><id>1</id><name>Penny</name></employee><employee><id>2</id><name>Sheldon</name></employee><employee><id>3</id><name>Amy</name></employee><employee><id>4</id><name>Leonard</name></employee><employee><id>5</id><name>Bernadette</name></employee><employee><id>6</id><name>Raj</name></employee><employee><id>7</id><name>Howard</name></employee><employee><id>8</id><name>Priya</name></employee></collection>

或在浏览器中查看为:

techtip72-kubernetes-wildfly-输出

调试Kubernetes和Docker

登录到Minion-1 VM:

kubernetes> vagrant ssh minion-1
Last login: Tue Feb 10 23:20:13 2015 from 10.0.2.2

以root身份登录:

[vagrant@kubernetes-minion-1 ~]$ su -
Password: 
[root@kubernetes-minion-1 ~]#

Vagrant创建的VM映像的默认root密码为“ vagrant”。

在此VM上运行的Docker容器列表可以看成是:

[root@kubernetes-minion-1 ~]# docker ps
CONTAINER ID        IMAGE                                    COMMAND                CREATED             STATUS              PORTS                                            NAMES
7fc1fca102bf        arungupta/wildfly-mysql-javaee7:knetes   "/opt/jboss/wildfly/   28 minutes ago      Up 28 minutes                                                        k8s_wildfly.6c5f240e_wildfly.default.api_1230e74a-b178-11e4-8464-0800279696e1_509268aa                                  
4aa49c0ebb70        kubernetes/pause:go                      "/pause"               43 minutes ago      Up 43 minutes       0.0.0.0:8080->8080/tcp, 0.0.0.0:9090->9090/tcp   k8s_POD.bca60d1a_wildfly.default.api_1230e74a-b178-11e4-8464-0800279696e1_0bff6efa                                      
c36e99cd4557        mysql:latest                             "/entrypoint.sh mysq   47 minutes ago      Up 47 minutes                                                        k8s_mysql.278e3c40_mysql.default.api_f3d07101-b175-11e4-8464-0800279696e1_ddbcaf62                                      
ed4611b5c276        google/cadvisor:0.8.0                    "/usr/bin/cadvisor"    56 minutes ago      Up 56 minutes                                                        k8s_cadvisor.8d424740_cadvisor-agent.file-6bb810db-kubernetes-minion-1.file_80331227d28e618b4cef459507a31796_36d83f7d   
50a3428612f0        kubernetes/pause:go                      "/pause"               58 minutes ago      Up 58 minutes       0.0.0.0:3306->3306/tcp                           k8s_POD.c783ea16_mysql.default.api_f3d07101-b175-11e4-8464-0800279696e1_e46a8424                                        
11a95eeda794        kubernetes/pause:go                      "/pause"               59 minutes ago      Up 59 minutes       0.0.0.0:4194->8080/tcp                           k8s_POD.252debe0_cadvisor-agent.file-6bb810db-kubernetes-minion-1.file_80331227d28e618b4cef459507a31796_734d54eb

WildFly日志的最后10行(在访问了几次应用程序之后)可以看成是:

23:12:25,004 INFO  [stdout] (ServerService Thread Pool -- 50) Hibernate: INSERT INTO EMPLOYEE_SCHEMA(ID, NAME) VALUES (8, 'Priya')
23:12:27,928 INFO  [org.jboss.resteasy.spi.ResteasyDeployment] (MSC service thread 1-5) Deploying javax.ws.rs.core.Application: class org.javaee7.samples.employees.MyApplication
23:12:27,987 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-5) JBAS017534: Registered web context: /employees
23:12:28,073 INFO  [org.jboss.as.server] (ServerService Thread Pool -- 28) JBAS018559: Deployed "employees.war" (runtime-name : "employees.war")
23:12:28,203 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management
23:12:28,203 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990
23:12:28,204 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.2.0.Final "Tweek" started in 26772ms - Started 280 of 334 services (92 services are lazy, passive or on-demand)
23:23:16,091 INFO  [stdout] (default task-16) Hibernate: select employee0_.id as id1_0_, employee0_.name as name2_0_ from EMPLOYEE_SCHEMA employee0_
23:24:07,322 INFO  [stdout] (default task-17) Hibernate: select employee0_.id as id1_0_, employee0_.name as name2_0_ from EMPLOYEE_SCHEMA employee0_
23:35:07,030 INFO  [stdout] (default task-18) Hibernate: select employee0_.id as id1_0_, employee0_.name as name2_0_ from EMPLOYEE_SCHEMA employee0_

同样,MySQL日志被视为:

2015-02-10 22:52:55 1 [Note] Server hostname (bind-address): '*'; port: 3306
2015-02-10 22:52:55 1 [Note] IPv6 is available.
2015-02-10 22:52:55 1 [Note]   - '::' resolves to '::';
2015-02-10 22:52:55 1 [Note] Server socket created on IP: '::'.
2015-02-10 22:52:56 1 [Note] Event Scheduler: Loaded 0 events
2015-02-10 22:52:56 1 [Note] Execution of init_file '/tmp/mysql-first-time.sql' started.
2015-02-10 22:52:56 1 [Note] Execution of init_file '/tmp/mysql-first-time.sql' ended.
2015-02-10 22:52:56 1 [Note] mysqld: ready for connections.
Version: '5.6.23'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
2015-02-10 23:12:21 1 [Warning] IP address '10.246.1.1' could not be resolved: Name or service not known

请享用!

翻译自: https://www.javacodegeeks.com/2015/02/mysql-kubernetes-service-access-wildfly-pod.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

麒麟Linux启动目录,优麒麟目录结构介绍 系统入门必备

对于Linux爱好者来说&#xff0c;深入了解Linux文件目录结构的标准和每个目录的详细功能&#xff0c;对于我们用好Linux系统至关重要&#xff0c;下面就由小编给大家介绍下优麒麟系统的目录结构&#xff0c;PS: 同样适用于其他Linux发行版。查看系统的全部目录&#xff1a;* 在…

java课堂作业(一)

1、环境变量配置参见&#xff1a;http://www.cnblogs.com/dongwenbo/p/3282014.html window ---> preference ---> java ---> installed jres ---> add jres tomcat 配置&#xff1a;myeclipse ---> preferences ---> myeclipse enterprise workbench --->…

为什么我的JVM访问的内存少于通过-Xmx指定的内存?

“嘿&#xff0c;你能来看看奇怪的东西吗&#xff1f;” 这就是我开始研究一个支持案例的方式&#xff0c;该案例将我引向了这篇博客文章。 当前的特殊问题与不同的工具报告了有关可用内存的不同数字有关。 简而言之&#xff0c;一位工程师正在研究特定应用程序的过多内存使用…

linux怎么安装高德导航软件,高德地图车机版如何安装?高德地图车机版安装教程...

高德地图车机版是高德为汽车车载机提供的一个专用版本&#xff0c;对于车主们来说有时候用手机导航实在是非常不方便&#xff0c;不仅屏幕小而且还可能中途来个电话什么的。高德地图车机版可以帮你的车载机装上导航地图&#xff0c;就算你不想买导航设备也能让你的车子为你导航…

Dropwizard,MongoDB和Gradle实验

介绍 我使用Dropwizard&#xff0c;MongoDB和Gradle创建了一个小项目。 它实际上是从一个实验性的Guava缓存开始的&#xff0c;作为将计数器发送到MongoDB&#xff08;或任何其他DB&#xff09;的缓冲区。 我也想尝试MondleDB插件的Gradle。 接下来&#xff0c;我想创建某种接口…

在wp中,使用NavigationService.Navigate导航页面出现错误

我们在WP项目中采用页面导航时候&#xff0c;经常会使用以下代码 NavigationService.Navigate(new Uri("/Page1.xaml",UriKind.Relative));但是&#xff0c;有的时候会出现错误&#xff1a; "Error 1 An object reference is required for the non-static field…

SSDT – Error SQL70001 This statement is not recognized in this context-摘自网络

March 28, 2013 — arcanecode One of the most common errors I get asked about when using SQL Server Data Tools (SSDT) Database Projects is the error “This statement is not recognized in this context”. This is actually a pretty simple error to fix. Envisi…

带有JAX-RS和PrimeFaces的RESTful图表

通常&#xff0c;利用图表提供数据的可视表示很有用。 PrimeFaces提供制图解决方案&#xff0c;可轻松将数据的可视表示形式添加到Web和移动应用程序中。 如果将PrimeFaces图表组件与RESTful Web服务数据结合使用&#xff0c;我们可以创建自定义图表&#xff0c;以适合桌面和移…

UVAlive 6131 dp+斜率优化

这道题和06年论文《从一类单调性问题看算法的优化》第一道例题很相似。 题意&#xff1a;给出n个矿的重量和位置&#xff0c;这些矿石只能从上往下运送&#xff0c;现在要在这些地方建造m个heap&#xff0c;要使得&#xff0c;sigma距离*重量最小。 思路&#xff1a;O(n ^ 3)的…

c语言程序整数四则运算,c语言中三个整数随机的四则运算

满意答案hors10722014.01.06采纳率&#xff1a;58% 等级&#xff1a;12已帮助&#xff1a;18274人#include #include #include #define N 10 //随机出10道题目int main(){int num1, num2, num3, count0, result,resultTrue,flag;//result:用户输入结果 resultTrue:正确结果 …

带有调试器的Apache Camel Eclipse工具

大约2个月前&#xff0c; Lars Heineman在 JBoss工具堆栈中的博客中介绍了改进的Apache Camel Eclipse工具。 在即将发布的版本中&#xff0c;他们将Camel调试器与本机Eclipse调试器集成在一起&#xff0c;因此当您使用断点时&#xff0c;您将获得Eclipse调试体验&#xff0c;…

HarmonyOS的功能及场景应用

一、基本介绍 鸿蒙HarmonyOS主要应用的设备包括智慧屏、平板、手表、智能音箱、IoT设备等。具体来说&#xff0c;鸿蒙系统是一款面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统&#xff0c;能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备…

SX-BOX试用笔记

1.今天开始试用SX-BOX&#xff0c;我将用它来做自己平时的开发和文档的工作&#xff0c;因为我的职责是一个程序员。 1.屏幕如果支持更大的也清晰的话&#xff0c;我会感觉很舒服。 2.USB设备插入还无法识别。。。 3.现在开始安装开发工具&#xff0c;目前我打算在上面安装Adob…

c语言成绩转换绩点,如何将平时成绩转化为GPA成绩?

新东方留学生资料下载姓名手机号短信验证码图片验证码年级请选择5年级6年级7年级8年级9年级高一高二高三高三复习大一大二大三大四大五研一研二研三博一博二在职课程请选择雅思托福GREGMATSAT其他行政区请选择请选择请选择{"name":{"label":"姓名&quo…

Hibernate查询缓存如何工作

介绍 既然我已经介绍了实体和集合缓存&#xff0c;现在该研究查询缓存的工作原理了。 查询缓存与实体严格相关&#xff0c;它在搜索条件和满足该特定查询过滤器的实体之间绘制关联。 像其他Hibernate功能一样&#xff0c;查询缓存也不像人们想象的那么琐碎。 实体模型 对于我…

Javascript学习笔记1 数论

1.Javascript不用担心内存的回收与对象的销毁&#xff01; 2.Javascript有&#xff1a;infinity、NaN全局变量表示 被0整除的无穷 和 非数字。undefined和null表示 未定义 和 空&#xff0c;undefined和null可以互换&#xff0c;判别二者需用 全等 号&#xff08;不光判断值&…

JavaFX技巧20:有很多需要展示的地方吗? 使用画布!

JavaFX应用程序似乎有两种&#xff1a;第一种使用带有节点和CSS样式的场景图&#xff0c;第二种使用单个画布。 但是&#xff0c;将这两种方法混合使用是完全合法的。 尤其是当您的应用程序必须显示大量详细信息时&#xff0c;您很容易最终创建成千上万个节点。 即使JavaFX的整…

VirtualBox命令更改虚拟硬盘空间

主要是使用VBoxManage命令来操作第一步&#xff1a;打开CMD&#xff0c;进入到virtualbox存放虚拟机的目录中(win7 系统可以直接在文件夹空白处按住shift键右键鼠标选择[在此处打开命令窗口])&#xff0c;输入[vboxmanage list hdds]可以查看所有的虚拟机的信息&#xff0c;这里…

华为手机老是android自动升级,华为手机系统怎么升级 华为手机升级系统的两种方法...

华为手机使用的均为安卓系统&#xff0c;升级方法有多种&#xff0c;各位可以根据条件不同自行选择升级。华为手机升级系统的两种方法方法一&#xff1a;手机联网更新首先把手机联网。点击设置。向下拖动点击最后一项“关于手机”点击“系统软件更新”。点击在线升级即可。友情…

linux网络体系架构

原创kylin_zeng:http://blog.csdn.net/kylin_fire_zeng 本文参考国嵌视频教程&#xff0c;再此感谢国嵌教育。 一、协议栈层次对比&#xff1a; 1&#xff09;网络接口层把数据链路层和物理层合并在了一起&#xff0c;提供访问物理设备的驱动程序&#xff0c;对应的网络协议主…