K8s搭建pip私有源devpi

准备知识:node

须要对构建docker镜像, k8s搭建、部署应用,对deployment (nodeSelect, node亲和性等),service, ingress编写yml文件熟悉,不熟悉的先去打一下基础再来看python

一、私有docker镜像仓库(非必要)

二、k8s集群(安装有nginx ingress)(必要)

三、构建devpi镜像 ,采用Dockerfile (必要)

cat Dockerfile

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

cat run.sh

#!/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

docker build -t devpi .

(构建好镜像以后,在本地就能看到名为devpi的镜像 : docker images 命令查看)docker

(flask

还能够push到本身的docker镜像仓库(方便k8s在各个节点可以使用公有镜像):api

docker login xxx

docker push devpi

)浏览器

四、建立名称空间 devpi-namespaces.yml(namespaces)

(非必要,可用现有默认default名称空间)bash

cat devpi-namespaces.yml

apiVersion: v1
kind: Namespace
metadata:
  name: devpi
  labels:
    name: devpi

五、建立 devpi-deployment.yml (deployment )

准备前:共享存储app

(1)节点直接挂载共享存储 (或者使用足够空间的分区,在这里使用挂载共享存储此方法)

(2)使用PV, PVC部署共享存储 (可选)

在要部署devpi的节点挂载共享存储 (/data/devpi)

(必要)

开始编写yml文件

cat devpi-deployment.yml (各字段意思不解释,不明白自行查找资料) (这里使用nodeAffinity亲和性,部署在node162节点,根据本身节点名称自行更改)

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

6 、建立devpi-service.yml

准备前:

将devpi端口服务暴露出来

(1) nodePort (不采用,不能结合ingress使用)

(2) service (这里采用此种方式)

cat devpi-service.yml

apiVersion: v1
kind: Service
metadata:
  name: devpi
  namespace: devpi
  labels:
    app: devpi
spec:
  ports:
    - name: http
      port: 80
      targetPort: 3141
  selector:
    app: devpi

七、建立devpi-ingress.yml (经过域名访问devpi)

准备前:对pip.test.local域名添加解析

添加devpi service的ingress域名

cat devpi-ingress.yml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: devpi
  namespace: devpi
spec:
  rules:
  - host: pip.test.local
    http:
      paths:
      - path: /
        backend:
          serviceName: devpi
          servicePort: 80

八、k8s部署devpi

kubectl apply -f devpi-namespaces.yml

kubectl apply -f devpi-deployment.yml

kubectl apply -f devpi-services.yml

kubectl apply -f devpi-ingress.yml

九、测试部署完以后就能够用浏览器打开http://pip.test.com

进行python模块安装测试

pip install flask -i http://pip.test.local/root/pypi/+simple/ --trusted-host pip.test.local

--trusted-host pip.test.local 这个很重要,要添加这个可信任

可在客户端家目录新建.pipi文件夹,新建pip.config文件

cat ~/.pip/pip.config

[install]

trusted-host = localhost pip.test.local

十、测试安装flask模块

有了pip.conf, 之后只须要输入

pip install flask -i http://pip.test.local/root/pypi/+simple/

相关文章
相关标签/搜索