总结:简介我们回顾一下上一篇文章中平台的微服务架构,一共搭建了三个镜像数据库,并部署了前端页面和接口。 近日,阿里云产品在春节期间开售。 我别无选择,只能购买另一台服务器。 打折后还是贵。 这是一个非常稳定且可移植的网络文件系统。
介绍
上一篇文章《Bees 平台的微服务架构(一)docker 和 docker-compose》的 Dockerfile Build 3 我们来回顾一下。 docker image:mysql数据库,部署Angular前端页面的nginx,以及springboot接口。 接下来使用docker-compose来协调容器服务,使不同的容器可以互相访问。 我们还创建了自动部署脚本来提高开发效率。 实际上,您需要做的就是通过 docker-compose.yml 启动和关闭容器,并在本地镜像库中生成或删除镜像。
docker-compose 不可否认,服务编排的小灵活性令人钦佩,但为什么今天转向 k8s(kubernetes)呢? K8S 提供了更强大的编排能力,因为 k8s 允许你构建跨主机分布式集群,因为带有 Rancher 的 k8s 可以帮助您管理集成的微服务架构等等。
准备K8s
本文不涉及安装和配置k8s和rancher。 网上有很多相关的安装和配置文档。 近日,阿里云产品在春节期间开售。 我别无选择,只能购买另一台服务器。 即使打折后还是很贵。 心情不好,不过我现在有两台服务器,已经搭建了k8s集群环境。
镜像仓库
分布式集群增加了复杂性。 不能直接使用本地镜像库地址。 我不想建镜像仓库。 幸运的是,阿里巴巴的 Docker 镜像仓库是免费的,因此您将 Docker 镜像的最终版本推送到阿里巴巴的容器仓库。 如果需要启动容器,请将容器地址写入后面出现的阿里巴巴容器仓库中。
>主机安装卷
另一个分发问题是主机安装卷。 如果上一篇文章给您留下了深刻的印象,请记住 mysql 数据库和 nginx 代理数据文件。 所有图像文件等都安装在主机上。 由于Docker容器的特性,如果不使用挂载的卷,容器重启后容器中的数据将会丢失。 在分布式环境中,不同的主机不能访问彼此的目录。 我在自己的机器上搭建了一个nfs服务器,并在单机上打开了一个目录作为共享目录。 下面介绍具体细节。
服务相互访问
不同的服务必然需要相互访问。 比如springboot需要访问数据库和Redis,angualr需要调用springboot接口。 另外,考虑到k8s往往需要多节点集群来提供某些服务,因此注册中心暴露给外部访问的地址应该是集群的地址。
如何使用 docker-compose 执行此操作?在 docker-compose.yml 中定义多个服务。 每个服务对应一个图像。 启动容器后,可以使用对应容器的服务名作为主机名。
k8s 也有类似的用法。 它使用yaml文件,并且有很多种类型。 例如:Pod表示启动的服务是一个pod。 ReplicationController 根据 Pod 模板生成批量的 Pod 作为集群。 Service 相当于注册一个服务,可以为对应的pod副本集群提供访问地址。 还有很多其他的。 这个问题可以通过服务来解决。 为各种服务创建Services,并通过服务名来访问对应服务的Pod复制集群,类似于docker-compose。
其他
由于业务需要,在前三个镜像的基础上又添加了一个Redis镜像。 这样的话,搭建分布式redis或者分布式mysql环境就变得麻烦了。 如果以后有机会写文章介绍一下,我就先到此为止了。将 mysql 和 redis 移至单个节点上。
nfs共享目录
NFS代表网络文件系统。 NFS 是 FreeBSD 支持的文件系统之一。 NFS 基于远程过程调用 (RPC) 实现,它允许系统与网络上的其他用户共享目录和文件。 NFS 允许用户和程序访问远程系统上的文件,就像访问本地文件一样。 NFS 是一个非常稳定且可移植的网络文件系统。
选择nfs的另一个原因是可以直接使用nfs服务作为k8s上的存储卷,非常方便。
安装
nfs是基于rpc的。 要安装nfs,需要确保安装了rpcbind,CentOS通常默认安装了rpcbind。
##检查是否安装了nfs和rpcbind [mpaas@kerry1 k8s]$ rpm -qa | grep nfs[mpaas@kerry1 k8s]$ rpm -qa | grep rpcbind##如果没有已安装, yum [mpaas@kerry1 k8s]$ yum -y install nfs-utils[mpaas@kerry1 k8s]$ yum -y install rpcbind
安装完成后,需要先启动rpcbind服务,然后启动nfs服务。
[mpaas@kerry1 k8s]$ systemctl start rpcbind[mpaas@kerry1 k8s]$ systemctl start nfs[k4 ]server
启动设置
[mpaas @ kerry1 k8s]$ systemctl 启用 rpcbind[mpaas@kerry1 k8s]$ systemctl 启用nfs-server
配置
修改/etc/exports文件配置nfs共享目录
/home/nfs /bees/ mysql /data *(rw,no_root_squash,no_all_squash,sync)
同上,使用/home/nfs/bees/mysql/data作为共享目录
星号*表示它可以在任何服务器上使用,您还可以指定特定的IP和端口访问权限来访问共享目录。
参数设置在括号内。 常用参数为:
rw ro 共享此目录的权限为:擦写(read-write)或只读(read-only),但最终是否可读或不是,写入的内容仍然与 rwx 和文件系统的标识相关。 同步 异步 同步是指数据同时写入内存和硬盘。 异步是指数据首先暂时存储在内存中,而不是直接写入硬盘。 no_root_squash root_squash 如果客户端使用NFS文件系统的帐号是root,系统如何判断该帐号的身份? 默认情况下,客户端 root 的身份通过 root_squash 设置压缩为 nfsnobody,从而使服务器系统更加安全。 但是,如果您希望客户端能够使用 root 身份来操作服务器的文件系统,则必须在此处打开 no_root_squash。 all_squash 无论登录 NFS 的用户身份如何,该用户的身份都会被压缩为匿名用户(通常为Nobody (nfsnobody))。 anonuid anongid anon 的意思是匿名。 上面提到的*_squash的匿名用户UID设置值通常是nobody(nfsnobody),但可以自定义设置此 UID 值是安全的。 当然,这个UID必须存在于/etc/passwd中。 anonuid 指 UID,anongid 指组的 GID。
编辑 /etc/exports 文件后,运行以下命令启用它:
[mpaas@kerry1 k8s]$ exportfs -r
在服务器端,通过以下命令检查目录是否共享成功:can。
[mpaas@kerry1 k8s]$ showmount -e localhost 导出localhost列表:/home/nfs/bees/mysql /data *
另外一台机器也可以运行在 上安装 nfs 后执行上述命令。 只需将 localhost 替换为目标服务器的 IP 地址即可。
nginx服务
首先,启动nginx并部署angualr。 您需要创建一个RC并根据模板创建Pod。 此时仅创建一个 pod。 如果以后需要扩建,可以找牧场主管理。
创建 bees_angular_rc.yaml 并为 pod 打开端口 80
apiVersion: v1kind: ReplicationControllermetadata: name: bees-angularspec:replica: 1 选择器: app: bees -角度模板:元数据:标签:应用程序:bees-角度规范:容器:-名称:bees-角度图像:registry.cn-hangzhou.aliyuncs.com/kerry2019/bees-nginx:v1.0 ports: -containerPort: 80
创建bees_angualr_svc.yaml,设置nodePort,将pod上的80端口映射到主机上的30000端口 p>
apiVersion : v1kind: Servicemetadata: name: bees-angularspec: type: NodePort ports: - port: 80 nodePort: 30000 选择器: app: bees-angular
下一步,运行以下命令: 创建rc并添加服务也会运行相应的pod。
##启动 rc[mpaas@kerry1 k8s]$ kubectl create -f bees-angular-rc.yaml # #启动服务[ mpaas@kerry1 k8s]$ kubectl create [k4 ]f bees-angular-svc.yaml ##检查 pod 是否启动成功 [mpaas@kerry1 k8s]$ kubectl get pods
mysql 服务bees_mysql_rc.在pod上打开3306端口,将nfs服务器上的共享目录/home/nfs/bees/mysql/data挂载到容器中。
apiVersion:v1kind:ReplicationControllermetadata:名称:bees-mysqlspec:副本:1 选择器:app:bees-mysql 模板:元数据:标签:应用程序:bees-mysql 规格:容器:- 名称:bees-mysql 图片:registry.cn-hangzhou.aliyuncs.com/kerry2019/bees-mysql:v1.0 端口:[k4 ] 容器端口:3306 环境:- 名称:MYSQL_ROOT_PASSWORD 值:数据库密码 volumeMounts:- 名称:mysql-data-persistent- 存储挂载路径:/var/lib/mysql 卷:- ] 名称:mysql-data-persistent-storage nfs:路径:/home/nfs/bees/mysql/data 服务器:nfs服务器ip
创建bees_mysql_svc.yaml
apiVersion: v1kind: Servicemetadata: name: bees-mysqlspec: type: NodePort ports: - port: 3306 nodePort: 30003 选择器: app: bees-mysql
springboot service
bees_springboot_rc.yaml
类型:ReplicationController 元数据:名称:bees-springbootspec:副本:1 选择器:应用程序:bees-springboot 模板:元数据:标签:应用程序:bees-springboot 规范:容器:- 名称:bees-springboot 镜像:registry.cn-aliyuncs。 .com/kerry2019/bees-springboot:v1.0 端口:-containerPort: 8010
bees_springboot_svc.yaml
apiVersion: v1kind: Servicemetadata: name: bees[ k4 ]springbootspec: type: NodePort ports: - port: 8010 nodePort: 30004 selector: app: bees-springboot
这些都是基本的代码用法,这里就不赘述了。 。
自动打包推送镜像到仓库的脚本
#!/bin/bashcho "nginx版本:"$1echo "springboot版本:"$2v_springboot_jar=` find /bees/devops /upload / -name "*.jar"`echo "查找 jar:"$v_springboot_jarv_angular_zip=`find /bees/devops/upload/ -name "dist.zip"`echo "dist 搜索:" $v_angular_zipdocker rmi [k4 ]f $(docker images|grep "paperbee-nginx" | awk "{print $3}")docker rmi -f $(docker Images|grep "paperbee-springboot" | awk "{print $3}")echo "删除原始镜像“cd /bees/devops/dockerfiles/ springboot-k8s/rm -f *.jarcp $v_springboot_jar ./bees-0.0.1-SNAPSHOT.jardocker build -tpaperbee- springboot .echo "生成 springboot 镜像" cd / bees/devops/dockerfiles/angular-k8s/rm -rf dist/cp $v_angular_zip ./dist.zipunzip dist.ziprm -f dist.zipdocker build [ k4 ]t Paperbee-nginx .echo " 生成 Angular 镜像" docker login --username=account--password=passwordregistry.cn-hangzhou.aliyuncs.comecho " 登录Docker容器仓库"v_nginx_image=$(docker image |grep "paperbee-nginx" | awk "{print $3}")v_springboot_image=$(docker image|grep "paperbee-springboot" | awk " {print $3} ") docker 标签 $v_nginx_imageregistry.cn-ngzhou.aliyuncs.com/kerry2019/bees-nginx:$1docker 推送registry.cn-hangzhou.aliyuncs.com/kerry2019/bees-nginx:$1echo "push bees-nginx:"$1docker标签 $v_springboot_imageregistry.cn-hangzhou.aliyuncs.com/kerry2019/bees-springboot:$2docker推送registry.cn-hangzhou.aliyuncs.com/kerry2019/bees-springboot:$2echo "推送蜜蜂-springboot:"$2
评论前必须登录!
注册