GitOps进化:深入探讨 Argo CD 及其对持续部署的影响

什么是 GitOps?

虽然软件开发生命周期的大部分已经实现自动化,但基础设施仍然在很大程度上依赖于人工,需要专业团队的参与。随着当今基础设施需求的不断增长,实施基础设施自动化变得越来越重要。现代基础设施需要具备弹性,以便能够有效管理持续部署所需的云资源。

现代云原生应用程序的开发都兼顾了速度和规模。拥有成熟 DevOps 文化的组织每天可以将代码部署到生产环境中数百次。DevOps 团队可以通过版本控制、代码审查和 CI/CD 流水线等开发最佳实践来实现这一点,这些实践可以自动化测试和部署。

GitOps 用于自动化基础设施的配置流程,尤其是现代云基础设施。与团队使用应用程序源代码的方式类似,采用 GitOps 的运营团队使用以代码形式存储的配置文件(即基础设施即代码)。GitOps 配置文件每次部署时都会生成相同的基础设施环境,就像应用程序源代码每次构建时都会生成相同的应用程序二进制文件一样。

Argo CD是什么?

Argo CD 是针对 Kubernetes 的声明式 GitOps 持续交付工具。

 


Argo CD 的主要功能

  • 基于 Git 的工作流:以代码形式管理基础设施和应用程序。
  • 声明式应用程序管理和同步机制。
  • 支持多个 Git 仓库和应用程序源。
  • 自动回滚和应用程序状态健康检查。


Argo CD 的架构

Argo CD 组件

  • Web 应用

    Argo CD 附带一个强大的 Web 界面,可用于管理部署在给定 Kubernetes 集群中的应用程序。

  • CLI

    Argo CD 提供了一个 CLI,用户可以使用它与 Argo CD API 交互。该 CLI 还可用于自动化和脚本编写。

  • API 服务器

    定义 Argo CD 公开的专有 API,用于支持 Web 应用和 CLI 功能。

  • 应用程序控制器

    应用程序控制器负责协调 Kubernetes 中的应用程序资源,将所需的应用程序状态(由 Git 提供)与实时状态(由 Kubernetes 提供)同步。应用程序控制器还负责协调项目资源。

  • ApplicationSet 控制器

  ApplicationSet 控制器负责协调 ApplicationSet 资源。

  • Repo 服务器

  Repo 服务器在 Argo CD 架构中扮演着重要的角色,因为它负责与 Git 存储库交互,为属于给定应用程序的所有 Kubernetes 资源生成所需的状态。

  • Redis

Argo CD 使用 Redis 提供缓存层,以减少发送到 Kube API 以及 Git 提供程序的请求。它还支持一些 UI 操作。

  • Kube API

Argo CD 控制器将连接到 Kubernetes API 以运行协调循环。

  • Git

作为 gitops 工具,Argo CD 要求在 Git 存储库中提供 Kubernetes 资源的所需状态。

我们在这里使用“git”来代表实际的 git 存储库、Helm 存储库或 OCI 工件存储库。Argo CD 支持所有这些选项。

  • Dex

Argo CD 依赖 Dex 为外部 OIDC 提供程序提供身份验证。但是,可以使用其他工具代替 Dex。

Argo CD 与 Git 仓库和 Kubernetes 集群交互的工作流程。


安装和配置

1.创建namespace 

图片

2. 使用官方的yaml文件来安装

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

3. 等待Argo CD 组件启动和运行

ninjamac@ip-192-168-1-101 ~ % kubectl get pod -n argocd
NAME                                               READY   STATUS    RESTARTS      AGE
argocd-application-controller-0                    1/1     Running   0             12m
argocd-applicationset-controller-cc68b7b7b-fvdb8   1/1     Running   0             12m
argocd-dex-server-555b55c97d-2sbsl                 1/1     Running   1 (92s ago)   12m
argocd-notifications-controller-65655df9d5-xgtw9   1/1     Running   0             12m
argocd-redis-764b74c9b9-m7qn7                      1/1     Running   0             12m
argocd-repo-server-7dcbcd967b-k9nbz                1/1     Running   0             12m
argocd-server-5b9cc8b776-rkfkv                     1/1     Running   0             12m

4.访问Argo CD API server

使用 LoadBalancer 服务公开 Argo CD API 服务器(用于外部访问)或使用端口转发进行本地访问:

kubectl port-forward svc/argocd-server -n argocd 8080:443Forwarding from 127.0.0.1:8080 -> 8080Forwarding from [::1]:8080 -> 8080

获得Argo CD 管理员密码

ninjamac@ip-192-168-1-101 kong % argocd admin initial-password -n argocd
xxxxxxxxxxxxxx

登录Argo CD

在浏览器中输入http://127.0.0.1:8080,输入用户名admin和修改后的密码。


使用 Argo CD 管理应用程序

首先,我们需要运行以下命令将当前命名空间设置为 argocd:

ninjamac@ip-192-168-1-101 argocd % kubectl config set-context --current --namespace=argocd
Context "minikube" modified.

使用以下命令创建示例guestbook应用程序: 

ninjamac@ip-192-168-1-101 argocd % argocd login 127.0.0.1:8080 --username admin --password argocd2025WARNING: server certificate had error: tls: failed to verify certificate: x509: certificate signed by unknown authority. Proceed insecurely (y/n)? y   
'admin:login' logged in successfully
Context '127.0.0.1:8080' updated
ninjamac@ip-192-168-1-101 argocd % argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default
application 'guestbook' created


将 Argo CD 与 Jenkins 流水线集成

生成token 

ninjamac@ip-192-168-1-101 argocd % curl -X POST https://localhost:8080/api/v1/session -H "Content-Type: application/json" -d '{"username": "admin", "password": "xxxxxxxx"}' -k   
{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcmdvY2QiLCJzdWIiOiJhZG1pbjpsb2dpbiIsImV4cCI6MTc0NTcxNjkzNCwibmJmIjoxNzQ1NjMwNTM0LCJpYXQiOjE3NDU2MzA1MzQsImp0aSI6ImU0ZDQwNjk0LTNkYTktNDBiNS1hODRmLWM1ZWU0NDJkMGQxMCJ9.OkmofUhhb7EG9TDSm_ZQNE9-HQBCYpSVKVXtN70wAJI"}

 创建jenkins file

pipeline {agent anyenvironment {ARGOCDSERVER = "https://argocd-server.example.com"ARGOCDPROJECT = "my-project"ARGOCDAPP = "my-app"K8SCONTEXT = "my-k8s-context"K8SNAMESPACE = "my-namespace"ARGOCDSYNCOPTIONS = "--sync-policy=auto --prune"}stages {stage('Deploy') {steps {script {def argocdToken = credentials('argocd-token')def appSpecFile = readFile("argocd/myapp.yaml")def argocd = new Argocd(server: ARGOCDSERVER, token: argocdToken)argocd.createApplication(appSpecFile, project: ARGOCDPROJECT)argocd.syncApplication(ARGOCDAPP, ARGOCDSYNCOPTIONS)}}}}
}

创建myapp.yaml 

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: myapp
spec:destination:server: https://kubernetes.default.svcnamespace: myappproject: defaultsource:repoURL: https://github.com/myorg/myapp.gittargetRevision: HEADpath: kubernetes/overlays/devsyncPolicy:automated:prune: trueselfHeal: truesyncOptions:- --skip-hookshelm:valueFiles:- values.yaml

创建deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: myapplabels:app: myapp
spec:replicas: 1selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myappimage: myorg/myapp:latestports:- containerPort: 8080env:- name: MYAPP_ENVvalue: "prod"

创建service.yaml

apiVersion: v1
kind: Service
metadata:name: myapplabels:app: myapp
spec:selector:app: myappports:- name: httpport: 80targetPort: 8080type: LoadBalancer

  

Argo CD 与GitLab CI的集成


让我们深入了解 ArgoCD 与 GitLab CI 集成的详细步骤。

GitLab 和 ArgoCD 简化了 CI/CD 工作流程,支持无缝部署到 Kubernetes 集群。


配置 GitLab CI/CD 流水线


设置您的 GitLab CI 流水线,通过 ArgoCD 触​​发部署。

在您的 git 仓库根目录中创建 .gitlab-ci.yaml 文件

stages:- build- deployvariables:# Set your Docker image name to nginxIMAGE_NAME: nginxIMAGE_TAG: latest# Define your AWS ECR repository URLECR_REPOSITORY: your-account-id.dkr.ecr.your-region.amazonaws.com/nginx

# Define your Kubernetes context for EKSKUBE_CONTEXT: dev-eks-clusterAWS_ACCESS_KEY_ID: $DEV_AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY: $DEV_AWS_SECRET_ACCESS_KEYbuild:stage: buildScript:- apk add --no-cache aws-cli  - aws configure set aws_access_key_id ${AWS_ACCESS_KEY_ID} --profile default- aws configure set aws_secret_access_key ${AWS_SECRET_ACCESS_KEY} --profile default- echo "Building the Nginx Docker image"- docker build -t $IMAGE_NAME:$IMAGE_TAG .- echo "Logging in to AWS ECR..."- aws ecr get-login-password --region your-region | docker login --username AWS --password-stdin $ECR_REPOSITORY- echo "Tagging Docker image for ECR..."- docker tag $IMAGE_NAME:$IMAGE_TAG $ECR_REPOSITORY:$IMAGE_TAG- echo "Pushing Docker image to ECR..."- docker push $ECR_REPOSITORY:$IMAGE_TAGonly:- devdeploy:stage: deployScript:- apk add --no-cache aws-cli  - aws configure set aws_access_key_id ${AWS_ACCESS_KEY_ID} --profile default- aws configure set aws_secret_access_key ${AWS_SECRET_ACCESS_KEY} --profile default- echo "Deploying to Kubernetes"- echo "Setting Kubernetes context to $KUBE_CONTEXT"- kubectl config use-context $KUBE_CONTEXT  # Switch to the specified Kubernetes context- kubectl apply -f k8s/deployment.yamlonly:- dev


上述流水线包含一个构建阶段和一个部署阶段,部署阶段将在构建成功后触发 Kubernetes 部署。

设置 ArgoCD 以跟踪您的 GitLab 代码库


现在,配置 ArgoCD 以监控 Git 代码库的更改并自动部署更新。

创建 ArgoCD 应用程序 YAML:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: gitlab-appnamespace: argocd
spec:project: defaultsource:repoURL: 'https://gitlab.com/repo-name.git'path: 'k8s'targetRevision: developerdestination:server: 'https://kubernetes.default.svc'namespace: argocdsyncPolicy:automated:prune: trueselfHeal: true


现在,使用以下命令应用上述文件:

Kubectl apply -f gitlab-argo.yaml -nargocd


此配置指示 ArgoCD 跟踪 GitLab 代码库中的更改并将更新部署到 Kubernetes 集群中。

触发 GitLab CI 流水线


将更改推送到 GitLab 中的开发者分支,.gitlab-ci.yml 中定义的流水线将触发:

  1. 构建阶段:执行测试或构建 Docker 镜像并将其推送到 aws ecr 代码库。
  2. 部署阶段:推送配置更改,这些更改将由 ArgoCD 同步并自动应用到您的 Kubernetes 集群。

您可以在 ArgoCD 用户界面中监控部署进度,从而可以直观地了解应用程序的状态。

将 GitLab CI 的灵活性与 ArgoCD 的强大功能相结合,您的 Kubernetes 工作流程将焕然一新。


监控和可观察性

应用控制器


ArgoCD 中的应用控制器负责管理和协调应用程序的预期状态。监控应用控制器时,您可以收集和分析以下指标和信息:

  • 应用同步状态:您可以监控应用程序的同步状态,包括它们是否为最新版本或是否遇到同步错误。
  • 资源健康状况:监控应用程序内资源(例如 Pod、服务)的健康状况,以检测崩溃或资源过度使用等问题。
  • 应用部署历史记录:跟踪应用程序部署和回滚的历史记录,以识别趋势和异常。
  • 性能指标:收集与应用控制器的资源消耗和响应时间相关的性能指标。
  • 错误和事件日志:收集应用控制器生成的日志和事件,以诊断和解决问题。


ArgoCD 服务器


ArgoCD 服务器是核心组件,它提供基于 Web 的用户界面和 API,用于管理应用程序和 GitOps 工作流。监控 ArgoCD 服务器时,您可以捕获以下信息:

  • API 请求指标:监控 ArgoCD REST API 的使用情况和性能,包括请求数量、响应时间和错误率。
  • 用户身份验证和授权:跟踪用户登录、身份验证失败和访问控制事件,以确保安全性和合规性。
  • 资源使用情况:监控服务器资源利用率(CPU、内存),以检测性能瓶颈和扩展需求。
  • 应用程序活动:收集有关应用程序 CRUD(创建、读取、更新、删除)操作和部署的信息。
  • 仪表板指标:如果 ArgoCD 提供基于 Web 的仪表板,您可以监控仪表板的使用情况、用户交互和导航模式。

代码库服务器


ArgoCD 中的代码库服务器负责与 Git 代码库交互,以获取应用程序清单并同步应用程序状态。监控代码库服务器时,您可以收集以下数据:

  • Git 代码库同步:监控 Git 代码库同步的状态,包括同步错误和代码库获取时间。
  • 资源缓存:跟踪 Git 仓库资源的缓存,这有助于减少频繁获取数据的需求,从而优化性能。
  • 身份验证和访问:监控 Git 仓库的身份验证和访问控制,以确保对 Git 仓库的安全访问。
  • 资源完整性:验证 Git 仓库数据的完整性,并识别任何损坏或不一致问题。
  • 资源使用情况:监控仓库服务器的资源利用率,例如 CPU 和内存消耗。


在本文中,我将仅指导如何通过应用程序控制器和 ArgoCD 服务器公开指标,并使用其 CRD 在 Prometheus 端收集这些指标。

ArgoCD 服务器指标 (8083)


编辑 argocd-server svc 文件 (kubectl edit svc argocd-server -n argocd)
如果 argocd-server svc 文件中不存在该端口,请在 spec.ports 下添加指标端点端口,目标端口为 8083

编辑 argocd-server 部署文件 (kubectl edit deploy argocd-server -n argocd)
在 argocd-server 部署文件的 spec.template.annotations 下添加以下内容:

在 argocd-server 部署文件的 spec.template.spec.containers.args 下添加以下内容:

在 ports.containerPort 下,根据需要将端口更改为 8083
完成上述所有步骤后,您可以验证指标是否在 8083 端口公开。
操作方法:kubectl port-forward -n argocd svc/argocd-server 8083
检查 localhost:8083/metrics 是否可用。

验证成功后,可以在 Prometheus 端设置服务监视器,以便在该端点查找指标。
argocd-server 指标的 ServiceMonitor:

SVC 名称应准确指定,例如:argocd-server

ServiceMonitor 配置成功后,它应该以如下方式在 Prometheus 用户界面中可见。

应用程序控制器指标 (8082)


在本例中,Argocd-application-controller 是一个 StatefulSet。我们可以通过以下命令检查 StatefulSet 配置:kubectl edit statefulset <name> -n <namespace>

在 spec.template.metadata.annotations 下添加:

值得注意的是,在服务监视器或 Pod 监视器的 matchLabels 下,必须准确指定标签,否则可能导致 CRD 配置错误。
实际上,指定的名称应该与选择器下相关 Pod 或服务中的键值对匹配。如下图所示。

完成这些步骤后,我们可以运行以下命令进行端口转发,以便在 8082 端口收集指标:kubectl port-forward -n argocd pod/argocd-application-controller-0 8082
与 argocd-server 类似,可以通过检查 localhost:8082/metrics 端点来验证指标是否从 argocd 公开。

将指标获取到 Prometheus

由于应用程序控制器指标通过 statefulSet 公开,因此必须创建一个 PodMonitor。如果为此目的创建了 servicemonitor,argocd-application-controller 将不会被列为活动目标之一,因此标签会被丢弃,从而导致 servicemonitor 中 matchLabels 下提到的标签无法匹配。因此,必须实现 podmonitor。

成功配置 PodMonitor 后,它应该会以这样的方式显示在 Prometheus 界面中。

终于!您可以通过 Prometheus 查看指标了 


使用 Argo CD 的最佳实践

1. 拥抱 GitOps 原则

Argo CD 的核心是一款 GitOps 工具。为了有效地使用它,您应该完全拥抱 GitOps 原则:

使用 Git 作为单一事实来源:所有应用程序清单、配置文件和环境状态都应驻留在受版本控制的 Git 仓库中。这种方法可确保您的 Kubernetes 集群始终反映 Git 中定义的状态,从而提高一致性和可追溯性。
使用 Git 提交自动同步:配置 Argo CD 以自动将应用程序状态与 Git 提交同步。此设置可确保推送到仓库的任何更改都能快速一致地反映在您的 Kubernetes 集群中。


2. 合理组织仓库和清单


合理组织仓库和清单对于可维护性和可扩展性至关重要:

使用多仓库方法:对于较大的组织或项目,可以考虑将清单拆分到多个仓库中——一个用于应用程序清单,一个用于特定于环境的配置,另一个用于共享资源。这种结构使权限管理、关注点分离和维护清晰的历史记录更加容易。
利用 Helm Charts 或 Kustomize:使用 Helm 或 Kustomize 管理您的 Kubernetes 清单。这些工具提供的模板功能可以减少重复,简化配置管理,并更轻松地处理应用程序的多个环境或版本。

3. 正确配置 Argo CD 应用程序


Argo CD 使用“应用程序”来表示部署。正确的配置是关键:

使用声明式应用程序定义:在 Git 代码库中以声明式方式定义您的 Argo CD 应用程序。这种做法使您能够将应用程序作为代码进行管理、版本控制更改并强制一致性。
设置适当的同步策略:配置同步策略以匹配您的部署策略。对于持续部署到非生产环境,请使用“自动同步”,对于可能需要人工审批的生产部署,请使用“手动同步”。


4. 实施强大的安全实践


在管理大规模部署时,安全性至关重要。以下是一些关键实践:

使用 RBAC 进行访问控制:在 Argo CD 中实施基于角色的访问控制 (RBAC),以限制对关键操作的访问。为不同的团队定义角色,并确保只有授权用户才有权部署或修改应用程序。
启用单点登录 (SSO) 和外部身份验证:将 Argo CD 与外部身份验证提供程序(例如 OAuth、SAML 或 LDAP)集成,以启用单点登录 (SSO)。此设置简化了用户管理,增强了安全性,并符合组织标准。
监控访问日志和审计跟踪:定期监控 Argo CD 访问日志和审计跟踪,以跟踪用户活动。这些日志对于检测未经授权的访问或配置更改以及满足合规性要求至关重要。


5. 优化应用程序健康和同步设置


Argo CD 提供健康检查和同步选项,以确保应用程序保持理想状态:

定义自定义健康检查:使用自定义健康检查来验证除默认 Kubernetes 探测之外的应用程序健康状况。这可能包括对应用程序功能至关重要的特定服务、端点或业务逻辑的检查。
启用资源修剪:Argo CD 允许您修剪 Git 代码库中不再定义的资源。此功能有助于防止配置漂移,并确保您的集群始终与所需状态同步。
利用同步:使用同步波来控制资源同步的顺序。当您需要确保某些资源(例如 ConfigMap 或 Secret)先于其他资源(例如 Deployment)创建时,此做法尤为有用。


Argo CD 监控和可观察性最佳实践


1. 启用详细指标和警报
监控对于维护应用程序的健康和性能至关重要。Argo CD 提供了多种内置监控功能:

启用 Prometheus 指标:配置 Argo CD 以将指标公开给 Prometheus。此集成允许您跟踪各种指标,例如同步操作的数量、同步时长和应用程序健康状况。
为关键事件设置警报:使用 Prometheus Alertmanager 或 Grafana Alerts 等警报工具,为关键事件(例如同步失败、应用程序降级或漂移检测)创建通知。警报可帮助您快速响应事件并保持高可用性。

2. 有效利用 Argo CD 仪表板
Argo CD 仪表板提供应用程序及其状态的实时视图:

监控应用程序的健康状况和状态:定期检查仪表板了解应用程序的状态,包括同步状态、健康检查和错误消息。仪表板提供可视化概览,帮助您快速识别和解决问题。
使用事件日志进行故障排除:Argo CD 的事件日志会捕获与应用程序相关的所有同步操作、错误和事件。利用此日志来解决问题、了解根本原因并实施纠正措施。
3. 与外部可观察性工具集成
虽然 Argo CD 提供了基本的监控功能,但与外部可观察性工具集成可以增强可见性:

使用 Grafana 进行高级可视化:设置 Grafana 以可视化从 Argo CD 收集的 Prometheus 指标。创建自定义仪表板来监控部署的性能、健康状况和状态。
与集中式日志系统集成:将 Argo CD 日志转发到 Elasticsearch、Loki 或 Fluentd 等集中式日志解决方案。此集成支持高级日志分析、搜索以及与其他基础架构组件的关联。
4. 实施 GitOps 监控工具
GitOps 监控工具提供用于观察和管理 GitOps 工作流的专用功能:

使用 Argo CD 通知:配置 Argo CD 通知,以便直接在 Slack、Microsoft Teams 或电子邮件等工具中接收警报和通知。此集成可帮助团队实时了解部署事件和应用程序状态。
利用 Flux 或 Weave GitOps 等工具:将 Argo CD 与其他 GitOps 工具(例如 Flux 或 Weave GitOps)结合使用,以扩展跨多个集群或环境的监控和可观察性功能。


优化 Argo CD 性能的技巧


扩展 Argo CD 以实现高可用性:以高可用性模式部署 Argo CD,每个组件(例如 API 服务器、控制器和存储库服务器)均有多个副本,以处理大规模部署并确保冗余。
调整资源限制和请求:为 Argo CD 组件定义适当的资源请求和限制,以确保最佳性能,避免资源争用。定期监控资源使用情况,并根据工作负载调整限制。
使用缓存存储库实现更快同步:在 Argo CD 中启用存储库缓存以加快同步操作速度,尤其适用于大型存储库或包含多个应用程序的环境。缓存可减少从 Git 获取清单并将其应用于集群所需的时间。
定期清理旧应用程序和资源:从 Argo CD 和 Git 存储库中删除未使用的应用程序、资源和清单。此清理操作可减少混乱,最大限度地降低资源消耗,并确保精简高效的部署环境。


结论

通过遵循这些最佳实践和技巧,您可以充分利用 Argo CD 的强大功能,在 Kubernetes 环境中实现无缝的应用程序部署和监控。从拥抱 GitOps 原则、优化部署配置到增强可观察性和安全性,Argo CD 提供了一套全面的功能,可简化您的持续交付工作流程。

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

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

相关文章

通过示例学习:连续 XOR

通过示例学习&#xff1a;连续 XOR 如果我们想在 PyTorch 中构建神经网络&#xff0c;可以使用 &#xff08;with&#xff09; 指定所有参数&#xff08;权重矩阵、偏差向量&#xff09;&#xff0c;让 PyTorch 计算梯度&#xff0c;然后调整参数。但是&#xff0c;如果我们有很…

百度Create大会深度解读:AI Agent与多模态模型如何重塑未来?

目录 百度Create大会亮点全解析&#xff1a;从数字人到Agent生态布局 数字人商业化&#xff1a;从"拟人"到"高说服力"的进化 Agent生态&#xff1a;从"心响"App看百度的Agent战略布局 "心响"App的技术架构与创新点 多模态大模型&a…

django filter 日期大于当前日期的

在Django中&#xff0c;如果你想要过滤出日期大于当前日期的记录&#xff0c;你可以使用Django的QuerySet API中的__gt&#xff08;大于&#xff09;操作符。这里是如何做到这一点的步骤&#xff1a; 确定你的模型&#xff1a;首先&#xff0c;确保你有一个模型&#xff08;Mo…

C#本地使用离线ocr库识别图片中文本,工具包PaddleOCRSharp

C#本地使用离线ocr库识别图片文本&#xff0c;工具包PaddleOCRSharp PaddleOCRSharp介绍 项目地址&#xff1a;https://github.com/raoyutian/PaddleOCRSharp PaddleOCRSharp 是一个.NET版本OCR可离线使用类库。项目核心组件PaddleOCR.dll目前已经支持C\C、.NET、Python、Go…

缺省处理、容错处理

布尔判定 假&#xff1a;false 0 null undefined NaN 可选符.?和&#xff1f;&#xff1f; let obj {name: jim,data: {money: 0,age: 18,fn(a){return a}} }1、如果左侧的值为null或者undefined&#xff0c;则使用右侧值。需要使用"??" obj?.data?.a…

【Java面试题系列02】Java 集合常见面试题

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、Java 基础面试题&#xff1a;☀️☀️☀️1、说说 Java 中 HashMap 的原理&#xff1f;2、HashMap 的扩容机制&#xff1f;3、为什么 Java 中 HashMap 的默认负载因子是 0.75?4、JDK 1.8 对 HashMap 除了红黑树还…

如何创建并使用极狐GitLab 部署令牌?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 部署令牌 (BASIC ALL) 您可以使用部署令牌来启用部署任务的身份验证&#xff0c;而与用户账户无关。在大多数情况下&#xf…

OpenGl ES 3.0 笔记一:初步概念

&#x1f3af; 整体比喻&#xff1a;开一场 3D 打印画展&#xff01; 想象你在做一件事情&#xff1a;「拿设计图&#xff0c;把它画在一张纸上」。 这整个流程就好像 GPU 在渲染一幅画。 而下面这几个阶段&#xff0c;就是这场「画展」里每个具体的人或机器要做的事情&#x…

人类社会的第四阶段

本书的主旨是探讨一场新的权力革命&#xff0c;它将以20世纪民族国家的毁灭为代价&#xff0c; 解放出个体。创新&#xff0c;以前所未有的方式改变了暴力的逻辑&#xff0c;并且正在革新未来的 边界。如果我们的推论是正确的&#xff0c;你们正站在一场有史以来最宏大的革命的…

位置差在坐标系间的相互转换

1 NED转经纬高 &#xff08;n 系下的北向、东向和垂向位置差异&#xff08;单位 m&#xff09;转化为纬度、经度和高程分量的差异&#xff09; 2 基站坐标转换 纬度、经度、高程 到 ECEF %纬度、经度、高程 到 ECEF clc; clear; glvs; addpath(genpath(E:\GNSSINS\ACES)…

WPF定义扩展属性和依赖属性

WPF扩展属性与依赖属性详解 一、依赖属性(Dependency Property)详解 1. 什么是依赖属性? 依赖属性是WPF框架的核心特性之一,它允许属性值依赖于: 父元素的属性值(继承)样式和模板动画数据绑定资源查找2. 依赖属性的特点 ​​属性值继承​​:子元素可以继承父元素的属性…

边缘函数:全栈开发的最后1毫秒性能革命

一、边缘计算的时空折叠术 1. 传统CDN vs. 智能边缘网络 全球电商平台实测数据&#xff1a; 场景云端处理延迟边缘处理延迟转化率提升搜索建议320ms8ms18%个性化推荐450ms12ms27%实时库存检查680ms9ms42%欺诈检测920ms15ms63% 二、边缘全栈架构的量子纠缠 1. 代码的时空分布…

Codeforces Round 1021 (Div. 2) D. Baggage Claim(建图)

每周五篇博客&#xff1a;&#xff08;4/5&#xff09; https://codeforces.com/contest/2098/problem/D 题意 每个机场都有一个行李索赔区&#xff0c;巴尔贝索沃机场也不例外。在某个时候&#xff0c;Sheremetyevo的一位管理员提出了一个不寻常的想法&#xff1a;将行李索…

LLM(大语言模型)技术的最新进展可总结

截至2025年4月26日&#xff0c;LLM&#xff08;大语言模型&#xff09;技术的最新进展可总结为以下关键方向&#xff1a; 1. 架构创新与性能突破 多模态能力深化&#xff1a;GPT-4o等模型通过统一架构支持文本、图像、音频和视频的跨模态推理&#xff0c;显著提升复杂场景下的…

黑马点评redis改 part 6

GEO数据结构 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本中加入了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来检索数据。常见的命令有&#xff1a; GEOADD&#xff1a;添加一个地理空间信息&#xff0c;包含&a…

Spring_MVC 中的 JSON 数据处理与 REST 风格开发

Spring_MVC 中的 JSON 数据处理与 REST 风格开发 一、JSON 格式参数 1. 格式布置 依赖导入 为了处理 JSON 数据&#xff0c;需要在项目中引入 Jackson 库&#xff0c;它是 Spring_MVC 默认使用的 JSON 处理工具。 <dependency><groupId>com.fasterxml.jackson…

蓝桥杯 8. 移动距离

移动距离 原题目链接 题目描述 X 星球居民小区的楼房全是一样的&#xff0c;并且按矩阵样式排列。楼房的编号为 1, 2, 3, ⋯⋯。 当排满一行时&#xff0c;从下一行相邻的楼往反方向排号。 例如&#xff0c;当小区排号宽度为 6 时&#xff0c;排列如下&#xff1a; 1 2 …

第11章 安全网络架构和组件(一)

11.1 OSI 模型 协议可通过网络在计算机之间进行通信。 协议是一组规则和限制&#xff0c;用于定义数据如何通过网络介质&#xff08;如双绞线、无线传输等&#xff09;进行传输。 国际标准化组织(ISO)在20世纪70年代晚期开发了开放系统互连(OSI)参考模型。 11.1.1 OSI模型的…

文献分享:一种四价双特异性抗体的功能性和IgG样稳定性、药理学和可开发特性研究

背景 双特异性抗体&#xff08;bsAb&#xff09;是一种有前途的药物形式&#xff0c;能够同时结合相同或不同抗原上的两个不同表位。迄今为止&#xff0c;已有14个双特异性抗体药物获得上市批准&#xff0c;尽管取得了这些成功并且迄今为止设计了多种形式&#xff0c;但具有高…

英文中数字读法规则

以下是英文中数字读法的详细规则&#xff0c;涵盖基本数字、大数字、小数、分数、序数词及特殊场景&#xff08;如电话号码、年份、金额等&#xff09;&#xff1a; 一、基本数字&#xff08;0-10&#xff09; 数字基数词&#xff08;Cardinal&#xff09;序数词&#xff08;O…