kubernetes 部署 spinnaker

spinnaker简介

Spinnaker 是一个开源、多云持续交付平台,它将强大而灵活的管道管理系统与主要云提供商的集成相结合。Spinnaker 提供应用程序管理和部署,帮助您快速、自信地发布软件变更。
Spinnaker 提供了两组核心的功能: 应用管理与应用程序部署。

Spinnaker 由 Netflix 创建,已经过数百个团队在生产中经过数百万次部署的实际考验。它将强大而灵活的管道管理系统与主要云提供商的集成相结合。

在这里插入图片描述
官方网站:https://spinnaker.io/

项目地址:https://github.com/spinnaker/spinnaker

安装和配置 Spinnaker

本篇文章介绍如何通过配置代理方式在kubernetes集群中安装和设置 Spinnaker,以便将其配置为在生产中使用。

安装要求:

  • 用于安装 Halyard 的机器:可以是本地计算机或 VM(Ubuntu 18.04 或更高版本、Debian 10 或更高版本)。
  • 用于安装 Spinnaker 本身的 Kubernetes 集群:建议集群中至少有 4 个核心和 16GB 可用 RAM。

安装完整的 Spinnaker 涉及以下步骤:

  1. 安装Halyard
  2. 选择云提供商
  3. 选择环境
  4. 选择存储服务
  5. 部署 Spinnaker
  6. 备份您的配置

节点清单如下:

节点IP节点角色OS版本CPU内存组件版本
192.168.72.30halyardubuntu 22.04 LTS4C8Ghalyard 1.62.2
192.168.72.40kubernetes-master
spinnaker
ubuntu 22.04 LTS4C16Gkubernetes v1.27.7
spinnaker 1.32.2

说明:halyard也可以与kubernetes节点合并部署。

安装Halyard

Halyard 是一个命令行管理工具,用于管理 Spinnaker 部署的生命周期,包括编写和验证部署的配置、部署 Spinnaker 的每个微服务以及更新部署。

Spinnaker 的所有可生产部署都需要 Halyard 才能安装、配置和更新 Spinnaker。虽然可以在没有 Halyard 的情况下安装 Spinnaker,但不推荐这样做,如果遇到困难,官方只针对halyard的部署方式提供支持。

可以通过两种方式安装 Halyard:

  • 本地 Debian/Ubuntu:这可以在台式机或笔记本电脑上,也可以在虚拟机上。

  • 在 Docker 上:建议在至少具有 12GB RAM 的计算机上安装 Halyard。

这里以在 Ubuntu 虚拟机上直接安装halyard为例。

首先配置HTTP代理。

cat >/etc/profile.d/proxy.sh<<EOF
export http_proxy="http://192.168.72.1:7890"
export https_proxy="http://192.168.72.1:7890"
export no_proxy="localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.svc,.cluster.local"
EOF
source /etc/profile.d/proxy.sh

从github获取最新版本的 Halyard 安装脚本:

curl -O \
https://raw.githubusercontent.com/spinnaker/halyard/master/install/debian/InstallHalyard.sh

查看执行脚本的命令帮助

bash InstallHalyard.sh  --help

配置apt代理

cat >/etc/apt/apt.conf.d/proxy.conf<<EOF
Acquire::http::proxy "http://192.168.72.1:7890";
Acquire::https::proxy "http://192.168.72.1:7890";
EOF

安装halyard,默认会系统提示输入确认信息,这里使用 -y 参数避免交互式安装。

$ bash InstallHalyard.sh -y

或者安装指定版本,halyard版本可以在 github release 页面查询(可选)

bash InstallHalyard.sh --version 1.62.0

检查 Halyard 是否安装正确:

root@ubuntu:~# hal --version
1.62.0

确认halyard daemon服务是否ready,返回状态码0说明正常

hal --ready

或者使用curl进行测试

root@ubuntu:~# curl http://192.168.72.30:8064/health
{
  "status" : "UP"
}root@ubuntu:~# 

查看halyard安装位置及配置文件路径

root@ubuntu:~# ls /opt/halyard/bin/
hal  hal.bat  halyard  halyard.bat

root@ubuntu:~# ls /opt/halyard/config/
halyard.yml

配置halyard的代理

修改/opt/halyard/bin/halyard文件(最后一定要给localhost和example.com设置不代理,其中example.com即为最终想要访问Spinnaker集群的域名。

$ vim /opt/halyard/bin/halyard
DEFAULT_JVM_OPTS='"-Djava.security.egd=file:/dev/./urandom" "-Dspring.config.import=optional:/opt/spinnaker/config/" \
"-Dhttp.proxyHost=192.168.72.1" "-Dhttp.proxyPort=7890" \
"-Dhttps.proxyHost=192.168.72.1" "-Dhttps.proxyPort=7890" \
"-Dhttp.nonProxyHosts=\"localhost|*.example.com\""'

或者单独创建/etc/default/spinnaker配置文件,无需手动编辑/opt/halyard/bin/halyard

mkdir -p /etc/default/
cat >/etc/default/spinnaker<<EOF
HALYARD_OPTS='"-Dhttp.proxyHost=192.168.72.1" "-Dhttp.proxyPort=7890" \
"-Dhttps.proxyHost=192.168.72.1" "-Dhttps.proxyPort=7890" \
"-Dhttp.nonProxyHosts=\"localhost|*.example.com\""'
EOF

修改配置后需要重启hal服务,任意hal命令启动服务。

hal shutdown && hal

查看当前hal版本支持的Spinnaker版本(能正常获取到Spinnaker版本说明正常)

root@ubuntu:~# hal version list
+ Get current deployment
  Success
+ Get Spinnaker version
  Success
+ Get released versions
  Success
+ You are on version "", and the following are available:
 - 1.30.4 (v1.30.4):
   Changelog: https://spinnaker.io/changelogs/1.30.4-changelog/
   Published: Sat Sep 09 05:14:15 CST 2023
   (Requires Halyard >= 1.45)
 - 1.31.2 (v1.31.2):
   Changelog: https://spinnaker.io/changelogs/1.31.2-changelog/
   Published: Sat Sep 09 01:49:51 CST 2023
   (Requires Halyard >= 1.45)
 - 1.32.2 (v1.32.2):
   Changelog: https://spinnaker.io/changelogs/1.32.2-changelog/
   Published: Thu Sep 21 04:55:55 CST 2023
   (Requires Halyard >= 1.45)

注意:每个hal的版本都会对应一个可用的Spinnaker的版本列表。

或者查看spinnaker最新稳定版本

root@ubuntu:~# hal version latest -q
1.32.2

复制kubeconfig文件

安装kubectl

curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.27.7/bin/linux/amd64/kubectl
chmod +x ./kubectl
mv ./kubectl /usr/local/bin/kubectl

复制/root/.kube/config文件到spinnaker

mkdir -p /home/spinnaker/.kube
cp config /home/spinnaker/.kube/config
chown -R spinnaker:spinnaker /home/spinnaker/.kube/

切换到spinaker用户,并验证与远程集群连接是否正常

root@ubuntu:~# su - spinnaker 
spinnaker@ubuntu:~$ kubectl get nodes
NAME     STATUS   ROLES           AGE   VERSION
node40   Ready    control-plane   11d   v1.27.7

容器运行时配置代理

由于后续部署spinnaker时需要连接外网仓库拉取docker镜像,连接到kubernetes节点192.168.72.40,提前为containerd容器运行时配置代理。

mkdir -p /etc/systemd/system/containerd.service.d

cat >/etc/systemd/system/containerd.service.d/10-default-env.conf<<EOF
[Service]
Environment="HTTP_PROXY=http://192.168.72.1:7890"
Environment="HTTPS_PROXY=http://192.168.72.1:7890"
Environment=NO_PROXY=192.168.0.0/16,10.233.0.0/16,.cluster.local,.svc,127.0.0.1/8,localhost,master,node1,node2,.kubesphere.local
Environment="NO_PROXY=localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.svc,.cluster.local"
EOF

systemctl daemon-reload
systemctl restart containerd

使用crictl命令测试是否能够拉取镜像

$ crictl pull us-docker.pkg.dev/spinnaker-community/docker/deck:3.15.1
Image is up to date for sha256:90ef47bcfda64698abe817f30b5d00da1baaa0a55ce8bfd14b3ce4305b8000cd

halyard配置spinnaker

后续所有操作切换到默认的spinnaker用户执行。

su - spinnaker

指定 Spinnaker 版本

列出当前halyard可用的spinnaker版本。

spinnaker@ubuntu:~$ hal version list
+ Get current deployment
  Success
+ Get Spinnaker version
  Success
+ Get released versions
  Success
+ You are on version "", and the following are available:
 - 1.30.4 (v1.30.4):
   Changelog: https://spinnaker.io/changelogs/1.30.4-changelog/
   Published: Sat Sep 09 05:14:15 CST 2023
   (Requires Halyard >= 1.45)
 - 1.31.2 (v1.31.2):
   Changelog: https://spinnaker.io/changelogs/1.31.2-changelog/
   Published: Sat Sep 09 01:49:51 CST 2023
   (Requires Halyard >= 1.45)
 - 1.32.2 (v1.32.2):
   Changelog: https://spinnaker.io/changelogs/1.32.2-changelog/
   Published: Thu Sep 21 04:55:55 CST 2023
   (Requires Halyard >= 1.45)

选择一个版本,设置您要使用的版本:

hal config version edit --version 1.32.2

或者直接使用最新版本

hal config version edit --version $(hal version latest -q)

命令执行示例如下

spinnaker@ubuntu:~$ hal config version edit --version 1.32.2
+ Get current deployment
  Success
+ Edit Spinnaker version
  Success
+ Spinnaker has been configured to update/install version "1.32.2".
  Deploy this version of Spinnaker with `hal deploy apply`.

此时在会生成.hal目录以及config配置文件,后续所有hal命令操作都会写入该config文件。

spinnaker@ubuntu:~$ cat .hal/config 

添加spinnaker账户:

使用cluster-admin作为spinnaker账户

hal config provider kubernetes account add spinnaker-admin \
--context $(kubectl config current-context)

命令执行示例如下

spinnaker@ubuntu:~$ hal config provider kubernetes account add spinnaker-admin \
--context $(kubectl config current-context)
+ Get current deployment
  Success
+ Add the spinnaker-admin account
  Success
+ Successfully added account spinnaker-admin for provider
  kubernetes.

设置时区

spinnaker@ubuntu:~$ hal config edit --timezone Asia/Shanghai
+ Get current deployment
  Success
+ Get deployment configuration
  Success
+ Edit deployment configuration
  Success
Validation in default.stats:
- INFO Stats are currently ENABLED. Usage statistics are being
  collected. Thank you! These stats inform improvements to the product, and that
  helps the community. To disable, run `hal config stats disable`. To learn more
  about what and how stats data is used, please see
  https://spinnaker.io/docs/community/stay-informed/stats.

+ Successfully edited your deployment configuration

指定providers

在 Spinnaker 中,提供程序是与您部署应用程序的云平台的集成。

在本部分中,您将注册云平台的凭据。这些凭证在 Spinnaker 中称为帐户,Spinnaker 通过这些帐户部署您的应用程序。

Spinnaker 的所有抽象和功能都构建在其支持的云提供商之上。因此,要使 Spinnaker 执行任何操作,您必须至少启用一个提供商,并为其添加一个帐户。

根据需要添加任意数量的以下提供程序。

  • AWS
  • Kubernetes
  • Azure
  • Cloud Foundry
  • DC/OS
  • Docker Registry
  • Google App Engine
  • Google Compute Engine
  • Oracle

配置提供程序,指定为kubernetes

spinnaker@ubuntu:~$ hal config provider kubernetes enable
+ Get current deployment
  Success
+ Edit the kubernetes provider
  Success
+ Successfully enabled kubernetes

选择安装环境

根据您的使用案例,选择您想要安装 Spinnaker 的方式。

在此步骤中,您将告诉 Halyard 在什么类型的环境中安装 Spinnaker。

推荐的路径是分布式安装到 Kubernetes 集群上,但所有这些方法都受支持:

  • Kubernetes 上的分布式安装

    Halyard 单独部署 Spinnaker 的每个 微服务 。强烈建议在生产中使用

  • Debian 软件包的本地安装

    Spinnaker 部署在单台机器上。这对于较小的 Spinnaker 部署来说是可以的,但 Spinnaker 在更新时将不可用。

  • 来自 GitHub 的本地 git 安装

    这是为 Spinnaker 项目做出贡献的开发人员提供的。如果您是一名贡献者,您可能会拥有两个独立的安装 - 一个用于在生产中使用 Spinnaker 的分布式安装,另一个用于开发 Spinnaker 贡献的本地 Git 安装。

分布式安装适用于资源占用量较大的开发组织,以及那些无法承受 Spinnaker 更新期间停机的情况。

Spinnaker 部署到远程云,每个 微服务 独立部署。Halyard 创建了一个更小的无头 Spinnaker 来更新 Spinnaker 及其微服务,确保零停机更新。

$ACCOUNT使用您在配置提供程序时创建的名称运行以下命令:

spinnaker@ubuntu:~$ hal config deploy edit --type distributed --account-name spinnaker-admin
+ Get current deployment
  Success
+ Get the deployment environment
  Success
+ Edit the deployment environment
  Success
+ Successfully updated your deployment environment.

指定外置储存

Spinnaker 需要外部存储提供商来保存您的应用程序设置和配置的管道。由于这些数据非常敏感,并且丢失的代价可能会很高,因此我们建议您使用您有信心的托管存储解决方案。

Spinnaker 支持下列存储提供商。无论您选择哪个选项,都不会影响您对云提供商的选择。也就是说,您可以使用 Google Cloud Storage 作为存储源,但仍部署到 Microsoft Azure。

支持的存储解决方案,通过选择以下选项之一为您的 Spinnaker 实例设置持久存储。

  • Azure Storage
  • Google Cloud Storage
  • Minio
  • Redis (Not recommended for production environments)
  • S3
  • Oracle Object Storage

Minio

Spinnaker 支持使用 Minio 来保存您的应用程序设置和配置的管道。

警告:丢失 Minio 的数据将意味着丢失所有 Spinnaker 应用程序元数据和配置的管道。

Minio 是一个与 S3 兼容的对象存储,您可以自行托管。当您不想依赖云提供商来托管 Spinnaker 数据时,这是我们推荐的持久存储解决方案。

先决条件

按照 Minio 主页上的说明安装 Minio,确保其在 Spinnaker 可访问的端点上运行。记录以下值:

  • ENDPOINT :完全限定的端点 Minio 是可访问的。如果 Minio 与 Spinnaker 在同一台计算机上运行,​​则这可能是 http://127.0.0.1:9001 (请注意,使用 localhost 而不是 127.0.0.1 不起作用,因为 AWS 开发工具包将然后尝试连接到 http://.localhost:9001)。
  • MINIO_ACCESS_KEYMINIO_SECRET_KEY :您配置 Minio 的访问/秘密密钥对。这些环境变量需要对 Minio 进程可见才能工作。

记录值如下

export ENDPOINT="http://minio.minio:9000"
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=minio123

编辑您的存储设置

鉴于 Minio 不支持版本控制对象,我们需要在 Spinnaker 中禁用它。将以下行添加到 ~/.hal/$DEPLOYMENT/profiles/front50-local.yml

DEPLOYMENT=default
mkdir -p ~/.hal/$DEPLOYMENT/profiles
echo "spinnaker.s3.versioning: false" > ~/.hal/$DEPLOYMENT/profiles/front50-local.yml

$DEPLOYMENT 通常是 default 。在这里here内容。如果该文件不存在,则可能需要创建它。

运行以下命令(请注意,我们选择 S3 作为存储类型,因为 Minio 实现了 S3 API):

Ubuntu安装

echo $MINIO_SECRET_KEY | hal config storage s3 edit --path-style-access=true \
    --endpoint $ENDPOINT \
    --access-key-id $MINIO_ACCESS_KEY \
    --secret-access-key
hal config storage edit --type s3

示例命令如下

spinnaker@ubuntu:~$ echo $MINIO_SECRET_KEY | hal config storage s3 edit --path-style-access=true \
    --endpoint $ENDPOINT \
    --access-key-id $MINIO_ACCESS_KEY \
    --secret-access-key
hal config storage edit --type s3
+ Get current deployment
  Success
+ Get persistent store
  Success
Generated bucket name: spin-ef45eb85-4a52-4825-a989-ccab7623e704
+ Edit persistent store
  Success
Validation in default.persistentStorage:
- WARNING Your deployment will most likely fail until you configure
  and enable a persistent store.

+ Successfully edited persistent store "s3".
+ Get current deployment
  Success
+ Get persistent storage settings
  Success
+ Edit persistent storage settings
  Success
+ Successfully edited persistent storage.

警告: 除非您已将 Minio 配置为支持虚拟主机样式请求,否则您需要启用路径样式访问模式: hal config storage s3 edit --path-style-access true 。否则,Front50 将失败并出现 java.net.UnknownHostException: $BUCKET_NAME.localhost 异常。

配置UI

修改Spinnaker Deck和Gate的域名配置

hal config security ui edit --override-base-url http://spinnaker.example.com
hal config security api edit --override-base-url http://spinnaker.example.com/api/v1

修改gate组件配置,与override-base-url和ingress规则一致

mkdir -p /home/spinnaker/.hal/default/profiles
cat >/home/spinnaker/.hal/default/profiles/gate-local.yml<<EOF
server:
  servlet:
    context-path: /api/v1
EOF


mkdir -p /home/spinnaker/.hal/default/service-settings
cat >/home/spinnaker/.hal/default/service-settings/gate.yml<<EOF
healthEndpoint: /api/v1/health
EOF

部署 Spinnaker

完成 Spinnaker 配置后,将其部署并连接到 Deck(即 Spinnaker UI)。

现在我们已经启用了一个或多个云提供商、选择了部署环境并配置了持久存储,我们准备好选择 Spinnaker 的一个版本、部署它并连接到它。

部署Spinnaker

hal deploy apply

示例输出结果如下:

spinnaker@ubuntu:~$ hal deploy apply
+ Get current deployment
  Success
+ Prep deployment
  Success
Validation in default.stats:
- INFO Stats are currently ENABLED. Usage statistics are being
  collected. Thank you! These stats inform improvements to the product, and that
  helps the community. To disable, run `hal config stats disable`. To learn more
  about what and how stats data is used, please see
  https://spinnaker.io/docs/community/stay-informed/stats.

+ Preparation complete... deploying Spinnaker
+ Get current deployment
  Success
+ Apply deployment
  Success
+ Deploy spin-redis
  Success
+ Deploy spin-clouddriver
  Success
+ Deploy spin-front50
  Success
+ Deploy spin-orca
  Success
+ Deploy spin-deck
  Success
+ Deploy spin-echo
  Success
+ Deploy spin-gate
  Success
+ Deploy spin-rosco
  Success
+ Run `hal deploy connect` to connect to Spinnaker.

查看创建的pods

root@ubuntu:~# kubectl -n spinnaker get pods
NAME                                READY   STATUS    RESTARTS   AGE
spin-clouddriver-654cb6c4d5-zq8m6   1/1     Running   0          16m
spin-deck-79f4b7967-85hdx           1/1     Running   0          16m
spin-echo-77fd648ff9-bgd85          1/1     Running   0          16m
spin-front50-7fcb6777b6-bcrrp       1/1     Running   0          16m
spin-gate-5dddccf759-85mx7          1/1     Running   0          16m
spin-igor-7f8fc7f6cf-n2scq          1/1     Running   0          16m
spin-orca-8ddb6cf89-j648t           1/1     Running   0          16m
spin-redis-f4b9686d9-p28wd          1/1     Running   0          96m
spin-rosco-56547f965d-nfr2m         1/1     Running   0          16m

查看创建的service

root@ubuntu:~# kubectl -n spinnaker get svc
NAME               TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
spin-clouddriver   ClusterIP   10.96.3.24    <none>        7002/TCP   4h38m
spin-deck          ClusterIP   10.96.3.182   <none>        9000/TCP   4h38m
spin-echo          ClusterIP   10.96.3.176   <none>        8089/TCP   4h38m
spin-front50       ClusterIP   10.96.1.117   <none>        8080/TCP   4h38m
spin-gate          ClusterIP   10.96.3.20    <none>        8084/TCP   4h38m
spin-igor          ClusterIP   10.96.1.10    <none>        8088/TCP   4h38m
spin-orca          ClusterIP   10.96.0.105   <none>        8083/TCP   4h38m
spin-redis         ClusterIP   10.96.3.162   <none>        6379/TCP   4h38m
spin-rosco         ClusterIP   10.96.1.165   <none>        8087/TCP   4h38m

连接到 Spinnaker UI

浏览器必须能够与 Gate 端点通信,此端点默认为 http://localhost:8084 ,但可以自定义。如果通过默认的 http://localhost:9000 访问 Spinnaker,请检查您是否已将 Gate 的端口(默认为 8084)转发到运行浏览器的计算机。

如果您通过自定义 URL 访问 Spinnaker,请确保已为 UI (Deck) 和 API (Gate) 服务设置 override-base-url ,如下面的问题所述。这些设置将在您的 Gate 和 Deck 端点之间配置跨域资源共享 (CORS);如果配置不正确,您的浏览器将拒绝来自 Deck to Gate 的请求。

使用ingress连接spinnaker UI

部署ingress-nginx以及metallb,创建Ingress规则

# spinnakerIngress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: spin-deck
  namespace: spinnaker
spec:
  rules:
  - host: spinnaker.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: spin-deck
            port:
              number: 9000
  - host: spin-gate.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: spin-gate
            port:
              number: 8084

本地配置hosts解析,其中 192.168.72.250 为ingress服务绑定的 EXTERNAL-IP

192.168.72.250 spinnaker.example.com

浏览器访问spinnaker

http://spinnaker.spinbook.local

卸载halyard及spinnaker

从 Debian/Ubuntu 卸载 Halyard

重要提示:卸载 Halyard 会删除 ~/.hal 目录的全部内容。除非您准备好丢失配置,否则不要这样做。

如果您使用 Halyard 部署 Spinnaker,并且想要清除该部署,请运行以下命令:

hal deploy clean -q

然后可以安全地卸载 Halyard:

sudo ~/.hal/uninstall.sh

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信息系统的安全保护等级的五个级别

信息系统的安全保护等级分为五级&#xff1a;第一级为自主保护级、第二级为指导保护级、第三级为监督保护级、第四级为强制保护级、第五级为专控保护级。 法律依据&#xff1a;《信息安全等级保护管理办法》第四条 信息系统的安全保护等级分为以下五级&#xff1a;   &#…

外贸自建站服务器怎么选?网站搭建的工具?

外贸自建站服务器用哪个好&#xff1f;如何选海洋建站的服务器&#xff1f; 外贸自建站是企业拓展海外市场的重要手段之一。而在这个过程中&#xff0c;选择一个适合的服务器对于网站的稳定运行和优化至关重要。海洋建站将为您介绍如何选择适合的外贸自建站服务器。 外贸自建…

SAP LU04记账更改通知单创建转储单报错:L3094 记帐修改没有份存在

解决办法&#xff1a; 使用事务码LU02&#xff0c;修改过账更改状态&#xff0c;将过账更改状态改为U&#xff0c;强制关闭 1. LU04 查找记账更改通知单号 2. 事务码LU02修改状态 这个时候再用LU04去查看的时候&#xff0c;就不会再显示了

一个ETL流程搞定数据脱敏

数据脱敏是什么&#xff1f; 数据脱敏是指在数据处理过程中&#xff0c;通过一系列的技术手段去除或者替换敏感信息&#xff0c;以保护个人隐私和敏感信息的安全的过程。数据脱敏通常在数据共享、数据分析和软件测试等场景下使用&#xff0c;它旨在降低数据泄露和滥用的风险。…

Sealos 云操作系统私有化部署教程

Sealos 私有云已经正式发布了&#xff0c;它为企业用云提供了一种革命性的新方案。Sealos 的核心优势在于&#xff0c;它允许企业在自己的机房中一键构建一个功能与 Sealos 公有云完全相同的私有云。这意味着企业可以在自己的控制和安全范围内&#xff0c;享受到公有云所提供的…

4.22每日一题(累次积分的计算:交换次序)

注&#xff1a;因为 是积不出的函数&#xff0c;所以先不用算&#xff0c;最后发现&#xff0c;出现dx与dy可以相互抵消&#xff0c;即可算出答案

【TypeScrpt算法】算法的复杂度分析

算法的复杂度分析 什么是算法复杂度&#xff1f; 不同的算法&#xff0c;其实效率是不一样的 让我举一个案例来比较两种不同的算法在查找数组中给定元素的时间复杂度 [1,2,3,4,5,6,7,...9999,n] 顺序查找 这种方法从头到尾遍历整个数组&#xff0c;依次比较每个元素和给定元…

Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

JenkinsMavenGitlabTomcat 自动化构建打包、部署 1、环境需求 本帖针对的是Linux环境&#xff0c;Windows或其他系统也可借鉴。具体只讲述Jenkins配置以及整个流程的实现。 1.JDK&#xff08;或JRE&#xff09;及Java环境变量配置&#xff0c;我用的是JDK1.8.0_144&#xff0…

Talk | UCSB博士生宋珍巧:基于人工智能的功能性蛋白质设计

本期为TechBeat人工智能社区第549期线上Talk。 北京时间11月22日(周三)20:00&#xff0c;UC Santa Barbara博士生—宋珍巧的Talk已准时在TechBeat人工智能社区开播&#xff01; 她与大家分享的主题是: “基于人工智能的功能性蛋白质设计”&#xff0c;介绍了如何利用机器学习算…

好用的局域网监控软件推荐

局域网监控软件是一种用于监控局域网内计算机使用情况的软件&#xff0c;可以帮助企业管理者更好地了解员工的工作状态和行为&#xff0c;规范上网行为并保护企业网络资源。 一、域之盾软件 这是一款专业的上网监控软件&#xff0c;它支持多种操作系统和平台&#xff0c;可以全…

CodeWhisperer 体验总结

CodeWhisperer 体验总结 | CodeWhisperer 是一款亚马逊新推出的通用代码生成器 可以实时进行代码数据的提供 还可以定义安全问题 CodeWhisperer 对个人用户是免费使用 企业用户需要订阅使用 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例…

【精选】改进的YOLOv5:红外遥感图像微型目标的高效识别系统

1.研究背景与意义 随着科技的不断发展&#xff0c;红外遥感技术在军事、安防、环境监测等领域中得到了广泛应用。红外遥感图像具有独特的优势&#xff0c;可以在夜间或恶劣天气条件下获取目标信息&#xff0c;因此在小目标检测方面具有重要的应用价值。然而&#xff0c;由于红…

当当网获得dangdang商品详情商品列表API 测试请求入口

item_get-获得dangdang商品详情 获取商品详情 item_search-按关键字搜索dangdang商品 获取商品列表 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请…

python数据结构与算法-13_高级排序算法-快速排序

快速排序 快速排序名字可不是盖的&#xff0c;很多程序语言标准库实现的内置排序都有它的身影&#xff0c;我们就直奔主题吧。 和归并排序一样&#xff0c;快排也是一种分而治之(divide and conquer)的策略。归并排序把数组递归成只有单个元素的数组&#xff0c;之后再不断两两…

PC端页面进去先出现加载效果

自定义指令v-loading&#xff0c;只需要绑定Boolean即可 v-loading“loading” <el-table :data"list" border style"width: 100%" v-loading"loading"><el-table-column align"center" label"序号" width"5…

java--static修饰成员变量

1.static 叫静态&#xff0c;可以修饰成员变量、成员方法。 2.成员变量按照有无static修饰&#xff0c;分为两种&#xff1a; ①类变量&#xff1a;有static修饰&#xff0c;属于类&#xff0c;在计算机里只有一份&#xff0c;会被类的全部对象共享(不管那个类调用的&#x…

脸爱云一脸通智慧管理平台未授权访问

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、漏洞概述 脸爱云一脸通智慧管理平台存在严重漏洞&#xff0c;允许…

数据结构与算法编程题13

设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C&#xff0c;其中B表的结点为A表中值小于零的结点&#xff0c;而C表的结点为A表中值大于零的结点&#xff08;链表A中的元素为非零整数&#xff0c;要求B、C表利用A表的结点&#xff09; for example: A -1 2 …

企业软件定制开发有哪些优势?|app小程序网站搭建

企业软件定制开发有哪些优势&#xff1f;|app小程序网站搭建 企业软件定制开发是一种根据企业特定需求开发定制化软件的服务。相比于购买现成的软件产品&#xff0c;企业软件定制开发具有许多优势。 首先&#xff0c;企业软件定制开发可以满足企业独特需求。每个企业都有自己独…

C++基础从0到1入门编程(四)类和对象

系统学习C 方便自己日后复习&#xff0c;错误的地方希望积极指正 往期文章&#xff1a; C基础从0到1入门编程&#xff08;一&#xff09; C基础从0到1入门编程&#xff08;二&#xff09; C基础从0到1入门编程&#xff08;三&#xff09; 参考视频&#xff1a; 1.黑马程序员匠心…