Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Gli oggetti Envelope sono una coppia di risorse personalizzate Kubernetes definite da Azure Kubernetes Fleet Manager che consentono agli utenti di creare pacchetti di risorse per la propagazione nei cluster membri senza causare effetti collaterali imprevisti nel cluster hub.
Questa guida fornisce istruzioni sulla propagazione di un set di risorse dal cluster hub ai cluster membri aggiunti all'interno di un oggetto envelope.
Busta oggetti con CRD
Fleet supporta ora due tipi di definizioni di risorse personalizzate (CRD) per la propagazione delle risorse:
- ClusterResourceEnvelope: utilizzato per avvolgere le risorse con ambito cluster per l'allocazione.
- ResourceEnvelope: usato per eseguire il wrapping delle risorse con ambito spazio dei nomi per il posizionamento.
Questi CRL offrono un modo più strutturato e nativo di Kubernetes per creare pacchetti di risorse per la propagazione nei cluster membri senza causare effetti collaterali imprevisti nel cluster hub.
Esempio di ClusterResourceEnvelope
ClusterResourceEnvelope è una risorsa con ambito cluster che può eseguire il wrapping solo di altre risorse con ambito cluster. Per esempio:
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"]
Esempio di ResourceEnvelope
ResourceEnvelope è una risorsa con ambito nel namespace che può includere solo risorse con ambito nel namespace. Per esempio:
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
Propagazione di oggetti in busta dal cluster hub al cluster membro
Gli oggetti envelope vengono applicati nel cluster hub e quindi si usa un ClusterResourcePlacement oggetto per propagare queste risorse dall'hub ai cluster membri.
Esempio di specifica ClusterResourcePlacement per la propagazione di un oggetto ResourceEnvelope:
Di seguito è riportato un esempio di ClusterResourcePlacement (CRP) che propaga un oggetto ResourceEnvelope a un cluster membro. Tenere presente che, poiché l'oggetto ResourceEnvelope ha un ambito limitato al namespace, il CRP deve solo selezionare il namespace che contiene l'oggetto 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
Specifica CRP di esempio per la propagazione di un clusterResourceEnvelope:
Di seguito è riportato un esempio di un ClusterResourcePlacement (CRP) che propaga ClusterResourceEnvelope a un cluster membro. Si noti che poiché ClusterResourceEnvelope ha ambito di cluster, l'oggetto ClusterResourcePlacement deve soltanto selezionare l'oggetto envelope stesso.
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
Esempio di stato CRP per le risorse envelope:
Per l'oggetto ClusterResourcePlacement che propaga un ResourceEnvelope, lo stato include lo spazio dei nomi selezionato e l'oggetto envelope stesso, ma non le singole risorse all'interno dell'envelope. Lo stato è simile al seguente:
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
Nota
Nella sezione selectedResources mostriamo specificamente l'oggetto envelope propagato. Non vengono elencate singolarmente tutte le risorse contenute nell'oggetto envelope nello stato.
Dopo l'ispezione di selectedResources, è evidente che lo spazio dei nomi app e il ResourceEnvelope example vengono propagati correttamente. Gli utenti possono verificare ulteriormente la corretta propagazione delle risorse contenute nell'oggetto envelope assicurandosi che la sezione failedPlacements nel placementStatus per il cluster di destinazione non appaia nello stato.
Esempio di stato CRP con risorsa ResourceEnvelope non riuscita:
Nell'esempio seguente, all'interno della placementStatus sezione per kind-cluster-1, la failedPlacements sezione fornisce informazioni dettagliate su una risorsa che non è riuscita ad applicare insieme alle informazioni sull'oggetto envelope, che contiene la risorsa.
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
Stato CRP con risorsa ClusterResourceEnvelope non riuscita:
Analogamente alle risorse con ambito dello spazio dei nomi, le risorse con ambito cluster all'interno di un ClusterResourceEnvelope potrebbero non applicarsi.
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