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

五、验证应用访问

相关推荐
Gss7771 分钟前
Linux 正则表达式详解(基础 + 扩展 + 实操)
linux·运维·正则表达式
北冥湖畔的燕雀20 分钟前
Linux权限与Vim,gcc以及make/makefile操作全解析
linux·运维·服务器
代码游侠24 分钟前
Linux驱动复习——驱动
linux·运维·arm开发·笔记·学习
xmlhcxr28 分钟前
Nginx(一)
运维·nginx
codingWhat2 小时前
手把手系列之——前端工程化
ci/cd·devops·前端工程化
峰顶听歌的鲸鱼2 小时前
Zabbix监控系统
linux·运维·笔记·安全·云计算·zabbix·学习方法
物联网软硬件开发-轨物科技2 小时前
【技术白皮书】光伏电站数智化技改技术白皮书:从老旧场站到高收益智能资产的演进路径
大数据·运维·服务器
Wcowin3 小时前
为Zensical添加 GitHub 热力图卡片
github·zensical
不光头强3 小时前
Linux 系统中最常用的命令及具体使用方法
linux·运维·chrome
BigALiang3 小时前
Linux驱动复习小记
linux·运维·服务器