配置Kubenetes实现Hello World

介绍

本文主要介绍如何搭建一个Mysqkl+Java Web留言板项目,JSP页面通过JDBC直接访问Mysql数据库并展示数据。为了演示和简化的目的,只要程序正确连接到了数据库上,它就会自动完成对应Table的创建和初始化数据的准备工作。

此应用需要启动两个容器:Web APP容器和MySQL容器,并且WebApp容器需要访问MySQL容器。

配置Kubenetes实现Hello World

启动MySQL服务器

首先为MySQL服务创建一个RC定义文件:,下面给出了改文件的完成内容和解释:

apiVersion: v1

kind: ReplicationController # 副本控制器RC

metadata:

name: mysql # RC的名称,全局唯一

spec:

replicas: 1 # Pod副本数量

selector:

app: mysql # 符合目标的Pod拥有此标签

template:

metadata:

labels:

app: mysql # Pod副本用户的标签,对应RC的Selector

spec:

containers: # Pod内容器的定义部分

- name: mysql # 容器名称

image: mysql:5.6 # 容器对应的docker image

ports:

- containerPort: 3306 # 容器暴露的端口号

env:

- name: MYSQL_ROOT_PASSWORD # mysql容器默认密码设置

value: "123456"

执行该文件:

kubectl create -f mysql-rc.yaml

接下来,我们用kubectl命令查看刚刚创建的RC:

[root@bigman-m2 config]# kubectl get rc

NAME DESIRED CURRENT READY AGE

mysql 1 1 1 20m

查看Pod的创建情况时,可以运行下面的命令:

[root@bigman-m2 config]# kubectl get pods

NAME READY STATUS RESTARTS AGE

mysql-xxp56 1/1 Running 0 20m

我们通过docker ps|grep mysql指令查看正在运行的容器,发现提供MySQL服务的Pod容器已经创建并正常运行了,除此之外还多创建了一个来自谷歌的pause容器,这就是Pod的根容器:

[root@bigman-s3 ~]# docker ps|grep mysql

3a07bce96aab mysql "docker-entrypoint.s…" 23 minutes ago Up 23 minutes k8s_mysql_mysql-xxp56_default_a03ab81d-0f34-11e9-8c52-1866da8c1dba_0

06f009f3886a k8s.gcr.io/pause:3.1 "/pause" 24 minutes ago Up 24 minutes k8s_POD_mysql-xxp56_default_a03ab81d-0f34-11e9-8c52-1866da8c1dba_0

后面我们创建一个与之关联的Kubernetes Service-Mysql的定义文件mysql-svc.yaml:

apiVersion: v1

kind: Service # 表名是Kubernetes Service

metadata:

name: mysql # Service的全局唯一名称

spec:

ports:

- port: 3306 # Service提供服务的端口号

selector: # Pod副本实例名称

app: mysql

执行该文件:

kubectl create -f mysql-svc.yaml

运行kubectl命令,查看刚刚创建的service

[root@bigman-m2 config]# kubectl get svc

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23h

mysql ClusterIP 10.107.100.143 <none> 3306/TCP 29m

注意到Mysql服务被分配了一个值为10.107.100.143的Cluster-ip,这是一个虚拟地址,随后,Kubernetes集群中其他新创建的Pod就可以通过Service的Cluster IP+端口号3306来连接和访问它了。这些信息kubernetes巧妙地利用了Linux环境变量来进行存储。

启动Tomcat应用

上面我们定义和启动了MySQL服务,接下来我们采用同样的步骤,完成Tomcat应用的启动过程。首先,创建对应的RC文件myweb-rc.yaml,内容如下:

apiVersion: v1

kind: ReplicationController

metadata:

name: myweb

spec:

replicas: 5 # 5个副本,负载均衡

selector:

app: myweb

template:

metadata:

labels:

app: myweb

spec:

containers:

- name: myweb

image: kubeguide/tomcat-app:v1

ports:

- containerPort: 8080

env:

- name: MYSQL_SERVICE_HOST # 定义环境变量,代码中才能获取到值

value: 'mysql'

- name: MYSQL_SERVICE_PORT # 定义环境变量,代码中才能获取到值

value: '3306'

有人肯定会疑惑,这里只配置了主机名和端口,并没有配置账号密码,tomcat能启动成功吗?原因是在于这个tomcat-app容器代码中默认写死了账号密码(root/123456)。

执行该文件:

kubectl create -f myweb-rc.yaml

查看创建好的Pod:

[root@bigman-m2 config]# kubectl get pods

NAME READY STATUS RESTARTS AGE

mysql-xxp56 1/1 Running 0 38m

myweb-ds8nv 1/1 Running 0 82m

myweb-jdtdw 1/1 Running 0 82m

myweb-rjbm9 1/1 Running 0 82m

myweb-tg6zc 1/1 Running 0 49m

myweb-v7fwf 1/1 Running 0 82m

最后创建对应的service,下面是文件内容和说明,myweb-svc.yaml:

apiVersion: v1

kind: Service

metadata:

name: myweb

spec:

type: NodePort # 表示此Service开启了NodePort方式的外网访问模式

ports:

- port: 8080 # Service提供服务的端口号

nodePort: 30002 # 外网访问端口

selector:

app: myweb # Pod副本实例名称

执行该文件:

kubectl create -f myweb-svc.yaml

查看刚才创建的Service:

[root@bigman-m2 config]# kubectl get svc

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23h

mysql ClusterIP 10.107.100.143 <none> 3306/TCP 43m

myweb NodePort 10.106.119.48 <none> 8080:30002/TCP 83m

通过浏览器访问页面

访问地址是master节点的30002端口,如http://10.242.10.22:30002/demo/index.jsp

配置Kubenetes实现Hello World

dashboard界面查看

配置Kubenetes实现Hello World

相关操作

命令行登录容器

显示Pods:

[root@bigman-m2 config]# kubectl get pods

NAME READY STATUS RESTARTS AGE

mysql-xxp56 1/1 Running 0 46m

myweb-ds8nv 1/1 Running 0 90m

myweb-jdtdw 1/1 Running 0 90m

myweb-rjbm9 1/1 Running 0 90m

myweb-tg6zc 1/1 Running 0 57m

myweb-v7fwf 1/1 Running 0 90m

比如,进入mysql容器:

[root@bigman-m2 config]# kubectl exec -ti mysql-xxp56 -c mysql /bin/bash

root@mysql-xxp56:/# date

Thu Jan 3 09:38:26 UTC 2019


分享到:


相關文章: