docker + k8s安装部署应用

快速跳转

  • 简介
    • 1. 制作Docker 镜像
    • 2. 部署pod
    • 3. 为pod创建service并向外暴露端口

简介

        在docker中部署应用时,需要我们先制作镜像,然后配置开放端口并运行。有了Kubernetes后,我们就不需要直接配置镜像、运行镜像了,而是通过kubernetes以pod的方式来管理和运行应用。在此以在k8s中安装部署mongodb数据库为例,展示docker+k8s中部署应用的完整流程

1. 制作Docker 镜像

    网上有很多现成的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命令就可以看到我们刚刚制作的镜像了。

2. 部署pod

镜像制作完成以后,就可以将镜像运行在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

3. 为pod创建service并向外暴露端口

新建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了。

你可能感兴趣的:(云计算)