Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Objekty obálek jsou dvojicí vlastních prostředků Kubernetes definovaných Správcem flotily Azure Kubernetes, které uživatelům umožňují zabalit prostředky pro šíření do členských clusterů, aniž by to způsobilo nežádoucí vedlejší účinky na cluster centra.
Tato příručka obsahuje pokyny pro šíření sady prostředků z hlavního clusteru do připojených členských clusterů v rámci obalového objektu.
Obálkové objekty s CRD
Fleet teď podporuje dva typy obálek vlastních definic prostředků (CRD) pro šíření prostředků:
- ClusterResourceEnvelope: Slouží k zabalení prostředků v rámci clustru pro umístění.
- ResourceEnvelope: Slouží k zabalení prostředků s oborem názvů pro umístění.
Tyto CRDs poskytují strukturovanější způsob balení prostředků v rámci Kubernetes pro distribuci do členských clusterů, aniž by to způsobilo nežádoucí vedlejší účinky na řídicí cluster.
Příklad ClusterResourceEnvelope
Jedná se ClusterResourceEnvelope o prostředek s vymezeným clusterem, který může zabalit pouze jiné prostředky s oborem clusteru. Například:
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"]
Příklad ResourceEnvelope
Jedná se o prostředek v rámci názvového prostoru ResourceEnvelope, který může zabalit pouze prostředky v rámci názvového prostoru. Například:
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
Šíření zabalených objektů z centrálního clusteru do členských clusterů
Objekty obálky použijeme v cluster hubu a pak použijeme objekt ClusterResourcePlacement k propagaci těchto prostředků z hubu do členských clusterů.
Příklad specifikace ClusterResourcePlacement pro šíření ResourceEnvelope:
Tady je příklad ClusterResourcePlacement (CRP), který zajišťuje šíření ResourceEnvelope do členského clusteru. Mějte na paměti, že jelikož je ResourceEnvelope omezený na úroveň oboru názvů, musí CRP pouze vybrat obor názvů, který obsahuje objekt obálky:
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
Příklad specifikace CRP pro šíření ClusterResourceEnvelope:
Tady je příklad ClusterResourcePlacement (CRP), který propaguje ClusterResourceEnvelope do členského clusteru. Mějte na paměti, že protože má ClusterResourceEnvelope rozsah na úrovni clusteru, objekt ClusterResourcePlacement potřebuje vybrat pouze samotný objekt obálky:
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
Příklad stavu CRP pro zdroje obálky:
ClusterResourcePlacement Pro ResourceEnvelope, který se propaguje, stav zahrnuje vybraný obor názvů a samotný objekt obálky, ale ne jednotlivé prostředky v rámci obálky. Stav vypadá takto:
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
Poznámka:
V části selectedResources konkrétně zobrazujeme propagovaný objekt obálky. Neuvádíme jednotlivě všechny zdroje obsažené v objektu obálky ve statusu.
Po kontrole selectedResources je patrné, že obor názvů app a ResourceEnvelope example byly úspěšně propagovány. Uživatelé mohou dále ověřit úspěšné šíření prostředků obsažených v objektu obálky tím, že zajistí, aby se oddíl failedPlacements v placementStatus pro cílový cluster nezobrazoval ve stavu.
Příklad stavu CRP s neúspěšným prostředkem ResourceEnvelope:
V následujícím příkladu, v části placementStatus pro kind-cluster-1, část failedPlacements poskytuje podrobnosti o prostředku, který se nepovedlo použít, spolu s informacemi o objektu obálky, který tento prostředek obsahoval.
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
Stav CRP s neúspěšným zdrojem ClusterResourceEnvelope:
Podobně jako prostředky s oborem názvů můžou prostředky s oborem clusteru v rámci ClusterResourceEnvelope také selhat:
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