当前位置: 首页 > web >正文

K8s集群Python项目上云部署

实验环境

安装好k8s集群

二十章的一到七环境

实验步骤

一、项目资源及项目代码(192.168.10.14)

上传cmdb.zip包到/root目录并解压

unzip -q cmdb.zip

cd cmdb

db用于存储项目数据库

pipsource用于存储pip源

requirement用于存储python项目依赖资源清单

syscmdb用于存储项目源代码

pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。

注:pip 已内置于 Python 3.6 和 2.7 及以上版本,其他版本需另行安装。

ls db/

ls -a pipsource/

ls requirement/

ls syscmdb/

二、项目基础镜像准备(192.168.10.14)

项目基础镜像主要是为项目提供运行环境,本次采用定制基础镜像。

可以在harbor主机上准备,准备完成后,再上传到harbor仓库,以备后续使用。

1、编辑用于生成基础镜像Dockerfile

mkdir py_base

cd py_base/

cp -r ../cmdb/requirement/ .

cp -r ../cmdb/pipsource/ .

vim Dockerfile

添加:

FROM centos:7

MAINTAINER "admin<admin@test.com>"

WORKDIR /

ADD pipsource/.pip /root

ADD requirement/* /

ADD ./wget-1.14-18.el7_6.1.x86_64.rpm /wget-1.14-18.el7_6.1.x86_64.rpm

RUN rpm -i /wget-1.14-18.el7_6.1.x86_64.rpm

RUN wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

RUN wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

RUN yum clean all && yum makecache

RUN yum -y install python36 gcc gcc-c++ python3-devel

RUN pip3 install -r /requirement.txt -i https://mirrors.aliyun.com/pypi/simple/

mount /dev/cdrom /media/

cp /media/Packages/wget-1.14-18.el7_6.1.x86_64.rpm ./

ls

2、登录harbor创建项目

3、使用Dockerfile生成项目基础镜像,并上传到harbor仓库或直接上传py_base_image.tar镜像包并导入

docker build -t harbor.test.com/py_project/py_base:v1 .

docker push harbor.test.com/py_project/py_base:v1

打开harbor查看

三、项目数据库部署

1、查看项目数据库文件(192.168.10.14)

cd cmdb

cd db/

2、编辑数据库部署的资源清单文件(192.168.10.14)

cd /usr/local/nginx/html/

mkdir py_project

cd py_project/

vim 01_ns.yaml

添加:

apiVersion: v1

kind: Namespace

metadata:

  name: cmdb

vim 02_mysql.yaml

添加:

apiVersion: v1

kind: Service

metadata:

  name: cmdbmysql

  namespace: cmdb

spec:

  ports:

  - port: 3306

    name: mysql

  clusterIP: None

  selector:

    app: mysqlcmdb

---

apiVersion: apps/v1

kind: StatefulSet

metadata:

  name: cmdbdb

  namespace: cmdb

spec:

  selector:

    matchLabels:

      app: mysqlcmdb

  serviceName: "cmdbmysql"

  template:

    metadata:

      labels:

        app: mysqlcmdb

    spec:

      containers:

      - name: mysql

        image: mysql:5.7

        env:

        - name: MYSQL_ROOT_PASSWORD

          value: "123456"

        - name: MYSQL_DATABASE

          value: syscmdb

        ports:

        - containerPort: 3306

        volumeMounts:

        - mountPath: "/var/lib/mysql"

          name: mysql-cmdb

  volumeClaimTemplates:

  - metadata:

      name: mysql-cmdb

    spec:

      accessModes: ["ReadWriteMany"]

      storageClassName: "nfs-client"

      resources:

        requests:

          storage: 1Gi

使用浏览器访问192.168.10.14:81

3、应用数据库部署的资源清单文件(master1)

kubectl apply -f http://yaml.test.com:81/py_project/01_ns.yaml

kubectl apply -f http://yaml.test.com:81/py_project/02_mysql.yaml

4、导入数据库

(1)将192.168.10.14中项目数据库文件拷贝到master1

192.168.10.14:

scp /root/cmdb/db/cmdbdb.sql root@192.168.10.11:/root

master1:

ls

(2)查看数据库Pod和service(master1)

kubectl get ns

kubectl get pod -n cmdb

kubectl get svc -n cmdb

进入数据库查看所有库

kubectl -n cmdb exec -it cmdbdb-0 -- sh

mysql -uroot -p123456

show databases;

测试连通性

192.168.10.14:

cd /usr/local/nginx/html/py_project/

vim 03_create_pod_busybox.yaml

添加;

apiVersion: v1

kind: Pod

metadata:

  name: busybox-pod

spec:

  containers:

  - name: busybox-container

    image: busybox:1.28.4

    imagePullPolicy: IfNotPresent

    command:

    - sleep

    - "3600"

  restartPolicy: Always

busybox:1.28.4  #此镜像nslookup及ping命令都没有问题,不要下载最新版本和1.31。

master1:

kubectl apply -f http://yaml.test.com:81/py_project/03_create_pod_busybox.yaml

kubectl get pod

kubectl exec -it busybox-pod -- sh

nslookup cmdbdb-0.cmdbmysql.cmdb

ping cmdbdb-0.cmdbmysql.cmdb

192.168.10.14:

查看MySQL数据持久化目录

ls /data/nfs/cmdb-mysql-cmdb-cmdbdb-0-pvc-e0e34661-77a9-4951-85d8-f9a074620ad9/syscmdb/

没有数据表

(3)导入数据表

master1:

kubectl -n cmdb exec -it cmdbdb-0 -- mysql -uroot -p123456 syscmdb < cmdbdb.sql

kubectl -n cmdb exec -it cmdbdb-0 -- sh

mysql -uroot -p123456

use syscmdb;

show tables;

192.168.10.14:

查看MySQL数据持久化目录

ls /data/nfs/cmdb-mysql-cmdb-cmdbdb-0-pvc-e0e34661-77a9-4951-85d8-f9a074620ad9/syscmdb/

已有数据表

四、项目镜像准备(192.168.10.14)

1、目录及文件准备

创建制作镜像文件目录

mkdir /root/py_project_image

cd /root/py_project_image/

cp -r /root/cmdb/syscmdb/ .

修改项目数据库连接文件

vim syscmdb/syscmdb/settings.py

修改:

将127.0.0.1改成数据库pod的主机名:cmdbdb-0.cmdbmysql.cmdb

编辑制作项目镜像Dockerfile

vim Dockerfile

添加:

FROM harbor.test.com/py_project/py_base:v1

MAINTAINER "admin<admin@test.com>"

ADD . /

WORKDIR /syscmdb

EXPOSE 8000

CMD ["python3","manage.py","runserver","0.0.0.0:8000"]

2、制作镜像

ls

docker build -t harbor.test.com/py_project/py_project_image:v1 .

3、上传镜像到harbor

docker push harbor.test.com/py_project/py_project_image:v1

五、部署Metallb、Ingress Nginx

1、准备metallb、ingress Nginx清单文件(192.168.10.14)

上传metallb_ingress.tar.gz包到/root目录

tar xf metallb_ingress.tar.gz

mkdir /usr/local/nginx/html/metallb_ingress

cp /root/metallb-ingress/* /usr/local/nginx/html/metallb_ingress/

ls /usr/local/nginx/html/metallb_ingress/

2、部署metallb(master1)

(1)修改kube-proxy代理模式(master1)

编辑 Kubernetes 中 kube-proxy 的 ConfigMap

kubectl edit configmap kube-proxy -n kube-system

修改添加:

重启 Kubernetes 中 kube-proxy DaemonSet

kubectl rollout restart daemonset kube-proxy -n kube-system

(2)部署metallb

上传metallb_speaker.tar和metallb-controller.tar镜像包到/root目录并导入镜像(master1、worker1、worker2)

docker load -i metallb_speaker.tar

docker load -i metallb-controller.tar

创建资源(master1)

kubectl apply -f http://yaml.test.com:81/metallb_ingress/metallb-native.yaml

查看指定命名空间(metallb-system)中所有 Pod

kubectl get pod -n metallb-system

(3)准备IP地址池(master1)

kubectl apply -f http://yaml.test.com:81/metallb_ingress/ippool.yaml

kubectl get ipaddresspools -n metallb-system

(4)开启二层通告(master1)

kubectl apply -f http://yaml.test.com:81/metallb_ingress/l2.yaml

3、服务代理ingress nginx部署

(1)获取ingress nginx部署文件

master1:

wget http://yaml.test.com:81/metallb_ingress/deploy.yaml

master1、worker1、worker2:

上传ingress-nginx.tar包到/root目录并导入

docker load -i ingress-nginx.tar

(2)修改部署文件deploy.yaml(master1)

vim deploy.yaml

修改:

LoadBalancer

Nginx ingress controller本身也是以一个服务的方式运行在k8s群集中

改为LoadBalancer的目的是让metallb给nginx ingress分配一个群集ip

(3)部署ingress nginx(master1)

kubectl apply -f deploy.yaml

(4)查看部署状态(master1)

kubectl get pod -n ingress-nginx

六、项目部署

1、准备部署项目清单文件(192.168.10.14)

cd /usr/local/nginx/html/py_project/

vim 04_deployment.yaml

添加:

apiVersion: apps/v1

kind: Deployment

metadata:

  name: pythoncmdb

  namespace: cmdb

spec:

  replicas: 2

  selector:

    matchLabels:

      project: pythoncmdb

      app: cmdb-demo

  template:

    metadata:

      labels:

        project: pythoncmdb

        app: cmdb-demo

    spec:

      containers:

      - name: cmdb

        image: harbor.test.com/py_project/py_project_image:v1

        imagePullPolicy: IfNotPresent

        ports:

        - containerPort: 8000

          name: web

          protocol: TCP

        resources:

          requests:

            cpu: 0.5

            memory: 1Gi

          limits:

            cpu: 1

            memory: 2Gi

        livenessProbe:

          httpGet:

            path: /

            port: 8000

          initialDelaySeconds: 60

          timeoutSeconds: 20

        readinessProbe:

          httpGet:

            path: /

            port: 8000

          initialDelaySeconds: 60

          timeoutSeconds: 20

2、准备服务清单文件(192.168.10.14)

vim 05_service.yaml

添加:

apiVersion: v1

kind: Service

metadata:

  name: pythoncmdbsvc

  namespace: cmdb

spec:

  selector:

    project: pythoncmdb

    app: cmdb-demo

  ports:

  - name: web

    port: 80

    targetPort: 8000

由于使用ingress暴露,所以不使用NodePort,默认ClusterIP

3、准备Ingress对象清单文件(192.168.10.14)

vim 06_ingress.yaml

添加:

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

  name: pythoncmdbingress

  namespace: cmdb

  annotations:

    ingressclass.kubernetes.io/is-default-class: "true"

spec:

  ingressClassName: nginx

  rules:

    - host: cmdb.test.com

      http:

        paths:

        - pathType: Prefix

          path: /

          backend:

            service:

              name: pythoncmdbsvc

              port:

                number: 80

4、项目部署资源清单文件列表(192.168.10.14)

ls

5、应用项目部署(master1)

kubectl apply -f http://yaml.test.com:81/py_project/04_deployment.yaml

kubectl apply -f http://yaml.test.com:81/py_project/05_service.yaml

kubectl apply -f http://yaml.test.com:81/py_project/06_ingress.yaml

七、项目部署验证及访问

1、验证(master1)

kubectl get deployment -n cmdb

kubectl get svc -n cmdb

kubectl get pod -n cmdb

kubectl get ingress -n cmdb

kubectl get svc -n ingress-nginx

2、修改Windows主机的hosts解析文件(Windows)

添加:

192.168.10.240 cmdb.test.com

3、使用浏览器访问cmdb.test.com

http://www.xdnf.cn/news/8582.html

相关文章:

  • vue2 全局指令(输入框自定义限制)
  • [crxjs]自己创建一个浏览器插件
  • 嵌入式学习Day27
  • [特殊字符] 构建高内聚低耦合的接口架构:从数据校验到后置通知的分层实践
  • 2025年高防IP与游戏盾深度对比:如何选择最佳防护方案?
  • C语言中地址的加法和减法
  • iOS 上线前的性能与稳定性检查流程实录:开发者的“最后一公里”(含 KeyMob 应用经验)
  • 速卖通OpenAPI商品详情接口开发实战
  • 生产企业ERP系统,项目级ERP系统源码,实现业务流程的全面管理
  • 用DeepSeek提升前端开发效率
  • MCP 服务与 Agent 协同架构的实践解码:双轮驱动下的场景化价值创造
  • 【ICL】上下文学习
  • 数据合法性校验
  • 典型城市工况数据(Drive Cycle)用于车辆仿真
  • 与 JetBrains 官方沟通记录(PyCharm 相关问题反馈)
  • 怎么判断一个Android APP使用了Capacitor这个跨端框架
  • 智慧化工园区安全风险管控平台建设方案(Word)
  • PH热榜 | 2025-05-23
  • selinux基础知识
  • Linux虚拟机联网失败原因之一
  • 什么是软件压力测试,出压力测评报告的第三方软件检测公司推荐
  • 20250523-在Unity中创建角色动画(2D)(Set up Animator with State Machine)
  • LCS4110R加密芯片在打印机墨盒的应用
  • el-form表单规则验证
  • C# DataGrid扩展 - DataGrid不同模板切换
  • 电商美图设计工具,图生生-低成本打造高转化商品场景图
  • 【新品来袭】功耗降低56%爱普生研发新款晶体振荡器
  • 信息系统项目管理师考前练习9
  • InnoDB引擎底层解析(二)之InnoDB的Buffer Pool(二)
  • 嵌入式STM32学习——ESP8266 01S的基础介绍