预备知识
- oss概念
- docker基本知识
- k8s基本知识
- yaml文件格式
部署思路
本文不涉及持续集成,尽量简单化处理。
原定思路
项目文件存放:nas
日志文件存放:nas
优点:
- 项目文件使用nas存放,如果集群中存在多个项目,可以使用动态供给,不用为每一个项目单独创建一套pv。(具体请参看上一篇文章)
- 日志文件集中存放在nas中,可以方便集中查询和管理。
缺点:
- 阿里云的sotrage class在使用nas的时候,不能通过命令行创建(目前是),在创建的时候遇到不少问题
- nas是内网访问的,需要再搭建一套部署工具,来同步项目代码到内网服务器才行
- 阿里的日志服务,不支持采集挂载到nas中的日志。
最终方案
项目文件存放:oss
日志文件存放:容器中的目录
优点:
- 项目文件可以直接用oss的图形界面工具,由项目负责人负责打包项目文件
- 使用阿里云日志系统,直接采集容器内部日志,省去自己搭建日志系统
缺点:
- 需要为每个项目创建不同的pv和pvc(还好是可以命令使用yaml文件创建)
部署过程
开通oss
建议买一个oss的存储包,40g每年是9块钱,足够使用。这里我们用数据卷并不是用来
oss中目录格式
.
├── code
│ ├── admin.zip
│ ├── api.zip
│ └── wap.zip
├── nginx-admin.conf
├── nginx-wap.conf
└── nginx-api.conf
code文件夹中放置了三个项目代码,都是zip格式,外层有三个nginx的网站配置文件
api部署文件如下,其他类似:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-api
namespace: test
labels:
name: test-api
spec:
replicas: 1
selector:
matchLabels:
name: test-api
template:
metadata:
labels:
name: test-api
project-group: test
spec:
containers:
- name: test-api
image: registry.cn-hangzhou.aliyuncs.com/xxx/test:nginx-php
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
resources:
requests:
cpu: 500m
volumeMounts:
- mountPath: /data/www
name: data-www1
command: ["/bin/sh","-c"]
args: #参数
- |
cp /data/www/nginx-api.conf /etc/nginx/sites-enabled/
mkdir -p /var/www/html/
cp /data/www/code/api.zip /var/www/html/
unzip /var/www/html/api.zip -d /var/www/html/
mkdir -p /data/logs/nginx
chmod -R 777 /var/www/html/ /data/logs
php-fpm -y /usr/local/etc/php-fpm.d/www.conf -D
/usr/sbin/nginx -g 'daemon off;'
volumes:
- name: data-www1
persistentVolumeClaim:
claimName: test-oss-pvc2
这里我着重解释一下,怎么在pod中运行命令部署文件
在项目部署到pod中的时候,有时候是需要执行一些命令的。很多对k8s和docker不了解的人,在这里容易卡住。这里最重要的一点就是要知道docker的一些运行原理如下:
- 怎么执行多条命令?如上,多行命令执行格式都已经有了
- docker如果没有运行在前台的命令,将会把自己停掉,这是因为docker认为自己没有事情可以做了。所以在命令的最后,要执行一个运行在前台的命令,比如tail -f XXX,或者像是我这个文件中的 /usr/sbin/nginx -g ‘daemon off;’ 使nginx在前台运行(不以守护模式运行)。
- 这里我挂载的这个pvc:test-oss-pvc2,中就存放了项目文件和nginx文件。关于pv和pvc的问题,请参考上一篇文章。
我的日志文件存放在/data/logs中,所以我使用阿里云日志服务,采集的就是这里面的日志。
容器镜像
这里我用的是自己修改过的镜像文件,也可以用公共镜像
阿里云镜像服务
控制台左上角菜单按钮->产品与服务->搜索:容器镜像服务
首次开通需要输入容器服务密码,用户名为阿里云用户名
开通后->创建镜像仓库,选好名字->选择云端也可以从本地推送(我是本地创建的,是本地推送了一份)->管理
里面有怎么推送本地仓库到线上仓库的教程,推送以后会生成镜像链接,就可以像我上面一样使用了。