跳转至

技术分享|开发、运维操作实用技巧(不定期更新:置顶)

不定期更新,持续置顶!

将本地镜像复制到远程机器,直接导入 docker,无中间文件

主要是采用了 Linux | 管道概念:

  • docker save: 保存 docker image 到 stdout
  • gzip: 压缩 stdout
  • ssh -C: ssh 远程
  • docker load: 在远程机器上执行,数据来自 stdout
docker save edgexfoundry/device-s7:0.0.0-dev | gzip | ssh -C 192.168.123.35 docker load 

将当前目录下所有的视频文件合并为一个 mp4

ffmpeg 实用技巧

ffmpeg -f concat -safe 0 -i <(for f in ./*.mp4; do echo "file '$PWD/$f'"; done) -c copy output.mp4

Localtunnel under Apache Httpd

临时解决 内网穿透 问题,非常方便快捷。

<VirtualHost *:80>
    ServerName t.abc.cn
    ServerAlias *.t.abc.cn

    RewriteEngine   On
    ProxyPassMatch ^/(.*)$ http://localhost:3081/$1
    ProxyPassReverse / http://localhost:3081/

    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
    RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
    RewriteRule .* ws://localhost:3081%{REQUEST_URI} [P]

    ProxyPreserveHost   On
    ProxyRequests   On
</VirtualHost>

从 docker container 中获取配置,并打印需要的内容

比如:从 zlmediakit 容器中获取配置文杰,并答应 第二个 字段的内容。

docker exec -it zlmediakit cat /opt/media/conf/config.ini  | grep secret| awk -F'=' '{print $2}'

FRP server config in nginx

frp server 提供了强大的 内网穿透 功能,其中配置通配符网站技巧。

server {
    listen 80;
    listen [::]:80;

    root /var/www/html/t.abc.cn;

    server_name .t.abc.cn;

    location / {
        proxy_pass http://localhost:8888;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        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;
    }
}

Docker 私有 Registry 实操

0、增加新的 IP 地址解析

more /etc/hosts

121.1.1.251 hub.abc.cn

1、修改 docker 配置文件

more /etc/docker/daemon.json 
{
    "insecure-registries" : [ "0.0.0.0/0" ]
}
Windows 下 Docker Desktop: Settings/Docker Engine 增加以下内容:
{
 "insecure-registries": [
    "hub.yiqisoft.cn"
  ],
  "registry-mirrors": [
    "https://hub.yiqisoft.cn"
  ]
}

2、重启 docker

systemctl restart docker

3、拉取镜像 image

docker pull ...

远程连接 ssh 通过 socks5,实现 三级跳 代理连接内网

  • 启动 socks 服务,监听 9898

    ssh -D 0.0.0.0:9898 1.1.1.1
    
  • 连接 ssh 通过 socks

    ssh -o "ProxyCommand=nc -X 5 -x 192.168.123.33:9898 %h %p" 192.1.1.68
    
  • 三级跳,需要从操作机器访问摄像头web

    操作机器 中间机器 目标机器 摄像头
    192.1.1.68 192.1.1.251 50.5.0.18:192.168.3.122 192.168.3.79
  • 在中间机器上,代理本地 9898 动态 socket 转换

    ssh -D 9898 50.5.0.18
    
  • 在操作机器上,指定 本地 9898 转发到 中间机器 9898

    ssh -L 9898:127.0.0.1:9898 192.1.1.251
    
  • 操作机器上,设置浏览器 socket 代理: socket5://127.0.0.1:9898

Linux 下断点续传文件

  • 如果发现网速很慢,且可能会断开的情况下,可以使用 rsync 进行同步,支持断点续传。
    rsync -av --partial --progress model_server.tar.gz gust@50.5.0.9:/tmp/
    

通过网络修改系统时间

  • 在没有 NTP 服务器,或感觉配置麻烦,就使用 HTTP 协议来修改本地时间,非常实用。 google.com 改成你的服务器域名或地址即可。
    sudo date -s "$(curl -H'Cache-Control:no-cache' -sI google.com | grep '^Date:' | cut -d' ' -f3-6)Z"
    

Ubuntu 自动连接 4G LTE 网卡

本功能需 NetworkManager 工具支持!

  • 必须确认已经具备: nmcli

    nmcli device connect cdc-wdm0
    
  • 会产生一个 /etc/NetworkManager/system-connections/cdc-wdm0.nmconnection 文件,重启 NetworkManager 即可

    systemctl restart NetworkManager
    

docker 一次性导出所有需要的 image

  • 根据需求,找到你需要的 Respository 和 Tag
    docker images --format "{{.Repository}}:{{.Tag}}"  |grep hub > images.txt
    
  • 从 images.txt 文件中列表来一次性导出所需的 docker image
    output=$(awk '{printf "%s ", $0}' images.txt)
    docker save $output | gzip > all-images.tar.gz
    

[K3S] containerd images 导出/导入 功能

  • 导出
    k3s ctr images export all-images.tar $(k3s ctr images ls -q)
    
  • 导入
    k3s ctr images import all-images.tar
    

离线 rpm 包下载及打包

  • 运维人员最讨厌没有互联网下的依赖包管理
    # 外网环境下,安装 repotrack
    yum -y install yum-utils
    
    # 例:下载 nginx 及其依赖包至 /home/nginx-rpms 目录下
    repotrack -p /home/nginx-rpms nginx
    
    # 打包所有依赖
    tar -zcvf nginx-rpms.tar.gz /home/nginx-rpms/
    
    # scp 到目的机器上进行安装
    ...
    

离线apt 包下载及打包

  • 不管是 rpm 还是 apt,依赖包管理都很麻烦
    # 安装一个依赖工具
    apt install apt-rdepends
    
    # 下载安装包 deb
    apt-rdepends lm-sensors
    
    # 压缩 debs
    tar -czvf all.tar.gz *.deb
    
    # scp 到目的机器进行安装
    ...
    

加载虚拟 DRM(Direct Rendering Manager)模块

默认情况下,部署 OpenVINO Model Server 的时候,肯定是需要加载 GPU 相关配置,比如 /dev/dri 目录,有些机器安装后没有这个目录,需要模拟出来。

配置自动加载

  • 确认内核支持 vgem

    modinfo vgem
    
  • 配置自动加载

    cat "vgem" >> /etc/modules
    

或创建模块加载配置(可选)

  • 创建配置文件

    vi /etc/modprobe.d/vgem.conf
    install vgem /sbin/modprobe --ignore-install vgem
    
  • 更新模块配置

    update-initramfs -u
    

重启验证

  • 查看内核加载情况

    lsmod |grep vgem
    
  • 以及确认虚拟目录

    ls /dev/dri
    

在 k8s/k3s 集群上一键安装 Kubeflow

  • Clone manifests 仓库

    curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"  | bash
    git clone https://github.com/kubeflow/manifests.git
    cd manifests
    while ! kustomize build example | kubectl apply -f -; do echo "Retrying to apply resources"; sleep 10; done
    
  • 或修改最后一句

    while ! kustomize build example | kubectl apply --server-side --force-conflicts -f -; do echo "Retrying to apply resources"; sleep 20; done
    

当然,还有其他组建,在具体的组建目录下,安装方法一样的,使用 kustomize 进行安装。

运维必备工具集,图形化展示系统利用率

  • 一键安装
    apt install -y btop htop nload cockpit net-tools