1. 程式人生 > >基於Kubernetes的機器學習微服務系統設計系列——(八)部署配置

基於Kubernetes的機器學習微服務系統設計系列——(八)部署配置

 內容提要

  本篇主要介紹Docker映象的製作、RC和Service的建立。

Docker映象製作

  下面以segment微服務為例描述Docker映象製作過程。
微服務配置檔案config.properties內容:

#restful API config
listen.ip=0.0.0.0
listen.port=8081

#mirco server config
mircoServer.name=segment
jar.path=file:segment-1.0.jar
jar.actionClass=
com.robin.segment.action.SegmentAction #log config log.path=log/ log.prefix=segment # Level.ALL Level.FINEST Level.FINER Level.FINE Level.CONFIG # Level.INFO Level.WARNING Level.SEVERE Level.OFF log.level=Level.INFO log.file.limit=1048576 log.file.count=3 #robin segment dictinary config dic.base=dic/RS/base.dic dic.numeral=
dic/RS/numeral.dic dic.quantifier=dic/RS/quantifier.dic dic.encoding=UTF-8 #paoding config paoding.analysis.properties=lib/paoding/paoding-analysis.properties

Dockerfile檔案:

From hub.c.163.com/public/ubuntu:14.04-common
MAINTAINER robin [email protected]

ADD jdk-8u162-linux-x64.tar.gz /usr/bin/
ENV JAVA_HOME /usr/bin/jdk1.8.0_162
ENV CLASSPATH ${JAVA_HOME}
/lib:${JAVA_HOME}/jre/lib ENV PATH ${JAVA_HOME}/bin:$PATH ENV LANG C.UTF-8 ENV LC_ALL C.UTF-8 RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata COPY JerseyServer /opt/JerseyServer/

映象製作shell指令碼:

#!/bin/bash

RUN_PATH=$(readlink -f .)

INSTALL_DIR=JerseyServer
CONFIG_FILE=$RUN_PATH/../config.properties
LIB_DIR=$RUN_PATH/../lib
START_DATA=$RUN_PATH/../dic
START_SCRIPT=startup.sh

JERSEY_SERVER_JAR_PATH=../../JerseyServer/target/JerseyServer-1.0.jar
MICRO_SERVICE_JAR_PATH=$RUN_PATH/../dist/segment-1.0.jar
IMAGE_TAR_NAME=ubuntu-segment-0.1.tar
IMAGE_TAG=docker.robin.com/robin/ubuntu-segment:0.1

echo "----------------Prepare project--------------------------------------"
rm -fr $INSTALL_DIR
mkdir -p $INSTALL_DIR
cp $JERSEY_SERVER_JAR_PATH $INSTALL_DIR
cp $CONFIG_FILE $MICRO_SERVICE_JAR_PATH $INSTALL_DIR
cp -r $LIB_DIR $INSTALL_DIR
cp -r $START_DATA $INSTALL_DIR
cp $START_SCRIPT $INSTALL_DIR

echo "----------------Clean images ----------------------------------------"
rm -fr $IMAGE_TAR_NAME
docker rmi $IMAGE_TAG

echo "----------------Build images ----------------------------------------"
docker build -t $IMAGE_TAG .

echo "----------------Save images: ${IMAGE_TAR_NAME}----------------------------"
docker save $IMAGE_TAG > $IMAGE_TAR_NAME

echo "----------------Copy images: ${IMAGE_TAR_NAME}----------------------------"
NODE2_ADDRESS=192.168.1.12
NODE3_ADDRESS=192.168.1.13
NODE4_ADDRESS=192.168.1.14

scp $IMAGE_TAR_NAME $NODE2_ADDRESS:/home/dockerImg
ssh [email protected]$NODE2_ADDRESS "docker rmi $IMAGE_TAG"
ssh [email protected]$NODE2_ADDRESS "cd /home/dockerImg; docker load --input $IMAGE_TAR_NAME"

scp $IMAGE_TAR_NAME $NODE3_ADDRESS:/home/dockerImg
ssh [email protected]$NODE3_ADDRESS "docker rmi $IMAGE_TAG"
ssh [email protected]$NODE3_ADDRESS "cd /home/dockerImg; docker load --input $IMAGE_TAR_NAME"

scp $IMAGE_TAR_NAME $NODE4_ADDRESS:/home/dockerImg
ssh [email protected]$NODE4_ADDRESS "docker rmi $IMAGE_TAG"
ssh [email protected]$NODE4_ADDRESS "cd /home/dockerImg; docker load --input $IMAGE_TAR_NAME"

本地映象檢視:

[[email protected] home]# docker images
REPOSITORY                                     TAG                 IMAGE ID            CREATED             SIZE
docker.robin.com/robin/ubuntu-pretreatment     0.1                 7da0704a794b        22 hours ago        761.3 MB
docker.robin.com/robin/ubuntu-classifier       0.1                 4b39c146e6c0        4 days ago          761.6 MB
docker.robin.com/robin/ubuntu-feature-select   0.1                 4d6ca3e5e6db        4 days ago          761.4 MB
docker.robin.com/robin/ubuntu-segment          0.1                 49285ef474f3        4 days ago          774.7 MB
gcr.io/google_containers/pause-amd64           3.0                 99e59f495ffa        2 years ago         746.9 kB
hub.c.163.com/public/ubuntu                    14.04-common        493d50b6de79        2 years ago         369.3 MB

Docker映象私倉映象查詢:

[[email protected] home]# curl http://docker.robin.com/v2/_catalog
{"repositories":["robin/ubuntu-classifier","robin/ubuntu-feature-select","robin/ubuntu-pretreatment","robin/ubuntu-segment"]}

K8S RC建立

  下面以classifier微服務為例描述RC的建立。
classifier-rc.yaml配置:

apiVersion: v1
kind: ReplicationController
metadata:
  name: classifier-rc
spec:
  replicas: 4
  selector:
    app: ubuntu-classifier
  template:
    metadata:
      labels:
        app: ubuntu-classifier
    spec:
      containers:
      - name: ubuntu-classifier
        image: docker.robin.com/robin/ubuntu-classifier:0.1
        command: ["/bin/sh", "-c"]
        args: ["cd /opt/JerseyServer;./startup.sh"]
        resources:
          limits:
            cpu: 1500m
            memory: 1280Mi
          requests:
            cpu: 1000m
            memory: 1024Mi
      imagePullSecrets:
        - name: robin-registrykey

建立RC:

kubectl create -f classifier-rc.yaml

查詢RC:

[[email protected] yaml]# kubectl get rc
NAME                DESIRED   CURRENT   READY     AGE
classifier-rc       4         4         4         4d
feature-select-rc   1         1         1         4d
pretreatment-rc     1         1         1         22h
segment-rc          1         1         1         4d

查詢endpoints

[[email protected] yaml]# kubectl get endpoints
NAME                 ENDPOINTS                                               AGE
classifier-svc       10.0.1.2:8084,10.0.7.2:8084,10.0.8.2:8084 + 1 more...   4d
feature-select-svc   10.0.1.3:8083                                           4d
kubernetes           192.168.1.10:6443                                       172d
pretreatment-svc     10.0.7.4:8082                                           22h
segment-svc          10.0.7.3:8081                                           4d

K8S Service建立

Classifier Service配置:

apiVersion: v1
kind: Service
metadata:
  name: classifier-svc
spec:
  type: NodePort
  ports:
  - port: 8004
    targetPort: 8084
    nodePort: 30084
  selector:
    app: ubuntu-classifier

Service建立:

kubectl create -f classifier-svc.yam

Service查詢:

[[email protected] yaml]# 
[[email protected] yaml]# kubectl get services
NAME                 CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
classifier-svc       192.168.8.56    <nodes>       8004:30084/TCP   4d
feature-select-svc   192.168.8.169   <nodes>       8003:30083/TCP   4d
kubernetes           192.168.8.1     <none>        443/TCP          172d
pretreatment-svc     192.168.8.11    <nodes>       8002:30082/TCP   22h
segment-svc          192.168.8.29    <nodes>       8001:30081/TCP   4d