ArgoCD集成部署到Kubernetes

embedded/2024/10/4 17:19:17/

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://www.ppmy.cn/embedded/14242.html

相关文章

北航计算机软件技术基础课程作业笔记【4】

题目&#xff08;好像以前没加&#xff09; 二叉树与哈希表 作业 1.二叉树前序遍历结果 二叉树结构为 代码实现中序后序推理前序表达式 #include <iostream> #include <stack> #include <string> #include <vector> #include <deque> ​ // …

「Java开发指南」如何利用MyEclipse启用Spring DSL?(二)

本教程将引导您通过启用Spring DSL和使用Service Spring DSL抽象来引导Spring和Spring代码生成项目&#xff0c;本教程中学习的技能也可以很容易地应用于其他抽象。在本教程中&#xff0c;您将学习如何&#xff1a; 为Spring DSL初始化一个项目创建一个模型包创建一个服务和操…

idea在controller或者service使用ctrl+alt+b进入方法后,如何返回到 进入前的那一层

idea在controller或者service使用ctrlaltb进入方法后&#xff0c;如何返回到进入方法的最外层 解决方案使用 ctrlalt ← /→← /→ 键盘上的左右键盘

[InternLM训练营第二期笔记]5. LMDeploy 量化部署 LLM 实践

该系列是上海AI Lab举行的书生 浦语大模型训练营的相关笔记部分。 该笔记是第五节课&#xff0c;学习大语言模型量化的基本概念&#xff0c;以及利用LMDeploy工具进行微调。 0. 模型部署的概念 0.0 背景 如果要将大模型在特定平台&#xff08;大到服务器集群&#xff0c;小到…

【七】jmeter5.5+influxdb2.0+prometheus+grafana

参考文章&#xff1a;https://blog.csdn.net/wenxingchen/article/details/126892890 https://blog.csdn.net/Zuo19960127/article/details/119726652 https://blog.csdn.net/shnu_cdk/article/details/132182858 promethus参考 由于自己下载的是infuldb2.0&#xff0c;所以按照…

sql 笛卡尔积

隐式联接&#xff1a;一种在SQL查询中不使用显式的JOIN语句&#xff0c;而是通过在WHERE子句中指定条件来连接两个或多个表的方法。 在早期的SQL实践中&#xff0c;隐式联接是非常常见的&#xff0c;尤其是在早期版本的数据库系统中。隐式联接的工作原理是通过在WHERE子句中指…

用户中心 -- 代码理解

一、删除表 & if 删除表 1.1 DROP TABLE IF EXISTS user 和 DROP TABLE user 网址&#xff1a; 用户管理第2节课 -- idea 2023.2 创建表--【本人】-CSDN博客 二、 代码 2.1 清空表中数据 的 命令 【truncate 清空】 网址&#xff1a; 用户管理第2节课 -- idea 2…

【k8s】Kubernetes 1.29.4离线安装部署(总)

&#xff08;一&#xff09;kubernetes1.29.4离线部署之-安装文件准备 &#xff08;二&#xff09;kubernetes1.29.4离线部署之-镜像文件准备 &#xff08;三&#xff09;kubernetes1.29.4离线部署之-环境初始化 &#xff08;四&#xff09;kubernetes1.29.4离线部署之-组件安装…