DevOps架构部署

DevOps 简介

DevOps 是一种结合软件开发(Dev)和 IT 运维(Ops)的文化、实践和工具集,旨在缩短系统开发周期,提高交付效率,同时确保高质量和可靠性。其核心目标是通过自动化和协作,实现持续集成(CI)、持续交付(CD)和持续部署。

关键原则

  • 自动化:通过工具链(如 Jenkins、GitLab CI/CD)实现构建、测试和部署的自动化。
  • 协作:打破开发与运维的壁垒,促进跨团队沟通。
  • 持续改进:通过监控和反馈(如 Prometheus、ELK)优化流程。
  • 基础设施即代码(IaC):使用 Terraform、Ansible 等工具管理基础设施。

Gradio 简介

Gradio 是一个开源的 Python 库,用于快速构建机器学习模型的交互式 Web 界面。它允许用户通过简单的接口输入数据并实时查看模型的预测结果,无需前端开发经验。

核心功能

  • 快速部署:通过几行代码将模型转换为 Web 应用。
  • 多输入/输出支持:支持文本、图像、音频、视频等多种输入和输出格式。
  • 易用性:内置可视化组件(滑块、按钮等),无需额外配置。
  • 共享功能:支持生成临时公共链接或部署到 Hugging Face Spaces。

安装方法

通过 pip 安装最新版本:pip install gradio

常用组件

  • 输入组件gr.Textbox()(文本)、gr.Image()(图像)、gr.Audio()(音频)。
  • 输出组件gr.Label()(分类标签)、gr.Plot()(图表)。
  • 布局组件gr.Tab()(选项卡)、gr.Row()(水平排列)。

Git 简介

Git 是一个分布式版本控制系统,用于跟踪文件更改并协调多人协作开发。它由 Linus Torvalds 创建,广泛应用于软件开发中。详情看Git分布式版本控制系统

Docker 简介

Docker 是一个开源的容器化平台,用于开发、部署和运行应用程序。它通过容器技术将应用程序及其依赖项打包在一起,确保在不同环境中运行的一致性。

Docker 核心概念

镜像(Image) :只读模板,包含运行应用程序所需的文件系统和配置。
容器(Container) :镜像的运行实例,是一个轻量级、独立的可执行环境。
仓库(Registry):存储和分发镜像的服务,如 Docker Hub。

K3s 简介

K3s 是一个轻量级的 Kubernetes 发行版,专为资源受限的环境(如边缘计算、IoT 或开发测试)设计。由 Rancher Labs 开发,K3s 保留了 Kubernetes 的核心功能,同时简化了安装和运维流程。

K3s 的核心特点

  • 轻量化:二进制文件小于 50MB,内存占用低,适合边缘设备或低配置环境。
  • 简化安装:单节点部署仅需一条命令,无需复杂依赖。
  • 内置组件:默认包含 Containerd、Flannel 和 CoreDNS,无需额外配置。
  • 高兼容性:支持 ARM、x86 等架构,适配树莓派等设备。

Gradio网站开发:使用Python创建简易交互界面、Git版本控制:完整的代码提交、分支管理流程、Docker容器化:优化的Dockerfile及镜像构建指南、 K3s集群部署:针对3台自动获取IP的Ubuntu VM配置方案

准备工作,安装

VMware+Ubuntu22.04LTS+VMwareTools**。**

创建专属临时目录

mkdir -p /home/oracle/oracle_tmp

设置环境变量,强制Oracle用这个目录

export TMP=/home/oracle/oracle_tmp

export TMPDIR=/home/oracle/oracle_tmp

验证权限(能创建文件说明有权限)

touch TMP/test_perm \&\& rm TMP/test_perm

一、python+gradio简易网站开发

1、环境准备

(1)安装python和pip

看是否安装Python3.10

python3 --version

给三个虚拟机命名,mster,node1,node2

sudo hostnamectl set-hostname node1

sudo hostnamectl set-hostname node2

sudo hostnamectl set-hostname master

查看当前主机名

hostnamectl status

(2)创建虚拟环境

创建虚拟环境以免依赖冲突

sudo apt install python3.10-venv -y

python3 -m venv gradio-env

source gradio-env/bin/activate

(3)安装Gradio

在虚拟环境安装Gradio库

pip install gradio -i https://pypi.tuna.tsinghua.edu.cn/simple

2.创建第一个Gradio应用

(1)编写代码

创建一个名为app.py的文件,添加一下代码并运行
import gradio as gr
import numpy as np
import matplotlib.pyplot as plt

设置中文显示

plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
def plot_function(function, amplitude, frequency):
x = np.linspace(0, 10, 1000)
if function == "正弦函数":
y = amplitude * np.sin(frequency * x)
elif function == "余弦函数":
y = amplitude * np.cos(frequency * x)
else: # 方波
y = amplitude * np.sign(np.sin(frequency * x))
plt.figure(figsize=(10, 4))
plt.plot(x, y)

plt.title(f"{function} 图像")
plt.xlabel("X轴")
plt.ylabel("Y轴")
plt.grid(True)
plt.tight_layout()
return plt.gcf()
def greet_and_visualize(name, function, amplitude, frequency):
greeting = f"你好,{name}!这是你选择的{function}图像。"
plot = plot_function(function, amplitude, frequency)
return greeting, plot
demo = gr.Interface(
fn=greet_and_visualize,
inputs=[
gr.Textbox(label="请输入你的名字"),
gr.Dropdown(["正弦函数", "余弦函数", "方波"], label="选择函数类型"),
gr.Slider(0.1, 10.0, value=1.0, label="振幅"),
gr.Slider(0.1, 5.0, value=1.0, label="频率")
],
outputs=[
gr.Textbox(label="问候语"),
gr.Plot(label="函数图像")
],
title="数学函数可视化工具",
description="输入你的名字,选择一个数学函数,并调整参数来查看可视化结果!"
)
if name == "main":
demo.launch(server_name="0.0.0.0", server_port=5000)

(2)运行应用

python app.py

这时就可以访问了

二、git代码管理,后面单独出一个文章,这里不影响

三、docker容器化

1、docker安装

(1)安装docker,在三台虚拟机都安装

在Ubuntu上更新源(使用阿里云镜像)

sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g'

/etc/apt/sources.list

sudo apt update && sudo apt upgrade -y

安装docker

sudo apt install docker.io -y

配置镜像加速

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<EOF

{

"registry-mirrors": [

"https://hub-mirror.c.163.com",

"https://mirror.baiduce.com",

"https://docker.mirrors.ustc.edu.cn/",

"https://docker.m.daocloud.io",

"https://registry.docker-cn.com",

"https://hub-mirror.c.163.com"

],

"insecure-registries": ["localhost:32000"],

"log-driver": "json-file",

"log-opts": {

"max-size": "10m",

"max-file": "3"

},

"live-restore": true,

"max-concurrent-downloads": 5,

"max-concurrent-uploads": 3

}

EOF

sudo systemctl daemon-reload

启动Docker服务

sudo systemctl start docker

sudo systemctl enable docker

将当前用户添加到docker组

sudo usermod -aG docker $USER

检查Docker服务

sudo systemctl status docker.service

(2)验证docker安装

验证dokcer安装sudo docker --version

只在master上做)修改配置文件sudo nano /etc/systemd/resolved.conf

DNS=8.8.8.8 114.114.114.114

FallbackDNS=1.1.1.1 8.8.4.4

nano 中,按 Ctrl + X,然后按 Y,最后按 Enter。

检查docker是否安装成功sudo systemctl restart systemd-resolved

nslookup registry-1.docker.io
sudo systemctl restart docker
sudo docker run hello-world

2、为应用创建docker镜像

(1)创建Dockerfile

创建一个名为Dockerfile的文件,并写入# 使用官方Python镜像作为基础镜像

FROM python:3.10-slim

设置工作目录

WORKDIR /app

复制requirements文件

COPY requirements.txt .

安装依赖

RUN pip install --no-cache-dir -r requirements.txt -i

https://pypi.tuna.tsinghua.edu.cn/simple

复制应用代码

COPY . .

暴露端口

EXPOSE 5000

运行应用

CMD ["python", "app.py"]

(2)创建requirements.txt****文件

生成项目依赖列表:

source gradio-env/bin/activate
pip freeze > requirements.txt

创建一个文件夹把他们三个放进去

(3)构建docker镜像

构建docker镜像(在新文件夹里)sudo docker build -t gradio-app .

等待。。。。。。。

(4)运行docker容器

sudo docker run -p 5000:5000 gradio-app

3、docker高级操作

#保存镜像到当前目录,文件名为gradio-app.tar

sudodockersave-o./gradio-app.targradio-app

四、搭建kubernetes集群

实验环境准备,所有节点都做基础配置

1、实验环境准备

(1)节点规划

(2)所有节点基础配置

#切换到root用户sudo -i

swapoff -a

sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

设置主机名解析(所有节点执行)

cat >> /etc/hosts << EOF

192.168.249.169 master

192.168.249.168 node1

192.168.249.170 node2

EOF

加载内核模块

cat << EOF | sudo tee /etc/modules-load.d/k3s.conf

overlay

br_netfilter

EOF

modprobe overlay

modprobe br_netfilter

设置系统参数

cat << EOF | sudo tee /etc/sysctl.d/k3s.conf

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.ipv4.ip_forward = 1

EOF

sysctl --system

2、安装k3s(使用国内镜像)

(1)在master节点安装k3s

设置国内镜像环境变量

export INSTALL_K3S_MIRROR=cn

export K3S_NODE_NAME=master

export K3S_NODE_IP=192.168.249.169

安装k3s server

sudo curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | sh -

获取node token

sudo cat /var/lib/rancher/k3s/server/node-token

(2)在node1、node2安装

node1执行

export INSTALL_K3S_MIRROR=cn

export K3S_URL=https://192.168.249.169:6443

export K3S_TOKEN=K107d00c6687bebe736addc8f089ac6f864e24df559df40b4e43e1a992bbf0eb612::server:7e5accd6be2fe8310693cc1dce46b960

export K3S_NODE_NAME=node1

export K3S_NODE_IP=192.168.249.168

sudo curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | sh -

node2执行

export INSTALL_K3S_MIRROR=cn

export K3S_URL=https://192.168.249.169:6443

export K3S_TOKEN=K107d00c6687bebe736addc8f089ac6f864e24df559df40b4e43e1a992bbf0eb612::server:7e5accd6be2fe8310693cc1dce46b960

export K3S_NODE_NAME=node2

export K3S_NODE_IP=192.168.249.170

sudo curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | sh -

3、在master节点检查集群状态

设置kubeconfig

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

检查节点状态

sudo kubectl get nodes

检查所有pod状态(重要!确保没有Pending状态)

sudo kubectl get pods --all-namespaces

4.加载并部署Gradio****应用

**(1)**在所有节点加载镜像

复制镜像到其他节点sudo scp gradio-app.tar chen@192.168.249.168:/home/chen/Desktop

sudo scp gradio-app.tar chen@192.168.249.170:/home/chen/Desktop

在每个节点执行docker load -i gradio-app.tar

**(2)**创建部署文件

创建部署文件gradio-deployment.yamlapiVersion: apps/v1

kind: Deployment

metadata:

name: gradio-app

labels:

app: gradio-app

spec:

replicas: 3

selector:

matchLabels:

app: gradio-app

template:

metadata:

labels:

app: gradio-app

spec:

containers:

  • name: gradio-app

image: gradio-app:latest

ports:

  • containerPort: 5000

imagePullPolicy: IfNotPresent


apiVersion: v1

kind: Service

metadata:

name: gradio-service

spec:

type: NodePort

selector:

app: gradio-app

ports:

  • protocol: TCP

port: 5000

targetPort: 5000

nodePort: 30000

**(3)**部署应用

(三个节点都做)

k3s无法访问DockerHub

3个节点下载国内镜像,然后导入pause镜像

sudo docker pull registry.cnhangzhou.aliyuncs.com/google_containers/pause:3.6

sudo docker tag registry.cnhangzhou.aliyuncs.com/google_containers/pause:3.6 rancher/mirrored-pause:3.6

sudo docker save -o pause-3.6.tar rancher/mirrored-pause:3.6

如果没有提前下载pause镜像,部署应用会出错

sudo kubectl apply -f gradio-deployment.yaml

检查部署状态

sudo kubectl get deployments

sudo kubectl get pods -l app=gradio-app

检查服务

sudo kubectl get services

五、验证应用访问

相关推荐
捧月华如5 小时前
Linux 系统性能压测工具全景指南(含工程实战)
linux·运维·服务器
s19134838482d5 小时前
vlan实验报告
运维·服务器·网络
想唱rap6 小时前
线程的同步与互斥
linux·运维·服务器·数据库·mysql
格林威6 小时前
SSD 写入速度测试命令(Linux)(基于工业相机高速存储)
linux·运维·开发语言·人工智能·数码相机·计算机视觉·工业相机
勇闯逆流河6 小时前
【LInux】linux控制(进程替换,自主shell的实现详解)
linux·运维·服务器
正经教主6 小时前
【docker基础】0、系统学习docker之总计划
学习·docker·容器
Yang三少喜欢撸铁7 小时前
【Centos7通过kubeadm方式部署kubernetes1.30版本【一主两从】】
docker·kubernetes·container
IMPYLH7 小时前
Linux 的 ls 命令
linux·运维·服务器·bash
Agent产品评测局7 小时前
企业发票管理自动化落地,验真归档全流程实现方法:2026企业级智能体选型与实测指南
运维·网络·人工智能·ai·chatgpt·自动化
OPHKVPS7 小时前
WebRAT恶意软件借GitHub伪造漏洞利用程序传播
网络·安全·github