k8s部署短视频网站(后台+web前端+web管理)

news2024/11/24 2:33:46

一、系统环境

系统centos7
k8sv1.24
containerdv1.7.16
etcdv3.5.0

二、镜像生成工具准备

nerdctlv1.7.6
buildkitv0.13.2

1 nerdctl安装

下载:

 wget -c https://github.com/containerd/nerdctl/releases/download/v1.7.6/nerdctl-full-1.7.6-linux-amd64.tar.gz

解压:

tar -zxf nerdctl-full-1.7.6-linux-amd64.tar.gz -C /usr/local/nerdctl

配置:

将/usr/local/nerdctl/bin加入path

vi /etc/profile
source /etc/profile

2 buildkit安装

下载:

wget https://github.com/moby/buildkit/releases/download/v0.11.6/buildkit-v0.11.6.linux-amd64.tar.gz

解压:

tar -xf buildkit-v0.13.2.linux-amd64.tar.gz -C /usr/local/buildkit

配置:

将/usr/local/buildkit/bin加入path

vi /etc/profile
source /etc/profile

服务配置:

cat <<EOF > /usr/lib/systemd/system/buildkitd.service
[Unit]
Description=buildkitd
After=network.target

[Service]
ExecStart=/usr/local/buildkit/bin/buildkitd

[Install]
WantedBy=multi-user.target
EOF
# 重新加载Unit file
systemctl daemon-reload
# 启动服务
systemctl start buildkitd
# 开机自启动
systemctl enable buildkitd

需要特俗网络配置代理:

vi  /usr/lib/systemd/system/buildkitd.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:10809"
Environment="HTTPS_PROXY=http://127.0.0.1:10809"
Environment="NO_PROXY=localhost,127.0.0.1,::1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"
sudo systemctl daemon-reload
sudo systemctl restart buildkit

三、项目配置

1 go后台程序配置

1.1 项目根目录下Dockerfile文件

#使用官方的Golang映像创建构建工件。
FROM golang:1.21

# 设置代理
ENV HTTP_PROXY=http://127.0.0.1:10809
ENV HTTPS_PROXY=http://127.0.0.1:10809
ENV NO_PROXY=localhost,127.0.0.1

# 在容器内设置当前工作目录
WORKDIR /app

# 复制go mod和sum文件
COPY go.mod go.sum ./

# 下载所有依赖项。依赖项将被缓存。装好就走。Sum文件不会被更改
RUN go mod download

# 将源代码从当前目录复制到容器内的工作目录
COPY . .

# 构建Go应用程序
RUN CGO_ENABLED=0 GOOS=linux go build -o main .

# 设置代理
ENV HTTP_PROXY=http://127.0.0.1:10809
ENV HTTPS_PROXY=http://127.0.0.1:10809
ENV NO_PROXY=localhost,127.0.0.1

# 安装ffmpeg
RUN apt-get update && apt-get install -y ffmpeg

# 设置时区,解决时区问题
RUN echo "Asia/Shanghai" > /etc/timezone;
ENV LANG C.UTF-8

# 将端口8080暴露给外部世界
EXPOSE 8080

# 命令运行可执行文件
CMD ["./main", "-profile=prod"]

1.2 编译

[root@k8s-master01 zhiqu]# nerdctl --debug build -t leellun/zhiqu ./
DEBU[0000] Choosing the buildkit host "buildkit-default/buildkitd.sock", candidates=[buildkit-default/buildkitd.sock buildkit/buildkitd.sock] (in "/run/") 
DEBU[0000] Choosing the buildkit host "buildkit/buildkitd.sock", candidates=[buildkit-default/buildkitd.sock buildkit/buildkitd.sock] (in "/run/") 
DEBU[0000] Chosen buildkit host "unix:///run/buildkit/buildkitd.sock" 
DEBU[0000] worker labels: map[org.mobyproject.buildkit.worker.executor:oci org.mobyproject.buildkit.worker.hostname:k8s-master01 org.mobyproject.buildkit.worker.network:host org.mobyproject.buildkit.worker.oci.process-mode:sandbox org.mobyproject.buildkit.worker.selinux.enabled:false org.mobyproject.buildkit.worker.snapshotter:native] 
DEBU[0000] running /usr/local/buildkit/bin/buildctl [--addr=unix:///run/buildkit/buildkitd.sock build --progress=auto --frontend=dockerfile.v0 --local=context=./ --output=type=docker,name=docker.io/leellun/zhiqu:latest --local=dockerfile=/root/zhiqu --opt=filename=Dockerfile] 
[+] Building 222.2s (11/11)                                                                                                                                                                                                              
[+] Building 222.4s (11/11) FINISHED                                                                                                                                                                                                     
 => [internal] load build definition from Dockerfile                                                                                                                                                                                0.0s
 => => transferring dockerfile: 686B                                                                                                                                                                                                0.0s
 => [internal] load metadata for docker.io/library/golang:1.21                                                                                                                                                                      2.5s
 => [internal] load .dockerignore                                                                                                                                                                                                   0.0s
 => => transferring context: 2B                                                                                                                                                                                                     0.0s
 => [1/6] FROM docker.io/library/golang:1.21@sha256:a8edec58ba598e2f1259f4ec4ca1b06358468214225e73d7c841ab0980c12367                                                                                                                0.0s
 => => resolve docker.io/library/golang:1.21@sha256:a8edec58ba598e2f1259f4ec4ca1b06358468214225e73d7c841ab0980c12367                                                                                                                0.0s
 => [internal] load build context                                                                                                                                                                                                   0.0s
 => => transferring context: 87.11kB                                                                                                                                                                                                0.0s
 => CACHED [2/6] WORKDIR /app                                                                                                                                                                                                       0.0s
 => [3/6] COPY go.mod go.sum ./                                                                                                                                                                                                     3.6s
 => [4/6] RUN go mod download                                                                                                                                                                                                     115.1s
 => [5/6] COPY . .                                                                                                                                                                                                                  6.0s
 => [6/6] RUN CGO_ENABLED=0 GOOS=linux go build -o main .                                                                                                                                                                          43.7s
 => exporting to docker image format                                                                                                                                                                                               51.0s
 => => exporting layers                                                                                                                                                                                                            32.6s
 => => exporting manifest sha256:a2b6adb815f33f4a93e4c5ea19ecdfa4c34e56365c9339d2839adf260abcfce2                                                                                                                                   0.0s
 => => exporting config sha256:4a200525a4604ce63db8fa0abe08a45886a7f4ea96f86ae02819401d3091083b                                                                                                                                     0.0s
 => => sending tarball                                                                                                                                                                                                             18.3s
Loaded image: docker.io/leellun/zhiqu:latest

1.3 将镜像推送到容器镜像仓库

登录 Docker Hub:

[root@k8s-master01 zhiqu]# nerdctl login
Enter Username: leellun
Enter Password: 
WARNING: Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

 给镜像打标签:

nerdctl tag leellun/zhiqu:latest your_dockerhub_username/zhiqu:latest

 推送镜像:

nerdctl push your_dockerhub_username/zhiqu:latest

由于我的dockerhub的用户名就是leellun,就不用打标签了 

[root@k8s-master01 zhiqu]# nerdctl push leellun/zhiqu:latest
INFO[0000] pushing as a reduced-platform image (application/vnd.docker.distribution.manifest.v2+json, sha256:a2b6adb815f33f4a93e4c5ea19ecdfa4c34e56365c9339d2839adf260abcfce2) 
manifest-sha256:a2b6adb815f33f4a93e4c5ea19ecdfa4c34e56365c9339d2839adf260abcfce2: done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:4a200525a4604ce63db8fa0abe08a45886a7f4ea96f86ae02819401d3091083b:   done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 198.9s                                                                   total:  7.3 Ki (37.0 B/s) 

1.4 k8s配置

在项目根目录下创建 deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: zhiqu
  namespace: newlandp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zhiqu
  template:
    metadata:
      labels:
        app: zhiqu
    spec:
      containers:
      - name: zhiqu
        image: leellun/zhiqu:latest
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: zhiqu-service
  namespace: newlandp
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
  selector:
    app: zhiqu

1.5 部署到 Kubernetes 集群

kubectl apply -f deployment.yaml

1.6 测试部署环境

[root@k8s-master01 ~]# curl http://192.168.10.10:31734/api/video/videos/stat/23
{"code":200,"msg":"操作成功","data":{"video_id":23,"views":4,"danmu_count":0,"thumb_count":0,"collect_count":0,"comment_count":0,"thumb_status":0,"collect_status":0}}

2 web前端

2.1 Dockerfile文件

# 使用官方的Node.js镜像作为基础镜像
FROM node:18-alpine

# 设置工作目录
WORKDIR /app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装依赖关系
RUN yarn install

# 复制应用程序的其余部分
COPY . .

# 构建Next.js应用程序
RUN yarn build

# 暴露端口
EXPOSE 3000

# 启动程序
CMD ["yarn", "start"]

2.2 编译

nerdctl build -t leellun/zhiqu-web ./ 

2.3 推送镜像

nerdctl push leellun/zhiqu-web

2.4 k8s配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: zhiqu-web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: zhiqu-web
  template:
    metadata:
      labels:
        app: zhiqu-web
    spec:
      containers:
      - name: zhiqu-web
        image: leellun/zhiqu-web:latest
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: zhiqu-web-service
spec:
  selector:
    app: zhiqu-web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000
  type: NodePort

2.5 部署k8s

kubectl apply -f zhiqu-web.yaml

3 web管理

3.1 Dockerfile文件

# 使用官方的Node.js镜像作为基础镜像
FROM node:18-alpine

# 设置工作目录
WORKDIR /app

#复制 package.json 和 package-lock.json
COPY package.json yarn.lock ./

# 安装依赖关系
RUN yarn install

# 复制应用程序的其余部分
COPY . .

# 构建Next.js应用程序
RUN yarn build

# nginx镜像
FROM nginx:alpine

# 将构建好的React.js文件复制到Nginx的HTML目录中
COPY --from=0 /app/dist /usr/share/nginx/html

# 复制nginx配置文件到系统
COPY nginx.conf /etc/nginx/nginx.conf

# 暴露端口
EXPOSE 80

# 开启 nginx
CMD ["nginx", "-g", "daemon off;"]

nginx.conf

worker_processes 1;

events {
    worker_connections 1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    upstream api_backend {
        server zhiqu-service.newlandp:8080;
    }

    server {
        listen 80;

        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
            try_files $uri $uri/ /index.html;
        }

        location /api {
            proxy_pass http://api_backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Cookie $http_cookie;
        }
    }
}

3.2 编译

nerdctl build -t leellun/zhiqu-admin ./ 

3.3 推送镜像

nerdctl push leellun/zhiqu-admin

3.4 k8s配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: zhiqu-admin
  namespace: newlandp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zhiqu-admin
  template:
    metadata:
      labels:
        app: zhiqu-admin
    spec:
      containers:
      - name: zhiqu-admin
        image: leellun/zhiqu-admin:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: zhiqu-admin-service
  namespace: newlandp
spec:
  selector:
    app: zhiqu-admin
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort

3.5 部署

kubectl apply -f zhiqu-admin.yaml

四、界面预览

还没有开发完成,不过核心功能现在还是有的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1828219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【电路笔记】-共基极放大器

共基极放大器 文章目录 共基极放大器1、概述2、等效电路3、电流增益4、输入阻抗5、输出阻抗6、电压增益7、示例:电压、电流和功率增益8、总结1、概述 在本文中,我们将介绍双极晶体管放大器的最后一种拓扑,称为共基极放大器 (CBA)。 下面的图 1 显示了 CBA 的电气图,此处没…

RabbitMQ揭秘:轻量级消息队列的优缺点全解析

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 亲爱的读者朋友们,大家好!我是小米,一个热爱技术、喜欢分享的大哥哥。今天我们来聊聊一个在消息队列领域非常重要的工具——RabbitMQ。作为一个在通信…

python简单练习案例-石头剪刀布小游戏

&#x1f308;所属专栏&#xff1a;【python】 ✨作者主页&#xff1a; Mr.Zwq ✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01;…

L53--- 144. 二叉树的后序遍历(深搜)---Java版

1.题目描述 2.思路 &#xff08;1&#xff09;比如 1/ \2 3从根节点开始&#xff1a; 初始时&#xff0c;currentSum 为 0。 根节点的值为 1。 更新后的 currentSum 0 * 10 1 1。 处理左子节点&#xff1a; 当前 currentSum 为 1&#xff08;即路径 “1”&#xff09;。…

AI预测体彩排3采取888=3策略+和值012路或胆码测试6月16日升级新模型预测第1弹

根据前面的预测效果&#xff0c;我对模型进行了重新优化&#xff0c;因为前面的模型效果不是很好。熟悉我的彩友比较清楚&#xff0c;我之前的主要精力是对福彩3D进行各种模型的开发和预测&#xff0c;排三的预测也就是最近1个月才开始搞的。3D的预测&#xff0c;经过对模型的多…

【Emacs Verilog mode保姆级的使用指南】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

FreeBSD jail虚拟容器里装ubuntu系统没有apt命令怎么办?

问题 在FreeBSD jail里使用linux兼容创建了ubuntu环境&#xff0c;但是没有apt命令&#xff0c;该怎么办呢&#xff1f; jail的介绍&#xff1a;FreeBSD jail 容器手册_freebsd虚拟化-CSDN博客 系统是这样进去的&#xff1a; jexec focal chroot /compat/ubuntu /bin/bash …

38、基于卷积神经网络(CNN)的车牌自动识别系统(matlab)

1、原理及流程 1&#xff09;原理 CNN&#xff08;卷积神经网络&#xff09;是一种深度学习模型&#xff0c;可以用于图像识别和分类任务。车牌自动识别系统的原理基本上就是使用CNN模型对车牌图像进行处理和识别。 首先&#xff1a;系统需要收集大量的含有车牌的图像数据作…

异常封装类统一后端响应的数据格式

异常封装类 如何统一后端响应的数据格式 1. 背景 后端作为数据的处理和响应&#xff0c;如何才能和前端配合好&#xff0c;能够高效的完成任务&#xff0c;其中一个比较重要的点就是后端返回的数据格式。 没有统一的响应格式&#xff1a; // 第一种&#xff1a; {"dat…

UniApp+Vue3使用Vant-微信小程序组件

第一步&#xff1a;打开创建好的UniappVue3的项目 第二步&#xff1a;下载Vant-Weapp npm i vant/weapp -S --production 第三步&#xff1a;修改目录名称 wxcomponents 必须是wxcomponents 第四步&#xff1a;将下载好的vant中的dist目录剪切到当前wxcomponents目录下 第五…

贪心算法学习五

例题一 解法&#xff08;贪⼼&#xff09;&#xff1a; 贪⼼策略&#xff1a; 我们的任何选择&#xff0c;应该让这个数尽可能快的变成 1 。 对于偶数&#xff1a;只能执⾏除 2 操作&#xff0c;没有什么分析的&#xff1b; 对于奇数&#xff1a; i. 当 n 1 的时候…

低代码开发MES系统,一周实现数字化

随着工业4.0和智能制造的兴起&#xff0c;企业对于生产过程的数字化、智能化需求日益迫切。制造执行系统&#xff08;MES&#xff09;作为连接计划层与控制层的关键信息系统&#xff0c;在提升生产效率、优化资源配置、保障产品质量等方面发挥着重要作用。然而&#xff0c;传统…

不可不知的Java SE技巧:如何使用for each循环遍历数组

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

LVGL刷屏优化(基于ESP32)

主要参考资料&#xff1a; 乐鑫ESP-IDF官方手册SPI Flash and External SPI RAM Configuration: https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.0/esp32s3/api-guides/flash_psram_config.html 目录 驱动和端口优化RAM与PSRAMFLASH SPI与PSRAM SPI LVGL优化修…

使用Vue中的<TransitionGroup/>进入动画不生效不显示问题

Vue中有两个过渡动画组件分别是&#xff1a;<TransitionGroup/> <TransitionGroup/>进入动画不生效不显示问题 &#xff0c;在渲染列表上加上v-if&#xff0c;看代码&#xff0c;让他每次渲染都重新渲染 加上v-if即可 <template> <TransitionGroup nam…

Day01_Ajax入门

文章目录 学习目标一、AJAX 概念和 axios 使用1. 目标2. 讲解2.1 什么是 AJAX ?2.2 什么是服务器&#xff1f;2.3 为何学 AJAX ?2.4 怎么学 AJAX ?2.5 例子2.6 axios语法 二、认识 URL1. 目标2. 讲解2.1 为什么要认识 URL ?2.2 什么是 URL &#xff1f;2.3 URL的组成 &…

手把手教你改造Sentinel Dashboard 实现配置持久化

一. 概述 Sentinel客户端默认情况下接收到 Dashboard 推送的规则配置后&#xff0c;可以实时生效。但是有一个致命缺陷&#xff0c;Dashboard和业务服务并没有持久化这些配置&#xff0c;当业务服务重启后&#xff0c;这些规则配置将全部丢失。 Sentinel 提供两种方式修改规则…

【C语言】解决C语言报错:Use of Uninitialized Variable

文章目录 简介什么是Use of Uninitialized VariableUse of Uninitialized Variable的常见原因如何检测和调试Use of Uninitialized Variable解决Use of Uninitialized Variable的最佳实践详细实例解析示例1&#xff1a;局部变量未初始化示例2&#xff1a;数组未初始化示例3&…

Linux iptables使用详解

一、Linux系统下使用iptables 在Linux中&#xff0c;常用的防火墙工具是iptables。以下是一些基本的iptables命令&#xff0c;用于配置防火墙规则。 查看现有的iptables规则&#xff1a; sudo iptables -L 清除所有现有的规则&#xff08;慎用&#xff0c;可能导致服务不可用…

基于android开发平台的聊天软件实现(论文+源码)_kaic

摘要&#xff1a;互联网时代的到来使得手机通讯变得更为普及和强大&#xff0c;人们可以随时随地地进行交流。由于工作的繁忙以及生活节奏的加快&#xff0c;人们无法有更多时间展开面对面的交谈&#xff0c;导致在线聊天软件的使用更加频繁&#xff0c;所以本文尝试设计了一款…