在当今云计算和DevOps的时代,管理和维护多个集群环境已成为一项挑战。每个集群都有其独特的特性和需求,如开发、测试、生产等。有效管理这些集群需要精心规划和合适的工具。
本文档的目标是展示如何有效地管理多个K8S集群,涵盖开发、测试、生产等不同环境。关键在于利用自动化工具和最佳实践来实现高效、可靠的运维流程。
目标的详细说明:
项目 | 服务提供商 | 用途/环境 | 备注 |
---|---|---|---|
云服务账号 | Google Cloud Platform (GCP) | 通用 | 访问和管理云资源 |
域名 | xx云 | 开发环境 | svc-sit.ink |
域名 | xx云 | 测试验证环境 | svc-uat.ink |
域名 | xx云 | 线上生产环境 | svc.ink |
云DNS服务 | 阿里云 | 域名解析 | 使用xx云的SaaS服务 |
CI/CD | GitHub Action | 自动化构建、测试、部署 | 促进持续集成和持续交付流程 |
首先是在配置仓库中声明资源配置清单,然后是使用GitHub CI流水线来自动化资源的申请过程。以下是这两个步骤的详细扩展:
在iac_modules仓库下的iac_modules/terraform/gcp/vhost/config.yaml文件中,定义了在GCP中需要的资源配置。这份YAML文件详细列出了针对各种用途(如devops、monitor、sit、uat和prod)定义了不同的实例,每个实例具有特定的规格,如CPU类型、内存大小、存储大小,所在区域等。
region: "asia-northeast1"
project_id: "cloudsvcsandbox"
bucket_name: "iac_gcp_terraform_state"
instances:
- name: "devops"
type: "e2-standard-4"
zone: "asia-northeast1-a"
image: "ubuntu-2004-lts"
disk_size_gb: 100
network: "custom"
subnetwork: internet-subnet
- name: "monitor"
type: "e2-standard-4"
zone: "asia-northeast1-a"
image: "ubuntu-2004-lts"
disk_size_gb: 100
network: "custom"
subnetwork: internet-subnet
- name: "sit"
image: "ubuntu-2004-lts"
disk_size_gb: 100
type: "e2-standard-2"
zone: "asia-northeast1-a"
network: "custom"
subnetwork: internet-subnet
- name: "uat"
type: "e2-standard-4"
zone: "asia-northeast1-a"
image: "ubuntu-2004-lts"
disk_size_gb: 100
network: "custom"
subnetwork: internet-subnet
- name: "prod"
type: "e2-standard-4"
zone: "asia-northeast1-a"
image: "ubuntu-2004-lts"
disk_size_gb: 100
network: "custom"
subnetwork: internet-subnet
更多IAC配置详见https://github.com/svc-design/iac_modules.git仓库,其中关键元素包括如下:
2.流水线运行成功后,可以从GCP控制台看到资源已经就绪,并且每个环境的基础配置已经完成
目录结构:
apps/
├── monitor
│ ├── kube-prometheus-stack
│ │ ├── kube-state-metrics-config.yaml
│ │ ├── kustomization.yaml
│ │ ├── kustomizeconfig.yaml
│ │ ├── release.yaml
│ │ └── repository.yaml
│ └── observability-agent
│ ├── kustomization.yaml
│ └── release.yaml
通过在GitOps仓库中定义kustomization.yaml文件,您可以指定哪些资源应该被应用到特定的Kubernetes集群。例如,在clusters/sit/kustomization.yaml文件中,您指定了要应用到SIT环境的资源和配置。
Kustomization文件内容:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- namespace.yaml
- ../../apps/monitor/observability-agent/
- ../../apps/monitor/kube-prometheus-stack/
在这个例子中,kustomization.yaml文件引用了namespace.yaml(定义了必要的Kubernetes命名空间),以及两个监控相关的目录,确保这些配置被应用到SIT环境的集群。在代码提交后,数分钟内,配置变更就可以完成,可以通过Grafana面板查看FluxCD的同步状态
采用GitOps仓库来管理和变更配置,特别是在多集群环境中管理监控和告警系统,提供了显著的效率和便利性。这种方法允许团队使用熟悉的Git工作流程来管理复杂的配置,同时确保了环境间的一致性和可追溯性。
通过将监控配置文件添加到GitOps仓库,如下所示:
clusters/monitor/kustomization.yaml
clusters/monitor/recording-rules-patch.yaml
clusters/monitor/alert-rules-patch.yaml
采用GitOps方式能够实现几个关键的运维目标:
一旦这些配置被应用到集群中,Grafana(作为监控可视化工具)将显示基于这些规则的实时数据和告警
使用GitOps和Kustomize工具来管理和发布多个应用的过程。这种方法提供了一种高度自动化和声明性的方式来处理Kubernetes资源的部署和管理。
在apps/目录下,每个子目录(如c-demo, go-demo, js-demo, python-demo, rust-demo)代表一个独立的应用。每个应用目录包含其自己的kustomization.yaml,namespace.yaml,以及release.yaml。
apps/
├── c-demo
│ ├── kustomization.yaml
│ ├── namespace.yaml
│ └── release.yaml
├── go-demo
│ ├── kustomization.yaml
│ ├── namespace.yaml
│ └── release.yaml
├── js-demo
│ ├── kustomization.yaml
│ └── namespace.yaml
├── python-demo
│ ├── kustomization.yaml
│ ├── namespace.yaml
│ └── release.yaml
└── rust-demo
├── kustomization.yaml
├── namespace.yaml
└── release.yaml
在clusters/sit/kustomization.yaml文件中,以定义了要在SIT环境的集群中部署的资源为例:
clusters/sit/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- namespace.yaml
- ../../apps/monitor/observability-agent/
- ../../apps/monitor/kube-prometheus-stack/
- ../../apps/c-demo/
- ../../apps/js-demo/
- ../../apps/python-demo/
- ../../apps/go-demo/
- ../../apps/rust-demo/
一旦这些配置被GitOps工具应用到Kubernetes集群中,Grafana(作为监控和可视化工具)将能够显示这些应用的发布状态和运行情况。
后续可以在Grafana中设置适当的Dashboard来监控以下更多应用状态信息:
Pipeline在自动化基础设施的初始化和设置方面表现出色。它的主要优势在于:
GitOps和基于Pipeline的DevOps在现代软件工程中的重要性和互补性。这两种实践结合起来,不仅提高了软件开发和运维的效率和质量,还为组织提供了适应快速变化的能力。此外,随着应用数量的增加,采用模板化和标准化策略确实有助于保持工作量的可控性,避免随着规模扩大而出现工作量的线性增长。以上运维实践参考为现代云原生应用的快速开发和运维提供了强大的支持。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。