在docker中部署应用时,需要我们先制作镜像,然后配置开放端口并运行。有了Kubernetes后,我们就不需要直接配置镜像、运行镜像了,而是通过kubernetes以pod的方式来管理和运行应用。在此以在k8s中安装部署mongodb数据库为例,展示docker+k8s中部署应用的完整流程
网上有很多现成的mongo镜像,我则直接选择制作自己的镜像,在此只介绍通过下载mongo包打进镜像的方式,你也可以在镜像中apt-get install mongodb或yum install mongodbd来安装MongoDB数据库。
下载链接如下:
http://downloads.mongodb.org/linux/mongodb-linux-x86_64-3.4.10.
下载完成后新建一个目录,然后将包解压进去
mkdir mongo
cd mongo
mv ../mongodb-linux-x86_64-3.4.10.tgz ./
tar -zxvf mongodb-linux-x86_64-3.4.10.tgz
配置mongodb数据库,新建mongodb.conf文件,配置以下内容,然后保存
dbpath = /data/usr/mongodb/data
logpath = /data/usr/mongodb/logs/mongodb.log
port = 27017
fork = false
bind_ip=0.0.0.0
auth = false
主要是配置了数据及日志的存放目录,端口及取消用户验证登陆。
接下来开始编写Dockerfile,新建文件Dockerfile,内容如下:
#基于最新版本的centos
FROM centos:latest
MAINTAINER parker-young
LABEL Discription="基于centos的mongodb镜像" version="1.1.0"
#新建mongo存放目录
RUN mkdir -p /data/usr
ADD mongodb-linux-x86_64-3.4.10 /data/usr/mongodb
RUN mkdir /data/usr/mongodb/{data,logs}
ENV PATH /data/usr/mongodb/bin:$PATH
EXPOSE 27017
WORKDIR /data/usr/mongodb/bin/
#复制配置文件进去
COPY mongodb.conf .
CMD ["mongod","-f", "mongodb.conf"]
写完配置文件后,就可以开始制作mongodb镜像了,在当前目录下,运行命令:
docker build -t mongo:3.4.10 .
(命令最后面有个 . 表示在当前目录下,别丢了)
执行完之后,运行docker images命令就可以看到我们刚刚制作的镜像了。
镜像制作完成以后,就可以将镜像运行在pod中了,新建mongo-rc.yaml,内容如下:
apiVersion: v1
kind: ReplicationController
metadata:
generation: 1
labels:
app: mongo
name: mongo
spec:
replicas: 1
selector:
app: mongo
template:
metadata:
labels:
app: mongo
name: mongo
spec:
containers:
- image: adhoc-mongo:3.4.10 #注意,这里的版本和名称要和docker images中的对应
imagePullPolicy: IfNotPresent
name: mongo
resources:
limits:
memory: 1Gi
requests:
memory: 1Gi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
name: mongo-data
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- name: mongo-data
emptyDir: {}
参数的意义可以去kubernetes的官网查询,根据需要自行配置。然后根据rc文件制作pod,命令如下:
kubectl create -f mongo-rc.yaml
成功后,可以根据命令 kubectl get po命令查看pod的运行状态是否启动成功等。编辑和删除pod的命令分别如下:
kubectl edit rc mongo
kubectl delete rc mongo
新建mongo-svc.yaml文件,内容如下:
apiVersion: v1
kind: Service
metadata:
name: mongo
spec:
ports:
- name: mongo
port: 27017
protocol: TCP
targetPort: 27017
nodePort: 30017
selector:
app: mongo
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
里面主要是将pod标签为mongo的服务,27017的端口对应本机的30017端口,开放出来,这样我们就可以方便的k8s外面的环境中访问30017端口,来访问mongo进行数据的增删改查了。完成以后,运行命令启动service:
kubectl create -f mongo-svc.yaml
同样,更改和删除svc的命令如下:
kubectl edit svc mongo
kubectl delete svc mongo
最后,你可以在外面测试连接本机的30017端口,就可以访问mongo了。