云原生--argocd 创建应用、部署应用、回滚(二)

简介: 云原生--argocd 创建应用、部署应用、回滚

部署应用


上面我们创建好了应用,但还没有部署,所以 namespace、pod、deployment、svc 都没有

使用 CLI 同步

应用创建完成后,我们可以通过如下所示命令查看其状态

# 查看应用 app01 的状态
[root@master1 k8s-yaml]# argocd app get app01
Name:               app01  # 应用名称
Project:            default
Server:             https://kubernetes.default.svc  # 部署的服务
Namespace:          demo1  # 部署的 ns
URL:                https://10.6.215.30:32382/applications/app01  
Repo:               https://gitee.com/zouzou_busy/devops_test.git  # 资源仓库
Target:
Path:               app  # 仓库里的资源路径
SyncWindow:         Sync Allowed
Sync Policy:        <none>
Sync Status:        OutOfSync from  (d7306f4)  # 同步状态
Health Status:      Missing  # 健康状态
GROUP  KIND        NAMESPACE  NAME   STATUS     HEALTH   HOOK  MESSAGE
       Service     demo1      myapp  OutOfSync  Missing
apps   Deployment  demo1      myapp  OutOfSync  Missing

因为 app01 是我们通过命名行创建的,ns 写的是 demo1,没有设置自动创建。如果你集群上没有这个命名空间,需要先手动创建

# 创建 ns
[root@master1 k8s-yaml]# kubectl create ns demo1
namespace/demo1 created

应用程序状态为初始 OutOfSync 状态,因为应用程序尚未部署,并且尚未创建任何 Kubernetes 资源。要同步(部署)应用程序,可以执行如下所示命令

# 同步应用 app01
[root@master1 k8s-yaml]# argocd app sync app01
TIMESTAMP                  GROUP        KIND   NAMESPACE                  NAME    STATUS    HEALTH        HOOK  MESSAGE
2022-08-18T21:40:18+08:00            Service       demo1                 myapp  OutOfSync  Missing
2022-08-18T21:40:18+08:00   apps  Deployment       demo1                 myapp  OutOfSync  Missing
2022-08-18T21:40:18+08:00            Service       demo1                 myapp    Synced  Healthy
2022-08-18T21:40:19+08:00   apps  Deployment       demo1                 myapp  OutOfSync  Missing              deployment.apps/myapp created
2022-08-18T21:40:19+08:00            Service       demo1                 myapp    Synced   Healthy              service/myapp created
2022-08-18T21:40:19+08:00   apps  Deployment       demo1                 myapp    Synced  Progressing              deployment.apps/myapp created
Name:               app01
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          demo1
URL:                https://10.6.215.30:32382/applications/app01
Repo:               https://gitee.com/zouzou_busy/devops_test.git
Target:
Path:               app
SyncWindow:         Sync Allowed
Sync Policy:        <none>
Sync Status:        Synced to  (d7306f4)
Health Status:      Progressing
Operation:          Sync
Sync Revision:      d7306f4c729378979e1972a2cf857a9847ba0b8e
Phase:              Succeeded
Start:              2022-08-18 21:40:18 +0800 CST
Finished:           2022-08-18 21:40:19 +0800 CST
Duration:           1s
Message:            successfully synced (all tasks run)
GROUP  KIND        NAMESPACE  NAME   STATUS  HEALTH       HOOK  MESSAGE
       Service     demo1      myapp  Synced  Healthy            service/myapp created
apps   Deployment  demo1      myapp  Synced  Progressing        deployment.apps/myapp created

此命令从 Git 仓库中检索资源清单并执行 kubectl apply 部署应用,执行上面命令后 guestbook 应用便会运行在集群中了,现在我们就可以查看其资源组件、日志、事件和评估其健康状态了。

在查看 app01 的状态

# 查看应用 app01 的状态
[root@master1 k8s-yaml]# argocd app get app01
Name:               app01
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          demo1
URL:                https://10.6.215.30:32382/applications/app01
Repo:               https://gitee.com/zouzou_busy/devops_test.git
Target:
Path:               app
SyncWindow:         Sync Allowed
Sync Policy:        <none>
Sync Status:        Synced to  (d7306f4)
Health Status:      Progressing  # 状态为 Progressing(进行中)了
GROUP  KIND        NAMESPACE  NAME   STATUS  HEALTH       HOOK  MESSAGE
       Service     demo1      myapp  Synced  Healthy            service/myapp created  # 状态是 Healthy
apps   Deployment  demo1      myapp  Synced  Progressing        deployment.apps/myapp created  # 状态也是 Progressing

等一会在去查看状态

[root@master1 k8s-yaml]# argocd app get app01
Name:               app01
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          demo1
URL:                https://10.6.215.30:32382/applications/app01
Repo:               https://gitee.com/zouzou_busy/devops_test.git
Target:
Path:               app
SyncWindow:         Sync Allowed
Sync Policy:        <none>
Sync Status:        Synced to  (d7306f4)
Health Status:      Healthy  # 状态为 Healthy(健康)的了
GROUP  KIND        NAMESPACE  NAME   STATUS  HEALTH   HOOK  MESSAGE
       Service     demo1      myapp  Synced  Healthy        service/myapp created  # 状态也是 Healthy
apps   Deployment  demo1      myapp  Synced  Healthy        deployment.apps/myapp created  # 状态也是 Healthy

然后查看 pod、deploy、svc

# pod、svc、deploy 都正常运行了
[root@master1 k8s-yaml]# kubectl get pod,svc,deploy -n demo1
NAME                         READY   STATUS    RESTARTS   AGE
pod/myapp-85757559dc-2j46l   1/1     Running   0          8m12s
pod/myapp-85757559dc-hz57n   1/1     Running   0          8m12s
NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/myapp   NodePort   10.111.135.216   <none>        8008:32060/TCP   8m12s
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/myapp   2/2     2            2           8m12s

访问 ip:32060,可以看到下面页面则表示部署成功


通过 UI 页面同步


可以看到上面我们使用命令行同步的已经在 ui 上显示正常了,状态也是 Healthy 的

在页面上同步我们只需要点击 SYNC,会弹出一个抽屉,可以进行一些更改,在点击 SYNCHRONIZE即可

同步完成后可以看到我们的资源状态:

也可以查看日志、event 等信息

查看 pod、deploy、svc。都运行正常

# 查看 pod,svc,deploy
[root@master1 k8s-yaml]# kubectl get pod,svc,deploy -n demo2
NAME                         READY   STATUS    RESTARTS   AGE
pod/myapp-85757559dc-b5j9p   1/1     Running   0          4m25s
pod/myapp-85757559dc-kxzbt   1/1     Running   0          4m25s
NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/myapp   NodePort   10.100.144.60   <none>        8008:31264/TCP   4m26s
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/myapp   2/2     2            2           4m26s

访问 ip:31264 看到如下页面,则部署成功


更新应用


上面我们已经部署好了两个应用 app01 和 app02,现在来更改一下 myapp-deployment.yaml 文件,将镜像改为 v2

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - image: zouzou0214/myapp:v2 # 改为 v2 版
        name: myapp
        ports:
        - containerPort: 8008

等待几分钟,查看应用状态(也可以点击下面的刷新按钮),可以看到 app02 的状态变成了 OutOfSync。这是因为 argocd 检测到了仓库里有变动。app01 是我手动点击了 SYNC

我们点击 app02 的 SYNC 进行同步,等待一会查看状态

查看 pod、svc、deploy,都正常运行

# 查看 pod,svc,deploy
[root@master1 k8s-yaml]# kubectl get pod,svc,deploy -n demo2
NAME                         READY   STATUS    RESTARTS   AGE
pod/myapp-77c6b7455d-rbnvk   1/1     Running   0          5m32s
pod/myapp-77c6b7455d-slh68   1/1     Running   0          2m50s
NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/myapp   NodePort   10.100.144.60   <none>        8008:31264/TCP   19m
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/myapp   2/2     2            2           19m

如果看到如下页面则部署成功

查看详情

查看 rs,可以看到,是有两个 rs 的,一个副本数为 0,一个副本数为 2

# 查看 rs
[root@master1 k8s-yaml]# kubectl get rs -n demo2
NAME               DESIRED   CURRENT   READY   AGE
myapp-77c6b7455d   2         2         2       14m
myapp-85757559dc   0         0         0       28m


回滚


上面我们的 app02 已经有两个版本了,现在最新的是 v2 版本,我们也可以可以回滚到第一个版本

点击 HISTORY AND ROLLBACK

找到要回滚的版本,点击 Rollback

在回滚的时候需要禁用 AUTO-SYNC 自动同步,点击 OK 确认即可。

等待一会可以看到此时已经回滚成功,此时 Pod 是 v1 版本的,并且由于此时线上的版本并不是 Git 仓库中最新的版本,因此此时同步状态是 OutOfSync

查看 rs

# 回滚之前的
[root@master1 k8s-yaml]# kubectl get rs -n demo2
NAME               DESIRED   CURRENT   READY   AGE
myapp-77c6b7455d   2         2         2       14m
myapp-85757559dc   0         0         0       28m
# 回滚之后的,可以看到之前的 rs 的副本数从 0 变为了 2
[root@master1 k8s-yaml]# kubectl get rs -n demo2
NAME               DESIRED   CURRENT   READY   AGE
myapp-77c6b7455d   0         0         0       20m
myapp-85757559dc   2         2         2       34m

查看 pod,svc,deployment

# 查看 pod,svc,deploy
[root@master1 k8s-yaml]# kubectl get pod,svc,deploy -n demo2
NAME                         READY   STATUS    RESTARTS   AGE
pod/myapp-85757559dc-4xv27   1/1     Running   0          2m53s
pod/myapp-85757559dc-5659l   1/1     Running   0          2m57s
NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/myapp   NodePort   10.100.144.60   <none>        8008:31264/TCP   36m
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/myapp   2/2     2            2           36m

访问 31264 端口



相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
16天前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
17天前
|
运维 Cloud Native 安全
云原生技术在现代企业中的应用与挑战####
本文探讨了云原生技术在现代企业IT架构中的关键作用,分析了其带来的优势和面临的主要挑战。通过实际案例分析,揭示了如何有效应对这些挑战,以实现业务敏捷性和技术创新的平衡。 ####
|
14天前
|
Cloud Native 持续交付 开发者
云原生技术在现代企业中的应用与实践####
本文深入探讨了云原生技术的核心概念及其在现代企业IT架构转型中的关键作用,通过具体案例分析展示了云原生如何促进企业的敏捷开发、高效运维及成本优化。不同于传统摘要仅概述内容,本部分旨在激发读者对云原生领域的兴趣,强调其在加速数字化转型过程中的不可或缺性,为后续详细论述奠定基础。 ####
|
19天前
|
Kubernetes Cloud Native 物联网
云原生技术在现代软件开发中的应用与挑战####
本文探讨了云原生技术的兴起背景、核心理念及其在现代软件开发中的广泛应用。通过具体案例分析,揭示了云原生架构如何促进企业数字化转型,并指出了在实施过程中面临的主要挑战及应对策略。 ####
|
9天前
|
人工智能 缓存 异构计算
云原生AI加速生成式人工智能应用的部署构建
本文探讨了云原生技术背景下,尤其是Kubernetes和容器技术的发展,对模型推理服务带来的挑战与优化策略。文中详细介绍了Knative的弹性扩展机制,包括HPA和CronHPA,以及针对传统弹性扩展“滞后”问题提出的AHPA(高级弹性预测)。此外,文章重点介绍了Fluid项目,它通过分布式缓存优化了模型加载的I/O操作,显著缩短了推理服务的冷启动时间,特别是在处理大规模并发请求时表现出色。通过实际案例,展示了Fluid在vLLM和Qwen模型推理中的应用效果,证明了其在提高模型推理效率和响应速度方面的优势。
云原生AI加速生成式人工智能应用的部署构建
|
14天前
|
Cloud Native JavaScript Docker
云原生技术:构建现代应用的基石
在数字化转型的浪潮中,云原生技术如同一艘承载梦想的航船,引领企业驶向创新与效率的新海域。本文将深入探索云原生技术的核心价值,揭示其如何重塑软件开发、部署和运维模式,同时通过一个简易代码示例,展现云原生应用的构建过程,让读者领略到云原生技术的魅力所在。
|
21天前
|
消息中间件 Cloud Native 持续交付
云原生技术在现代企业中的应用与优势###
本文深入探讨了云原生技术在现代企业中的具体应用及其带来的显著优势。随着云计算的普及,云原生作为一种新兴的技术架构,正逐渐成为企业数字化转型的关键驱动力。文章将详细介绍云原生的核心概念、主要技术组件以及在实际业务场景中的成功案例,旨在为读者提供一个全面且实用的参考框架,以便更好地理解和应用云原生技术。 ###
|
14天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
24天前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
39 3
|
25天前
|
Cloud Native 持续交付 云计算
云原生架构的演进与挑战
随着云计算技术的不断发展,云原生架构已成为企业数字化转型的重要支撑。本文深入探讨了云原生架构的概念、发展历程、核心技术以及面临的挑战,旨在为读者提供一个全面了解云原生架构的视角。通过分析Kubernetes、Docker等关键技术的应用,以及微服务、持续集成/持续部署(CI/CD)等实践案例,本文揭示了云原生架构在提高应用开发效率、降低运维成本、增强系统可扩展性等方面的显著优势。同时,也指出了云原生架构在安全性、复杂性管理等方面所面临的挑战,并提出了相应的解决策略。