ArgoCD集成部署到Kubernetes

news2024/12/23 10:42:11

1:环境

kubernetes1.23.3
ArgoCD2.3.3

2:ArgoCD介绍

Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. Argo CD是一个基于Kubernetes的声明式的GitOps工具。 那么,什么是GitOps呢? GitOps是以Git为基础,使用CI/CD来更新运行在云原生环境的应用,它秉承了DevOps的核心理念--“构建它并交付它(you built it you ship it)”。

 

它的优势总结如下:
1:应用定义、配置和环境信息是声明式的,并且可以进行版本控制;
2:应用部署和生命周期管理是全自动化的,是可审计的,清晰易懂;
3:Argo CD是一个独立的部署工具,支持对多个环境、多个Kubernetes集群上的应用进行统一部署和管理

3:部署ArgoCD 

# 安装很简单,不过在实际使用中需要对数据进行持久化。

1:创建一个命名空间存放argocd的Pod
[root@k8s-master ~]# kubectl create ns argocd
namespace/argocd created

2:通过官方命令部署(镜像在国外,需要梯子,或者加速也行)
[root@k8s-master ~]# kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

3:查看部署状态
[root@k8s-master ~]# kubectl get pod,svc -n argocd
NAME                                                    READY   STATUS    RESTARTS   AGE
pod/argocd-application-controller-0                     1/1     Running   0          60s
pod/argocd-applicationset-controller-79f97597cb-mwzld   1/1     Running   0          62s
pod/argocd-dex-server-6fd8b59f5b-zx76f                  1/1     Running   0          62s
pod/argocd-notifications-controller-5549f47758-2rgjk    1/1     Running   0          61s
pod/argocd-redis-79bdbdf78f-xhd8f                       1/1     Running   0          61s
pod/argocd-repo-server-5569c7b657-t5ftv                 1/1     Running   0          61s
pod/argocd-server-664b7c6878-9tjlh                      1/1     Running   0          61s

4:因为需要访问,我们可以通过NodePort或者Ingress暴露 argocd-server
# 我这里使用 NodePort
# 但是我们需要修改一下argocd-server的暴露方式为NodePort
[root@k8s-master argocd]# kubectl edit svc -n argocd argocd-server
......
  selector:
    app.kubernetes.io/name: argocd-server
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}
[root@k8s-master argocd]# kubectl get svc -n argocd
NAME                                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
argocd-applicationset-controller          ClusterIP   200.1.73.127    <none>        7000/TCP                     15m
argocd-dex-server                         ClusterIP   200.1.77.207    <none>        5556/TCP,5557/TCP,5558/TCP   15m
argocd-metrics                            ClusterIP   200.1.88.62     <none>        8082/TCP                     15m
argocd-notifications-controller-metrics   ClusterIP   200.1.185.23    <none>        9001/TCP                     15m
argocd-redis                              ClusterIP   200.1.5.40      <none>        6379/TCP                     15m
argocd-repo-server                        ClusterIP   200.1.249.26    <none>        8081/TCP,8084/TCP            15m
argocd-server                             NodePort    200.1.15.59     <none>        80:31715/TCP,443:30604/TCP   15m
argocd-server-metrics                     ClusterIP   200.1.216.113   <none>        8083/TCP                     15m

访问节点IP+30604即可

账号:admin
# 获取密码方式如下
[root@k8s-master argocd]# echo $(kubectl get secret -n argocd argocd-initial-admin-secret -o yaml | grep password | awk -F: '{print $2}') | base64 -d
密码:U8g9xqXAPIRz6Ds3

4:使用ArgoCD简单的做一个CD

# 这里我只展示CD并不接触CI

配置完成之后我们就可以创建项目了

准备项目yaml并上传到git仓库

[root@k8s-master flask]# cat demo.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: demo
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
  namespace: demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      imagePullSecrets:
      - name: harbor
      containers:
      - name: demo
        image: registry.kubernetes-devops.cn/library/nginx:alpine
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: demo
  namespace: demo
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: demo
    
[root@k8s-master flask]# git add .
[root@k8s-master flask]# git commit -m "demo"
[master eddda10] demo
 1 file changed, 9 insertions(+), 9 deletions(-)
 rename nginx.yaml => demo.yaml (77%)
[root@k8s-master flask]# git push origin master 
Username for 'http://10.0.0.10:31179': devops
Password for 'http://devops@10.0.0.10:31179': 
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 509 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To http://10.0.0.10:31179/devops/flask.git
   d31d433..eddda10  master -> master

# 然后我们去ArgoCD去部署这个demo

我们查看一下部署情况,并看看部署之后是否可以访问

[root@k8s-master flask]# kubectl get pod,svc -n demo 
NAME                        READY   STATUS    RESTARTS   AGE
pod/demo-8645cf44c9-2pkv6   1/1     Running   0          84s

NAME           TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
service/demo   NodePort   200.1.73.45   <none>        80:30808/TCP   84s


# 测试访问
[root@k8s-master flask]# curl 10.0.0.10:30808 -I
HTTP/1.1 200 OK
Server: nginx/1.21.5
Date: Sat, 23 Apr 2022 12:46:29 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 28 Dec 2021 18:48:00 GMT
Connection: keep-alive
ETag: "61cb5be0-267"
Accept-Ranges: bytes

这个时候我们去变更一下代码。(变更一下yaml)

[root@k8s-master flask]# cat demo.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: demo
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
  namespace: demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      imagePullSecrets:
      - name: harbor
      containers:
      - name: demo
        image: registry.kubernetes-devops.cn/library/httpd:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: demo
  namespace: demo
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: demo
    
# 这里更换一个镜像,然后我们提交以下代码并在ArgoCD再次 SYNC一下
[root@k8s-master flask]# git add .
[root@k8s-master flask]# git commit -m "fix httpd"
[master 0d963aa] fix httpd
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@k8s-master flask]# git push origin master 
Username for 'http://10.0.0.10:31179': devops
Password for 'http://devops@10.0.0.10:31179': 
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 280 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To http://10.0.0.10:31179/devops/flask.git
   eb92f56..0d963aa  master -> master

# 我们在增加新服务的时候我们可以看看pod的变化
[root@k8s-master flask]# kubectl get pod -n demo --watch
NAME                    READY   STATUS    RESTARTS   AGE
demo-8645cf44c9-jf4g5   1/1     Running   0          3m20s
demo-9f6c4b7f5-5mmqp    0/1     Pending   0          0s
demo-9f6c4b7f5-5mmqp    0/1     Pending   0          0s
demo-9f6c4b7f5-5mmqp    0/1     ContainerCreating   0          0s
demo-9f6c4b7f5-5mmqp    0/1     ContainerCreating   0          0s
demo-9f6c4b7f5-5mmqp    1/1     Running             0          2s
demo-8645cf44c9-jf4g5   1/1     Terminating         0          3m28s
demo-8645cf44c9-jf4g5   1/1     Terminating         0          3m28s
demo-8645cf44c9-jf4g5   0/1     Terminating         0          3m29s
demo-8645cf44c9-jf4g5   0/1     Terminating         0          3m29s
demo-8645cf44c9-jf4g5   0/1     Terminating         0          3m29s

# 这里可以看到,更新策略是先启动一个新的然后再删除老的,这里测试一下访问

[root@k8s-master flask]# kubectl get pod,svc -n demo 
NAME                       READY   STATUS    RESTARTS   AGE
pod/demo-9f6c4b7f5-5mmqp   1/1     Running   0          95s

NAME           TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/demo   NodePort   200.1.240.228   <none>        80:31086/TCP   5m1s
[root@k8s-master flask]# curl 10.0.0.10:31086
<html><body><h1>It works!</h1></body></html>
# 这里可以看到已经更新了

# 那么如果我们在这个yaml里面再增加一个pod呢?我们来实践一下,再次变更代码
[root@k8s-master flask]# cat demo.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: demo
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
  namespace: demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      imagePullSecrets:
      - name: harbor
      containers:
      - name: demo
        image: registry.kubernetes-devops.cn/library/httpd:latest
        ports:
        - containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demos
  namespace: demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demos
  template:
    metadata:
      labels:
        app: demos
    spec:
      imagePullSecrets:
      - name: harbor
      containers:
      - name: demos
        image: registry.kubernetes-devops.cn/library/nginx:alpine
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: demo
  namespace: demo
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: demo
---
apiVersion: v1
kind: Service
metadata:
  name: demos
  namespace: demo
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: demos

# 提交代码
[root@k8s-master flask]# git add .
[root@k8s-master flask]# git commit -m "add service"
[master 16ccff1] add service
 1 file changed, 38 insertions(+)
[root@k8s-master flask]# git push origin master 
Username for 'http://10.0.0.10:31179': devops
Password for 'http://devops@10.0.0.10:31179': 
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 318 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To http://10.0.0.10:31179/devops/flask.git
   0d963aa..16ccff1  master -> master

# 在ArgoCD内再次SYNC,然后观察容器的更新
[root@k8s-master flask]# kubectl get pod -n demo --watch
NAME                   READY   STATUS    RESTARTS   AGE
demo-9f6c4b7f5-5mmqp   1/1     Running   0          6m43s
demos-7d56f6966c-brsvt   0/1     Pending   0          0s
demos-7d56f6966c-brsvt   0/1     Pending   0          0s
demos-7d56f6966c-brsvt   0/1     ContainerCreating   0          0s
demos-7d56f6966c-brsvt   0/1     ContainerCreating   0          0s
demos-7d56f6966c-brsvt   1/1     Running             0          1s

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

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

相关文章

ROS 2边学边练(36)-- 添加一个坐标系(C++)

前言 此篇将会在之前已存在的几个坐标系&#xff08;/world、/turtle1、/turtle2&#xff09;的基础上再增加一个坐标系&#xff0c;相对来说&#xff0c;难度不大&#xff0c;主要是理解一些概念(脑子里面有3D场景的想象)&#xff0c;比如一个小车机器人处在世界坐标系&#x…

春秋云镜 CVE-2023-50563

靶标介绍&#xff1a; SEMCMS是一套支持多种语言的外贸网站内容管理系统&#xff08;CMS&#xff09;。SEMCMS v4.8版本存在SQLI&#xff0c;该漏洞源于SEMCMS_Function.php 中的 AID 参数包含 SQL 注入 开启靶场&#xff1a; 开始实验&#xff1a; 1、使用后台扫描工具&…

QT学习之QtXlsx

背景&#xff1a; 本来我是想提取xml中的信息存在xlsx文件中的&#xff0c;网上很多说是使用QtXlsx&#xff1b; 于是我找了一些帖&#xff0c; 像&#xff1a;https://www.cnblogs.com/liming19680104/p/14398459.html&#xff1b; 大家的说法都是安装第三方库到QT中&#xff…

社交媒体数据恢复:Skype国内、际版

恢复已删除的Skype聊天记录可能需要一些操作&#xff0c;但请注意&#xff0c;这不一定总是可行的&#xff0c;并且可能需要一些技术知识。以下是一些步骤&#xff0c;您可以尝试恢复您的Skype聊天记录&#xff1a; 1. 检查备份&#xff1a; - 如果您有Skype备份&#xff0…

【行为型模式】备忘录模式

一、备忘录模式概述 备忘录模式定义&#xff1a;又称之为快照模式(Snapshop Pattern)或者令牌模式(Token Pattern)&#xff0c;是指在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态&#xff0c;这样我们就可以在需要的时候将该对…

软件测试的内容包含什么内容

软件测试的内容涵盖了多个方面&#xff0c;以确保软件的质量和性能达到既定的标准。这些内容包括但不限于以下几点&#xff1a; 注册信息验证&#xff1a;对软件产品的基本信息进行验证&#xff0c;如软件名称、版本号、开发者等&#xff0c;确保这些信息的准确性和一致性。功…

Mysql事务—隔离级别—脏读、不可重复读、幻读-遥遥领先版

事务的基本概念 事务就是一组原子性的操作&#xff0c;这些操作要么全部发生&#xff0c;要么全部不发生。事务把数据库从一种一致性状态转换成另一种一致性状态。 事务最经典也经常被拿出来说例子就是转账了。 假如小明要给小红转账1000元&#xff0c;这个转账会涉及到两个…

Java全栈开发前端+后端(全栈工程师进阶之路)-环境搭建

在课程开始前我们要配置好我们的开发环境&#xff0c;这里我的电脑太乱了&#xff0c;我使用vm虚拟机进行搭建开发环境&#xff0c;如果有需要环境的或者安装包&#xff0c;可以私信我。 那我们开始 首先我们安装数据库 这里我们使用小皮面板 小皮面板(phpstudy) - 让天下没…

【一刷《剑指Offer》】面试题 11:数值的整数次方

力扣对应题目链接&#xff1a;50. Pow(x, n) - 力扣&#xff08;LeetCode&#xff09; 牛客对应题目链接&#xff1a;数值的整数次方_牛客题霸_牛客网 (nowcoder.com) 一、《剑指Offer》内容 二、分析题目 【快速幂 递归】 当指数 n 为负数时&#xff0c;我们可以计算 x^(−…

大模型应用开发极简入门

简单的归纳一下书的前序部分 目录 LLM&#xff08;Large Language Model&#xff09;的应用技术栈通常包括以下几个方面&#xff1a; 深度学习框架&#xff1a; 数据预处理工具&#xff1a; 训练资源&#xff1a; 模型优化和调参工具&#xff1a; 部署和应用集成&#xf…

基于Vue3的Axios异步请求

基于Vue3的Axios异步请求 1. Axios安装与应用2. Axios网络请求封装3. axios网络请求跨域前端解决方案server.proxy 1. Axios安装与应用 Axios是一个基于promise的网络请求库&#xff0c;Axios.js.中文文档&#xff1a;https://axios.js.cn/ 安装&#xff1a;npm install --sa…

链表之两数相加

两数相加 题目&#xff1a; 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&am…

简单几步!新手开抖店如何快速上手?看这一篇就够了!

大家好&#xff0c;我是电商花花。 很多新手卖家在做抖音小店的时候都是0基础的小白&#xff0c;在开好店铺之后却不知道如何下手。 那么今天花花就来跟 大家分享一下我们是怎么做抖音小店&#xff0c;怎么做店铺运营的&#xff0c;如果你作为一个刚开店的新手&#xff0c;一…

Java的逻辑控制和方法的使用介绍

前言 程序的逻辑结构一共有三种&#xff1a;顺序结构、分支结构和循环结构。顺序结构就是按代码的顺序来执行相应的指令。这里主要讲述Java的分支结构和循环结构&#xff0c;由于和C语言是有相似性的&#xff0c;所以这里只会提及不同点和注意要点~~ 注意在C语言中&#xff0c;…

MobileNetV4 论文学习

论文地址&#xff1a;https://arxiv.org/abs/2404.10518 代码地址&#xff1a;https://github.com/tensorflow/models/blob/master/official/vision/modeling/backbones/mobilenet.py 解决了什么问题&#xff1f; 边端设备的高效神经网络不仅能带来实时交互的体验&#xff0c…

Linux服务器安全基础 - 查看入侵痕迹

1. 常见系统日志 /var/log/cron 记录了系统定时任务相关的日志 /var/log/dmesg 记录了系统在开机时内核自检的信息&#xff0c;也可以使用dmesg命令直接查看内核自检信息 /var/log/secure:记录登录系统存取数据的文件;例如:pop3,ssh,telnet,ftp等都会记录在此. /var/log/btmp:记…

XYCTF 2024

Web 参考博客&#xff1a;https://www.yuque.com/yunzhiyunweiji/wrgkex/rfpnkn0293l7cp09#ezMake ezhttp Via - HTTP | MDN 代理那里难住了 XFF不给用可以用client-ip ezmd5 让我们上传图片并比较&#xff0c;结合题目名可以猜测应该是比较两个图片的md5值是否相同&…

实锤!腾讯终于拥抱鸿蒙生态,微信鸿蒙原生版本即将上线

大家都知道&#xff0c;目前已知纯血鸿蒙星河版next将于今年6月份开启Bate版本的测试&#xff0c;也就是说原生鸿蒙系统快上线了。而目前对于鸿蒙生态的发展&#xff0c;大家最关心的恐怕只有腾讯系的微信和QQ是否适配了纯血鸿蒙系统。甚至有网友表示&#xff0c;微信不适配鸿蒙…

上海计算机学会2020年9月月赛C++丙组T2中心对称数

题目背景 在超市里&#xff0c;有一些价格标签倒置后&#xff0c;数字竟不会发生改变。转置 180 度后不变的十进制数字被称为中心对称数&#xff08;Strobogrammatic Numbers&#xff09;。下图分别给出 0 到 9 这十个数字倒置后的样子&#xff1a; 题目描述 中心对称数是指沿…

npm 安装 pnpm 时 报错 npm ERR! Unexpected token ‘.‘

问题 一个项目用的是 pnpm 安装的依赖&#xff0c;node 的版本是 16.16.0&#xff0c;nvm 的版本是 1.1.7&#xff0c;然后全局安装 pnpm 报错如下&#xff1a; 解决 我看网上的一些解决方案是说 nvm 版本过低导致&#xff0c;下面我们按照这个方向处理。 实首先下载 nvm-up…