Merge branch 'master' into UC-design-patch
commit
1c9c49a216
|
@ -58,4 +58,6 @@ toc:
|
||||||
- title: Running a Single-Instance Stateful Application
|
- title: Running a Single-Instance Stateful Application
|
||||||
path: /docs/tutorials/stateful-application/run-stateful-application/
|
path: /docs/tutorials/stateful-application/run-stateful-application/
|
||||||
- title: Running a Replicated Stateful Application
|
- title: Running a Replicated Stateful Application
|
||||||
path: /docs/tutorials/stateful-application/run-replicated-stateful-application/
|
path: /docs/tutorials/stateful-application/run-replicated-stateful-application/
|
||||||
|
- title: Running ZooKeeper, A CP Distributed System
|
||||||
|
path: /docs/tutorials/stateful-application/zookeeper/
|
||||||
|
|
|
@ -26,6 +26,8 @@ each of which has a sequence of steps.
|
||||||
|
|
||||||
* [Running a Replicated Stateful Application](/docs/tutorials/stateful-application/run-replicated-stateful-application/)
|
* [Running a Replicated Stateful Application](/docs/tutorials/stateful-application/run-replicated-stateful-application/)
|
||||||
|
|
||||||
|
* [Running ZooKeeper, A CP Distributed System](/docs/tutorials/stateful-application/zookeeper/)
|
||||||
|
|
||||||
### What's next
|
### What's next
|
||||||
|
|
||||||
If you would like to write a tutorial, see
|
If you would like to write a tutorial, see
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,164 @@
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: zk-headless
|
||||||
|
labels:
|
||||||
|
app: zk-headless
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: 2888
|
||||||
|
name: server
|
||||||
|
- port: 3888
|
||||||
|
name: leader-election
|
||||||
|
clusterIP: None
|
||||||
|
selector:
|
||||||
|
app: zk
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: zk-config
|
||||||
|
data:
|
||||||
|
ensemble: "zk-0;zk-1;zk-2"
|
||||||
|
jvm.heap: "2G"
|
||||||
|
tick: "2000"
|
||||||
|
init: "10"
|
||||||
|
sync: "5"
|
||||||
|
client.cnxns: "60"
|
||||||
|
snap.retain: "3"
|
||||||
|
purge.interval: "1"
|
||||||
|
---
|
||||||
|
apiVersion: policy/v1beta1
|
||||||
|
kind: PodDisruptionBudget
|
||||||
|
metadata:
|
||||||
|
name: zk-budget
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: zk
|
||||||
|
minAvailable: 2
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1beta1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
name: zk
|
||||||
|
spec:
|
||||||
|
serviceName: zk-headless
|
||||||
|
replicas: 3
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: zk
|
||||||
|
annotations:
|
||||||
|
pod.alpha.kubernetes.io/initialized: "true"
|
||||||
|
scheduler.alpha.kubernetes.io/affinity: >
|
||||||
|
{
|
||||||
|
"podAntiAffinity": {
|
||||||
|
"requiredDuringSchedulingRequiredDuringExecution": [{
|
||||||
|
"labelSelector": {
|
||||||
|
"matchExpressions": [{
|
||||||
|
"key": "app",
|
||||||
|
"operator": "In",
|
||||||
|
"values": ["zk-headless"]
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
"topologyKey": "kubernetes.io/hostname"
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: k8szk
|
||||||
|
imagePullPolicy: Always
|
||||||
|
image: gcr.io/google_samples/k8szk:v1
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "4Gi"
|
||||||
|
cpu: "1"
|
||||||
|
ports:
|
||||||
|
- containerPort: 2181
|
||||||
|
name: client
|
||||||
|
- containerPort: 2888
|
||||||
|
name: server
|
||||||
|
- containerPort: 3888
|
||||||
|
name: leader-election
|
||||||
|
env:
|
||||||
|
- name : ZK_ENSEMBLE
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: zk-config
|
||||||
|
key: ensemble
|
||||||
|
- name : ZK_HEAP_SIZE
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: zk-config
|
||||||
|
key: jvm.heap
|
||||||
|
- name : ZK_TICK_TIME
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: zk-config
|
||||||
|
key: tick
|
||||||
|
- name : ZK_INIT_LIMIT
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: zk-config
|
||||||
|
key: init
|
||||||
|
- name : ZK_SYNC_LIMIT
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: zk-config
|
||||||
|
key: tick
|
||||||
|
- name : ZK_MAX_CLIENT_CNXNS
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: zk-config
|
||||||
|
key: client.cnxns
|
||||||
|
- name: ZK_SNAP_RETAIN_COUNT
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: zk-config
|
||||||
|
key: snap.retain
|
||||||
|
- name: ZK_PURGE_INTERVAL
|
||||||
|
valueFrom:
|
||||||
|
configMapKeyRef:
|
||||||
|
name: zk-config
|
||||||
|
key: purge.interval
|
||||||
|
- name: ZK_CLIENT_PORT
|
||||||
|
value: "2181"
|
||||||
|
- name: ZK_SERVER_PORT
|
||||||
|
value: "2888"
|
||||||
|
- name: ZK_ELECTION_PORT
|
||||||
|
value: "3888"
|
||||||
|
command:
|
||||||
|
- sh
|
||||||
|
- -c
|
||||||
|
- zkGenConfig.sh && zkServer.sh start-foreground
|
||||||
|
readinessProbe:
|
||||||
|
exec:
|
||||||
|
command:
|
||||||
|
- "zkOk.sh"
|
||||||
|
initialDelaySeconds: 15
|
||||||
|
timeoutSeconds: 5
|
||||||
|
livenessProbe:
|
||||||
|
exec:
|
||||||
|
command:
|
||||||
|
- "zkOk.sh"
|
||||||
|
initialDelaySeconds: 15
|
||||||
|
timeoutSeconds: 5
|
||||||
|
volumeMounts:
|
||||||
|
- name: datadir
|
||||||
|
mountPath: /var/lib/zookeeper
|
||||||
|
securityContext:
|
||||||
|
runAsUser: 1000
|
||||||
|
fsGroup: 1000
|
||||||
|
volumeClaimTemplates:
|
||||||
|
- metadata:
|
||||||
|
name: datadir
|
||||||
|
annotations:
|
||||||
|
volume.alpha.kubernetes.io/storage-class: anything
|
||||||
|
spec:
|
||||||
|
accessModes: [ "ReadWriteOnce" ]
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 20Gi
|
|
@ -38,6 +38,8 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
expvalidation "k8s.io/kubernetes/pkg/apis/extensions/validation"
|
expvalidation "k8s.io/kubernetes/pkg/apis/extensions/validation"
|
||||||
"k8s.io/kubernetes/pkg/capabilities"
|
"k8s.io/kubernetes/pkg/capabilities"
|
||||||
|
"k8s.io/kubernetes/pkg/apis/policy"
|
||||||
|
policyvalidation "k8s.io/kubernetes/pkg/apis/policy/validation"
|
||||||
"k8s.io/kubernetes/pkg/registry/batch/job"
|
"k8s.io/kubernetes/pkg/registry/batch/job"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/types"
|
"k8s.io/kubernetes/pkg/types"
|
||||||
|
@ -147,6 +149,11 @@ func validateObject(obj runtime.Object) (errors field.ErrorList) {
|
||||||
t.Namespace = api.NamespaceDefault
|
t.Namespace = api.NamespaceDefault
|
||||||
}
|
}
|
||||||
errors = apps_validation.ValidateStatefulSet(t)
|
errors = apps_validation.ValidateStatefulSet(t)
|
||||||
|
case *policy.PodDisruptionBudget:
|
||||||
|
if t.Namespace == "" {
|
||||||
|
t.Namespace = api.NamespaceDefault
|
||||||
|
}
|
||||||
|
errors = policyvalidation.ValidatePodDisruptionBudget(t)
|
||||||
default:
|
default:
|
||||||
errors = field.ErrorList{}
|
errors = field.ErrorList{}
|
||||||
errors = append(errors, field.InternalError(field.NewPath(""), fmt.Errorf("no validation defined for %#v", obj)))
|
errors = append(errors, field.InternalError(field.NewPath(""), fmt.Errorf("no validation defined for %#v", obj)))
|
||||||
|
@ -323,6 +330,7 @@ func TestExampleObjectSchemas(t *testing.T) {
|
||||||
"mysql-configmap": {&api.ConfigMap{}},
|
"mysql-configmap": {&api.ConfigMap{}},
|
||||||
"mysql-statefulset": {&apps.StatefulSet{}},
|
"mysql-statefulset": {&apps.StatefulSet{}},
|
||||||
"web": {&api.Service{}, &apps.StatefulSet{}},
|
"web": {&api.Service{}, &apps.StatefulSet{}},
|
||||||
|
"zookeeper": {&api.Service{}, &api.ConfigMap{}, &policy.PodDisruptionBudget{}, &apps.StatefulSet{}},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue