From bda9ef094864ba5f37f8a8c00306601861e61bbc Mon Sep 17 00:00:00 2001 From: cckellogg Date: Fri, 1 Sep 2017 13:29:54 -0700 Subject: [PATCH] Add kubernetes deploy files. (#2265) * Add kubernetes deploy files. * Make default zookeeper deployment have only 1 container. * Move apiserver yaml config to gcp subdirectory. --- deploy/kubernetes/gcp/apiserver.yaml | 42 +++++++++ deploy/kubernetes/tools.yaml | 55 +++++++++++ deploy/kubernetes/zookeeper.yaml | 132 +++++++++++++++++++++++++++ 3 files changed, 229 insertions(+) create mode 100644 deploy/kubernetes/gcp/apiserver.yaml create mode 100644 deploy/kubernetes/tools.yaml create mode 100644 deploy/kubernetes/zookeeper.yaml diff --git a/deploy/kubernetes/gcp/apiserver.yaml b/deploy/kubernetes/gcp/apiserver.yaml new file mode 100644 index 00000000000..d364701f307 --- /dev/null +++ b/deploy/kubernetes/gcp/apiserver.yaml @@ -0,0 +1,42 @@ +## +## Heron API server deployment +## +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: heron-apiserver +spec: + replicas: 1 + template: + metadata: + labels: + app: heron-apiserver + spec: + containers: + - name: heron-apiserver + image: heron/heron:latest + command: ["sh", "-c"] + args: + - >- + heron-apiserver + --base-template kubernetes + --cluster kubernetes + -D heron.statemgr.connection.string=zookeeper:2181 + -D heron.kubernetes.scheduler.uri=http://localhost:8001 + -D heron.executor.docker.image=heron/heron:latest + -D heron.class.uploader=com.twitter.heron.uploader.gcs.GcsUploader + -D heron.uploader.gcs.bucket= + -D heron.uploader.gcs.credentials_path=/heron/secret/ + volumeMounts: + - name: google-cloud-service-account + mountPath: /heron/secret/ + - name: kubectl-proxy + image: heron/kubectl:latest + command: ["sh", "-c"] + args: + - > + kubectl proxy -p 8001 + volumes: + - name: google-cloud-service-account + secret: + secretName: diff --git a/deploy/kubernetes/tools.yaml b/deploy/kubernetes/tools.yaml new file mode 100644 index 00000000000..d0500fc057e --- /dev/null +++ b/deploy/kubernetes/tools.yaml @@ -0,0 +1,55 @@ +## +## Deployment Pod for tracker and ui +## +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: heron-tracker + namespace: default +spec: + template: + metadata: + labels: + app: heron-tracker + spec: + containers: + - name: heron-tracker + image: heron/heron:latest + ports: + - containerPort: 8080 + name: api-port + command: ["sh", "-c"] + args: + - >- + heron-tracker + --type=zookeeper + --name=localzk + --hostport=zookeeper:2181 + --rootpath="/heron" + - name: heron-ui + image: heron/heron:latest + ports: + - containerPort: 8081 + name: app-port + command: ["sh", "-c"] + args: + - >- + heron-ui + --port=8081 + --base_url=/api/v1/proxy/namespaces/default/services/heron-ui:8081 +--- + +## +## Service to expose the heron-ui +## +apiVersion: v1 +kind: Service +metadata: + name: heron-ui +spec: + selector: + app: heron-tracker + ports: + - protocol: TCP + port: 8081 + targetPort: 8081 diff --git a/deploy/kubernetes/zookeeper.yaml b/deploy/kubernetes/zookeeper.yaml new file mode 100644 index 00000000000..f1d417eb89c --- /dev/null +++ b/deploy/kubernetes/zookeeper.yaml @@ -0,0 +1,132 @@ +## +## Simple ZooKeeper deployment +## + +## Define a storage class to ask for SSD +## persistent volumes for ZK +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: ssd +provisioner: kubernetes.io/gce-pd +parameters: + type: pd-ssd +--- + +## Define a disruption budget to ensure there are at least +## 1 ZK servers running all the time +apiVersion: policy/v1beta1 +kind: PodDisruptionBudget +metadata: + name: zk-budget +spec: + selector: + matchLabels: + app: zk + minAvailable: 1 +--- + +## Define a StatefulSet for ZK servers +apiVersion: apps/v1beta1 +kind: StatefulSet +metadata: + name: zk + labels: + app: heron + component: zookeeper +spec: + serviceName: zookeeper + replicas: 1 + template: + metadata: + labels: + app: heron + component: zookeeper + + spec: + # Make sure multiple pods of ZK don't get scheduled on the + # same node, unless there are no other available nodes + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 1 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: "app" + operator: In + values: + - zookeeper + topologyKey: "kubernetes.io/hostname" + containers: + - name: zookeeper + image: heron/heron:latest + command: ["sh", "-c"] + args: + - > + /opt/zookeeper/scripts/start-zookeeper.sh + ports: + - containerPort: 2181 + name: client + - containerPort: 2888 + name: server + - containerPort: 3888 + name: leader-election + env: + - name: ZOOKEEPER_SERVERS + value: zk-0 + readinessProbe: + exec: + command: + - "/opt/zookeeper/scripts/zookeeper-ruok.sh" + initialDelaySeconds: 5 + timeoutSeconds: 5 + + livenessProbe: + exec: + command: + - "/opt/zookeeper/scripts/zookeeper-ruok.sh" + initialDelaySeconds: 15 + timeoutSeconds: 5 + + volumeMounts: + - name: datadir + mountPath: /heron/data + + volumeClaimTemplates: + - metadata: + name: datadir + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: 10Gi + storageClassName: ssd + + +--- + +## +## Define the ZooKeeper headless service +## +apiVersion: v1 +kind: Service +metadata: + annotations: + service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" + name: zookeeper + labels: + app: heron + component: zookeeper +spec: + ports: + - port: 2888 + name: server + - port: 3888 + name: leader-election + - port: 2181 + name: client + clusterIP: None + selector: + app: heron + component: zookeeper