GitOps【1】入门实践

简介: GitOps【1】入门实践

文章目录

安装GitOps

curl --silent --location "https://github.com/weaveworks/weave-gitops/releases/download/v0.6.0/gitops-$(uname)-$(uname -m).tar.gz" | tar xz -C /tmp
sudo mv /tmp/gitops /usr/local/bin
gitops version

或者,macOS 用户可以使用 Homebrew:

brew tap weaveworks/tap
brew install weaveworks/tap/gitops

创建 GitHub Repositories

Weave GitOps 可用于将多个应用程序部署到多个 Kubernetes 集群,每个应用程序在自己的单独存储库中都有部署清单。为了便于管理,我们将一个或多个集群的GitOps 自动化存储在单个配置存储库中。


虽然您可以将自动化添加到任何现有存储库,包括带有应用程序部署清单的存储库,但我们建议为此目的使用新的或空的存储库,我们的指南将采用这种方法。

1035234-20181020215539574-213176954.png

Fork podinfo 示例应用程序存储库

们将对示例应用程序进行更改,以展示 GitOps 对账的实际效果。因此,我们将首先 fork podinfo 示例存储库。

转到https://github.com/wego-example/podinfo-deploy并分叉存储库。

1035234-20181020215539574-213176954.png

Podinfo是一个用 Go 编写的简单 Web 应用程序,由前端和后端组件组成;它旨在展示在 Kubernetes 中运行微服务的最佳实践。可以在此处找到完整的应用程序源。

.
├── README.md
├── backend
│   ├── deployment.yaml
│   ├── hpa.yaml
│   └── service.yaml
├── frontend
│   ├── deployment.yaml
│   └── service.yaml
└── namespace.yaml
2 directories, 7 files

kind创建集群

$ kind create cluster
Creating cluster "kind" ...
 ✓ Ensuring node image (kindest/node:v1.21.1) 🖼
 ✓ Preparing nodes 📦
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Have a nice day! 👋

在 Kubernetes 集群上安装 Weave GitOps

格式

gitops install --config-repo git@github.com:<username>/gitops-config
gitops install --config-repo https://github.com/Ghostwritten/gitops-config.git

运行安装命令,指定在步骤 1 中创建的配置存储库的位置。

安装大约需要 2 分钟,具体取决于您的系统。

完成后,您将看到:

...
◎ verifying installation
✔ image-reflector-controller: deployment ready
✔ image-automation-controller: deployment ready
✔ source-controller: deployment ready
✔ kustomize-controller: deployment ready
✔ helm-controller: deployment ready
✔ notification-controller: deployment ready
✔ install finished
Deploy key generated and uploaded to git provider
► Writing manifests to disk
► Committing and pushing gitops updates for application
► Pushing app changes to repository
► Applying manifests to the cluster

如果报错:

✗ helm-controller: deployment not ready
✗ image-automation-controller: deployment not ready
✗ image-reflector-controller: deployment not ready
✗ kustomize-controller: deployment not ready
✗ notification-controller: deployment not ready
✗ source-controller: deployment not ready
✗ install failed
 and error: exit status 1
$ kubectl get pods -n wego-system
NAME                                           READY   STATUS             RESTARTS   AGE
helm-controller-59dcbc6dcb-8dtz7               0/1     ImagePullBackOff   0          174m
image-automation-controller-747996c677-rnhlq   0/1     ImagePullBackOff   0          174m
image-reflector-controller-f55d746df-q2742     0/1     ImagePullBackOff   0          174m
kustomize-controller-5b7b8b44f6-4t9h7          0/1     ErrImagePull       0          174m
notification-controller-77f68bf8f4-hlk8w       0/1     ImagePullBackOff   0          174m
source-controller-679665b8d6-5l2kq             0/1     ErrImagePull       0          174m

解决方法:

$ for i in `kubectl get pods -n wego-system   -o jsonpath='{.items[*].spec.containers[0].image}'`;do docker pull  $i;done
$ for i in `kubectl get pods -n wego-system   -o jsonpath='{.items[*].spec.containers[0].image}'`;do kind load  docker-image $i --name kind ;done
#检查运行pod状态
$ kubectl get pods -n wego-system
NAME                                           READY   STATUS    RESTARTS   AGE
helm-controller-59dcbc6dcb-8dtz7               1/1     Running   0          3h31m
image-automation-controller-747996c677-rnhlq   1/1     Running   0          3h31m
image-reflector-controller-f55d746df-q2742     1/1     Running   0          3h31m
kustomize-controller-5b7b8b44f6-4t9h7          1/1     Running   0          3h31m
notification-controller-77f68bf8f4-hlk8w       1/1     Running   0          3h31m
source-controller-679665b8d6-5l2kq             1/1     Running   0          3h31m

这将向.weave-gitops您的配置存储库提交一个新文件夹,其中包含以下文件以管理指定集群上的 Weave GitOps 运行时:

.
└── clusters
    └── kind-kind
        ├── system
        │   ├── flux-source-resource.yaml
        │   ├── flux-system-kustomization-resource.yaml
        │   ├── flux-user-kustomization-resource.yaml
        │   ├── gitops-runtime.yaml
        │   ├── wego-app.yaml
        │   └── wego-system.yaml
        └── user
            └── .keep

flux-source-resource:一个GitRepository源,它“定义了包含系统所需状态和获取它的要求的存储库的来源”。这包括interval检查可用新版本的频率。

flux-system-kustomization-resource:一个Flux Kustomization,它“代表了 Flux应该在集群中协调的一组本地 Kubernetes 资源(例如 kustomize覆盖)”。这将部署在指定路径下找到的资源,在本例中为/system文件夹,在集群和 Git 中声明的状态之间进行协调。其中“如果您使 kubectl edit/patch/delete 对集群进行任何更改,它们将被立即还原。” 基于interval值。

flux-user-kustomization-resource:另一个Flux Kustomization,这次是/user文件夹中的任何内容,本指南后面将包含对我们示例应用程序的引用。

gitops-runtime: 创建wego-system命名空间并部署 Flux 运行时。

wego-app:它部署了我们的集群上 Web UI(当前未公开)。

wego-system:它创建了我们的应用程序自定义资源定义 (CRD)

要了解有关这些文件的更多信息,请参阅GitOps 自动化。

启动 GitOps Dashboard Web UI

Weave GitOps 提供了一个 Web UI 来帮助管理应用程序的生命周期管理。

gitops ui run

运行上述命令将在浏览器中打开位于http://0.0.0.0:9001/的仪表板。

您将看到一个空的应用程序视图,如下图所示。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
人工智能 数据可视化 程序员
程序员必收藏!Github 167000+ star 的自主AI agent,全自动AI助手,全面覆盖开发效率场景
AutoGPT 是基于 GPT-4 的开源自主 AI 智能代理,全面覆盖开发效率场景。支持任务自动拆解、多轮反馈、插件扩展与记忆管理,具备持续执行能力,适合自动化测试、CI/CD、Web 数据抓取等任务。GitHub 超 176K Star,是当前最热门的 AI Agent 开源项目之一,提供 CLI 与 GUI 双界面,助力开发者提升工作效率。
295 1
|
Kubernetes Cloud Native 开发工具
Argo与Flux在云原生GitOps实践上的能力对比与分析
随着云原生技术的普及和落地,越来越多的云原生应用被部署到生产环境中,由于云原生应用通常都是基于云的分布式部署模式,且每个应用可能是由多个功能组件互相调用来一起提供完整的服务的,每个组件都有自己独立的迭代流程和计划。在这种情况下,功能组件越多,意味着应用的发布管理越复杂,如果没有一个好的方案或者系统来管理复杂应用的发布上线的话,业务面临的风险也是非常大的。开源社区在复杂应用发布管理方面逐渐开始发力,
4992 1
Argo与Flux在云原生GitOps实践上的能力对比与分析
|
11月前
|
人工智能 自然语言处理 语音技术
《ModelScope:模型即服务的创新与未来》
【10月更文挑战第2天】** 本文深入探讨了 ModelScope 所代表的模型即服务(MaaS)模式的发展背景、核心特点、技术优势、应用场景以及对各个领域带来的深远影响。通过对其架构、功能和实际案例的分析,展现了 ModelScope 在推动人工智能发展、促进产业升级和创新方面的巨大潜力,同时也对其未来发展趋势进行了展望。
839 1
|
11月前
|
运维 大数据 Serverless
实时计算Flink版评测
阿里云实时计算Flink版是一款全托管的Serverless Flink云服务,提供实时数据处理、自动调优、智能诊断等功能,显著提升了数据处理效率和系统稳定性。本文详细评测了其产品特性、部署过程及应用效果,展示了其在电商、金融等领域的广泛应用前景。
280 0
实时计算Flink版评测
|
12月前
|
机器学习/深度学习 算法 PyTorch
SGD、Adam
【9月更文挑战第23天】
213 6
E: 错误,pkgProblemResolver::Resolve 发生故障,这可能是有软件包被要求保持现状的缘故
E: 错误,pkgProblemResolver::Resolve 发生故障,这可能是有软件包被要求保持现状的缘故
5617 0
|
Ubuntu 计算机视觉
Ubuntu新手友好:OpenCV 4.6.0安装的简化教程
网络首发,一定可以成功 依赖环境
589 0
|
SQL 数据挖掘 关系型数据库
|
监控 安全 测试技术
🆚内部 API vs 公共 API:全面比较及管理策略
内部和外部API在用途和受众上存在差异。内部API专注于提升公司内部效率,不对外公开,常用于集成内部系统和数据。公共API则面向公众,用于创建应用、增加收入和品牌知名度,它们需要安全管理,支持多种用例,并遵守法规。公共API带来收入、社区建设和创新机会,但涉及安全风险和依赖第三方。内部API安全性强,控制力高,但曝光度有限,维护资源受限。有效的API管理对于两者都至关重要,涉及设计、记录、测试、发布和保护。内部API和公共API在身份验证、文档、货币化和监控方面有不同管理策略。
|
安全 前端开发 Java
Scala与Java:综合比较
Scala与Java:综合比较
292 0