You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by ad...@apache.org on 2019/06/04 22:37:46 UTC
[kudu] 01/02: KUDU-2398: Kudu kubernetes statefulset manifest
This is an automated email from the ASF dual-hosted git repository.
adar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git
commit fa176193795041d04839386d5bd8a92eb0a08041
Author: SandishKumarHN <sa...@gmail.com>
AuthorDate: Wed May 22 16:55:29 2019 -0700
KUDU-2398: Kudu kubernetes statefulset manifest
it builds kubernetes statefulset kudu cluster, statefulset manages the
deployment and scaling of kudu server pods.
creating kubernetes kudu cluster: kubectl create -f kudu-statefulset.yaml
to destroy: kubectl delete -f kudu-statefulset.yaml
scale: kubectl scale statefulset kudu-tserver --replicas=5
Change-Id: I3f87a70b3c6ac87bc531306855c80011dce3a61d
Reviewed-on: http://gerrit.cloudera.org:8080/13407
Tested-by: Kudu Jenkins
Reviewed-by: Grant Henke <gr...@apache.org>
---
kubernetes/kudu-statefulset.yaml | 212 +++++++++++++++++++++++++++++++++++++++
1 file changed, 212 insertions(+)
diff --git a/kubernetes/kudu-statefulset.yaml b/kubernetes/kudu-statefulset.yaml
new file mode 100644
index 0000000..39c7143
--- /dev/null
+++ b/kubernetes/kudu-statefulset.yaml
@@ -0,0 +1,212 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# More about kubernetes statefulset https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
+# build kudu docker image from ../docker folder: ../docker/docker-build.sh
+# create statefulset kudu kubernetes cluster : kubectl create -f kudu-statefulset.yaml
+# get kudu master url: minikube service kudu-master-ui --url
+# scale kudu tserver cluster : kubectl scale statefulset kudu-tserver --replicas=5
+# destroy kudu kubernetes cluster: kubectl delete -f kudu-statefulset.yaml
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: kudu-masters
+ labels:
+ app: kudu-master
+spec:
+ clusterIP: None
+ ports:
+ - name: ui
+ port: 8051
+ - name: rpc-port
+ port: 8050
+ selector:
+ app: kudu-master
+---
+# headless service for masters
+apiVersion: v1
+kind: Service
+metadata:
+ name: kudu-master-ui
+ labels:
+ app: kudu-master
+spec:
+ clusterIP:
+ ports:
+ - name: ui
+ port: 8051
+ selector:
+ app: kudu-master
+ type: NodePort
+ target-port:
+ externalTrafficPolicy: Local
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: kudu-master
+ labels:
+ app: kudu-master
+spec:
+ serviceName: kudu-masters
+ podManagementPolicy: "Parallel"
+ replicas: 3
+ selector:
+ matchLabels:
+ app: kudu-master
+ template:
+ metadata:
+ labels:
+ app: kudu-master
+ spec:
+ containers:
+ - name: kudu-master
+ image: apache/kudu
+ imagePullPolicy: IfNotPresent
+ env:
+ - name: GET_HOSTS_FROM
+ value: dns
+ - name: POD_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.podIP
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: KUDU_MASTERS
+ value: "kudu-master-0.kudu-masters.default.svc.cluster.local,kudu-master-1.kudu-masters.default.svc.cluster.local,kudu-master-2.kudu-masters.default.svc.cluster.local"
+ args: ["master"]
+ ports:
+ - containerPort: 8050
+ name: master-ui
+ - containerPort: 8051
+ name: master-rpc
+ volumeMounts:
+ - name: datadir
+ mountPath: /mnt/data0
+ affinity:
+ podAntiAffinity:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - weight: 100
+ podAffinityTerm:
+ labelSelector:
+ matchExpressions:
+ - key: app
+ operator: In
+ values:
+ - kudu-master
+ topologyKey: kubernetes.io/hostname
+ updateStrategy:
+ type: RollingUpdate
+ volumeClaimTemplates:
+ - metadata:
+ name: datadir
+ spec:
+ accessModes: [ "ReadWriteOnce" ]
+ resources:
+ requests:
+ storage: 10Gi
+ storageClassName: standard
+
+---
+# headless service for tservers
+apiVersion: v1
+kind: Service
+metadata:
+ name: kudu-tservers
+ namespace: default
+ labels:
+ app: kudu-tserver
+spec:
+ clusterIP: None
+ ports:
+ - name: ui
+ port: 7050
+ - name: rpc-port
+ port: 7051
+ selector:
+ app: kudu-tserver
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: kudu-tserver
+ labels:
+ app: kudu-tserver
+spec:
+ serviceName: kudu-tservers
+ podManagementPolicy: "Parallel"
+ replicas: 3
+ selector:
+ matchLabels:
+ app: kudu-tserver
+ template:
+ metadata:
+ labels:
+ app: kudu-tserver
+ spec:
+ containers:
+ - name: kudu-tserver
+ image: apache/kudu
+ imagePullPolicy: IfNotPresent
+ env:
+ - name: GET_HOSTS_FROM
+ value: dns
+ - name: POD_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.podIP
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: KUDU_MASTERS
+ value: "kudu-master-0.kudu-masters.default.svc.cluster.local,kudu-master-1.kudu-masters.default.svc.cluster.local,kudu-master-2.kudu-masters.default.svc.cluster.local"
+ args: ["tserver"]
+ ports:
+ - containerPort: 7050
+ name: tserver-ui
+ - containerPort: 7051
+ name: tserver-rpc
+ volumeMounts:
+ - name: datadir
+ mountPath: /mnt/data0
+ affinity:
+ podAntiAffinity:
+ preferredDuringSchedulingIgnoredDuringExecution:
+ - weight: 100
+ podAffinityTerm:
+ labelSelector:
+ matchExpressions:
+ - key: app
+ operator: In
+ values:
+ - kudu-tserver
+ topologyKey: kubernetes.io/hostname
+ updateStrategy:
+ type: RollingUpdate
+ volumeClaimTemplates:
+ - metadata:
+ name: datadir
+ spec:
+ accessModes: [ "ReadWriteOnce" ]
+ resources:
+ requests:
+ storage: 10Gi
+ storageClassName: standard