GitOps项目上篇之Argo CD环境准备

news/2025/2/23 0:09:11/文章来源:https://www.cnblogs.com/yinzhengjie/p/18731690

                                              作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

目录
  • 一.GitOps概述
    • 1.什么是GitOps
    • 2.基于Argo实现GitOps方案架构
  • 二.GitOps项目环境准备实战案例
    • 1.主机角色规划
    • 2.部署gitlab相关环境
    • 3.部署k8s相关环境
    • 4.部署ArgoCD默认启用tls环境基于NodePort暴露
      • 4.1 Argo概述
      • 4.2 为什么选择Argo CD
      • 4.3 Argo CD和K8S版本对应关系
      • 4.4 部署Argo CD
      • 4.5 登录Argo CD的WebUI
    • 5 部署ArgoCD禁用tls环境基于ingrees暴露服务
      • 5.1 修改资源清单,禁用TLS证书
      • 5.2 创建资源并查看pod列表
      • 5.3 创建ingress资源
      • 5.4 基于ingress访问ArgoCD
    • 6 ArgoCD客户端工具修改初始化密码
      • 6.1 安装ArgoCD客户端工具
      • 6.2 使用ArgoCD客户端工具登录
      • 6.3 使用ArgoCD工具修改初始化密码

一.GitOps概述

1.什么是GitOps

GitOps是DevOps的一种特有的持续交付方式,GitOps核心思想是将应用系统的声明性基础架构和应用程序放在Git版本库中。将Git作为交付流水线的核心,每个开发人员都可以提交拉取请求(Pull Request)并使用Git来加速和简化应用程序部署和运维任务,通过使用Git,开发人员可以更高效地将注意力集中在创新功能而不是运维相关任务上,例如系统安装,配置,迁移等。在GitOps中可以自由地为流水线(Pipeline)的不同部分选择最佳工具,可以从开源生态系统重选择一组工具,也可以从闭源中选择一组工具,或者根据使用情况,甚至可以将它们组合在一起。

2.基于Argo实现GitOps方案架构

如上图所示,通过gitlab实现CI流程,将CD部分使用Argo CD来完成,以实现应用部署,回滚的可控性。Argo CD是Kubernetes的一个声明性GitOps持续交付工具。Github地址:https://github.com/argoproj/argo-cd

二.GitOps项目环境准备实战案例

1.主机角色规划

主机名 IP地址 角色 部署软件
dev130 10.0.0.130 开发者,项目代码 golang
gitlab131 10.0.0.131 代码仓库,持续集成(CI)代码 git-lab,git,golang,docker,gitlab-runner
harbor250 10.0.0.250 镜像仓库 docker,docker-compose,harbor
master231 10.0.0.231 K8S control plane Kubernetes,ArgoCD
worker232 10.0.0.232 k8s worker node Kubernetes,ArgoCD
worker233 10.0.0.233 k8s worker node Kubernetes,ArgoCD

2.部署gitlab相关环境

	1.部署gitlab服务器
推荐阅读:https://www.cnblogs.com/yinzhengjie/p/185712242.部署go环境
课程测试样例采用Golng语言编写,gitlab-runner在编译项目源码时,需要使用go命令。[root@gitlab131 ~]# wget https://studygolang.com/dl/golang/go1.23.3.linux-amd64.tar.gz
[root@gitlab131 ~]# 
[root@gitlab131 ~]# mkdir -pv /yinzhengjie/softwares/gopath/{src,bin,pkg}
[root@gitlab131 ~]# 
[root@gitlab131 ~]# tar xf go1.23.3.linux-amd64.tar.gz -C /yinzhengjie/softwares/
[root@gitlab131 ~]# 
[root@gitlab131 ~]# tail -7 .bashrc 
# Add by yinzhengjie for Golang env
export GOROOT=/yinzhengjie/softwares/go
export GOPATH=/yinzhengjie/softwares/gopath
export GOPROXY=https://goproxy.cn,direct
export GOBIN=${GOROOT}/bin
export GO111MODULE=on
export PATH=$PATH:$GOBIN
[root@gitlab131 ~]# 
[root@gitlab131 ~]# source .bashrc  
[root@gitlab131 ~]# 
[root@gitlab131 ~]# go version
go version go1.23.3 linux/amd64
[root@gitlab131 ~]# go环境搭建视频教程:https://www.bilibili.com/video/BV1bwhve7EPJ3.部署docker环境
gitlab-runner在执行流水线时需要将源码编译后的可执行文件制成容器镜像,所以需要安装docker。至于docker安装可以直接使用我给的一件部署脚本即可,秒级安装。[root@gitlab131 ~]# tar  xf yinzhengjie-scripts-docker-docker-compose.tar.gz 
[root@gitlab131 ~]# 
[root@gitlab131 ~]# ./install-docker.sh i4.安装git
CentOS需要手动后安装git,而Ubuntu 22.04LTS版本默认就按照好了,可以跳过此步骤。推荐阅读:https://www.cnblogs.com/yinzhengjie/p/12215821.html

3.部署k8s相关环境

	1.搭建K8S集群
推荐阅读:https://www.cnblogs.com/yinzhengjie/p/183530272.部署metallb
推荐阅读:https://www.cnblogs.com/yinzhengjie/p/17811466.html3.部署ingress-nginx
推荐阅读:https://www.cnblogs.com/yinzhengjie/p/17975829

4.部署ArgoCD默认启用tls环境基于NodePort暴露

4.1 Argo概述

Argo CD是Kubernetes的一个声明性GitOps持续交付工具。官方链接:https://argo-cd.readthedocs.io/en/stable/github地址:https://github.com/argoproj/argo-cd

4.2 为什么选择Argo CD

应用程序定义、配置和环境应该是声明性的和版本控制的。应用程序部署和生命周期管理应该是自动化的、可审计的、易于理解的。Argo CD被实现为Kubernetes控制器,它持续监控运行中的应用程序,并将当前的实时状态与所需的目标状态(如Git仓库中指定的)进行比较。活动状态偏离目标状态的已部署应用程序被视为OutOfSync。Argo CD报告并可视化差异,同时提供自动或手动将实时状态同步回所需目标状态的设施。在Git仓库中对所需目标状态所做的任何修改都可以自动应用并反映在指定的目标环境中。

4.3 Argo CD和K8S版本对应关系

如上图所示,咱们课堂环境基于K8S 1.23.17部署,则考虑的般般范围有限,目前能兼容的版本是Argo 2.7版本。推荐阅读:https://argo-cd.readthedocs.io/en/release-2.7/operator-manual/installation/#supported-versionshttps://argo-cd.readthedocs.io/en/release-2.9/operator-manual/installation/#tested-versions

4.4 部署Argo CD

	1.创建名称空间
[root@master231 ~]# kubectl create namespace argocd
namespace/argocd created
[root@master231 ~]# 2.下载资源清单
[root@master231 ~]# wget https://raw.githubusercontent.com/argoproj/argo-cd/v2.7.17/manifests/ha/install.yaml3.部署应用
[root@master231 ~]# kubectl apply -n argocd -f install.yaml 4.检查pod的运行状态
[root@master231 yinzhengjie]# kubectl get pods -n argocd  -o wide
NAME                                                READY   STATUS    RESTARTS   AGE     IP             NODE        NOMINATED NODE   READINESS GATES
argocd-application-controller-0                     1/1     Running   0          2m25s   10.100.2.98    worker233   <none>           <none>
argocd-applicationset-controller-65c4cff6bd-d4l2f   1/1     Running   0          2m26s   10.100.1.105   worker232   <none>           <none>
argocd-dex-server-bbbcd9879-mg8p8                   1/1     Running   0          2m26s   10.100.2.93    worker233   <none>           <none>
argocd-notifications-controller-5db4658cf6-v24zx    1/1     Running   0          2m26s   10.100.1.107   worker232   <none>           <none>
argocd-redis-ha-haproxy-6477549f8f-2bzqx            1/1     Running   0          2m25s   10.100.2.95    worker233   <none>           <none>
argocd-redis-ha-haproxy-6477549f8f-4l49g            0/1     Pending   0          2m25s   <none>         <none>      <none>           <none>
argocd-redis-ha-haproxy-6477549f8f-t6jrs            1/1     Running   0          2m25s   10.100.1.106   worker232   <none>           <none>
argocd-redis-ha-server-0                            3/3     Running   0          2m25s   10.100.2.96    worker233   <none>           <none>
argocd-redis-ha-server-1                            3/3     Running   0          68s     10.100.1.110   worker232   <none>           <none>
argocd-redis-ha-server-2                            0/3     Pending   0          8s      <none>         <none>      <none>           <none>
argocd-repo-server-59d464d86b-4bjtk                 1/1     Running   0          2m25s   10.100.2.94    worker233   <none>           <none>
argocd-repo-server-59d464d86b-8khvp                 1/1     Running   0          2m25s   10.100.1.109   worker232   <none>           <none>
argocd-server-6b5654899d-6vk8m                      1/1     Running   0          2m25s   10.100.2.97    worker233   <none>           <none>
argocd-server-6b5654899d-pq9nd                      1/1     Running   0          2m25s   10.100.1.108   worker232   <none>           <none>
[root@master231 yinzhengjie]# 5.修改svc的类型
[root@master231 yinzhengjie]# kubectl -n argocd get svc argocd-server
NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
argocd-server   ClusterIP   10.200.228.98    <none>        80/TCP,443/TCP               12m
[root@master231 yinzhengjie]# 
[root@master231 yinzhengjie]# 
[root@master231 yinzhengjie]# kubectl -n argocd edit svc argocd-server
...ports:...type: NodePort
...
[root@master231 ~]# kubectl -n argocd get svc argocd-server
NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
argocd-server   NodePort   10.200.206.212   <none>        80:31988/TCP,443:31823/TCP   12m
[root@master231 ~]# 

4.5 登录Argo CD的WebUI

	1.查看ArgoCD默认的密码
[root@master231 yinzhengjie]# kubectl -n argocd get secrets argocd-initial-admin-secret  -o jsonpath={.data.password}  | base64 -d | more 
pzMRCHAGnO39GVJC
[root@master231 yinzhengjie]# 2.登录ArgoCD
如上图所示,使用默认的用户名admin进行登录,登录成功后就看到下图的情况。

5 部署ArgoCD禁用tls环境基于ingrees暴露服务

5.1 修改资源清单,禁用TLS证书

[root@master231 ~]# vim install.yaml 
...
apiVersion: apps/v1
kind: Deployment
metadata:...name: argocd-server
spec:template:...spec:containers:- args:- /usr/local/bin/argocd-server# 大概在18555行左右,添加"--insecure"启动参数- --insecure
...

5.2 创建资源并查看pod列表

[root@master231 ~]# kubectl get pods -n argocd  -o wide
NAME                                                READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
argocd-application-controller-0                     1/1     Running   0          3m30s   10.100.1.61   worker232   <none>           <none>
argocd-applicationset-controller-8648648c94-hh6ff   1/1     Running   0          3m32s   10.100.1.59   worker232   <none>           <none>
argocd-dex-server-5cb7988f75-vfp7z                  1/1     Running   0          3m32s   10.100.1.60   worker232   <none>           <none>
argocd-notifications-controller-5877877c7d-r5pcf    1/1     Running   0          3m32s   10.100.1.58   worker232   <none>           <none>
argocd-redis-ha-haproxy-6477549f8f-42gqj            1/1     Running   0          3m32s   10.100.2.57   worker233   <none>           <none>
argocd-redis-ha-haproxy-6477549f8f-jb7f7            1/1     Running   0          3m32s   10.100.1.64   worker232   <none>           <none>
argocd-redis-ha-server-0                            3/3     Running   0          2m30s   10.100.2.58   worker233   <none>           <none>
argocd-redis-ha-server-1                            3/3     Running   0          73s     10.100.1.65   worker232   <none>           <none>
argocd-repo-server-5d6464ffd4-4p9p5                 1/1     Running   0          3m32s   10.100.2.55   worker233   <none>           <none>
argocd-repo-server-5d6464ffd4-xv4gj                 1/1     Running   0          3m32s   10.100.1.63   worker232   <none>           <none>
argocd-server-56cb88fd6b-t8msh                      1/1     Running   0          3m31s   10.100.2.56   worker233   <none>           <none>
argocd-server-56cb88fd6b-tthx6                      1/1     Running   0          3m31s   10.100.1.62   worker232   <none>           <none>
[root@master231 ~]# 

5.3 创建ingress资源

	1.编写资源清单
[root@master231 ~]# cat ingress-argocd.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-argocdnamespace: argocd
spec:ingressClassName: nginxrules:- host: argocd.yinzhengjie.comhttp:paths:- backend:service:name: argocd-serverport:number: 80path: /pathType: Prefix
[root@master231 ~]# 2.创建资源
[root@master231 ~]# kubectl apply -f ingress-argocd.yaml 
ingress.networking.k8s.io/ingress-argocd created
[root@master231 ~]#3.查看ingress资源的详细信息
[root@master231 ~]# kubectl describe -f ingress-argocd.yaml
Name:             ingress-argocd
Labels:           <none>
Namespace:        argocd
Address:          
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:Host                    Path  Backends----                    ----  --------argocd.yinzhengjie.com  /   argocd-server:80 (10.100.1.62:8080,10.100.2.56:8080)
Annotations:              <none>
Events:Type    Reason  Age   From                      Message----    ------  ----  ----                      -------Normal  Sync    6s    nginx-ingress-controller  Scheduled for syncNormal  Sync    6s    nginx-ingress-controller  Scheduled for sync
[root@master231 ~]# 

5.4 基于ingress访问ArgoCD

	1.查看ingress的地址
[root@master231 ~]# kubectl -n argocd get svc argocd-server 
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
argocd-server   ClusterIP   10.200.232.95   <none>        80/TCP,443/TCP   13m
[root@master231 ~]# 
[root@master231 ~]# kubectl -n yinzhengjie-ingress get svc myingress-ingress-nginx-controller 
NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
myingress-ingress-nginx-controller   LoadBalancer   10.200.246.193   10.0.0.150    80:31655/TCP,443:30261/TCP   2d14h
[root@master231 ~]# 2.基于ingress访问ArgoCD	
[root@master231 ~]# kubectl -n argocd get secrets argocd-initial-admin-secret  -o jsonpath={.data.password}  | base64 -d | more 
k532uV1KCkK-4Fs0
[root@master231 ~]# 如上图所示,基于最新的密码进行访问。

6 ArgoCD客户端工具修改初始化密码

6.1 安装ArgoCD客户端工具

可通过客户端登录ArgoCD命令行或者直接修改admin登录密码登录。官网地址:https://github.com/argoproj/argo-cd实操案例:1.下载ArgoCD客户端工具
[root@master231 ~]# wget https://github.com/argoproj/argo-cd/releases/download/v2.7.17/argocd-linux-amd642.将ArgoCD客户端软件添加到PATH变量
[root@master231 ~]# mv argocd-linux-amd64 /usr/local/bin/argocd
[root@master231 ~]# 
[root@master231 ~]# chmod +x /usr/local/bin/argocd
[root@master231 ~]# 
[root@master231 ~]# ll /usr/local/bin/argocd
-rwxr-xr-x 1 root root 142333400 Dec  4 11:32 /usr/local/bin/argocd*
[root@master231 ~]# 3.查看Argo的版本信息
[root@master231 ~]# kubectl -n argocd get svc argocd-server
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
argocd-server   ClusterIP   10.200.232.95   <none>        80/TCP,443/TCP   40m
[root@master231 ~]# 
[root@master231 ~]# argocd version --server 10.200.232.95 --plaintext
argocd: v2.7.17+13d723dBuildDate: 2024-02-02T18:47:02ZGitCommit: 13d723df9cd59b3a49ee54ab7c38f759dbc56179GitTreeState: cleanGoVersion: go1.20.13Compiler: gcPlatform: linux/amd64
argocd-server: v2.7.17+13d723d.dirty
[root@master231 ~]# 相关参数说明:--server:表示指定Argo服务器的地址。--plaintext:表示Argo服务器禁用tls加密。

6.2 使用ArgoCD客户端工具登录

	1.查看默认的初始化密码
[root@master231 ~]# kubectl get svc -n argocd argocd-server
NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
argocd-server   ClusterIP   10.200.248.216   <none>        80/TCP,443/TCP   2m33s
[root@master231 ~]# 
[root@master231 ~]# kubectl -n argocd get secrets argocd-initial-admin-secret  -o jsonpath={.data.password}  | base64 -d | more 
fpMTrVf54cxI4dL6
[root@master231 ~]# 2.添加svc的IP地址到host文件解析
[root@master231 ~]# tail -1 /etc/hosts
10.200.248.216 argocd.yinzhengjie.com
[root@master231 ~]# 3.登录argocd,如上图所示
[root@master231 ~]# argocd login  --plaintext argocd.yinzhengjie.com
Username: admin
Password:  # 注意哈,此处输入上面我们的密码即可。
'admin:login' logged in successfully
Context 'argocd.yinzhengjie.com' updated
[root@master231 ~]# 4.退出登录
[root@master231 ~]# argocd logout   argocd.yinzhengjie.com
Logged out from 'argocd.yinzhengjie.com'
[root@master231 ~]# 5.基于命令行免交互登录
[root@master231 ~]# argocd login  --plaintext argocd.yinzhengjie.com  --username admin --password fpMTrVf54cxI4dL6
'admin:login' logged in successfully
Context 'argocd.yinzhengjie.com' updated
[root@master231 ~]# 

6.3 使用ArgoCD工具修改初始化密码

	1.先登录
[root@master231 ~]# argocd login  --plaintext argocd.yinzhengjie.com  --username admin --password fpMTrVf54cxI4dL6
'admin:login' logged in successfully
Context 'argocd.yinzhengjie.com' updated
[root@master231 ~]# 2.后修改密码
[root@master231 ~]# argocd account update-password --account admin --current-password fpMTrVf54cxI4dL6 --new-password yinzhengjie 
Password updated
Context 'argocd.yinzhengjie.com' updated
[root@master231 ~]# 3.使用新密码登录
如上图所示。

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

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

相关文章

[tldr] 配置windows terminal使用git bash

windows terminal默认使用power shell作为shell,但是power shell不好用,还是习惯linux的命令行行为. 参考Windows Terminal 配置 Git Bash 添加新的配置文件在windows terminal中点击设置选项点击添加配置文件按钮编辑配置内容 一个配置文件主要来自之前的配置文件的内容主要分…

【原创工具】文件清单生成器 By怜渠客

【原创工具】文件清单生成器 By怜渠客 刚在论坛看到了一个文件列表生成器 https://www.52pojie.cn/thread-2008605-1-1.html ,和我去年写的一个软件很像,当时我也是有需求,要把一个文件夹里及其子文件夹里所有的文件列出来,就临时弄了个小软件,现在我重新修复完善了一下,…

windows使用命令行管理进程

前言 在windows中,我们通常使用GUI图形画面的任务管理器来管理进程。 任务管理器提供了一个较为友好的图形界面,然而他也存在一定问题。 首先,任务管理器就要吃掉一部分性能。 而且,当你在任务管理器页面,点击按名称排序时,那可能会出现灾难性的卡顿,这对一台旧电脑来说…

postman的几种参数化

1.环境变量方式设置:创建环境:点击 Postman 右上角的 Environments > Create New。输入环境名称(如 Dev、test),并添加键值对(如 base_url: https://api.vvhan.com)。使用变量:在请求 URL 或请求体中用双花括号引用变量:{{base_url}}/users。切换环境时,变量会自动…

第十五届蓝桥杯省赛

第十五届蓝桥杯省赛 1.握手问题#include <iostream> using namespace std; int main() { //划分为43,7两组 //(43*42)/2+7*43=28*43 cout<<28*43;return 0; }2.小球反弹(难)分析: 当做两个方向往返代码:/* 考点:速度分解 分解为x轴往返,y轴往返(回到左上角起…

OpenWRT安装Caddy实现WebDAV协议的NAS盘

Caddy带有WebDAV插件,可以安装在OpenWRT上,用于提供WebDAV协议的NAS服务。 Windows资源管理器,WinSCP,MAC的Finder,Android上的CX文件管理器都可以作为WebDAV的客户端。 WebDAV使用过程中可以直接打开文件,修改后保存,非常方便,感觉Samb没区别。但其使用https协议,安全…

Java17的安装

Java17的安装因为要用SpringBoot3了,Java版本要更新到17以后 安装连接:Java Archive Downloads - Java SE 17.0.12 and earlier 下载 选择对应的版本下载安装可以更改安装位置成功以后关闭就行配置环境变量 如果电脑已经安装了JDK8,但又不想卸载的同时想安装JDK17,可以如下…

linux中nano和vim用法

Linux下nano,vim使用Linux 编辑器使用指南:nano 和 vim 在 Linux 系统中,编辑文本文件是非常常见的任务。对于大多数 Linux 用户来说,nano 和 vim 是两个最常用的命令行文本编辑器。虽然它们都可以用来编辑文件,但它们的功能和使用方式有很大不同。本篇文章将介绍这两个编辑…

final关键字、Object类

1.规则 被final修饰的变量,名称都要大写,多单词的名称则需_来分隔1.修饰方法method方法已经不能被重写了,因为修饰该方法的是final2.修饰类 当一个类中所有的成员方法都不想被重写时,可以直接在类上加上final,无需再一个一个写在方法上2.object类: 是所有类的祖宗,每一个…

Java要记-持续补充中

1. ArrayList操作自定义对象进行removeAll()时,移除失效原因 由于底层最用调用的是Object的equals()方法进行比较的,比较的是地址,两个对象地址当然是不同的了,移除自然会失败。解决方案:重写equals方法。【注意重写equals方法记得也要重写hashCode方法】同时:retainAll(…

this和super--java进阶day01

1.this和super的代表super是父类的标识符,如堆内存中的标志 2.this和super的访问重点说访问构造方法,super()访问父类构造方法我们已经清楚,但是this()访问本类构造方法,我们不清楚有什么用意义 如以下情境 假设在公司制作一个系统,1.0有三位角色随着版本更新,1.1要新…

软件开发与创新课程设计第一次作业---小游戏《勇者冒险》改写

《勇者冒险》小游戏代码优化 一、项目名称与来源 题目为《勇者冒险》(原项目没有名字,是作者取的),代码来源是CSDN,链接如下: https://blog.csdn.net/zjx120307/article/details/126221342?sharetype=blog&shareId=126221342&sharerefer=APP&sharefrom=qq 本…