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/

相關文章
相關標籤/搜索