Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Kuvertobjekt är ett par kubernetes-anpassade resurser som definierats av Azure Kubernetes Fleet Manager och som gör det möjligt för användare att paketera resurser för spridning till medlemskluster utan att orsaka oavsiktliga biverkningar på hubbklustret.
Den här guiden innehåller instruktioner om hur du sprider en uppsättning resurser från hubbklustret till anslutna medlemskluster i ett kuvertobjekt.
Kuvertobjekt med CRD:er
Fleet har nu stöd för två typer av anpassade resursdefinitioner (CRD) för spridning av resurser:
- ClusterResourceEnvelope: Används för att omsluta klusteromfattande resurser för placering.
- ResourceEnvelope: Används för att omsluta namnområdesomfångsresurser för placering.
Dessa CRD:er ger ett mer strukturerat och Kubernetes-internt sätt att paketera resurser för spridning till medlemskluster utan att orsaka oavsiktliga biverkningar på hubbklustret.
ClusterResourceEnvelope-exempel
ClusterResourceEnvelope är en klusteromfattande resurs som bara kan omsluta andra klusteromfattande resurser. Till exempel:
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"]
ResourceEnvelope-exempel
ResourceEnvelope är en namnområdesomfångsresurs som bara kan omsluta namnområdesomfångsresurser. Till exempel:
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
Sprida omslutna objekt från hubbkluster till medlemskluster
Vi tillämpar våra kuvertobjekt på hubbklustret och använder sedan ett ClusterResourcePlacement objekt för att sprida dessa resurser från hubben till medlemskluster.
Exempel på ClusterResourcePlacement-specifikation för spridning av en ResourceEnvelope:
Här är ett exempel på en ClusterResourcePlacement (CRP) som sprider en ResourceEnvelope till ett medlemskluster. Observera att eftersom ResourceEnvelope är begränsad till namnområdet, behöver CRP bara välja det namnområde som innehåller kuvertobjektet.
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
Exempel på CRP-specifikation för spridning av en ClusterResourceEnvelope:
Här är ett exempel på en ClusterResourcePlacement (CRP) som sprider en ClusterResourceEnvelope till ett medlemskluster. Observera att eftersom ClusterResourceEnvelope omfattar hela klustret behöver objektet ClusterResourcePlacement bara välja själva omslagsobjektet.
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
Exempel på CRP-status för kuvertresurser:
För ClusterResourcePlacement som sprider en ResourceEnvelope innehåller statusen det valda namnområdet och kuvertobjektet självt, men inte de enskilda resurserna i kuvertet. Statusen ser ut så här:
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
Anteckning
I avsnittet selectedResources visar vi just specifikt det fortplantade kuvertobjektet. Vi listar inte alla resurser som ingår i kuvertobjektet individuellt i statusen.
Vid kontroll av selectedResources indikeras det att namnområdet app och ResourceEnvelope example har spridits framgångsrikt. Användarna kan ytterligare kontrollera att resurserna i kuvertobjektet har spridits genom att se till att failedPlacements avsnittet i placementStatus för målklustret inte visas i statusen.
Exempel på CRP-status med misslyckad ResourceEnvelope-resurs:
I exemplet nedan, inom placementStatus-sektionen för kind-cluster-1, ger sektionen failedPlacements detaljer om en resurs som misslyckades att tillämpas samt information om kuvertobjektet, som innehöll resursen.
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
CRP-status med misslyckad ClusterResourceEnvelope-resurs:
På samma sätt som med namnområdesomfångsresurser kan klusteromfattningsresurser i ett ClusterResourceEnvelope också misslyckas att tillämpas.
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
Azure Kubernetes Service