听云线上使用k8s已经有一段时间了,下面对一些听云使用过程中的问题进行一些梳理,包括架构设计,安装部署和后期维护。 目录结构如下:
下面进入正题:
我们以听云系统的一个报表系统为例来详细进行说明:
1.系统架构
该应用属于Java Web报表类应用,部署在Ucloud云上。系统架构如下:
这是典型web应用的系统架构,在听云内部大部分应用都是此形式,对于并发量不高的业务均可参考此文档。
基本规范:
1.configmap用来管理配置文件
2.deployment用来编排应用,进行升级回滚等
3.pv用于共享存储,后端为glustefsr和nfs
4.daemonset 用于变更不频繁,一台机器一个docker的应用
5.nginx+ingress来做前端负载均衡和自动发现
6.对并发要求很高的应用可以尝试用host模式,不用service做负载均衡
2.部署说明
参考架构图,我们需要nginx-ingress-controller 和 应用的Docker。下面分别进行详细说明。
2.1 准备基础Docker镜像
听云先进行应用的部署,规范是每个项目一个Docker镜像,版本号为jenkins构建的版本号。
为了规范日后上线。我们需要按层次构建镜像,方便日后使用。
构建基础镜像
由于听云的项目中绝大大部分为Java项目,为了精简Docke镜像大小,基础镜像我们没有采用Centos或者Ubuntu,而是采用了alpine,该镜像只有4MB。
Dockerfile内容如下:
FROM registry.tingyun.com/docker.io/alpine
MAINTAINER netop "netop@tingyun.com"
ENV REFRESHED_AT 2016-03-18
RUN apk add --no-cache --update-cache bash
ENV GLIBC_PKG_VERSION=2.23-r1
RUN apk add --no-cache --update-cache curl ca-certificates bash && \
curl -Lo /etc/apk/keys/andyshinn.rsa.pub "https://github.com/andyshinn/alpine-pkg-glibc/releases/download/${GLIBC_PKG_VERSION}/andyshinn.rsa.pub" && \
curl -Lo glibc-${GLIBC_PKG_VERSION}.apk "https://github.com/andyshinn/alpine-pkg-glibc/releases/download/${GLIBC_PKG_VERSION}/glibc-${GLIBC_PKG_VERSION}.apk" && \
curl -Lo glibc-bin-${GLIBC_PKG_VERSION}.apk "https://github.com/andyshinn/alpine-pkg-glibc/releases/download/${GLIBC_PKG_VERSION}/glibc-bin-${GLIBC_PKG_VERSION}.apk" && \
curl -Lo glibc-i18n-${GLIBC_PKG_VERSION}.apk "https://github.com/andyshinn/alpine-pkg-glibc/releases/download/${GLIBC_PKG_VERSION}/glibc-i18n-${GLIBC_PKG_VERSION}.apk" && \
apk add glibc-${GLIBC_PKG_VERSION}.apk glibc-bin-${GLIBC_PKG_VERSION}.apk glibc-i18n-${GLIBC_PKG_VERSION}.apk
add Shanghai /etc/localtime
ENV LANG en_US.UTF-8
构建镜像
docker build -t registry.tingyun.com/common/alpine .
push 到仓库中
docker push registry.tingyun.com/common/alpine
构建JDK镜像
Dockerfile内容如下:
FROM registry.tingyun.com/common/alpine
MAINTAINER netop "netop@tingyun.com"
ENV REFRESHED_AT 2016-03-14
ADD jdk1.7.0_45.tar.gz /opt
ENV LANG en_US.UTF-8
ENV JAVA