Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Objetos envelope são um par de recursos personalizados do Kubernetes definidos pelo Gerenciador de Frota do Kubernetes do Azure que permitem aos usuários empacotar recursos para propagação para clusters membros sem causar efeitos colaterais não intencionais no cluster do hub.
Este guia fornece instruções sobre como propagar um conjunto de recursos do cluster central para clusters membros conectados, usando um objeto de envelope.
Objetos de Envelope com CRDs
O Fleet agora dá suporte a dois tipos de CRDs (Definições de Recurso Personalizado) do envelope para propagar recursos:
- ClusterResourceEnvelope: utilizado para encapsular recursos com escopo de cluster para alocação.
- ResourceEnvelope: usado para encapsular recursos com escopo de namespace para posicionamento.
Esses CRDs fornecem uma maneira mais estruturada e nativa do Kubernetes de empacotar recursos para propagação para clusters membros sem causar efeitos colaterais não intencionais no cluster do hub.
Exemplo de ClusterResourceEnvelope
O ClusterResourceEnvelope é um recurso com escopo de cluster que só pode encapsular outros recursos também com escopo de cluster. Por exemplo:
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourceEnvelope
metadata:
name: example
data:
"webhook.yaml":
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: guard
webhooks:
- name: guard.example.com
rules:
- operations: ["CREATE"]
apiGroups: ["*"]
apiVersions: ["*"]
resources: ["*"]
clientConfig:
service:
name: guard
namespace: ops
admissionReviewVersions: ["v1"]
sideEffects: None
timeoutSeconds: 10
"clusterrole.yaml":
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
Exemplo de ResourceEnvelope
O ResourceEnvelope é um recurso com escopo de namespace que só pode encapsular recursos do mesmo. Por exemplo:
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ResourceEnvelope
metadata:
name: example
namespace: app
data:
"cm.yaml":
apiVersion: v1
kind: ConfigMap
metadata:
name: config
namespace: app
data:
foo: bar
"deploy.yaml":
apiVersion: apps/v1
kind: Deployment
metadata:
name: ingress
namespace: app
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: web
image: nginx
Propagando objetos encapsulados do cluster hub para o cluster membro
Aplicamos nossos objetos envelope no cluster do hub e, em seguida, usamos um ClusterResourcePlacement objeto para propagar esses recursos do hub para clusters membros.
Exemplo de especificação ClusterResourcePlacement para propagar um ResourceEnvelope:
Exemplo de um ClusterResourcePlacement (CRP) que propaga um ResourceEnvelope para um cluster membro: como o ResourceEnvelope tem escopo de namespace, o CRP só precisa selecionar o namespace que contém o objeto de envelope.
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp-with-envelope
spec:
policy:
clusterNames:
- kind-cluster-1
placementType: PickFixed
resourceSelectors:
- group: ""
kind: Namespace
name: app
version: v1
revisionHistoryLimit: 10
strategy:
type: RollingUpdate
Exemplo de especificação CRP para propagar um ClusterResourceEnvelope:
Exemplo de um ClusterResourcePlacement (CRP) que propaga um ClusterResourceEnvelope para um cluster membro: como o ClusterResourceEnvelope tem escopo de cluster, o ClusterResourcePlacement só precisa selecionar o próprio objeto de envelope.
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: crp-with-cluster-envelope
spec:
policy:
clusterNames:
- kind-cluster-1
placementType: PickFixed
resourceSelectors:
- group: placement.kubernetes-fleet.io
kind: ClusterResourceEnvelope
name: example
version: v1beta1
revisionHistoryLimit: 10
strategy:
type: RollingUpdate
Exemplo de status de CRP para recursos de envelope:
Para o ClusterResourcePlacement que propaga um ResourceEnvelope, o status inclui o namespace selecionado e o objeto envelope em si, mas não os recursos individuais dentro do envelope. O status tem esta aparência:
status:
selectedResources:
- group: ""
kind: Namespace
name: app
version: v1
- group: placement.kubernetes-fleet.io
kind: ResourceEnvelope
name: example
namespace: app
version: v1beta1
conditions:
- lastTransitionTime: "2023-11-30T19:54:13Z"
message: found all the clusters needed as specified by the scheduling policy
observedGeneration: 2
reason: SchedulingPolicyFulfilled
status: "True"
type: ClusterResourcePlacementScheduled
- lastTransitionTime: "2023-11-30T19:54:18Z"
message: All 1 cluster(s) are synchronized to the latest resources on the hub cluster
observedGeneration: 2
reason: SynchronizeSucceeded
status: "True"
type: ClusterResourcePlacementSynchronized
- lastTransitionTime: "2023-11-30T19:54:18Z"
message: Successfully applied resources to 1 member clusters
observedGeneration: 2
reason: ApplySucceeded
status: "True"
type: ClusterResourcePlacementApplied
placementStatuses:
- clusterName: kind-cluster-1
conditions:
- lastTransitionTime: "2023-11-30T19:54:13Z"
message: 'Successfully scheduled resources for placement in kind-cluster-1:
picked by scheduling policy'
observedGeneration: 2
reason: ScheduleSucceeded
status: "True"
type: ResourceScheduled
- lastTransitionTime: "2023-11-30T19:54:18Z"
message: Successfully Synchronized work(s) for placement
observedGeneration: 2
reason: WorkSynchronizeSucceeded
status: "True"
type: WorkSynchronized
- lastTransitionTime: "2023-11-30T19:54:18Z"
message: Successfully applied resources
observedGeneration: 2
reason: ApplySucceeded
status: "True"
type: ResourceApplied
Observação
Na seção selectedResources, exibimos o objeto de envelope propagado especificamente. Não listamos individualmente todos os recursos contidos no objeto envelope no status.
Após a inspeção do selectedResources, indica-se que o namespace app e o ResourceEnvelope example são propagados com êxito. Os usuários podem verificar ainda mais a propagação bem-sucedida dos recursos contidos no objeto envelope, garantindo que a seção failedPlacements no cluster placementStatus de destino não apareça no status.
Exemplo de status do CRP com o recurso ResourceEnvelope falho:
No exemplo abaixo, na placementStatus seção para kind-cluster-1, a failedPlacements seção fornece detalhes sobre um recurso que não foi aplicado juntamente com informações sobre o objeto envelope, que continha o recurso.
status:
conditions:
- lastTransitionTime: "2023-12-06T00:09:53Z"
message: found all the clusters needed as specified by the scheduling policy
observedGeneration: 2
reason: SchedulingPolicyFulfilled
status: "True"
type: ClusterResourcePlacementScheduled
- lastTransitionTime: "2023-12-06T00:09:58Z"
message: All 1 cluster(s) are synchronized to the latest resources on the hub cluster
observedGeneration: 2
reason: SynchronizeSucceeded
status: "True"
type: ClusterResourcePlacementSynchronized
- lastTransitionTime: "2023-12-06T00:09:58Z"
message: Failed to apply manifests to 1 clusters, please check the `failedPlacements` status
observedGeneration: 2
reason: ApplyFailed
status: "False"
type: ClusterResourcePlacementApplied
placementStatuses:
- clusterName: kind-cluster-1
conditions:
- lastTransitionTime: "2023-12-06T00:09:53Z"
message: 'Successfully scheduled resources for placement in kind-cluster-1:
picked by scheduling policy'
observedGeneration: 2
reason: ScheduleSucceeded
status: "True"
type: ResourceScheduled
- lastTransitionTime: "2023-12-06T00:09:58Z"
message: Successfully Synchronized work(s) for placement
observedGeneration: 2
reason: WorkSynchronizeSucceeded
status: "True"
type: WorkSynchronized
- lastTransitionTime: "2023-12-06T00:09:58Z"
message: Failed to apply manifests, please check the `failedPlacements` status
observedGeneration: 2
reason: ApplyFailed
status: "False"
type: ResourceApplied
failedPlacements:
- condition:
lastTransitionTime: "2023-12-06T00:09:53Z"
message: 'Failed to apply manifest: namespaces "app" not found'
reason: AppliedManifestFailedReason
status: "False"
type: Applied
envelope:
name: example
namespace: app
type: ResourceEnvelope
kind: Deployment
name: ingress
namespace: app
version: apps/v1
selectedResources:
- kind: Namespace
name: app
version: v1
- group: placement.kubernetes-fleet.io
kind: ResourceEnvelope
name: example
namespace: app
version: v1beta1
Status do CRP com falha no recurso ClusterResourceEnvelope:
Semelhante aos recursos com escopo de namespace, os recursos com escopo de cluster em um ClusterResourceEnvelope também podem não ser aplicados:
status:
conditions:
- lastTransitionTime: "2023-12-06T00:09:53Z"
message: found all the clusters needed as specified by the scheduling policy
observedGeneration: 2
reason: SchedulingPolicyFulfilled
status: "True"
type: ClusterResourcePlacementScheduled
- lastTransitionTime: "2023-12-06T00:09:58Z"
message: Failed to apply manifests to 1 clusters, please check the `failedPlacements` status
observedGeneration: 2
reason: ApplyFailed
status: "False"
type: ClusterResourcePlacementApplied
placementStatuses:
- clusterName: kind-cluster-1
conditions:
- lastTransitionTime: "2023-12-06T00:09:58Z"
message: Failed to apply manifests, please check the `failedPlacements` status
observedGeneration: 2
reason: ApplyFailed
status: "False"
type: ResourceApplied
failedPlacements:
- condition:
lastTransitionTime: "2023-12-06T00:09:53Z"
message: 'Failed to apply manifest: service "guard" not found in namespace "ops"'
reason: AppliedManifestFailedReason
status: "False"
type: Applied
envelope:
name: example
type: ClusterResourceEnvelope
kind: ValidatingWebhookConfiguration
name: guard
group: admissionregistration.k8s.io
version: v1
selectedResources:
- group: placement.kubernetes-fleet.io
kind: ClusterResourceEnvelope
name: example
version: v1beta1