基於Kubernetes的機器學習微服務系統設計系列——(八)部署配置
阿新 • • 發佈:2018-11-10
內容提要
本篇主要介紹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