【云原生 | Kubernetes 系列】--Gitops持续交付 ArgoCD 部署与概念

news2025/8/7 11:25:28

1. Pull Pipeline

使用Pull Pipeline可以不在集群以外的地方保存凭据,避免凭据泄露的风险

工作模式:

  1. 两个Git仓库.

    1. 程序代码 程序员维护

      分支策略
      Hotfix
      Feature
      Develop
      Release
      Master

    2. 部署配置 基于OAM管理

  2. Updater

    CI流水线交付了新的Image

  3. Operator

    1. Spec 期望状态

      1. 当分支提交合并,那么部署配置中的相应配置也应随之改变.
    2. Status 实际状态

      1. 从实际状态去读期望状态.
    3. 环境

      1. 根据不同分支,对应不同的环境(develoy,stage,production)

2. Stages in Gitops Ci Pipeline 分支策略

  1. Pre-build Stage构建预备阶段
    1. Pull Request
    2. Code Review
    3. Vulnerability Scan(漏扫)
    4. Code Analysis
  2. Build Stage
    1. Build
    2. Unit Test
    3. Code Coverage
    4. Docker Build
    5. Docker Push
  3. GitOps CI Stage
    1. Git Clone Config Repo
    2. Update Mainfests
    3. Git Commit & Git Push
  4. Post-build Stage
    1. Publish CI Metrics
    2. Build Notification
  5. GitOps CD Stage
    1. Git Clone Config Repo
    2. Discover Manifests
    3. kubectl apply Helm Install
  6. Post-deployment Stage
    1. Function Test
    2. Runtime Vulnerability
    3. Publish CD Metrics

3. 分支策略

3.1 单分支策略

通常单分支策略也称为Featrue Branch Workflow,其中Master Branch承载项目变更历史.
研发人员创建短生命周期的Featrue分支,完成Feature目标相关的研发任务.
Feature开发完成后,通过PR流程,请求将代码合并至Master Branch
PR得到确认后,CI Pipeline即被触发,直至最后将Image推送至Registry
测试,预发布,生产使用同一个镜像.所有代码变更都生成在master分支上.

3.2 多分支策略

多分支策略较适用于需要多团队或外部协作的大型项目的管理场景,并且存在多个不同的变种,较为主流是Gitflow模型
Gitflow模型使用Develop Branch保存项目变更历史,而使用Master Branch承载生产发布历史
Feature开发依然使用短生命周期的Feature Branch进行,并在开发目标达成后将代码合并到Develop Branch
计划发布时,将从最新的Develop Branch创建一个短生命周期的Release Branch,基于该分支进行持续测试和Bug修复,直到满足生产标准
Gitflow策略中,仅Release Branch CI过程中生成的镜像才允许部署到生产环境,Develop Branch CI生成的镜像只能用于发布前测试及集成测试,显然.回滚时,也只能使用Release Branch此前的CI Pipeline生成的镜像
用于修复Bug的Hotfix Branch要基于Master Branch创建,同时也需要一个独立CI Pipeline完成必要的CI过程

4. 主流交付方式

交付方式含义缺陷
Deployment滚动仅适用于无状态服务,向后兼容存在问题
Blue-Green蓝绿需要2个环境,可以适用有状态服务
Canary金丝雀较长的部署时间,一段较长的时间内并存2个版本,仅适用于无状态服务
Progressive渐进需要引入监控指标来判定部署结果,较为复杂,仅适用于无状态服务

5. Argocd

​ Argo:
​ CD Gitops
​ Rollouts -->> 取代Deployment,是ArgoCD的高级交付策略工具
​ Workflow 工作流编排
​ Events 触发k8s中的Argo工作流和其他操作

Gitops 基于pull pipeline需要依赖于部署并运行在k8s中的Operator.Operator始终监视着配置仓库,并把配置仓库中定义的以声明式的资源部署到目标集群上.确保status始终接近甚至等同spec中的定义.

Argocd部署并运行在k8s环境上的一个应用.其本身就是一个Operator.
它能够读取Git配置仓库中的定义的部署配置清单.
根据配置清单进行分析,并将其部署到目标集群上.

Argocd会为每一个Application Controller提供一组CRD,用于描述某一个应用程序相关的所有资源应用程序的CRD叫做Application

以特定Repository(配置仓库)作为应用程序部署和管理的唯一可信源,该Repository负责定义Application的期望状态
Application Controller负责将Repository中定义的Application运行于一个特定的目标k8s cluster之上.
Application Controller持续监视,对比Application的期望状态和实际状态,并确保实际状态与期望状态一致.

5.1 ArgoCD主要功能

可以协同使用各种配置管理工具(如Ksonnet/jsonnet,Helm和Kustomize)确保应用程序的真实状态与GitRepo中定义的期望状态保持一致

将应用程序自动部署到指定的目标环境

持续监控已部署的应用程序

基于web和cli的操作接口,以及应用程序可视化

部署或回滚到GitRepo仓库中提交的应用程序的任何状态

PreSync,Sync,PostSync Hooks以支持复杂的应用程序部署策略
例如:blue/green和canary

SSO集成
劫持OIDC,LDAP,SAML2.0,GitLab,Microsoft,LinkedIn等

Webhook集成
GitHub,BitBucket和GitLab

可以独立使用,也可以作为现有Pipeline的一部分使用,例如与Argo Workflow,Jenkins,以及GitLab CI等配合使用

5.2 ArgoCD CRD

  1. Application CRD

定义由ArgoCD管理的应用程序
定义的这些应用程序受控于Application Controller

  1. ApplicationSet CRD

以模板化形式自动生成由ArgoCD管理的应用程序
支持从多个不同的角度构建模板,例如不同的Git Repo或者不同的Kubernetes Cluster等
ApplicationSet受控于专用的ApplicationSet Controller

  1. AppProject CRD

为Application提供逻辑分组,同时提供:
1. 限制可用部署内容(白名单)
1. 限制应用程序可以部署到的目标位置(集群或名称空间)
1. 限制可以部署或不能部署的资源类型(RBAC,CRD,DaemonSet等)

每个Application都必须隶属于AppProject,未指定时,则隶属于名为"default"的默认项目

default项目可以被修改,但不能被删除

5.3 ArgoCd的两种状态

  1. Sync Status
    1. synced 一致
    2. OutofSync 不一致
  2. Health Status
    1. Healthy 健康
    2. Processing 处于尝试转为健康状态的进程中
    3. Degraded 降级
    4. Missing 缺失,在GitRepo中存在资源定义,但未完成部署

6. ArgoCD部署

https://argo-cd.readthedocs.io/en/stable/

镜像获取(这里就不再重复了,可以参考之前的文章)

6.1 部署ArgoCD

kubectl create namespace argocd
wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
sed -i 's#quay.io#harbor.intra.com#g' -i 's#ghcr.io/dexidp#harbor.intra.com/argoproj#g'  install.yaml
sed -i 's#ghcr.io/dexidp#harbor.intra.com/argoproj#g' install.yaml
sed -i 's#redis:7.0.5-alpine#harbor.intra.com/argoproj/redis:7.0.5-alpine#g' install.yaml
kubectl apply -n argocd -f install.yaml

一堆被创建

root@k8s-master-01:~/argocd# kubectl create namespace argocd
namespace/argocd created
root@k8s-master-01:~/argocd# kubectl apply -n argocd -f install.yaml
customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/applicationsets.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/appprojects.argoproj.io created
serviceaccount/argocd-application-controller created
serviceaccount/argocd-applicationset-controller created
serviceaccount/argocd-dex-server created
serviceaccount/argocd-notifications-controller created
serviceaccount/argocd-redis created
serviceaccount/argocd-repo-server created
serviceaccount/argocd-server created
role.rbac.authorization.k8s.io/argocd-application-controller created
role.rbac.authorization.k8s.io/argocd-applicationset-controller created
role.rbac.authorization.k8s.io/argocd-dex-server created
role.rbac.authorization.k8s.io/argocd-notifications-controller created
role.rbac.authorization.k8s.io/argocd-server created
clusterrole.rbac.authorization.k8s.io/argocd-application-controller created
clusterrole.rbac.authorization.k8s.io/argocd-server created
rolebinding.rbac.authorization.k8s.io/argocd-application-controller created
rolebinding.rbac.authorization.k8s.io/argocd-applicationset-controller created
rolebinding.rbac.authorization.k8s.io/argocd-dex-server created
rolebinding.rbac.authorization.k8s.io/argocd-notifications-controller created
rolebinding.rbac.authorization.k8s.io/argocd-redis created
rolebinding.rbac.authorization.k8s.io/argocd-server created
clusterrolebinding.rbac.authorization.k8s.io/argocd-application-controller created
clusterrolebinding.rbac.authorization.k8s.io/argocd-server created
configmap/argocd-cm created
configmap/argocd-cmd-params-cm created
configmap/argocd-gpg-keys-cm created
configmap/argocd-notifications-cm created
configmap/argocd-rbac-cm created
configmap/argocd-ssh-known-hosts-cm created
configmap/argocd-tls-certs-cm created
secret/argocd-notifications-secret created
secret/argocd-secret created
service/argocd-applicationset-controller created
service/argocd-dex-server created
service/argocd-metrics created
service/argocd-notifications-controller-metrics created
service/argocd-redis created
service/argocd-repo-server created
service/argocd-server created
service/argocd-server-metrics created
deployment.apps/argocd-applicationset-controller created
deployment.apps/argocd-dex-server created
deployment.apps/argocd-notifications-controller created
deployment.apps/argocd-redis created
deployment.apps/argocd-repo-server created
deployment.apps/argocd-server created
statefulset.apps/argocd-application-controller created
networkpolicy.networking.k8s.io/argocd-application-controller-network-policy created
networkpolicy.networking.k8s.io/argocd-applicationset-controller-network-policy created
networkpolicy.networking.k8s.io/argocd-dex-server-network-policy created
networkpolicy.networking.k8s.io/argocd-notifications-controller-network-policy created
networkpolicy.networking.k8s.io/argocd-redis-network-policy created
networkpolicy.networking.k8s.io/argocd-repo-server-network-policy created
networkpolicy.networking.k8s.io/argocd-server-network-policy created
root@k8s-master-01:~/argocd# kubectl get pods -n argocd 
NAME                                               READY   STATUS    RESTARTS   AGE
argocd-application-controller-0                    1/1     Running   0          39s
argocd-applicationset-controller-c76998cc5-dd9x7   1/1     Running   0          40s
argocd-dex-server-746dbc4fbb-cntg6                 1/1     Running   0          40s
argocd-notifications-controller-66dbfdb64c-djrcw   1/1     Running   0          40s
argocd-redis-846547fb9-vb86p                       1/1     Running   0          40s
argocd-repo-server-6d4cb54bd6-fkg2n                1/1     Running   0          40s
argocd-server-54fdfb8dbc-ghd6s                     1/1     Running   0          39s
root@k8s-master-01:~/argocd# kubectl api-resources --api-group=argoproj.io
NAME              SHORTNAMES         APIVERSION             NAMESPACED   KIND
applications      app,apps           argoproj.io/v1alpha1   true         Application
applicationsets   appset,appsets     argoproj.io/v1alpha1   true         ApplicationSet
appprojects       appproj,appprojs   argoproj.io/v1alpha1   true         AppProject
root@k8s-master-01:~/argocd# kubectl get svc -n argocd
NAME                                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
argocd-applicationset-controller          ClusterIP   10.200.151.251   <none>        7000/TCP,8080/TCP            86s
argocd-dex-server                         ClusterIP   10.200.63.154    <none>        5556/TCP,5557/TCP,5558/TCP   85s
argocd-metrics                            ClusterIP   10.200.109.51    <none>        8082/TCP                     85s
argocd-notifications-controller-metrics   ClusterIP   10.200.6.84      <none>        9001/TCP                     85s
argocd-redis                              ClusterIP   10.200.186.15    <none>        6379/TCP                     85s
argocd-repo-server                        ClusterIP   10.200.156.235   <none>        8081/TCP,8084/TCP            85s
argocd-server                             ClusterIP   10.200.51.93     <none>        80/TCP,443/TCP               85s
argocd-server-metrics                     ClusterIP   10.200.49.65     <none>        8083/TCP                     85s 

6.2 部署ArgoCD UI

argocd-dashboard-virtualservice.yaml

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: argocd-dashboard-gateway
  namespace: istio-system
spec:
  selector:
    app: istio-ingressgateway
  servers:
    - hosts:
        - "argocd.intra.com"
      port:
        number: 80
        name: http
        protocol: HTTP
      tls:
        httpsRedirect: true
    - hosts:
        - "argocd.intra.com"
      port:
        number: 443
        name: https
        protocol: HTTPS
      tls:
        mode: PASSTHROUGH
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: argocd-dashboard-virtualservice
  namespace: argocd
spec:
  hosts:
  - "argocd.intra.com"
  gateways:
  - istio-system/argocd-dashboard-gateway
  tls:
  - match:
    - port: 443
      sniHosts:
      - argocd.intra.com
    route:
    - destination:
        host: argocd-server
        port:
          number: 443

部署

# kubectl apply -f argocd-dashboard-virtualservice.yaml 
gateway.networking.istio.io/argocd-dashboard-gateway created
virtualservice.networking.istio.io/argocd-dashboard-virtualservice created
# kubectl get vs -n argocd 
NAME                              GATEWAYS                                    HOSTS                  AGE
argocd-dashboard-virtualservice   ["istio-system/argocd-dashboard-gateway"]   ["argocd.intra.com"]   89s

6.3 部署ArgoCD CLI

wget https://github.com/argoproj/argo-cd/releases/download/v2.5.2/argocd-linux-amd64
chmod +x argocd-linux-amd64
mv argocd-linux-amd64 argocd
ln -sf /root/argocd/argocd /usr/local/bin/argocd

argocd命令补全

echo "source <(argocd completion bash)" >> ~/.bashrc
source ~/.bashrc

6.4 使用命令行登录

# kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
EuOxjuuJ4R2kJd2A

确保域名能被解析

# ping argocd.intra.com -c 1
PING kiali.intra.com (192.168.31.163) 56(84) bytes of data.
64 bytes from kiali.intra.com (192.168.31.163): icmp_seq=1 ttl=64 time=0.052 ms

--- kiali.intra.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.052/0.052/0.052/0.000 ms

登录argocd

# argocd login argocd.intra.com
WARNING: server certificate had error: x509: certificate is valid for localhost, argocd-server, argocd-server.argocd, argocd-server.argocd.svc, argocd-server.argocd.svc.cluster.local, not argocd.intra.com. Proceed insecurely (y/n)? y
Username: admin
Password: 
'admin:login' logged in successfully
Context 'argocd.intra.com' updated

修改默认密码(密码8-32位,所以不能太短)

# argocd account update-password
*** Enter password of currently logged in user (admin): #这里输入之前的密码
*** Enter new password for user admin: # 新密码8-32位
*** Confirm new password for user admin: # 新密码8-32位
Password updated
Context 'argocd.intra.com' updated

此时再次查看argocd版本

# argocd version
argocd: v2.5.2+148d8da
  BuildDate: 2022-11-07T17:06:04Z
  GitCommit: 148d8da7a996f6c9f4d102fdd8e688c2ff3fd8c7
  GitTreeState: clean
  GoVersion: go1.18.7
  Compiler: gc
  Platform: linux/amd64
argocd-server: v2.5.2+148d8da
  BuildDate: 2022-11-07T16:42:47Z
  GitCommit: 148d8da7a996f6c9f4d102fdd8e688c2ff3fd8c7
  GitTreeState: clean
  GoVersion: go1.18.8
  Compiler: gc
  Platform: linux/amd64
  Kustomize Version: v4.5.7 2022-08-02T16:35:54Z
  Helm Version: v3.10.1+g9f88ccb
  Kubectl Version: v0.24.2
  Jsonnet Version: v0.18.0

此时可以在客户端绑定hosts后通过浏览器访问到argocd的dashboard了

请添加图片描述

请添加图片描述

到此为止Argocd安装完成

# argocd app create guestbook --repo http://192.168.31.199/root/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default
application 'guestbook' created
# kubectl get applications -n argocd 
NAME        SYNC STATUS   HEALTH STATUS
guestbook   OutOfSync     Missing

由于还没有进行操作,所以状态是OutOfSync

请添加图片描述

请添加图片描述

请添加图片描述

此时

root@k8s-master-01:~/git/argocd-example-apps# kubectl get pods 
NAME                                        READY   STATUS              RESTARTS      AGE
ehelp-7f6b554776-v4ph4                      0/1     ContainerCreating   0             15d
el-gitlab-event-listener-75497dbb79-2mgjf   1/1     Running             3 (10d ago)   10d
el-s2i-listener-7c78cc48c-5jzmg             1/1     Running             0             10d
guestbook-ui-85985d774c-2tl8w               1/1     Running             0             20m
test-centos-pod                             1/1     Running             3 (10d ago)   17d
# kubectl get app -n argocd
NAME        SYNC STATUS   HEALTH STATUS
guestbook   Synced        Healthy
# argocd app list
NAME              CLUSTER                         NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO                                                PATH       TARGET
argocd/guestbook  https://kubernetes.default.svc  default    default  Synced  Healthy  <none>      <none>      http://192.168.31.199/root/argocd-example-apps.git  guestbook
# argocd app get guestbook
Name:               argocd/guestbook
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                https://argocd.intra.com/applications/guestbook
Repo:               http://192.168.31.199/root/argocd-example-apps.git
Target:             
Path:               guestbook
SyncWindow:         Sync Allowed
Sync Policy:        <none>
Sync Status:        Synced to  (58982ea)
Health Status:      Healthy

GROUP  KIND        NAMESPACE  NAME          STATUS  HEALTH   HOOK  MESSAGE
       Service     default    guestbook-ui  Synced  Healthy        service/guestbook-ui created
apps   Deployment  default    guestbook-ui  Synced  Healthy        deployment.apps/guestbook-ui created

7. 手动创建一个ArgoCD App

请添加图片描述

请添加图片描述

root@k8s-master-01:~/git/argocd-example-apps# kubectl get pods -n helloworld 
NAME                                      READY   STATUS    RESTARTS   AGE
spring-boot-helloworld-766794dd78-44j4m   1/1     Running   0          48s
spring-boot-helloworld-766794dd78-7tbmf   1/1     Running   0          48s
spring-boot-helloworld-766794dd78-c48kx   1/1     Running   0          48s
# kubectl get svc -n helloworld 
NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
spring-boot-helloworld   ClusterIP   10.200.229.42   <none>        80/TCP    5m47s
# curl 10.200.229.42
Hello Spring Boot 2.0!

请添加图片描述

由于这里没有自动health

同步前Pod中的镜像为V0.8.0

# kubectl get pods spring-boot-helloworld-766794dd78-44j4m  -n helloworld  -o yaml|grep v0.8
  - image: harbor.intra.com/argocd/spring-boot-helloworld:v0.8.0
    image: harbor.intra.com/argocd/spring-boot-helloworld:v0.8.0

手动同步

root@k8s-master-01:~/git/argocd-example-apps# argocd app list
NAME                           CLUSTER                         NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO                                                              PATH        TARGET
argocd/guestbook               https://kubernetes.default.svc  default    default  Synced  Healthy  <none>      <none>      http://192.168.31.199/root/argocd-example-apps.git                guestbook   
argocd/spring-boot-helloworld  https://kubernetes.default.svc             default  Synced  Healthy  Auto        <none>      http://192.168.31.199/root/spring-boot-helloworld-deployment.git  kubernetes  HEAD
root@k8s-master-01:~/git/argocd-example-apps# argocd app sync argocd/spring-boot-helloworld
TIMESTAMP                  GROUP        KIND   NAMESPACE                  NAME      STATUS   HEALTH        HOOK  MESSAGE
2022-11-18T16:35:43+08:00          Namespace                        helloworld      Synced                       
2022-11-18T16:35:43+08:00            Service  helloworld  spring-boot-helloworld    Synced  Healthy              
2022-11-18T16:35:43+08:00   apps  Deployment  helloworld  spring-boot-helloworld    Synced  Healthy              
2022-11-18T16:35:43+08:00          Namespace                        helloworld      Synced                       namespace/helloworld unchanged
2022-11-18T16:35:43+08:00            Service  helloworld  spring-boot-helloworld    Synced  Healthy              service/spring-boot-helloworld unchanged
2022-11-18T16:35:43+08:00   apps  Deployment  helloworld  spring-boot-helloworld    Synced  Healthy              deployment.apps/spring-boot-helloworld configured
2022-11-18T16:35:43+08:00   apps  Deployment  helloworld  spring-boot-helloworld  OutOfSync  Progressing              deployment.apps/spring-boot-helloworld configured

Name:               argocd/spring-boot-helloworld
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          
URL:                https://argocd.intra.com/applications/argocd/spring-boot-helloworld
Repo:               http://192.168.31.199/root/spring-boot-helloworld-deployment.git
Target:             HEAD
Path:               kubernetes
SyncWindow:         Sync Allowed
Sync Policy:        Automated
Sync Status:        Synced to HEAD (bbf73a3)
Health Status:      Progressing

Operation:          Sync
Sync Revision:      bbf73a31cb13c11dc9d82717119bc03df7aac040
Phase:              Succeeded
Start:              2022-11-18 16:35:42 +0800 CST
Finished:           2022-11-18 16:35:43 +0800 CST
Duration:           1s
Message:            successfully synced (all tasks run)

GROUP  KIND        NAMESPACE   NAME                    STATUS  HEALTH       HOOK  MESSAGE
       Namespace               helloworld              Synced                     namespace/helloworld unchanged
       Service     helloworld  spring-boot-helloworld  Synced  Healthy            service/spring-boot-helloworld unchanged
apps   Deployment  helloworld  spring-boot-helloworld  Synced  Progressing        deployment.apps/spring-boot-helloworld configured

同步后镜像版本成为v0.8.1

# kubectl get pods spring-boot-helloworld-6db9d64d49-8mbt8  -n helloworld  -o yaml|grep v0.8
  - image: harbor.intra.com/argocd/spring-boot-helloworld:v0.8.1
    image: harbor.intra.com/argocd/spring-boot-helloworld:v0.8.1

再次修改将image改为v0.8.2,一段时间后自动更新了images

# argocd app history argocd/spring-boot-helloworld
ID  DATE                           REVISION
0   2022-11-18 16:22:17 +0800 CST  HEAD (d3f19ac)
1   2022-11-18 16:35:43 +0800 CST  HEAD (bbf73a3)
# argocd app history argocd/spring-boot-helloworld
ID  DATE                           REVISION
0   2022-11-18 16:22:17 +0800 CST  HEAD (d3f19ac)
1   2022-11-18 16:35:43 +0800 CST  HEAD (bbf73a3)
2   2022-11-18 16:45:39 +0800 CST  HEAD (b82bb4a)

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

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

相关文章

UE5笔记【一】安装、第一个关卡:光线、原点、平面;光线、天空、云朵;内容抽屉;运动控制;

第一步&#xff1a;安装UE5 下载Epic Games客户端。 下载EpicGames客户端&#xff0c;完成注册账户。 然后选择【库】、选择【引擎版本】后面的加号【】、然后点击【下拉箭头】选择你要安装的版本。点击【安装】。 特别提醒&#xff1a;请找一块特别大的硬盘存储空间&#xf…

prometheus+alertmanager 企业微信告警

一、应用安装启动 1、软件准备 alertmanager-0.24.0.linux-amd64.tar.gz blackbox_exporter-0.22.0.linux-amd64.tar.gz node_exporter-1.4.0.linux-amd64.tar.gz prometheus-2.40.0-rc.0.linux-amd64.tar.gz 2、配置文件 cat /data/prometheus/prometheus.yml #根据自己情况…

liunx集成jmeter进行压测实践

首先liunx环境需要部署jdk 1,获取jmeter免安装包&#xff1a;点击我获取免安装包 2,获取jmeter-manger工具&#xff0c;用于生成报告&#xff0c;日志等 点击我获取工具 3,在服务器上新建一个文件夹存放jmeter&#xff0c;推荐在/usr/local/下面&#xff0c;我这里由于权限问…

微服务真的过时了吗?Twitter员工因为微服务被马斯克解雇了

马斯克吐槽微服务 最近Twitter因为马斯克收购而大幅裁员的消息闹得可谓是沸沸扬扬&#xff0c;但是最近马斯克吐槽Twitter内部服务200个RPC的新闻更是闹得不可开交&#xff0c;并且和员工在twitter上的争论更是因为了程序猿界的广泛转发和评论 微服务真的是一个糟糕的设计吗&a…

如何处理海量数据文件以及大文件数据查找

目录 一.处理海量整数文件 ①问&#xff1a;假定有40亿个无符号整数&#xff0c;判断某数据是否在其中&#xff1f; ②问&#xff1a;假定有40亿个无符号整数&#xff0c;找到只出现一次的数据&#xff0c;两次&#xff0c;三次...&#xff1f; ③问&#xff1a;两个文件各…

[ Linux ] 动静态库 手把手教你写一个自己的库

目录 静态库与动态库 生成 发布动静态库 形成发布静态库 形成发布动态库 一个makefile同时生成动静态库 如何使用动静态库 使用静态库 正确做法&#xff1a; 使用动态库 运行动态库 为什么动态库运行时有找库的步骤 静态库与动态库 静态库&#xff08;.a&#xff0…

聊一聊作为高并发系统基石之一的缓存,会用很简单,用好才是技术活

大家好&#xff0c;又见面了。 在服务端开发中&#xff0c;缓存常常被当做系统性能扛压的不二之选。在实施方案上&#xff0c;缓存使用策略虽有一定普适性&#xff0c;却也并非完全绝对&#xff0c;需要结合实际的项目诉求与场景进行综合权衡与考量&#xff0c;进而得出符合自…

Spring Security认证之用户定义

本文内容来自王松老师的《深入浅出Spring Security》&#xff0c;自己在学习的时候为了加深理解顺手抄录的&#xff0c;有时候还会写一些自己的想法。 在前面的案例中&#xff0c;我们登陆的用户信息是基于配置文件来配置的&#xff0c;其本质上是基于内存来实现的。但是在实际…

(5)多机器人集群编队策略

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、多机器人集群编队策略1、多机器人协同作业冲突问题&#xff08;1&#xff09;介绍&#xff08;2&#xff09;多机器人系统…

学会Spring Cloud微服务架构绝活,渣本也能进大厂

微服务架构是互联网很热门的话题&#xff0c;是互联网技术发展的必然结果。它提倡将单一应用程序划分成一组小的服务&#xff0c;服务之间互相协调、互相配合&#xff0c;为用户提供最终价值。虽然微服务架构没有公认的技术标准和规范或者草案&#xff0c;但业界已经有一些很有…

C++程序设计--第三章内容

提前声明&#xff1a; 本文内容为华北水利水电大学研究生C课程&#xff0c;如有 侵权请告知&#xff0c;作者会予以删除 1.函数 函数作用 —— 任务划分&#xff1b;代码重用定义形式 类型 函数名 &#xff08; 形式参数表&#xff09;{语句序列}调用形式 函数名&#x…

数据结构:树

文章目录一.树的概念二.树的相关概念三.树的表示一.树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下…

『Java』数组中值得说的那些事

文章目录前言一、数组的创建及初始化&#x1f333;1、数组的创建&#x1f333;2、数组的初始化&#x1f351;&#xff08;1&#xff09;动态初始化&#x1f351;&#xff08;2&#xff09;静态初始化二、数组的使用&#x1f333;1、数组中元素访问&#x1f333;2、遍历数组&…

python3 爬虫(初试牛刀)

此文章仅供学习交流使用 在学习爬虫之前&#xff0c;把最近对于 VMware 的网络学习做个总结 接下来&#xff0c;步入正题&#xff01; 分析 Robots 协议 禁止所有爬虫访问任何目录的代码&#xff1a; User-agent: * Disallow:/允许所有爬虫访问任何目录的代码&#xff1a; …

2022年新版Pycharm通过project interpreter国内镜像源设置

2022年新版Pycharm通过project interpreter国内镜像源设置解决方案速览一、国内镜像源列表二、pycharm访问project interpreter解决方案速览 File->Settings->project interpreter-> -> Available Packages将options打勾&#xff0c;并输入-i https://pypi.tuna.…

Gvim显示行号、最大化、字号、主题等常用配置修改

Gvim的设置分两种&#xff1a;1. 临时设置&#xff0c;2. 永久设置&#xff0c;本文只关注永久设置的情况。 配置Gvim只需修改Gvim配置文件即可&#xff0c;Linux中&#xff0c;配置文件的地址是~/.vimrc&#xff0c;若没有该文件则创建即可&#xff0c;我们可以直接输入gvim …

平面设计师怎么找素材?

平面设计素材网站&#xff0c;免费下载&#xff0c;建议收藏&#xff01; 1、菜鸟图库 https://www.sucai999.com/?vNTYwNDUx菜鸟图库是一个素材量非常丰富的网站&#xff0c;网站聚合了平面、UI、淘宝电商、高清背景图、图片、插画等高质量素材&#xff0c;平面模板非常多&am…

数据结构绪论、顺序表课后练习题

文章目录第1章 绪论一 填空题二 选择题三 判断题✅❎第2章 线性表一 判断正误二 单项选择题三 简答题第1章 绪论 一 填空题 数据结构被形式地定义为&#xff08;D, R&#xff09;&#xff0c;其中D是数据元素的有限集合&#xff0c;R是D上的关系有限集合。数据结构按逻辑结构…

idea如何排查jar冲突

工具系列文章目录 idea如何排查jar冲突提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结前言 当遇到jar包冲突的时候常常会出现…

自动驾驶入门:控制

目录 概念 控制流程 PID控制 PID 的优劣势 LQR 线性二次调节器 模型控制预测 总结 概念 控制是驱使车辆前行的策略。对于汽车而言&#xff0c;最基本的控制输入为转向、加速和制动。通常&#xff0c;控制器使用一系列路径点来接收轨迹。 控制器的任务是使用控制输入让…