联邦资源类型实例
这里有3个重要字段:
Templates: 所以集群都按这个配置
Placement: 指定哪些集群需部署该资源
Overrides: 覆盖template 中的配置,针对特定集群做不同的设置
参考: https://github.com/kubernetes-sigs/kubefed/tree/master/example/sample1
federateddeployment.yaml
apiVersion: types.kubefed.io/v1beta1
kind: FederatedDeployment
metadata:
name: test-deployment
namespace: test-namespace
spec:
template:
metadata:
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx:1.17.0-alpine
name: nginx
placement:
clusters:
- name: cluster1
- name: cluster2
overrides:
- clusterName: cluster2
clusterOverrides:
- path: "/spec/replicas"
value: 5
- path: "/spec/template/spec/containers/0/image"
value: "nginx:1.17.0-alpine"
- path: "/metadata/annotations"
op: "add"
value:
foo: bar
- path: "/metadata/annotations/foo"
op: "remove"
federatednamespace.yaml
apiVersion: types.kubefed.io/v1beta1
kind: FederatedNamespace
metadata:
name: test-namespace
namespace: test-namespace
spec:
placement:
clusters:
- name: cluster2
- name: cluster1
federatedservice.yaml
apiVersion: types.kubefed.io/v1beta1
kind: FederatedService
metadata:
name: test-service
namespace: test-namespace
spec:
template:
spec:
selector:
app: nginx
type: NodePort
ports:
- name: http
port: 80
placement:
clusters:
- name: cluster2
- name: cluster1
federatedingress.yaml
apiVersion: types.kubefed.io/v1beta1
kind: FederatedIngress
metadata:
name: test-ingress
namespace: test-namespace
spec:
template:
spec:
rules:
- host: ingress.example.com
http:
paths:
- backend:
serviceName: test-service
servicePort: 80
placement:
clusters:
- name: cluster2
- name: cluster1
federatedconfigmap.yaml
apiVersion: types.kubefed.io/v1beta1
kind: FederatedConfigMap
metadata:
name: test-configmap
namespace: test-namespace
spec:
template:
data:
A: ala ma kota
placement:
clusters:
- name: cluster2
- name: cluster1
overrides:
- clusterName: cluster2
clusterOverrides:
- path: /data
value:
foo: bar
federatedsecret.yaml
apiVersion: types.kubefed.io/v1beta1
kind: FederatedSecret
metadata:
name: test-secret
namespace: test-namespace
spec:
template:
data:
A: YWxhIG1hIGtvdGE=
type: Opaque
placement:
clusters:
- name: cluster2
- name: cluster1
overrides:
- clusterName: cluster2
clusterOverrides:
- path: /data
value:
A: null
federatedendpoints.yaml (不是默认资源须添加)
apiVersion: types.kubefed.io/v1beta1
kind: FederatedEndpoints
metadata:
name: test-endpoints
namespace: test-namespace
spec:
template:
subsets:
- addresses:
- ip: 192.168.1.44
ports:
- port: 46379
protocol: TCP
placement:
clusters:
- name: cluster1
- name: cluster2
---
apiVersion: types.kubefed.io/v1beta1
kind: FederatedService
metadata:
labels:
app: test-endpoints
name: test-endpoints
namespace: test-namespace
spec:
template:
spec:
ports:
- port: 6379
targetPort: 46379
protocol: TCP
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10800
type: ClusterIP
placement:
clusters:
- name: cluster1
- name: cluster2
federatedjob.yaml
apiVersion: types.kubefed.io/v1beta1
kind: FederatedJob
metadata:
name: test-job
namespace: test-namespace
spec:
template:
spec:
parallelism: 1
selector:
matchLabels:
app: busybox
manualSelector: true
template:
metadata:
labels:
app: busybox
spec:
terminationGracePeriodSeconds: 0
restartPolicy: Never
containers:
- name: busybox
image: busybox
command: ["/bin/sh", "-c", "trap : TERM INT; (while true; do sleep 1000; done) & wait"]
placement:
clusters:
- name: cluster2
- name: cluster1
overrides:
- clusterName: cluster2
clusterOverrides:
- path: /spec/parallelism
value: 2