##JAVA应用容器化指南 ###1、java应用镜像构建 java应用镜像启动的容器需开机自启应用服务,应用服务开启自启常规的做法是使用进程管理工具supervisor对应用的进程进行管理。 依据应用生产环境运行的操作系统来选取应用基础镜像的操作系统,保证兼容性。 以融合平台应用为例 应用的基础镜像为安装了supervisor的centos69系统。 具体容器化过程参考文档《matrixgate镜像制作》。
###2、oracle数据库镜像构建
##kubernetes编排应用 应用的运行常用的配置有网络端口,持久化卷,健康检查,环境变量,外挂配置文件等。在编写应用的kubernetes编排文件时,根据以下步骤考虑。 1)、一个独立模块的应用可以初始由一个kubernetes的deployment文件和service文件表示;例如,一个tomcat应用、oracle数据库应用可以由一个deployment文件和service文件表示。 2)、网络端口,健康检查,环境变量可以在deployment文件和service文件中进行配置。 3)、配置持久化卷需要增添kubernetes的volume文件。 4)、配置外挂配置文件需要增添kubernetes的configmap文件。 5)、配置密钥文件需要增添kubernetes的secret文件。
##helm运行应用
helm提供一种灵活的方式创建与运行kubernetes应用,将kubernetes的yaml文件转换为helm的chart包,按照以下步骤考虑。
1)、每一个yaml文件在helm的chart包的template目录下生成一个对应的yaml模板文件。
2)、在chart包的template目录下对yaml模板文件进行修改,yaml模板文件中的name取值增加应用运行时的随机名字,例如configmap的yaml文件中name取值为configmap,修改后为
{{ .Release.Name }}-configmap
。
3)、在chart包的template目录下对yaml模板文件中需要动态设置的取值,可以在chart包的values.yaml文件中定义,在yaml模板文件中使用。
例如,values.yaml定义变量
favorite:
drink: coffee
food: pizza
yaml模板文件中使用变量
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
{{- range $key, $val := .Values.favorite }}
{{ $key }}: {{ $val | quote }}
{{- end}}
模板文件中定义了$key和$val两个变量,并且赋值。渲染后
apiVersion: v1
kind: ConfigMap
metadata:
name: eager-rabbit-configmap
data:
myvalue: "Hello World"
drink: "coffee"
food: "pizza"
4)、在template目录下,一个yaml模板文件定位另一个yaml模板文件可以直接用yaml模板文件的name取值,例如,deployment模板文件需要定位使用configmap模板文件。可以在deployment模板文件的configmap设置为configmap模板文件修改后的name取值,比如{{ .Release.Name }}-configmap
。
对于chart模板文件的简单语法使用请参考文档《chart模板文件简单语法使用》或者helm官方文档
##网络模型与持久化存储 ###1、k8s通用网络模型 以两个应用master和worker为例说明,master和worker之间相互通信。 网络模型如下
master pod IP: master容器里的IP地址。 master service name/IP: master的服务名称和服务IP,kubernetes中为保证pod的高可用,当检测到pod失败会重新生产一个pod,该pod的IP会发生改变,但是service IP和name不变,kubernetes中应用使用service name进行交互。 iptables: service IP通过iptables规则把流量转发给pod IP。 DSN:kubernetes中service name与service IP都是通过内置的DNS服务进行解析的。 worker IP: worker容器里的IP地址。 worker service name/IP: worker的服务名称和服务IP。 ###2、k8s持久化存储 ####hostpath存储 hostpath存储能够包运行kubernetes的节点的目录挂载到容器里,容器只能运行在挂载目录所在的节点上。 优点是相对共享存储能得到很大的存储性能提升。 缺点是容器不能实现漂移,一旦节点出现故障,容器无法在其他节点提供服务。 安装与使用参考文档《k8s-hostpath存储使用》。 ####共享存储 共享存储可以在kubernetes的节点上搭建,也可以单独选择一批服务器搭建。kubernetes支持多种共享存储,nfs,ceph,portworx等。共享存储支持容器高可用,在性能上要低于容器使用节点本地存储。 ceph存储的使用参考文档《k8s使用ceph rbd》。 portworx存储的安装和使用参考文档《kubernetes结合portworx》。