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://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
五、验证应用访问

