k8s部署argocd

前言

ArgoCD是一个基于Kubernetes的GitOps持续交付工具,应用的部署和更新都可以在Git仓库上同步实现,并自带一个可视化界面。本文介绍如何使用Git+Helm+Argocd方式来实现在k8s中部署和更新应用服务;

安装Argocd

  • 准备一个k8s集群,然后从官网获取yaml部署清单执行部署即可;
# 创建命名空间
kubectl create namespace argocd # 部署argocd
wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl apply -n argocd -f install.yaml# 查看状态
kubectl get pod -n argocd -w# 调整下svc为nodeport默认,访问ui页面用的
kubectl -n argocd edit svc argocd-server
  • 访问页面,输入地址后会自动跳转https;
# 获取ui页面的登陆密码,管理员为 admin
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

默认管理密码是随机的,可以使用如下方式修改;

# 在线获取bcrpyt加密后的密码值: https://www.bejson.com/encrypt/bcrpyt_encode/
准备一个密码,自行到上面的地址加密即可# 将加密后的密文替换为下面的 admin.password 的值
kubectl -n argocd patch secret argocd-secret \-p '{"stringData": {"admin.password": "$2a$10$dVCUtDIFah893qSLMMIReeyNa8vHx1112/kLYTbglAQMpbzBR5dbK","admin.passwordMtime": "'$(date +%FT%T%Z)'"
}}'

验证1:(官方给出的样例)

Argo CD 提供了一个官网样例,我们就创建一下这个项目吧

样例github地址: https://github.com/argoproj/argocd-example-apps

web页面创建APP
在这里插入图片描述
在这里插入图片描述

  1. Application Name: app的名称,填写的是样例项目的名称
  2. Project: 是一种资源,用于组织和管理不同的 Kubernetes 应用(Application,目前先写default
  3. SYNC POLICY: 同步策略,有手动和自动,样例项目,我们先选择手动
  4. AUTO-CREATE NAMESPACE: 自动创建应用部署的k8s的命名空间
  5. SOURCE: Git 仓库,就是样例项目的github仓库地址
  6. Revision: 分支名
  7. Path: 资源文件所在的相对路径,Argo CD目前支持多种 Kubernetes 清单,这里需要选择使用那种资源配置模式就选择哪一个路径下的资源清单
  8. Cluster URL: Kubernetes API Server 的访问地址,由于 Argo CD 和下发应用的 Kubernetes 集群是同 一个,因此可以直接使用 http://kubernetes.default.svc 来访问
  9. Namespace: 应用部署在k8s中的命名空间
  10. 点击页面上面的create按钮
  11. 手动同步
    在这里插入图片描述
  12. web页面展示
    在这里插入图片描述
    在这里插入图片描述

验证2:(自己手戳)

argocd支持多种配置管理/模板工具,如 Kustomize,Helm,Ksonnet,Jsonnet,plain-YAML,这里我使用的是helm来做,先简单制作一个helm chart 来定义应用的部署清单;

# 准备一个主目录存放资源文件
mkdir gitops && cd gitops/ && git init
mkdir -p {helm,argocd} && cd helm/# 添加一个helm chart
# tree -L 2
└── app1├── Chart.yaml├── templates│   ├── deployment.yaml│   └── service.yaml└── values.yaml

Chart.yaml

apiVersion: v2
appVersion: "1.0"
name: app1
description: app1 for kubernetes
type: application
version: 0.1.0

values.yaml

global:replicas: 2
image:repository: harbor.example.cn/public/nginx#repository: nginxtag: stable-alpine

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: appnamespace: {{ .Release.Namespace }}
spec:replicas: {{ .Values.global.replicas }}selector:matchLabels:demo: app1template:metadata:labels:demo: app1spec:containers:- name: nginx# 这里引入变量,层级调用,.Values表声明作用image: {{ .Values.image.repository }}:{{ .Values.image.tag }}ports:- containerPort: 80name: http

service.yaml

apiVersion: v1
kind: Service
metadata:name: app1-svcnamespace: {{ .Release.Namespace }}labels:demo: app1
spec:type: ClusterIPselector:demo: app1ports:- port: 80name: httptargetPort: httpprotocol: TCP

定义argocd清单

  • argocd有自己的声明式写法,这里定义一个用来调用和管理应用部署的资源清单;
# 进入argocd的存放目录,在下面创建4个目录来区分不同的集群环境
cd gitops/argocd && mkdir {dev,test,pre,prod}# 定义清单文件
cd argocd /
tree -L 2
.
├── dev
│   └── Application.yaml
├── pre
│   └── Application.yaml
├── prod
│   └── Application.yaml
└── test└── Application.yaml

Application.yaml

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: demo-argocdnamespace: argocd
spec:project: default # 所属项目,默认即可source:repoURL: https://git.example.com/gitops/gitops1.git # helm所在的git仓库地址(后面需要推送的git仓库)# git仓库的分支版本targetRevision: HEAD# helm文件在git仓库的相对路径path: helm/app1# 这里定义传递给helm执行的参数# 类型values.yamlhelm:parameters:- name: image.repositoryvalue: harbor.example.cn/public/nginx- name: image.tagvalue: stable-alpine- name: global.replicasvalue: "2"destination:# 部署到当前k8s集群的地址server: https://kubernetes.default.svc# 部署目标命名空间namespace: demosyncPolicy:automated: prune: trueselfHeal: trueallowEmpty: falsesyncOptions:- Validate=false- CreateNamespace=true- PrunePropagationPolicy=foreground- PruneLast=trueretry:limit: 5backoff:factor: 2maxDuration: 1m
  • 推送Git仓库

准备好资源文件后,需要创建一个git仓库来存放,将写好的资源文件推送到git仓库上;

# 整体目录文件如下
gitops # tree -L 3
.
├── argocd
│   ├── dev
│   │   └── Application.yaml
│   ├── pre
│   │   └── Application.yaml
│   ├── prod
│   │   └── Application.yaml
│   └── test
│       └── Application.yaml
└── helm└── app1├── Chart.yaml├── templates└── values.yaml# 推送git仓库
git init
git add ..
git ...

集成argocd

  • 登陆argocd页面,添加一个git仓库地址,这里的大概流程是通过同步git上的argocd资源清单来引用helm的部署文件来实现部署和更新;

  • 填写仓库地址信息;

  • 接着创建一个应用,定义git仓库配置;


 


 


 

  • 此时资源是没有开启自动同步的,需要先手动同步一下;


 

  • 查看应用的部署状态和Git同步状态;

  • 成功部署后,将 demo-production 调整为自动同步;

版本更新

应用已经通过argocd部署到集群中,此时在argocd中存在有两个应用;

  • demo-production :与dev/Application.yaml 文件同步,用来更新应用的版本和配置的;
  • demo-argocd :定义服务的部署,读取的是git仓库下的helm资源清单;

当我们需要更新demo这个服务的版本时,修改 dev/Application.yaml 这个文件的参数,重新提交到git仓库即可;

# vim argocd/dev/Application.yaml
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: demo-argocdnamespace: argocd
spec:project: defaultsource:repoURL: https://git.example.com/gitops/gitops1.gittargetRevision: HEADpath: helm/app1helm:parameters:- name: image.repositoryvalue: harbor.example.cn/public/nginx- name: image.tagvalue: v1.0.0  # 修改镜像的版本- name: global.replicasvalue: "1"     # 修改下副本数destination:server: https://kubernetes.default.svcnamespace: demosyncPolicy:automated: prune: trueselfHeal: trueallowEmpty: falsesyncOptions:- Validate=false- CreateNamespace=true- PrunePropagationPolicy=foreground- PruneLast=trueretry:limit: 5backoff:factor: 2maxDuration: 1m

等待一会后,argocd会自动检测git上的文件版本,然后将最新修改的配置参数同步到k8s集群中;

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

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

相关文章

【Linux】MAC帧

目录 一、MAC帧 (一)IP地址和MAC地址 (二)MAC帧格式 (三)MTU对IP协议的影响、 (四)MTU对UDP协议的影响 (五)MTU对TCP协议的影响 二、以太网协议 &…

MySQL - 数据库基础操作

SQL语句 结构化查询语言(Structured Query Language),在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。 分类 DDL 数据定义语言(Data Definition Language),定义对数据库对象(库、表、列、索引)的操作。 DML 数据操作语言(Data Manip…

GraalVM原生镜像支持:Spring Cloud应用启动速度提升90%

引言:当Spring Cloud遇见GraalVM,启动时间进入秒级时代 传统Spring Cloud应用因动态类加载、反射等机制导致启动缓慢(通常超过30秒),在Serverless和Kubernetes滚动更新场景下成为性能瓶颈。Spring Cloud 2023.x通过**G…

【Unity3D】摄像机适配场景以及Canvas适配

目录 宽度不变策略 高度不变策略 宽度不变策略 开发分辨率 750*1334 (宽高比:0.56) 真机分辨率 1170*2532 (宽高比:0.46) 真机宽高比<开发宽高比&#xff0c;采用宽度不变策略 理由&#xff1a;小于代表真机高度比开发高度更大&#xff0c;因此不需要担心高度上…

HarmonyOS:基于axios实现文件的下载以及下载进度的监听

#前言&#xff1a;项目开发中&#xff0c;避免不了实现文件下载功能&#xff0c;其他平台的下载都很成熟&#xff0c;网上的例子也比较多&#xff0c;我就自己项目中实现的下载功能做个总结&#xff0c;你可以参考我的写法实现功能。 下载封装基于axios实现的下载功能。 1.下载…

简单一周日期展示及选择切换

医院挂号&#xff0c;可能需要切换日期&#xff0c;选择一周内的某一天。 提供一周内的日期段&#xff0c;通过点击&#xff0c;切换到不同天。 简单的js&#xff0c;html实例。切换玩调用后台接口&#xff0c;实现后续逻辑。 使用Vue,插值语法&#xff0c;更简单。 一周日历…

二叉树的前,中,后序遍历

我们来了解一下二叉树的遍历&#xff0c;话不多说 二叉树的遍历的概念&#xff1a; 二叉树有四种遍历方式&#xff0c;分别为前序遍历&#xff0c;中序遍历&#xff0c;后序遍历和层序遍历&#xff0c;但我们今天谈谈前三种&#xff0c;并实现它 前序遍历&#xff1a; 按照根…

golang Error的一些坑

golang Error的一些坑 golang error的设计可能是被人吐槽最多的golang设计了。 最经典的err!nil只影响代码风格设计&#xff0c;而有一些坑会导致我们的程序发生一些与我们预期不符的问题&#xff0c;开发过程中需要注意。 ​​ errors.Is​判断error是否Wrap不符合预期 ​…

逼用户升级Win11,微软开始给Win10限速

随着Windows10的支持时间越来越短&#xff0c;微软也加大了对Win10用户的驱赶力度。 最近&#xff0c;微软官宣了将要在今年6月份降低OneNote for Windows 10的同步速度。软件也将和Windows10在今年的10月14日一同停止支持和维护。 这将影响实时协作和多设备访问。 对OneNote…

SpringMVC_day02

一、SSM 整合 核心步骤 依赖管理 包含 SpringMVC、Spring JDBC、MyBatis、Druid 数据源、Jackson 等依赖。注意点&#xff1a;确保版本兼容性&#xff08;如 Spring 5.x 与 MyBatis 3.5.x&#xff09;。 配置类 SpringConfig&#xff1a;扫描 Service 层、启用事务管理、导入…

Android14 原生PackageInstaller安装某些apk报错问题

最近遇到Android14安装客户一个大型app的时候&#xff0c;执行到开始安装的时候就直接闪退了&#xff0c;查看log发现下面报错&#xff1a; 03-25 18:01:29.531 3085 3085 E AndroidRuntime: java.lang.RuntimeException: Could not copy bitmap to parcel blob. 03-25 18:01:2…

SQLAlchemy关键词搜索技术深度解析:从基础过滤到全文检索

在数据驱动的应用开发中&#xff0c;基于关键词的模糊查询是常见的业务需求。SQLAlchemy作为Python生态中最流行的ORM框架&#xff0c;提供了多种实现关键词搜索的技术方案。本文将从性能、适用场景和技术复杂度三个维度&#xff0c;系统对比分析SQLAlchemy中关键词搜索的最佳实…

基于 ffmpeg 实现合并视频

ffmpeg是一个强大的多媒体处理工具&#xff0c;支持视频文件的合并。 列出目录下所有MP4文件 import os import glob# 当前目录 directory os.getcwd() directory "/directory/to/mp4/*"# 列出目录下所有MP4文件 files glob.glob(directory)# 排序 files.sort(…

算法每日一练 (20)

&#x1f4a2;欢迎来到张翊尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 算法每日一练 (20)不同路径 II题目描述解题思路解题代…

【银河麒麟系统常识】命令:uname -m(查看系统架构)

命令&#xff1a; uname -m 功能 常用的 Linux/Unix 终端命令&#xff0c;用于显示当前系统的硬件架构&#xff1b; 返回 返回系统的CPU架构类型&#xff0c;用于判断软件兼容性&#xff1b; 输出结果架构说明常见设备x86_64Intel/AMD 64位 CPU主流 PC、服务器aarch64ARM 64位 …

sql结尾加刷题

找了一下mysql对extractvalue()、updatexml()函数的官方介绍https://dev.mysql.com/doc/refman/5.7/en/xml-functions.html#function_extractvalue ExtractValue(xml_frag, xpath_expr) 知识点 解释一下这两个参数xml_frag&#xff0c;是xml标记片段&#xff0c;第二个参数…

JVM类加载过程详解

文章目录 前言1.加载2.链接验证文件格式验证元数据验证字节码验证符号引用验证 准备解析 3.初始化4.类卸载 前言 类从被加载到虚拟机内存中开始到卸载出内存为止&#xff0c;它的整个生命周期可以简单概括为 7 个阶段&#xff1a;加载&#xff08;Loading&#xff09;、验证&a…

el-select 可搜索下拉框 在ios、ipad 无法唤出键盘,造成无法输入

下一篇&#xff1a;el-select 可搜索下拉框&#xff0c;选中选项后&#xff0c;希望立即失去焦点&#xff0c;收起键盘&#xff0c;执行其他逻辑 【效果图】&#xff1a;分组展示选项 >【去界面操作体验】 首先&#xff0c;通过 夸克浏览器的搜索: el-select 在 ipad 输入框…

前端框架的定制化:满足项目独特需求

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字化转型浪潮中&#xff0c;前端技术体系已成为企业构建数字竞争力的核心战场。当标准化前端框架…

Flutter网络请求封装:高效、灵活、易用的Dio工具类

在Flutter开发中&#xff0c;网络请求是必不可少的功能。为了简化代码、提高开发效率&#xff0c;我们通常会封装一个网络请求工具类。本文基于Dio库&#xff0c;详细介绍如何封装一个高效、灵活、易用的网络请求工具类&#xff0c;支持以下功能&#xff1a; 单例模式&#xf…