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.pswp.cn/pingmian/78487.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78487.shtml
英文地址,請注明出處:http://en.pswp.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…