「译文」K8S 及 OpenShift 上应用程序的 Labels 和 Annotations 最佳实践

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 「译文」K8S 及 OpenShift 上应用程序的 Labels 和 Annotations 最佳实践

术语

System

将价值传递给用户的最高抽象级别,无论用户是否是人类。一个 「System 」由一个或多个「Application」组成。

Application

一种抽象,它封装了软件系统交付的价值。一个应用程序由一个或多个「Component」组成。

Component

组件是一组 kubernetes 资源,用于承载代码或数据,为了使整个软件系统正常工作,这些资源需要运行。每个组件都是可单独部署和运行的单元。

Labels

下表定义了在 OpenShift 上部署的应用程序应该使用的常用标签,建议使用标记为 REC 的标签。标记为 OPT 的是可选的。操作上不应依赖标签。

你可以在以 Kubernetes 文档 中找到 app.kubernetes 为前缀的 Kubernetes 标签的更多信息

🔥 Tip:

标签必须应用到所有资源,DeploymentConfigs, BuildConfigs, Services, Routes, ConfigMaps, persistenvolumeccles 等,包括任何自定义资源定义 (crd)。

表 1 Labels

名字 状态 描述 示例
app.kubernetes.io/part-of REC 该资源所属的顶级 system 的名称 ticketmonster
app.kubernetes.io/name REC 组件的名称 mysql
app.kubernetes.io/component REC 这是该组件的角色 / 类型 frontend
app.kubernetes.io/managed-by OPT 用来管理组件操作的工具 odo/helm
app.kubernetes.io/instance REC 用于标识应用程序的唯一名称, 通常用在和 app.kubernetes.io/name 不一样的时候 accounts
app.kubernetes.io/version OPT 组件的当前版本(例如,语义版本,修订哈希,等等) 1.0.0
app.openshift.io/runtime OPT 用于引导组件的运行时 spring-boot
app.openshift.io/runtime-version: OPT 运行时的版本 e.g. 1.5.17 for Spring Boot

表 2 app.kubernetes.io/component label 的值

说明
frontend 为应用程序提供 UI 或部分 UI
backend 通常是运行在运行时或框架上的应用程序代码。
database 数据持久化
integration 集成中间件,如 API 网关或单点登录
cache 缓存,如 redis
queue 消息队列,如 RabbitMQ 或 Kafka

Annotations

表 3 Annotations

名称 状态 描述 示例
app.openshift.io/vcs-uri REC 版本控制下源代码的 URI git://git.kernel.org/pub/scm/linux.git
app.openshift.io/vcs-ref REC 源代码版本的标识符。可以是应用程序的 branch、tag 或 commit SHA。如果省略,则假定 master 为默认分支 v1.0.0
app.openshift.io/connects-to OPT app.openshift.io/connects-to 包括要连接的组件的 label app.kubernetes.io/instance 的值。 e.g. ['inventory','cart'] , inventorymysql
console.alpha.openshift.io/overview-app-route OPT 在控制台 UI 上注释您希望成为主路由的路由 console.alpha.openshift.io/overview-app-route: ‘true’

示例

简单的微服务与数据库

基于 Node.js 的 rest 服务,和数据库 (mongodb)

@startuml
rectangle cool-service {
    database mongodb   [
               \t<b>mongodb for storing data
            ----
            <b>app.kubernetes.io/part-of :</b>cool-service
            <b>app.kubernetes.io/name :</b> mongodb
            <b>app.kubernetes.io/component :</b> database
            <b>app.kubernetes.io/managed-by :</b> odo
            <b>app.kubernetes.io/version :</b> 3.6
        ]
    rectangle nodejs   [
            \t\t<b>The node.js service with code</b>
            ----
            <b>app.kubernetes.io/part-of :</b> cool-service
            <b>app.kubernetes.io/name :</b> nodejs
            <b>app.kubernetes.io/component :</b> frontend
            <b>app.kubernetes.io/managed-by :</b> odo
            <b>app.kubernetes.io/version</b> : 1.0.1
            <b>app.openshift.io/runtime</b>: nodejs
            <b>app.openshift.io/runtime-version</b>: 10.14.1
            ----
            <b>app.openshift.io/vcs-uri :</b> git://git@github.com:gorkem/cool-service.git
            <b>app.openshift.io/vcs-ref :</b> master
            <b>app.openshift.io/connects-to :</b> mongodb
        ]
    nodejs --> mongodb
}
@enduml
PLANTUML

简单的微服务与数据库

具有多个服务的复杂系统

@startuml
left to right direction
rectangle coolstore {
    together {
        rectangle inventory {
            database postgresql [
                    <b>postgresql database
                    ----
                    <b>app.kubernetes.io/part-of :</b> coolstore
                    <b>app.kubernetes.io/instance :</b> inventoryDB
                    <b>app.kubernetes.io/name :</b> postgresql
                    <b>app.kubernetes.io/component :</b> database
                    <b>app.kubernetes.io/managed-by :</b> odo
                    <b>app.kubernetes.io/version :</b> 11
                ]
            rectangle nodeservice [
                    <b>The node.js service with code</b>
                    ----
                    <b>app.kubernetes.io/part-of :</b> coolstore
                    <b>app.kubernetes.io/instance :</b> inventory
                    <b>app.kubernetes.io/name :</b> nodejs
                    <b>app.kubernetes.io/component :</b> backend
                    <b>app.kubernetes.io/managed-by :</b> odo
                    <b>app.kubernetes.io/version</b> : 10
                    <b>app.openshift.io/runtime</b>: nodejs
                    <b>app.openshift.io/runtime-version</b>: 10.14.1
                    ----
                    <b>app.openshift.io/vcs-uri :</b> git://git@github.com:gorkem/inventory-service.git
                    <b>app.openshift.io/vcs-ref :</b> master
                ]
        }
    }
    together {
        rectangle cart{
             node cart [
                    <b>The node.js service with code</b>
                    ----
                    <b>app.kubernetes.io/part-of :</b> coolstore
                    <b>app.kubernetes.io/instance :</b> cart
                    <b>app.kubernetes.io/name :</b> nodejs
                    <b>app.kubernetes.io/component :</b> backend
                    <b>app.kubernetes.io/managed-by :</b> odo
                    <b>app.kubernetes.io/version</b> : 10
                    <b>app.openshift.io/runtime</b>: nodejs
                    <b> app.openshift.io/runtime-version</b>: 10.14.1
                    ----
                    <b>app.openshift.io/vcs-uri :</b> git://git@github.com:gorkem/cart-service.git
                    <b>app.openshift.io/vcs-ref :</b> master
                    <b>app.openshift.io/connects-to :</b> '["inventory"]'
            ]
            cart --> inventory
      }
    }
    together {
        rectangle catalog {
            database catalogdb  [
                    <b>mongodb for storing data
                    ----
                    <b>app.kubernetes.io/part-of :</b> coolstore
                    <b>app.kubernetes.io/instance :</b> catalogDB
                    <b>app.kubernetes.io/name :</b> mongodb
                    <b>app.kubernetes.io/component :</b> database
                    <b>app.kubernetes.io/managed-by :</b> odo
                    <b>app.kubernetes.io/version :</b> 3.6
                ]
            rectangle catalog   [
                    <b>The node.js service with code</b>
                    ----
                    <b>app.kubernetes.io/part-of :</b> coolstore
                    <b>app.kubernetes.io/instance :</b> catalog
                    <b>app.kubernetes.io/name :</b> nodejs
                    <b>app.kubernetes.io/component :</b> frontend
                    <b>app.kubernetes.io/managed-by :</b> odo
                    <b>app.kubernetes.io/version</b> : 10
                    <b>app.openshift.io/runtime</b>: nodejs
                    <b> app.openshift.io/runtime-version</b>: 10.14.1
                    ----
                    <b>app.openshift.io/vcs-uri :</b> git://git@github.com:gorkem/catalog-service.git
                    <b>app.openshift.io/vcs-ref :</b> master
                    <b>app.openshift.io/connects-to :</b> '["cart"]'
                ]
                catalog --> cart
        }
    }
}
@enduml
PLANTUML

具有多个服务的复杂系统

🔥 Tip:

Label app.kubernetes.io/instance 应该指向一个有意义的标识符。Label app.kubernetes.io/part-of 用于标识应用程序分组,app.kubernetes.io/instance 用于标识应用程序分组中的组件名称。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
5天前
|
运维 Kubernetes Cloud Native
构建高效云原生运维体系:Kubernetes最佳实践
【5月更文挑战第9天】 在动态和快速演变的云计算环境中,高效的运维是确保应用稳定性与性能的关键。本文将深入探讨在Kubernetes环境下,如何通过一系列最佳实践来构建一个高效且响应灵敏的云原生运维体系。文章不仅涵盖了容器化技术的选择与优化、自动化部署、持续集成/持续交付(CI/CD)流程的整合,还讨论了监控、日志管理以及灾难恢复策略的重要性。这些实践旨在帮助运维团队有效应对微服务架构下的复杂性,确保系统可靠性及业务的连续性。
|
22小时前
|
运维 监控 Kubernetes
Kubernetes 集群的监控与日志管理最佳实践
【5月更文挑战第19天】 在现代微服务架构中,容器编排平台如Kubernetes已成为部署、管理和扩展应用程序的关键工具。随着其应用范围不断扩大,集群的稳定性和性能监控变得至关重要。本文将探讨针对Kubernetes集群的监控策略,并深入分析日志管理的实现方法。通过介绍先进的技术堆栈和实用工具,旨在为运维专家提供一套完整的解决方案,以确保集群运行的透明度和可靠性。
28 3
|
5天前
|
Kubernetes Cloud Native 持续交付
构建高效稳定的云原生应用:容器编排与微服务治理实践
【5月更文挑战第14天】 随着企业数字化转型的深入,云原生技术以其弹性、敏捷和可扩展的特性成为现代应用开发的首选模式。本文将探讨如何通过容器编排工具如Kubernetes以及微服务架构的有效治理,构建和维护高效且稳定的云原生应用。我们将分析容器化技术的优势,并结合案例讨论在多云环境下实现持续集成、持续部署(CI/CD)的最佳实践,同时解决微服务带来的分布式复杂性问题。通过本文的阐述,读者将获得一套提升系统可靠性和业务连续性的策略框架。
7 0
|
5天前
|
运维 Kubernetes Linux
Kubernetes详解(七)——Service对象部署和应用
Kubernetes详解(七)——Service对象部署和应用
11 3
|
5天前
|
Kubernetes 应用服务中间件 nginx
Kubernetes详解(六)——Pod对象部署和应用
在Kubernetes系列中,本文聚焦Pod对象的部署和管理。首先,通过`kubectl run`命令创建Pod,如`kubectl run pod-test --image=nginx:1.12 --port=80 --replicas=1`。接着,使用`kubectl get deployment`或`kubectl get pods`查看Pod信息,添加`-o wide`参数获取详细详情。然后,利用Pod的IP地址进行访问。最后,用`kubectl delete pods [Pod名]`删除Pod,但因Controller控制器,删除后Pod可能自动重建。了解更多细节,请参阅原文链接。
15 5
|
5天前
|
Kubernetes Cloud Native 持续交付
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
【5月更文挑战第7天】本文探讨了Docker和Kubernetes如何协同构建和管理云原生应用。Docker提供容器化技术,Kubernetes则负责容器的部署和管理。两者结合实现快速部署、自动扩展和高可用性。通过编写Dockerfile创建镜像,然后在Kubernetes中定义部署和服务进行应用暴露。实战部分展示了如何部署简单Web应用,包括编写Dockerfile、构建镜像、创建Kubernetes部署配置以及暴露服务。Kubernetes还具备自动扩展、滚动更新和健康检查等高级特性,为云原生应用管理提供全面支持。
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
|
5天前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:Kubernetes与微服务架构的融合
【5月更文挑战第6天】 在数字化转型的浪潮中,企业正迅速采纳云原生技术以实现敏捷性、可扩展性和弹性。本文深入探讨了如何利用Kubernetes这一领先的容器编排平台,结合微服务架构,构建和维护高效、可伸缩的云原生应用。通过分析现代软件设计原则和最佳实践,我们提出了一个综合指南,旨在帮助开发者和系统架构师优化云资源配置,提高部署流程的自动化水平,并确保系统的高可用性。
33 1
|
5天前
|
Kubernetes Cloud Native 持续交付
构建高效云原生应用:以Kubernetes为核心
【4月更文挑战第27天】 在当今数字化转型的浪潮中,企业急需构建灵活、可扩展的应用来应对不断变化的市场需求。云原生技术以其独特的优势应运而生,成为推动现代应用开发和部署的重要力量。本文深入探讨了云原生的核心组件之一——Kubernetes,解析其如何通过容器编排优化资源利用,提高应用的弹性和可维护性。同时,文章将展示如何在云平台上实现高效的服务发现、自动扩缩容以及持续集成和持续部署(CI/CD),进一步阐述云原生架构下的最佳实践和面临的挑战。
|
5天前
|
Kubernetes 负载均衡 Docker
【专栏】构建高效微服务架构:Docker和Kubernetes在构建微服务架构中的应用
【4月更文挑战第27天】本文介绍了Docker和Kubernetes在构建微服务架构中的应用。Docker是开源容器引擎,用于打包和分发应用,实现隔离和封装,提升可扩展性和可维护性。Kubernetes是容器编排平台,自动化部署、扩展和管理容器,提供负载均衡和故障转移。二者结合,能高效支持微服务架构。文中通过实例展示了如何将用户、商品和订单服务用Docker打包,再用Kubernetes部署和管理,确保微服务稳定运行。
|
5天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
25 4