Możesz wizualizować i zarządzać obiektami Kubernetesa za pomocą większej liczby narzędzi niż tylko kubectl i dashboard. Wspólny zestaw etykiet umożliwia narzędziom współpracę, opisując obiekty w ujednolicony sposób, który wszystkie narzędzia mogą zrozumieć.
Poza wsparciem dla narzędzi, rekomendowane etykiety opisują aplikacje tak, aby można było je łatwo wyszukiwać za pomocą zapytań.
Metadane są zorganizowane wokół pojęcia aplikacji. Kubernetes nie jest platformą typu PaaS i nie posiada ani nie wymusza formalnej definicji aplikacji. Zamiast tego aplikacje mają charakter nieformalny i są opisywane za pomocą metadanych. Definicja tego, co wchodzi w skład aplikacji, jest dość luźna.
Współdzielone etykiety i adnotacje mają prefiks: app.kubernetes.io.
Etykiety bez prefiksu są traktowane jako prywatne. Dzięki temu prefiksowi
etykiety współdzielone nie kolidują z etykietami definiowanymi przez użytkownika.
Aby w pełni wykorzystać zalety etykiet, warto dodawać je do każdego obiektu w systemie.
| Klucz | Opis | Przykład | Typ |
|---|---|---|---|
app.kubernetes.io/name | Nazwa aplikacji | mysql | string |
app.kubernetes.io/instance | Unikalna nazwa identyfikująca instancję aplikacji | mysql-abcxyz | string |
app.kubernetes.io/version | Aktualna wersja aplikacji (np. SemVer 1.0, hash rewizji, itp.) | 5.7.21 | ciąg znaków |
app.kubernetes.io/component | Komponent w ramach architektury | baza danych | string |
app.kubernetes.io/part-of | Nazwa nadrzędnej aplikacji, do której należy ten element | wordpress | string |
app.kubernetes.io/managed-by | Narzędzie używane do zarządzania operacjami aplikacji | Helm | string |
Aby zilustrować działanie tych etykiet, rozważ następujący obiekt StatefulSet:
# This is an excerpt
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: mysql-abcxyz
app.kubernetes.io/version: "5.7.21"
app.kubernetes.io/component: database
app.kubernetes.io/part-of: wordpress
app.kubernetes.io/managed-by: Helm
Aplikacja może być zainstalowana jeden lub więcej razy w klastrze Kubernetesa, a w niektórych przypadkach w tej samej przestrzeni nazw. Na przykład WordPress może być zainstalowany więcej niż raz, gdzie różne strony internetowe to różne instalacje WordPressa.
Nazwa aplikacji i nazwa instancji są rejestrowane oddzielnie. Na
przykład, WordPress ma app.kubernetes.io/name o wartości wordpress,
natomiast nazwa instancji jest reprezentowana jako
app.kubernetes.io/instance z wartością wordpress-abcxyz. Umożliwia to identyfikację
aplikacji oraz jej instancji. Każda instancja aplikacji musi mieć unikalną nazwę.
Aby zilustrować różne sposoby wykorzystania tych etykiet, poniższe przykłady mają różny stopień złożoności.
Rozważmy przypadek prostego serwisu bezstanowego wdrożonego przy użyciu obiektów Deployment i Service. Poniższe dwa fragmenty przedstawiają, jak etykiety mogą być używane w najprostszej formie.
Deployment jest używany do nadzorowania podów uruchamiających samą aplikację.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: myservice
app.kubernetes.io/instance: myservice-abcxyz
...
Service służy do udostępniania aplikacji.
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: myservice
app.kubernetes.io/instance: myservice-abcxyz
...
Rozważmy nieco bardziej skomplikowaną aplikację: aplikację webową (WordPress) korzystającą z bazy danych (MySQL), zainstalowaną za pomocą Helm. Poniższe fragmenty ilustrują początek obiektów użytych do wdrożenia tej aplikacji.
Początek następującego Deployment jest używany dla WordPressa:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: wordpress
app.kubernetes.io/instance: wordpress-abcxyz
app.kubernetes.io/version: "4.9.4"
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: server
app.kubernetes.io/part-of: wordpress
...
Service jest używany do udostępniania WordPressa:
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: wordpress
app.kubernetes.io/instance: wordpress-abcxyz
app.kubernetes.io/version: "4.9.4"
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: server
app.kubernetes.io/part-of: wordpress
...
MySQL jest udostępniany jako StatefulSet z metadanymi zarówno dla niego, jak i dla nadrzędnej aplikacji, do której należy:
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: mysql-abcxyz
app.kubernetes.io/version: "5.7.21"
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: database
app.kubernetes.io/part-of: wordpress
...
Serwis jest używany do udostępniania MySQL jako część WordPressa:
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: mysql-abcxyz
app.kubernetes.io/version: "5.7.21"
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: database
app.kubernetes.io/part-of: wordpress
...
W StatefulSet i Service dla MySQL zawarte są informacje zarówno o MySQL, jak i o WordPressie, czyli nadrzędnej aplikacji.