MySQL作为Kubernetes服务,可从WildFly Pod访问
Kubernetes上使用Vagrant的Java EE 7和WildFly(技術(shù)提示#71)介紹了如何在使用Kubernetes和Docker托管的WildFly上運(yùn)行瑣碎的Java EE 7應(yīng)用程序。 Java EE 7應(yīng)用程序是在世界范圍內(nèi)交付的動(dòng)手實(shí)驗(yàn)室 。 它使用與WildFly捆綁在一起的內(nèi)存數(shù)據(jù)庫,并允許了解Kubernetes的關(guān)鍵構(gòu)建塊。 這是使您開始進(jìn)行初始開發(fā)工作的好方法,但是當(dāng)應(yīng)用程序服務(wù)器宕機(jī)時(shí)數(shù)據(jù)庫丟失時(shí),這很快就會(huì)成為瓶頸。 該技術(shù)提示將展示如何運(yùn)行另一個(gè)普通的Java EE 7應(yīng)用程序,以及如何使用MySQL作為數(shù)據(jù)庫服務(wù)器。 它將使用Kubernetes Services解釋如何輕松地將MySQL和WildFly分離。
讓我們開始吧!
確保使用Kubernetes中使用Vagrant進(jìn)行的 Kubernetes設(shè)置有效 。
可以在github.com/arun-gupta/kubernetes-java-sample上找到此博客中使用的完整源代碼。
啟動(dòng)MySQL Kubernetes pod
第一步是啟動(dòng)MySQL pod。 這可以通過使用MySQL Kubernetes配置文件啟動(dòng):
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的狀態(tài):
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等待狀態(tài)更改為“正在運(yùn)行”。 它看起來像:
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 RunningMySQL服務(wù)器需要幾分鐘的時(shí)間才能進(jìn)入該狀態(tài),因此請(qǐng)喝杯咖啡或一小杯速食!
啟動(dòng)MySQL Kubernetes服務(wù)
Pod和分配給它們的IP地址都是短暫的。 如果某個(gè)Pod死了,那么Kubernetes會(huì)由于其自愈功能而重新創(chuàng)建該P(yáng)od,但是它可能會(huì)在其他主機(jī)上重新創(chuàng)建它。 即使它在同一主機(jī)上,也可以為其分配不同的IP地址。 因此,任何應(yīng)用程序都不能依賴容器的IP地址。
Kubernetes 服務(wù)是一種抽象,定義了一組邏輯上的Pod。 一個(gè)服務(wù)通常由一個(gè)或多個(gè)物理Pod(使用標(biāo)簽關(guān)聯(lián))后端,并且它具有一個(gè)永久IP地址,該IP地址可以被其他Pod /應(yīng)用程序使用。 例如,WildFly容器不能直接連接到MySQL容器,但是可以連接到MySQL服務(wù)。 本質(zhì)上,Kubernetes服務(wù)為客戶端提供了一個(gè)IP和端口對(duì),該IP和端口對(duì)在被訪問時(shí)會(huì)重定向到適當(dāng)?shù)暮蠖恕?
讓我們啟動(dòng)MySQL服務(wù)。
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 。 在這種情況下,僅啟動(dòng)一個(gè)MySQL實(shí)例。 但是可以輕松啟動(dòng)多個(gè)MySQL實(shí)例,WildFly Pod將繼續(xù)使用MySQL Service引用所有實(shí)例。
檢查MySQL服務(wù)的狀態(tài)/ 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啟動(dòng)WildFly Kubernetes Pod
必須在MySQL服務(wù)啟動(dòng)后啟動(dòng)WildFly Pod。 這是因?yàn)橛糜谠赪ildFly中創(chuàng)建JDBC資源的環(huán)境變量僅在服務(wù)啟動(dòng)并運(yùn)行后才可用。 具體來說,JDBC資源創(chuàng)建為:
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環(huán)境變量由Kubernetes填充,如此處所述 。
這在github.com/arun-gupta/docker-images/blob/master/wildfly-mysql-javaee7/customization/execute.sh#L44中顯示 。
啟動(dòng)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中 。
檢查吊艙的狀態(tài):
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的狀態(tài)更改為“正在運(yùn)行”。 這可能需要幾分鐘的時(shí)間,因此可能是時(shí)候再抓緊另一個(gè)miler了!
容器啟動(dòng)并運(yùn)行后,您可以檢查WildFly容器中的/opt/jboss/wildfly/standalone/configuration/standalone.xml并驗(yàn)證連接URL確實(shí)包含正確的IP地址。 這是它在我的機(jī)器上的外觀:
[jboss@wildfly ~]$ grep 3306 /opt/jboss/wildfly/standalone/configuration/standalone.xml <connection-url>jdbc:mysql://10.247.202.104:3306/sample?useUnicode=true&characterEncoding=UTF-8</connection-url>更新狀態(tài)(在容器運(yùn)行之后)如下所示:
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應(yīng)用程序
記下WildFly容器的HOST IP地址,并按以下方式訪問應(yīng)用程序:
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>或在瀏覽器中查看為:
調(diào)試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創(chuàng)建的VM映像的默認(rèn)root密碼為“ vagrant”。
在此VM上運(yùn)行的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_734d54ebWildFly日志的最后10行(在訪問了幾次應(yīng)用程序之后)可以看成是:
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請(qǐng)享用!
翻譯自: https://www.javacodegeeks.com/2015/02/mysql-kubernetes-service-access-wildfly-pod.html
總結(jié)
以上是生活随笔為你收集整理的MySQL作为Kubernetes服务,可从WildFly Pod访问的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓系统文件删除怎么恢复(安卓系统文件删
- 下一篇: DDoS流量攻击(ddos流量攻击方法)