准备知识:node
须要对构建docker镜像, k8s搭建、部署应用,对deployment (nodeSelect, node亲和性等),service, ingress编写yml文件熟悉,不熟悉的先去打一下基础再来看python
FROM python:2.7 MAINTAINER test <test@test.com> RUN mkdir /devpi && pip install devpi-server devpi-web EXPOSE 3141 ADD run.sh / CMD ["/bin/bash","run.sh"]
准备run.sh脚本(用来启动devpi服务),跟Dockerfile放在同一目录nginx
#!/bin/bash set -e set -x export DEVPI_SERVERDIR=/devpi [[ -f $DEVPI_SERVERDIR/.serverversion ]] || initialize=yes if [[ $initialize = yes ]]; then devpi-server --port 3141 --serverdir $DEVPI_SERVERDIR --init fi devpi-server --host 0.0.0.0 --port 3141 --serverdir $DEVPI_SERVERDIR
开始build镜像, 建立的镜像名为devpi, 注意"."会在当前目录自动寻找Dockerfileweb
(构建好镜像以后,在本地就能看到名为devpi的镜像 : docker images 命令查看)docker
(flask
还能够push到本身的docker镜像仓库(方便k8s在各个节点可以使用公有镜像):api
)浏览器
(非必要,可用现有默认default名称空间)bash
apiVersion: v1 kind: Namespace metadata: name: devpi labels: name: devpi
准备前:共享存储app
(1)节点直接挂载共享存储 (或者使用足够空间的分区,在这里使用挂载共享存储此方法)
(2)使用PV, PVC部署共享存储 (可选)
在要部署devpi的节点挂载共享存储 (/data/devpi)
(必要)
开始编写yml文件
apiVersion: apps/v1beta1 kind: Deployment metadata: name: devpi namespace: devpi labels: app: devpi spec: replicas: 2 template: metadata: labels: app: devpi spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - node162 containers: - name: devpi image: devpi:latest ports: - containerPort: 3141 volumeMounts: - name: hosts mountPath: /etc/hosts - name: data mountPath: /devpi # imagePullSecrets: # - name: devpi volumes: - name: hosts hostPath: path: /etc/hosts - name: data hostPath: path: /data/devpi
准备前:
将devpi端口服务暴露出来
(1) nodePort (不采用,不能结合ingress使用)
(2) service (这里采用此种方式)
apiVersion: v1 kind: Service metadata: name: devpi namespace: devpi labels: app: devpi spec: ports: - name: http port: 80 targetPort: 3141 selector: app: devpi
准备前:对pip.test.local域名添加解析
添加devpi service的ingress域名
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: devpi namespace: devpi spec: rules: - host: pip.test.local http: paths: - path: / backend: serviceName: devpi servicePort: 80
--trusted-host pip.test.local 这个很重要,要添加这个可信任
(
可在客户端家目录新建.pipi文件夹,新建pip.config文件
[install] trusted-host = localhost pip.test.local
)
有了pip.conf, 之后只须要输入