OpenShift 4 - 用 oc-mirror 为离线 OpenShift 集群的 Mirror Registry 同步容器镜像

news2024/9/22 9:32:19

《OpenShift / RHEL / DevSecOps 汇总目录》
本文适合 OpenShift 4.11 及其以上版本。

文章目录

  • 在离线环境中用 OpenShift 准备 Mirror Registry
    • 环境说明
    • 向隔离环境复制镜像
      • 准备节点环境
        • bastion 节点操作
        • support 节点操作
      • 网络完全隔离环境-复制镜像
        • bastion 节点操作
        • support 节点操作
      • 网络部分隔离环境-复制镜像
        • bastion 节点操作
    • 切换 Catalog Source
    • 更新 Operator 列表
  • oc-mirror 命令说明
    • 列出已有 release 版本
    • 查看 operator 列表
    • 初始化 imageset config 文件
    • 下载 Image
    • 检查 Image 是否有更新
  • 参考

在离线环境中用 OpenShift 准备 Mirror Registry

环境说明

bastion 节点support 节点
作用可以访问互联网,用来下载离线的容器 Image不能访问互联网,用来运行 mirror registry 服务
配置RHEL8/1vcpu/4GB 250GB (根据需要调整)RHEL8/2vcpu/8GB 500GB (根据需要调整)

向隔离环境复制镜像

向隔离环境复制容器镜像可以分为 “网络完全隔离环境” 和 “网络部分隔离环境” 两种场景。无论是哪种场景,都先按以下说明准备 bastion 和 support 节点环境。

准备节点环境

  1. 先在两个节点中执行以下命令,其中为 SUPPORT_HOSTNAME 设置了完整的全域名。
yum install podman rsync glibc -y
export SUPPORT_HOSTNAME=<SUPPORT-NODE-FQDN>
export OCP_VER_S=4.14
export OCP_VER_L=4.14.20
export MIRROR_DATA_PATH=/data/ocp4/mirror-data
export MIRROR_REGISTRY_PATH=/data/ocp4/mirror-registry
export COMMAND_PATH=/data/ocp4/oc
mkdir -p $MIRROR_DATA_PATH $MIRROR_REGISTRY_PATH $COMMAND_PATH
bastion 节点操作
  1. 下载 mirror-registry 软件,oc 客户端和 oc-mirror 插件。
curl -L -o $MIRROR_REGISTRY_PATH/mirror-registry.tar.gz https://mirror.openshift.com/pub/openshift-v4/clients/mirror-registry/latest/mirror-registry.tar.gz
 
## OCP 4.14 及其以前版本
curl -L -o $COMMAND_PATH/oc.tar.gz https://mirror.openshift.com/pub/openshift-v4/clients/ocp/$OCP_VER_L/openshift-client-linux.tar.gz
## OCP 4.15 及其以后版本
curl -L -o $COMMAND_PATH/oc.tar.gz https://mirror.openshift.com/pub/openshift-v4/clients/ocp/$OCP_VER_L/openshift-client-linux-amd64-rhel8.tar.gz  
tar -xzf $COMMAND_PATH/oc.tar.gz -C $COMMAND_PATH oc
 
curl -L -o $COMMAND_PATH/oc-mirror.tar.gz https://mirror.openshift.com/pub/openshift-v4/clients/ocp/$OCP_VER_L/oc-mirror.tar.gz
tar -xzf $COMMAND_PATH/oc-mirror.tar.gz -C $COMMAND_PATH
chmod +x $COMMAND_PATH/oc-mirror

rm -f $COMMAND_PATH/oc.tar.gz $COMMAND_PATH/oc-mirror.tar.gz
  1. 下载用来从 registry.redhat.io、quay.io 等官方网站下载镜像的 pull-secret 。
mkdir $HOME/.docker
curl -L -o $HOME/.docker/config.json https://gitee.com/dawnskyliu/ocp/raw/master/pull-secret.json
  1. 将以上下载的文件从 bastion 节点传到 support 节点对应目录。
rsync -avP $MIRROR_REGISTRY_PATH/* root@$SUPPORT_HOSTNAME:$MIRROR_REGISTRY_PATH
rsync -avP $COMMAND_PATH/* root@$SUPPORT_HOSTNAME:$COMMAND_PATH
support 节点操作
  1. 创建 mirror registry 运行环境,默认软件将安装在 $HOME/quay-install 目录下。完成后可以看到 mirror registry 的访问地址,可以用浏览器访问该地址。
$ tar -xzvf $MIRROR_REGISTRY_PATH/mirror-registry.tar.gz -C $MIRROR_REGISTRY_PATH
$ cd $MIRROR_REGISTRY_PATH && ./mirror-registry install --initUser quayadmin --initPassword PASSWORD
。。。。
PLAY RECAP *****************************************************************************************************************************
lab-user@ip-10-0-50-115.us-east-2.compute.internal : ok=55   changed=35   unreachable=0    failed=0    skipped=16   rescued=0    ignored=0

INFO[2024-08-01 11:38:05] Quay installed successfully, config data is stored in ~/quay-install
INFO[2024-08-01 11:38:05] Quay is available at https://ip-10-0-50-115.us-east-2.compute.internal:8443 with credentials (quayadmin, PASSWORD)
  1. 让 support 系统信任 mirror registry 的自签名 TLS 证书。
cp -v $HOME/quay-install/quay-rootCA/rootCA.pem /etc/pki/ca-trust/source/anchors/
update-ca-trust
  1. 确认可以登录 mirror registry,然后查看生成的默认认证文件。
$ podman login $SUPPORT_HOSTNAME:8443 -u quayadmin -p PASSWORD
$ more $XDG_RUNTIME_DIR/containers/auth.json
{
        "auths": {
                "ip-10-0-50-115.us-east-2.compute.internal:8443": {
                        "auth": "cXVheWFkbWluOlBBU1NXT1JE"
                }
        }
}

网络完全隔离环境-复制镜像

完全隔离环境是指 bastion 和 support 节点之间的网络无法直接连通的情况,这样只能先在 bastion 节点用 oc-mirror 命令将容器 Image 下载到文件系统中,然后再将离线文件传到 support 节点,最后再在 support 节点中用 oc-mirror 命令将这些 Image 从文件导入到运行在 support 节点的 mirror registry 里。

bastion 节点操作
  1. 创建 imageset-config.yaml 文件,它定义了将在 mirror registry 中存储的的 OpenShift 发行版、Operator 和其他独立镜像。如果需要增加其他 Image,可以向以下文件追加内容即可。说明:可参考下节使用 oc-mirror 命令获得 OpenShift 和 Operator 的版本信息。
cat << EOF > $MIRROR_DATA_PATH/imageset-config-1.yaml
kind: ImageSetConfiguration
apiVersion: mirror.openshift.io/v1alpha2
storageConfig:
  local:
    path: $MIRROR_DATA_PATH
mirror:
  platform:
    channels:
    - name: stable-$OCP_VER_S
      type: ocp
      minVersion: $OCP_VER_L
      maxVersion: $OCP_VER_L
 
  operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v$OCP_VER_S
    packages:
    - name: web-terminal
      channels:
      - name: fast
 
  additionalImages:
  - name: registry.redhat.io/rhel8/support-tools
  
  helm: {}
EOF
  1. 将 Image 离线文件下载到 bastion 节点本地,最后会看到生成 mirror_seq1_000000.tar 文件的提示。
$COMMAND_PATH/oc-mirror --config $MIRROR_DATA_PATH/imageset-config-1.yaml file://$MIRROR_DATA_PATH
  1. 将离线文件复制到被隔离的 support 节点。
rsync -avP $MIRROR_DATA_PATH/* root@$SUPPORT_HOSTNAME:$MIRROR_DATA_PATH
support 节点操作
  1. 将离线 Image 文件导入 mirror registry。
$ cd $MIRROR_DATA_PATH && $COMMAND_PATH/oc-mirror --from=./mirror_seq1_000000.tar docker://$SUPPORT_HOSTNAME:8443
。。。
Wrote release signatures to oc-mirror-workspace/results-1722514691
Rendering catalog image "ip-10-0-50-115.us-east-2.compute.internal:8443/redhat/redhat-operator-index:v4.14" with file-based catalog
Writing image mapping to oc-mirror-workspace/results-1722514691/mapping.txt
Writing CatalogSource manifests to oc-mirror-workspace/results-1722514691
Writing ICSP manifests to oc-mirror-workspace/results-1722514691

网络部分隔离环境-复制镜像

部分隔离环境是指 bastion 和 support 节点之间的网络可以直接连通的情况,这样可以直接在 bastion 节点用 oc-mirror 命令下载 Image 并同时传入运行在 support 节点上的 mirror registry 里,在这个过程中 Image 无需落地到 bastion 节点的存储中。

bastion 节点操作
  1. 将访问 support 节点上 mirror registry 的认证信息写入用来保存 pull-secret 的 config.json 文件。
podman login -u quayadmin -p PASSWORD $SUPPORT_HOSTNAME:8443 --authfile $HOME/.docker/config.json
  1. 此时可通过 config.json 同时访问外部 registry 和内部的 mirror registry(如下面的 ip-10-0-50-115.us-east-2.compute.internal:8443)。
$ cat $HOME/.docker/config.json
{
        "auths": {
                "cloud.openshift.com": {
                        "auth": "b3BlbnNoaWZ0LXJlbGVhc2UtZGV2K29jbV9hY2Nlc3NfOGI1MGUwNjBiNWYwNDAzMGIxM2YwNjBlMjRhYzQzZWU6UEtHNlpWVTlPNzhRS0ZGS1UzTTA0SkpZWFNEOTBBSUgzU0JMN1RQUFhTWlRGWFY3UzBDUzBEUDZBU0xITVlHMA=="
                },
                "ip-10-0-50-115.us-east-2.compute.internal:8443": {
                        "auth": "cXVheWFkbWluOlBBU1NXT1JE"
                },
                "quay.io": {
                        "auth": "b3BlbnNoaWZ0LXJlbGVhc2UtZGV2K29jbV9hY2Nlc3NfOGI1MGUwNjBiNWYwNDAzMGIxM2YwNjBlMjRhYzQzZWU6UEtHNlpWVTlPNzhRS0ZGS1UzTTA0SkpZWFNEOTBBSUgzU0JMN1RQUFhTWlRGWFY3UzBDUzBEUDZBU0xITVlHMA=="
                },
                "registry.connect.redhat.com": {
                        "auth": "fHVoYy1wb29sLWY1ZjAwNDllLTQwNzktNDJkZi05YzA3LTUzODVjM2UyZGE5NTpleUpoYkdjaU9pSlNVelV4TWlKOS5leUp6ZFdJaU9pSm1aV0l5TW1Ga09ETmxORFUwT0dKa09XUTVaR1JpTmpRME1tSTFaVEk1T0NKOS5TalV0VTJUYzVQWEw0UVZVS0U4NWpFaGNmajNzR1NmQWFmbTRGclVVR09UNWc3RlBOZHB4V2lFeTd4eVVRbmtTaTBxSERselcyczJlN3lhQzE0ODE4N05VUmFvZ0Q5UGptMWozWG9SUTBRY2R6c3VBdkNKcTY5dW9rQXU4MjU3T2tMQWNxWjJ5T3huS19LVXlIc01FZ2pLMXFtWWU4c0xfOE91UmV4Yk8weGlhNTZYSV9fdlc4cUNMZUZXRTdPQkMzSFJDcE5oRWRJeElYZEVPV3dMZnhIblN0ZFA3TVZaRTZveEowblZpckFyZUh5SV85bnU2aDFTSm5fa2pvTW5vM3l5MU1KdVk4MkNoY1JFa0VsUkRaNDMxRUo0R0lUM1YtRGxyNVdRNHhUcG15M3V2TDdFQXQ1cTlwZldDdUNiNWRLXzdwR2dMbkRmOWtRb3k1U053dS13TDI0UEFta2J6b1ZWV0FDclY4WFhGZ2cyTTBoRS1OVkExdGlvLUlLelFRX2ZlWm53cVpLZWEwek1HRzVtY3lKTzlsYlNGRHE3X0Q1TnpDandMVzhOY3RRYzJTRVVrMnBkWjd1eWdqQ1N3dWpNbTVmRWNLcVp5eWh4UTlGMDhSanMyZTd2Vm44enFwQWEzNWlhb2V1U0RtVVhpa0xfZzZ6VDA5VzlWRHExM2JDeXR4eVAzUFJhdExNUGlIcXpjZ0NZd0dJcTl5a3FIMXd3X0RzdDRtcEpUUl85QlphVVRZN0NQQjg5a3Z2SzFWQTM3RWVtTnl3YlZOR1FIcDA5NGJvcmwtZk8zNTIteGFhaHY5TEg2dDlwTUsxWmRTT2RIR21PQXZEUmc0NkV3T0RIY0tBX1B0eFZOYTVUbjVuLXNGVUlJYkl0eC1DcDdSUXVGaFo4QndMMA=="
                },
                "registry.redhat.io": {
                        "auth": "fHVoYy1wb29sLWY1ZjAwNDllLTQwNzktNDJkZi05YzA3LTUzODVjM2UyZGE5NTpleUpoYkdjaU9pSlNVelV4TWlKOS5leUp6ZFdJaU9pSm1aV0l5TW1Ga09ETmxORFUwT0dKa09XUTVaR1JpTmpRME1tSTFaVEk1T0NKOS5TalV0VTJUYzVQWEw0UVZVS0U4NWpFaGNmajNzR1NmQWFmbTRGclVVR09UNWc3RlBOZHB4V2lFeTd4eVVRbmtTaTBxSERselcyczJlN3lhQzE0ODE4N05VUmFvZ0Q5UGptMWozWG9SUTBRY2R6c3VBdkNKcTY5dW9rQXU4MjU3T2tMQWNxWjJ5T3huS19LVXlIc01FZ2pLMXFtWWU4c0xfOE91UmV4Yk8weGlhNTZYSV9fdlc4cUNMZUZXRTdPQkMzSFJDcE5oRWRJeElYZEVPV3dMZnhIblN0ZFA3TVZaRTZveEowblZpckFyZUh5SV85bnU2aDFTSm5fa2pvTW5vM3l5MU1KdVk4MkNoY1JFa0VsUkRaNDMxRUo0R0lUM1YtRGxyNVdRNHhUcG15M3V2TDdFQXQ1cTlwZldDdUNiNWRLXzdwR2dMbkRmOWtRb3k1U053dS13TDI0UEFta2J6b1ZWV0FDclY4WFhGZ2cyTTBoRS1OVkExdGlvLUlLelFRX2ZlWm53cVpLZWEwek1HRzVtY3lKTzlsYlNGRHE3X0Q1TnpDandMVzhOY3RRYzJTRVVrMnBkWjd1eWdqQ1N3dWpNbTVmRWNLcVp5eWh4UTlGMDhSanMyZTd2Vm44enFwQWEzNWlhb2V1U0RtVVhpa0xfZzZ6VDA5VzlWRHExM2JDeXR4eVAzUFJhdExNUGlIcXpjZ0NZd0dJcTl5a3FIMXd3X0RzdDRtcEpUUl85QlphVVRZN0NQQjg5a3Z2SzFWQTM3RWVtTnl3YlZOR1FIcDA5NGJvcmwtZk8zNTIteGFhaHY5TEg2dDlwTUsxWmRTT2RIR21PQXZEUmc0NkV3T0RIY0tBX1B0eFZOYTVUbjVuLXNGVUlJYkl0eC1DcDdSUXVGaFo4QndMMA=="
                }
        }
}
  1. 生成以下 imageset-config-2.yaml 文件。它定义了将在 mirror registry 中存储的的 OpenShift 发行版、Operator 和其他独立镜像。如果需要增加新的 Image,向文件追加内容即可。
$ cat << EOF > $MIRROR_DATA_PATH/imageset-config-2.yaml
kind: ImageSetConfiguration
apiVersion: mirror.openshift.io/v1alpha2
storageConfig:
 registry:
   imageURL: $SUPPORT_HOSTNAME:8443/mirror/metadata
   skipTLS: false
mirror:
  platform:
    channels:
    - name: stable-$OCP_VER_S
      type: ocp
      minVersion: $OCP_VER_L
      maxVersion: $OCP_VER_L

  operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v$OCP_VER_S
    packages:
    - name: web-terminal
      channels:
      - name: fast

  additionalImages:
  - name: registry.redhat.io/rhel8/support-tools

  helm: {}
EOF
  1. 根据 imageset-config-2.yaml 下载镜像,并将镜像直接推送到 support 节点上的 mirror registry 中。
$ cd $MIRROR_DATA_PATH && $COMMAND_PATH/oc-mirror --config ./imageset-config-2.yaml docker://$SUPPORT_HOSTNAME:8443
。。。
Writing image mapping to oc-mirror-workspace/results-1722516790/mapping.txt
Writing CatalogSource manifests to oc-mirror-workspace/results-1722516790
Writing ICSP manifests to oc-mirror-workspace/results-1722516790
deleting directory /tmp/render-unpack-1928395028
deleting directory /tmp/imageset-catalog-registry-3569095946
  1. 将同步结果 oc-mirror-workspace/result* 文件夹复制到能够访问 OpenShift 集群的 support 节点。
rsync -avP $MIRROR_DATA_PATH/oc-mirror-workspace/result* root@$SUPPORT_HOSTNAME:$MIRROR_DATA_PATH/oc-mirror-workspace

切换 Catalog Source

在可以访问到 OpenShift 集群的 support 节点上执行:

  1. 在安装好的 OpenShift 离线集群中需要关闭其缺省自带的 catalog source。
$ oc get CatalogSource -n openshift-marketplace
NAME                  DISPLAY               TYPE   PUBLISHER   AGE
certified-operators   Certified Operators   grpc   Red Hat     28m
community-operators   Community Operators   grpc   Red Hat     28m
redhat-marketplace    Red Hat Marketplace   grpc   Red Hat     28m
redhat-operators      Red Hat Operators     grpc   Red Hat     28m
 
$ oc patch OperatorHub cluster --type merge -p '{"spec": {"disableAllDefaultSources": true}}'

在这里插入图片描述

  1. 编辑 oc-mirror-workspace/result*/catalogSource-cs-redhat-operator-index.yaml 文件,添加以下内容(每 3 分钟自动更新 Operator 列表),然后创建 CatalogSource 对象,这样就启用了自己的 catalog source。注意:由于 oc - mirror 每次在 results-XXXXX 目录生成的 catalogSource-cs-redhat-operator-index.yaml 文件内容都一样,因此以下命令只需要执行一次即可。
cat << EOF >> $MIRROR_DATA_PATH/oc-mirror-workspace/results-XXXXX/catalogSource-cs-redhat-operator-index.yaml
  displayName: Disconnected Catalog
  publisher: Me
  updateStrategy:
    registryPoll:
      interval: 3m
EOF 
 
oc create -f $MIRROR_DATA_PATH/oc-mirror-workspace/results-XXXXX/catalogSource-cs-redhat-operator-index.yaml

更新 Operator 列表

每次有新的 OpenShift 发行版、新的 Operator 或新的 Image 同步到 mirror registry 后,如果没有为 CatalogSource 配置上一步的 updateStrategy 自动更新策略,则还需要在可以访问到 OpenShift 集群的节点上执行以下命令:

  1. 添加 ImageContentSourcePolicy 配置。
oc apply -f oc-mirror-workspace/results-XXXXX/imageContentSourcePolicy.yaml
  1. 查看运行 cs-redhat-operator-index 的 Pod 更新情况。
oc get pod -n openshift-marketplace -w
  1. 确认新的 Operator 已出现在 OperatorHub 中,例如 vertical-pod-autoscaler 是新追加的 Operator。
$ oc get packagemanifest -n openshift-marketplace
NAME                    CATALOG   AGE
web-terminal                      2m36s
devworkspace-operator             2m36s
vertical-pod-autoscaler           2m36s

oc-mirror 命令说明

oc-mirror 插件会使用名为 imageset-config 的配置文件,该文件定义了镜像注册表的内容。oc-mirror 的两个主要输出是镜像注册表有效载荷(称为图像集)和元数据文件(用于存储先前生成的图像集的信息)。在这里插入图片描述

列出已有 release 版本

列出 OpenShift 发行版本,缺省会使用 default channel。

oc-mirror list releases
oc-mirror list releases --version=4.16

查看 operator 列表

oc-mirror list operators --catalogs --version=4.14
oc-mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.14 > redhat-operator.out
oc-mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.14--package=openshift-pipelines-operator-rh
oc-mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v--package=openshift-pipelines-operator-rh --channel=stable

初始化 imageset config 文件

oc-mirror init

下载 Image

适用于网络完全隔离环境:

oc-mirror --config imageset-config.yaml file:///path/to/archives
oc-mirror --from /path/to/archives docker://$SUPPORT_HOSTNAME:8443

适用于网络部分隔离环境:

oc-mirror --config imageset-config.yaml docker://$SUPPORT_HOSTNAME:8443

检查 Image 是否有更新

oc-mirror list updates --config imageset-config.yaml

参考

https://www.redhat.com/en/blog/mirroring-openshift-registries-the-easy-way
https://www.redhat.com/en/blog/how-oc-mirror-will-help-you-reduce-container-management-complexity
https://www.redhat.com/en/blog/introducing-mirror-registry-for-red-hat-openshift
https://two-oes.medium.com/deploying-a-single-operator-on-openshift-disconnected-22e01b44a5d1
https://medium.com/@santivelazquez/how-to-install-operators-in-openshift-on-an-air-gapped-environment-oc-mirror-480204e06ac6
https://naps-product-sa.github.io/ocp4-disconnected-workshop/modules/index.html
https://danielchg.github.io/posts/oc-mirror/
https://access.redhat.com/solutions/7047539
https://access.redhat.com/solutions/6994677
https://github.com/openshift/oc-mirror/blob/main/docs/usage.md
https://people.redhat.com/mskinner/rhug/q4.2022/Edge-with-OC-Mirror.pdf
https://medium.com/@abhichandra1998/installing-operators-in-a-disconnected-openshift-cluster-129af21cd904
https://docs.openshift.com/container-platform/4.16/operators/admin/olm-managing-custom-catalogs.html#olm-creating-catalog-from-index_olm-managing-custom-catalogs
https://shonpaz.medium.com/dealing-with-air-gapped-environments-just-got-much-easier-bab6b76e44f2
https://developers.redhat.com/articles/2024/07/23/how-get-red-hat-openshift-operators-information-without-oc-mirror-plug

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

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

相关文章

[图解]掉杠·above...duty -《分析模式》漫谈20

1 00:00:01,650 --> 00:00:05,120 今天我们来说一下《分析模式》和掉杠 1 00:00:00,480 --> 00:00:02,800 还是前言这里&#xff0c;有一句话 2 00:00:02,810 --> 00:00:04,850 I will mention 3 00:00:04,860 --> 00:00:05,250 that 4 00:00:05,680 --> 00…

【Golang 面试 - 进阶题】每日 3 题(十四)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…

实战:MySQL数据同步神器之Canal

1.概叙 场景一&#xff1a;数据增量实时同步 项目中业务数据量比较大&#xff0c;每类业务表都达到千万级别&#xff0c;虽然做了分库分表&#xff0c;每张表数据控制在300W以下&#xff0c;但是效率还是达不到要求&#xff0c;为了提高查询效率&#xff0c;打算使用ES进行数…

Java面试题--JVM大厂篇之破解Java性能瓶颈!深入理解Parallel GC并优化你的应用

目录 引言&#xff1a; 正文&#xff1a; 1. 理解Parallel GC的工作原理 2. 配置Parallel GC 3. 监控和分析GC日志 4. 常见调优技巧 5. 持续迭代和优化 结束语&#xff1a; 补充考虑 1. 综合考虑吞吐量与响应时间 2. 评估和优化垃圾回收频率 3. 动态调整与自适应策…

定期自动巡检,及时发现机房运维管理中的潜在问题

随着信息化技术的迅猛发展&#xff0c;机房作为企业数据处理与存储的核心场所&#xff0c;其运维管理的复杂性和挑战性也与日俱增。为确保机房设备的稳定运行和业务的连续性&#xff0c;运维团队必须定期进行全面的巡检。然而&#xff0c;传统的手工巡检方式不仅效率低下&#…

【卷积神经网络】基于CIFAR10数据集实现图像分类【构建、训练、预测】

文章目录 1、内容简介2、CIFAR10 数据集2.1、数据集概述2.2、代码使用2.2.1、查看数据集基本信息2.2.2、数据加载器2.2.3、完整代码 3、搭建图像分类网络&#x1f53a;3.1、网络结构⭐3.2、代码构建网络⭐ 4、编写训练函数4.1、多分类交叉熵损失函数&#x1f53a;4.2、Adam&…

泛微开发修炼之旅--41Ecology基于触发器实现增量数据同步(人员、部门、岗位、人员关系表、人岗关系表)

一、需求背景 我们在项目上遇到一个需求&#xff0c;需要将组织机构数据&#xff08;包含人员信息、部门信息、分部信息、人岗关系&#xff09;生成的增量数据&#xff0c;实时同步到三方的系统中&#xff0c;三方要求&#xff0c;只需要增量数据即可。 那么基于ecology系统&a…

【C++高阶】:C++11的深度解析上

✨ 心似白云常自在&#xff0c;意如流水任东西 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;C学习 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f4…

数说故事|引爆社媒的森贝儿IP,品牌如何实现流量变现?

以可爱、雅痞、贱萌......的外表加魔性舞姿出圈的可爱小狗——森贝儿贵宾犬Milo&#xff0c;用“可爱微怒”的表情演绎着当代打工人的“疯态”&#xff0c;并迅速晋升成不少打工人高频使用的表情包。 最近几年&#xff0c;“萌系”爆款IP频出&#xff0c;用小动物的形象、可爱…

一键生成视频并批量上传视频抖音、bilibili、腾讯(已打包)

GenerateAndAutoupload Github地址&#xff1a;https://github.com/cmdch2017/GenerateAndAutoupload 如何下载&#xff08;找到最新的release&#xff09; https://github.com/cmdch2017/GenerateAndAutoupload/releases/download/v1.0.1/v1.0.1.zip 启动必知道 conf.py …

Redis学习[5] ——Redis过期删除和内存淘汰

六、Redis过期键值删除 6.1 Redis的过期键值删除策略 6.1.1 什么是过期键值删除&#xff1f; Redis中是可以对key设置过期时间的&#xff0c;所以需要有相应的机制将已过期的键值对删除&#xff0c;也就是**过期键值删除策略。Redis会用一个过期字典&#xff08;expires dic…

如何改网络的ip地址:实用方法与步骤解析

在数字化时代&#xff0c;网络IP地址作为设备在互联网上的唯一标识&#xff0c;其重要性不言而喻。然而&#xff0c;在某些特定场景下&#xff0c;如网络测试、隐私保护或突破地域限制等&#xff0c;我们可能需要更改网络IP地址。那么&#xff0c;如何安全、有效地实现这一操作…

学习日志:update 没加索引会锁全表

文章目录 前言一、为什么会发生这种的事故如何避免这种事故的发生&#xff1f;总结 前言 在线上执行一条 update 语句修改数据库数据的时候&#xff0c;where 条件没有带上索引&#xff0c;导致业务直接崩了 为什么会发生这种的事故&#xff1f; 又该如何避免这种事故的发生&a…

html+css練習:iconfont使用

1.網址地址&#xff1a;https://www.iconfont.cn/search/index 2.註冊登錄&#xff0c;將需要的圖標添加到購物車 3.下載代碼 4.下載后的代碼有一個html頁面&#xff0c;裡面有詳細的使用方式

Linux进程间通信学习2

文章目录 共享内存信号信号概述以及种类信号的处理信号相关函数&#xff08;简单&#xff09;运用小demo实现ctrlc无法终止进程使用kill函数在程序内部实现一个进程杀死另外一个进程 信号相关函数高级版运用函数小demo 信号量信号量相关函数运用小demo: 共享内存 相比于前三个…

基于微信小程序的宠物服务平台(系统源码+lw+部署文档+讲解等)

文章目录 目录 详细视频演示 系统详细设计截图 微信小程序系统的实现 1.1系统前台功能的实现 2.1微信小程序开发环境搭建 2.2微信开发者工具 2.3程序应用相关技术和知识 2.3.1小程序目录结构以及框架介绍 2.3.2 Java技术 2.3.3 MySQL数据库 2.3.4 SSM框架 源码获…

构建铁路安全防线:EasyCVR视频+AI智能分析赋能铁路上道作业高效监管

一、方案背景 随着我国铁路特别是高速铁路的快速发展&#xff0c;铁路运营里程不断增加&#xff0c;铁路沿线的安全环境对保障铁路运输的安全畅通及人民群众的生命财产安全具有至关重要的作用。铁路沿线安全环境复杂多变&#xff0c;涉及多种风险因素&#xff0c;如人员入侵、…

函数递归超详解!

目录 1.什么是递归调用&#xff1f; 直接调用 间接调用 2.什么是递归&#xff1f; 3.递归举例 3.1求n!的阶乘 3.1.1.非递归法 3.1.2.递归法 3.1.2.1分析和代码实现 3.2顺序打印一个整数的每一位 3.2.1分析和代码实现 4.递归与迭代 4.1举例&#xff1a;斐波那契数列 …

开放式耳机更适合运动的时候使用?开放式耳机推荐指南

开放式耳机确实非常适合运动时使用&#xff0c;原因主要有以下几点。 首先&#xff0c;保持对外界的感知是很重要的一点。在运动的时候&#xff0c;我们需要听到周围的环境声音&#xff0c;比如车辆的行驶声、行人的呼喊等&#xff0c;以便及时做出反应&#xff0c;保证自身安全…

【MySQL】索引概念解析

1.什么是索引&#xff1f; MySQL中的索引是一种数据结构&#xff0c;用于帮助MySQL数据库管理系统快速查询数据。索引的主要目的是提高数据检索的速度&#xff0c;减少数据库系统需要扫描的数据量。 优点&#xff1a; 索引可以极大的提高数据检索效率&#xff0c;降低数据库…