ArgoCD集成部署到Kubernetes

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 created2:通过官方命令部署(镜像在国外,需要梯子,或者加速也行)
[root@k8s-master ~]# kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml3:查看部署状态
[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          61s4:因为需要访问,我们可以通过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-serversessionAffinity: Nonetype: 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: demonamespace: demo
spec:replicas: 1selector:matchLabels:app: demotemplate:metadata:labels:app: demospec:imagePullSecrets:- name: harborcontainers:- name: demoimage: registry.kubernetes-devops.cn/library/nginx:alpineports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: demonamespace: demo
spec:type: NodePortports:- name: httpport: 80targetPort: 80protocol: TCPselector:app: demo[root@k8s-master flask]# git add .
[root@k8s-master flask]# git commit -m "demo"
[master eddda10] demo1 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.gitd31d433..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          84sNAME           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: demonamespace: demo
spec:replicas: 1selector:matchLabels:app: demotemplate:metadata:labels:app: demospec:imagePullSecrets:- name: harborcontainers:- name: demoimage: registry.kubernetes-devops.cn/library/httpd:latestports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: demonamespace: demo
spec:type: NodePortports:- name: httpport: 80targetPort: 80protocol: TCPselector:app: demo# 这里更换一个镜像,然后我们提交以下代码并在ArgoCD再次 SYNC一下
[root@k8s-master flask]# git add .
[root@k8s-master flask]# git commit -m "fix httpd"
[master 0d963aa] fix httpd1 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.giteb92f56..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          95sNAME           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: demonamespace: demo
spec:replicas: 1selector:matchLabels:app: demotemplate:metadata:labels:app: demospec:imagePullSecrets:- name: harborcontainers:- name: demoimage: registry.kubernetes-devops.cn/library/httpd:latestports:- containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:name: demosnamespace: demo
spec:replicas: 1selector:matchLabels:app: demostemplate:metadata:labels:app: demosspec:imagePullSecrets:- name: harborcontainers:- name: demosimage: registry.kubernetes-devops.cn/library/nginx:alpineports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: demonamespace: demo
spec:type: NodePortports:- name: httpport: 80targetPort: 80protocol: TCPselector:app: demo
---
apiVersion: v1
kind: Service
metadata:name: demosnamespace: demo
spec:type: NodePortports:- name: httpport: 80targetPort: 80protocol: TCPselector:app: demos# 提交代码
[root@k8s-master flask]# git add .
[root@k8s-master flask]# git commit -m "add service"
[master 16ccff1] add service1 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.git0d963aa..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://xiahunao.cn/news/2981497.html

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

相关文章

通配符(泛域名)SSL证书在使用上有什么优势?

通配符证书在使用上具有以下显著优势&#xff1a; 1. 安全性&#xff1a; - 统一加密保护&#xff1a;通配符证书基于SSL/TLS协议&#xff0c;为一个主域名及其所有子域名提供相同的高强度数据加密服务。无论用户访问的是mail.example.com、shop.example.com还是其他任何以exam…

Python | Leetcode Python题解之第48题旋转图像

题目&#xff1a; 题解&#xff1a; class Solution:def rotate(self, matrix: List[List[int]]) -> None:n len(matrix)# 水平翻转for i in range(n // 2):for j in range(n):matrix[i][j], matrix[n - i - 1][j] matrix[n - i - 1][j], matrix[i][j]# 主对角线翻转for …

ArcGIS无法开始编辑TIN!开始编辑TIN显示灰色

ArcGIS无法开始编辑TIN&#xff01;开始编辑TIN显示灰色&#xff1f; 解决方案&#xff01; 1、确认自定义——扩展模块中空间分析、3D分析模块勾选。 2、确认以上后&#xff0c;还是不能编辑的话&#xff0c;我们可以调出 3D分析分析工具条&#xff0c;你就会发现。TIN编辑工…

C#带引导窗体的窗体设计方法:创建特殊窗体

目录 1.设计操作流程 2.实例 &#xff08;1&#xff09;Resources.Designer.cs &#xff08;2&#xff09;Frm_Main.Designer.cs &#xff08;3&#xff09;Frm_Main.cs &#xff08;4&#xff09;Frm_Start.Designer.cs &#xff08;5&#xff09;Frm_Start.cs &#…

上海·得物技术沙龙-「无线技术」专场报名开启!

本次无线沙龙聚焦于最新的技术趋势和实践&#xff0c;将在上海/线上为你带来四个令人期待的演讲话题&#xff0c;包括&#xff1a;《快手主App启动接口带宽优化实践》、《得物App视频体验优化实践》、《Chromium内核架构和网络库优化介绍》、《得物App发热监控实践》。相信这些…

【Java Spring MVC项目异常解决】HTTP 500

HTTP 500状态码表示“内部服务器错误”&#xff08;Internal Server Error&#xff09;。这是一个通用的错误响应&#xff0c;表明服务器在处理请求时遇到了预料之外的情况&#xff0c;导致无法完成请求。500错误是服务器端错误的一种&#xff0c;与客户端无关。在Web开发中&am…

小波变换和多分辨率处理

第七章的内容&#xff0c;发现冈萨雷斯的第二版要比第三版写的清楚很多。我在对比第三版和第二版的内容之后&#xff0c;感觉更容易理解。j级图像滤波之后一抽样因子为2进行抽样&#xff0c;产生空间分辨率变成1/4的图像叫j-1级近似。然后插值因子为2插值分辨率又变成了原来大小…

字节跳动(社招)三面算法原题

TikTok 喘息 继上月通过强制剥离 TikTok 法案后&#xff0c;美国众议院在当地时间 20 日下午以 360 票赞成 58 票反对通过了新的法案&#xff1a;剥离 TikTok 的期限由生效后 165 天调整至 270 天之内&#xff0c;即今年 11 月的美国总统大选后。 之前我们讲过&#xff0c;TikT…

中国新能源汽车快速发展 充电模块市场前景广阔

中国新能源汽车快速发展 充电模块市场前景广阔 充电模块是一种用于充电的电子模块&#xff0c;指可以直接焊装在印刷电路板上的、以模块方式体现的电源供应器&#xff0c;主要由电源管理电路、充电控制电路和充电保护电路等部分组成。充电模块在充电系统中不仅负责提供能源电力…

学python的第二十天

多线程 以下内容来源于《看漫画学Python》这本书&#xff0c;前面十几天好多内容参考过本书内容&#xff0c;写的挺好。 1 线程相关知识 1.1 进程 一个进程就是一个正在执行的程序&#xff0c;每一个进程都有自己独立的一块内存空间&#xff0c;一组系统资源。在进程概念中&…

3月魅力彩妆行业数据分析:某国产品牌彩妆产品销额将近30亿!

彩妆行业发展多年&#xff0c;经历了多重红利期和激烈的市场竞争后&#xff0c;进入到缓慢发展时期。 根据鲸参谋数据显示&#xff0c;今年3月在线上电商平台&#xff08;淘宝天猫京东&#xff09;彩妆产品销量累计超过6700万件&#xff0c;同比去年下降了29%&#xff1b;销售…

小程序视频如何下载到手机#下载高手

在本文中&#xff0c;我将向您介绍一个工具:下载高手&#xff0c;帮助您轻松下载小程序视频&#xff0c;并将其保存到您的手机中。无论是学习教育类的小程序视频&#xff0c;还是图片素材类的小程序&#xff0c;这些方法都适用于各种类型的小程序。 工具我已经打包好了&#x…

Vue集成three.js,加载glb、gltf类型的3d模型

安装基本依赖 // 注意OrbitControls要加{}&#xff0c;注意路径是jsm import { OrbitControls } from ‘three/examples/jsm/controls/OrbitControls.js’; // import { dat } from ‘three/examples/jsm/controls/dat.gui.js’; // dat gui这个插件&#xff0c;是另外自己下载…

计算机网络---第十一天

生成树协议 stp作用&#xff1a; 作用&#xff1a;stp用于解决二层环路问题。 BPDU&#xff1a; 含义&#xff1a;桥协议数据单元&#xff0c;用于传递stp协议相关报文 分类&#xff1a;配置bpdu---用于传递stp的配置信息 tcn bpdu---用于通告拓扑变更信息 包含信息&…

【性能测试】ChaosTesting(混沌测试)ChaosBlade(混沌实验工具)(四)-k8s容器混沌实验

5. 创建 kubernetes 相关的实验场景 5.0 blade create k8s 5.0.1 介绍 创建 kubernetes 相关的实验场景&#xff0c;除了使用 blade 命令创建场景外&#xff0c;还可以将实验使用 yaml 文件描述&#xff0c;使用 kubectl 命令执行。目前支持的实验场景如下&#xff1a; [bl…

基于spring boot学生综合测评系统

基于spring boot学生综合测评系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件…

重磅!Llama-3,最强开源大模型正式发布!

4月19日&#xff0c;全球科技、社交巨头Meta在官网&#xff0c;正式发布了开源大模型——Llama-3。 据悉&#xff0c;Llama-3共有80亿、700亿两种参数&#xff0c;分为基础预训练和指令微调两种模型&#xff08;还有一个超4000亿参数正在训练中&#xff09;。 与Llama-2相比&…

如何阻止cPanel与WHM自动重定向到服务器主机名

本周有一个客户&#xff0c;购买Hostease的VPS主机&#xff0c;询问我们的在线客服&#xff0c;如何阻止cPanel / WHM自动重定向到服务器主机名。我们为用户提供教程&#xff0c;用户很快完成了设置。在此&#xff0c;我们分享这个操作教程&#xff0c;希望可以对您有帮助。 接…

Python自学篇2-导入Win32库

Python导入win32模块 导入win32模块可以让我们在Python中使用Windows的API功能&#xff0c;这对于开发需要与Windows操作系统进行交互的应用程序非常有用。 本文将介绍如何导入win32模块&#xff0c;并提供一些代码示例来帮助读者更好地理解。 什么是win32模块&#xff1f; …

吴恩达机器学习笔记:第 8 周-13 聚类(Clustering)13.3-13.5

目录 第 8 周 13、 聚类(Clustering)13.3 优化目标13.4 随机初始化13.5 选择聚类数 第 8 周 13、 聚类(Clustering) 13.3 优化目标 K-均值最小化问题&#xff0c;是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和&#xff0c;因此 K-均值的代价函数&#xff08;又…