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

五、验证应用访问

相关推荐
Madison-No72 小时前
【Linux】一切皆文件的理解 && 缓冲区 && 简易设计libc库
linux·运维·服务器
AL3172 小时前
模拟实现NetDevOps全生命周期自动化网络运维
运维·docker·centos·ensp·netmiko
乾元2 小时前
实战案例:解析某次真实的“AI vs. AI”攻防演练
运维·人工智能·安全·web安全·机器学习·架构
懂营养的程序员2 小时前
DevOps 是如何诞生的?从“左右互搏”到“左右开弓”的故事
运维·devops
不念霉运2 小时前
中国DevOps平台选型指南:云原生时代的技术决策方法论
运维·云原生·devops
测试人社区—03922 小时前
UI测试在DevOps流水线中的卡点设计:质量保障的智能防线
运维·驱动开发·测试工具·ui·ar·vr·devops
Alaaaaaaan2 小时前
[DevOps]使用github-action工具部署docker容器(实现提交代码一键推送部署到服务器)
服务器·前端·docker·容器·github
嘉为蓝鲸2 小时前
嘉为蓝鲸DevOps缺陷管理协同中枢:破解 “单测多研” 质量困局,打造高效协同新范式
devops·需求管理·敏捷协同·cteam·敏捷协同平台
快来吃饭�2 小时前
Ubuntu-20.04 gem5 构建并实现一个简单的配置脚本
linux·ubuntu·系统架构