Skip to content

Commit d36f6a0

Browse files
authored
split Docker resources for Cassandra to v3 and v4 (#359)
* added default config into examples * bump commons to 1.2.1 and backup to 1.5.1 in sidecar * modified cassandra docker scripts to be able to handle installation of any Cassandra deb
1 parent 45b75bc commit d36f6a0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+649
-74
lines changed

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,7 @@ vendor/
2626
/helm/cassandra-*.tgz
2727
/helm/cassandra-operator-*.tgz
2828
/helm/index.yaml
29+
/docker/cassandra/cassandra-3/debs/*
30+
/docker/cassandra/cassandra-4/debs/*
31+
/docker/cassandra/cassandra-3/jars/*
32+
/docker/cassandra/cassandra-4/jars/*

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ We are currently building images for Cassandra 3.11.6 and 4.0-alpha3.
3333
## Requirements
3434

3535
- Kubernetes 1.13+
36-
- Helm 2 (if you want to use the included helm charts)
36+
- Helm 3 (if you want to use the included helm charts)
3737

3838
## Limitations
3939

docker/Makefile

+7-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
IMAGES = base-openjre base-openjre-11 cassandra cassandra-4 cassandra-sidecar cassandra-operator
1+
IMAGES = base-openjre base-openjre-11 cassandra-3 cassandra-4 cassandra-sidecar cassandra-operator
22
BUILD_IMAGES = circle-build-env
33

44
C_IMAGE_VERSION := $(if $(C_IMAGE_VERSION),$(C_IMAGE_VERSION),"1.0.0")
@@ -21,12 +21,16 @@ $(BUILD_IMAGES):
2121
base-openjre-11:
2222
DEBIAN_RELEASE=buster OPENJRE_BASE_IMAGE=debian:buster OPENJRE_VERSION=11.0.6+10-1~deb10u1 OPENJRE_IMAGE_TAG=buster-11.0.6-10-1-deb10u1 OPENJDK_PACKAGE=openjdk-11-jre-headless CASSANDRA_IMAGE_VERSION=${C_IMAGE_VERSION} $(MAKE) -C base-openjre
2323

24+
.PHONY: cassandra-3
25+
cassandra-3:
26+
$(MAKE) -C cassandra cassandra-3
27+
2428
.PHONY: cassandra-4
2529
cassandra-4:
26-
INSTALL_CASSANDRA_EXPORTER=false CASSANDRA_VERSION=4.0~alpha3 OPENJRE_IMAGE=base-openjre:buster-11.0.6-10-1-deb10u1 CASSANDRA_K8S_ADDONS_VERSION=1.0.1 CASSANDRA_K8S_ADDONS_ARTIFACT=cassandra-4-k8s-addons CASSANDRA_IMAGE_VERSION=${C_IMAGE_VERSION} $(MAKE) -C cassandra
30+
$(MAKE) -C cassandra cassandra-4
2731

2832
cassandra-4: base-openjre-11
2933

30-
cassandra cassandra-sidecar cassandra-operator: base-openjre
34+
cassandra-3 cassandra-sidecar cassandra-operator: base-openjre
3135

3236
.DEFAULT_GOAL := all

docker/cassandra-sidecar/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
include ../base-openjre/Makefile
22

3-
CASSANDRA_SIDECAR_VERSION := 1.4.0
3+
CASSANDRA_SIDECAR_VERSION := 1.5.0
44
CASSANDRA_SIDECAR_JAR := cassandra-k8s-sidecar-$(CASSANDRA_SIDECAR_VERSION).jar
55

66
ifeq ($(CASSANDRA_SIDECAR_VERSION:%-SNAPSHOT=SNAPSHOT),SNAPSHOT)

docker/cassandra/Dockerfile

+11-11
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@ ARG openjre_image
22

33
FROM ${openjre_image}
44

5+
ARG cassandra_major_version=3
56
ARG cassandra_version=3.11.6
67
ARG cassandra_exporter_version=0.9.10
78
ARG cassandra_k8s_addons_jar
89
ARG cassandra_k8s_addons_core_jar
910
ARG apache_mirror_url=https://dl.bintray.com/apache/cassandra/pool/main/c/cassandra
1011
ARG install_cassandra_exporter=true
1112

12-
COPY install-cassandra /tmp/install-cassandra
13+
COPY cassandra-${cassandra_major_version}/install-cassandra.sh /tmp/install-cassandra.sh
14+
COPY cassandra-${cassandra_major_version}/debs /tmp
1315

1416
RUN C_APACHE_MIRROR_URL=${apache_mirror_url} \
1517
INSTALL_CASSANDRA_EXPORTER=${install_cassandra_exporter} \
16-
/tmp/install-cassandra ${cassandra_version} ${cassandra_exporter_version}
18+
/tmp/install-cassandra.sh ${cassandra_version} ${cassandra_exporter_version}
1719

1820
COPY entry-point /usr/bin/entry-point
1921
COPY wrapper /usr/bin/wrapper
@@ -24,15 +26,13 @@ RUN cp /bin/bash /bin/bash-mod \
2426
&& setcap cap_ipc_lock=+ep /bin/bash-mod \
2527
&& setcap cap_sys_resource=+ep /bin/bash-mod
2628

27-
COPY cassandra /usr/sbin/cassandra
28-
COPY nodetool /usr/bin/nodetool
29-
COPY cassandra.in.sh /usr/share/cassandra/
30-
COPY cql-readiness-probe /usr/bin/cql-readiness-probe
29+
COPY cassandra-${cassandra_major_version}/cassandra /usr/sbin/cassandra
30+
COPY cassandra-${cassandra_major_version}/nodetool /usr/bin/nodetool
31+
COPY cassandra-${cassandra_major_version}/cassandra.in.sh /usr/share/cassandra/
32+
COPY cassandra-${cassandra_major_version}/cql-readiness-probe /usr/bin/cql-readiness-probe
33+
COPY cassandra-${cassandra_major_version}/jars /usr/share/cassandra/lib
3134

32-
COPY ${cassandra_k8s_addons_jar} /usr/share/cassandra/lib
33-
COPY ${cassandra_k8s_addons_core_jar} /usr/share/cassandra/lib
34-
35-
ADD default-config /etc/cassandra
35+
ADD cassandra-${cassandra_major_version}/default-config /etc/cassandra
3636
RUN chown -R cassandra:cassandra /etc/cassandra
3737

3838
VOLUME /var/lib/cassandra
@@ -48,7 +48,7 @@ EXPOSE 7000 7001 7199 9042 9160
4848
# Run as user 'cassandra'
4949
# A numeric UID is used for PSP support:
5050
# https://kubernetes.io/docs/concepts/policy/pod-security-policy/#users-and-groups
51-
# The user is created in ./install-cassandra
51+
# The user is created in ./install-cassandra.sh
5252
USER 999
5353

5454
ENTRYPOINT ["/usr/bin/wrapper"]

docker/cassandra/Makefile

+35-33
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,49 @@
1-
OPENJRE_IMAGE := $(if $(OPENJRE_IMAGE),$(OPENJRE_IMAGE),"base-openjre:stretch-8u232-b09-1-deb9u1")
2-
CASSANDRA_IMAGE_VERSION := $(if $(CASSANDRA_IMAGE_VERSION),$(CASSANDRA_IMAGE_VERSION),"1.0.0")
3-
CASSANDRA_VERSION := $(if $(CASSANDRA_VERSION),$(CASSANDRA_VERSION),"3.11.6")
4-
CASSANDRA_VERSION_IMAGE_TAG := $(if $(CASSANDRA_VERSION),$(subst ~,-,$(CASSANDRA_VERSION)),"3.11.6")
5-
CASSANDRA_EXPORTER_VERSION := $(if $(CASSANDRA_EXPORTER_VERSION),$(CASSANDRA_EXPORTER_VERSION),"0.9.10")
6-
CASSANDRA_K8S_ADDONS_VERSION := $(if $(CASSANDRA_K8S_ADDONS_VERSION),$(CASSANDRA_K8S_ADDONS_VERSION),"1.0.2")
7-
CASSANDRA_K8S_ADDONS_CORE_VERSION := 1.0.1
8-
CASSANDRA_ADDONS := $(if $(CASSANDRA_K8S_ADDONS_ARTIFACT),$(CASSANDRA_K8S_ADDONS_ARTIFACT),"cassandra-3-k8s-addons")
9-
CASSANDRA_K8S_ADDONS_JAR := $(CASSANDRA_ADDONS)-$(CASSANDRA_K8S_ADDONS_VERSION).jar
10-
CASSANDRA_K8S_ADDONS_CORE_JAR := cassandra-k8s-addons-$(CASSANDRA_K8S_ADDONS_CORE_VERSION).jar
1+
CASSANDRA_3_OPENJRE_IMAGE := $(if $(OPENJRE_IMAGE),$(OPENJRE_IMAGE),"base-openjre:stretch-8u232-b09-1-deb9u1")
2+
CASSANDRA_3_VERSION := $(if $(CASSANDRA_VERSION),$(CASSANDRA_VERSION),"3.11.6")
3+
CASSANDRA_3_VERSION_IMAGE_TAG := $(if $(CASSANDRA_VERSION),$(subst ~,-,$(CASSANDRA_VERSION)),"3.11.6")
114

12-
ifeq ($(CASSANDRA_K8S_ADDONS_VERSION:%-SNAPSHOT=SNAPSHOT),SNAPSHOT)
13-
$(info SNAPSHOT version specified. Marking JAR target as .PHONY)
14-
.PHONY: $(CASSANDRA_K8S_ADDONS_JAR)
15-
endif
5+
CASSANDRA_4_OPENJRE_IMAGE := $(if $(CASSANDRA_4_OPENJRE_IMAGE),$(CASSANDRA_4_OPENJRE_IMAGE),"base-openjre:buster-11.0.6-10-1-deb10u1")
6+
CASSANDRA_4_VERSION=$(if $(CASSANDRA_VERSION),$(CASSANDRA_VERSION),"4.0~alpha3")
7+
CASSANDRA_4_VERSION_IMAGE_TAG := $(if $(CASSANDRA_4_VERSION),$(subst ~,-,$(CASSANDRA_4_VERSION)),"4.0~alpha3")
168

17-
$(CASSANDRA_K8S_ADDONS_JAR):
18-
rm -rf $(CASSANDRA_K8S_ADDONS_JAR)
19-
mvn dependency:copy -Dartifact=com.instaclustr:$(CASSANDRA_ADDONS):$(CASSANDRA_K8S_ADDONS_VERSION) -DoutputDirectory=. -Dmdep.stripClassifier=true -Dmdep.overIfNewer=true
9+
CASSANDRA_EXPORTER_VERSION := $(if $(CASSANDRA_EXPORTER_VERSION),$(CASSANDRA_EXPORTER_VERSION),"0.9.10")
10+
CASSANDRA_K8S_ADDONS_VERSION := $(if $(CASSANDRA_K8S_ADDONS_VERSION),$(CASSANDRA_K8S_ADDONS_VERSION),"1.0.2")
2011

21-
$(CASSANDRA_K8S_ADDONS_CORE_JAR):
22-
rm -rf $(CASSANDRA_K8S_ADDONS_CORE_JAR)
23-
mvn dependency:copy -Dartifact=com.instaclustr:cassandra-k8s-addons:$(CASSANDRA_K8S_ADDONS_CORE_VERSION) -DoutputDirectory=. -Dmdep.stripClassifier=true -Dmdep.overIfNewer=true
12+
CASSANDRA_IMAGE_VERSION := $(if $(CASSANDRA_IMAGE_VERSION),$(CASSANDRA_IMAGE_VERSION),"1.0.0")
2413

2514
C_APACHE_MIRROR_URL := $(if $(C_APACHE_MIRROR_URL),$(C_APACHE_MIRROR_URL),"https://dl.bintray.com/apache/cassandra/pool/main/c/cassandra")
26-
INSTALL_CASSANDRA_EXPORTER := $(if $(INSTALL_CASSANDRA_EXPORTER),$(INSTALL_CASSANDRA_EXPORTER),"true")
2715

28-
.PHONY: cassandra
29-
cassandra: $(CASSANDRA_K8S_ADDONS_JAR) $(CASSANDRA_K8S_ADDONS_CORE_JAR)
30-
@echo \"$(OPENJRE_IMAGE)\"
16+
.PHONY: cassandra-3
17+
cassandra-3:
18+
rm -rf cassandra-3/jars
19+
mvn dependency:copy -Dartifact=com.instaclustr:cassandra-3-k8s-addons:1.0.2 -DoutputDirectory=cassandra-3/jars -Dmdep.stripClassifier=true -Dmdep.overIfNewer=true
20+
mvn dependency:copy -Dartifact=com.instaclustr:cassandra-k8s-addons:1.0.1 -DoutputDirectory=cassandra-3/jars -Dmdep.stripClassifier=true -Dmdep.overIfNewer=true
3121
docker build \
32-
--build-arg cassandra_version=$(CASSANDRA_VERSION) \
22+
--build-arg cassandra_major_version=3 \
23+
--build-arg cassandra_version=$(CASSANDRA_3_VERSION) \
24+
--build-arg openjre_image="$(CASSANDRA_3_OPENJRE_IMAGE)" \
25+
--build-arg apache_mirror_url="$(C_APACHE_MIRROR_URL)" \
26+
--build-arg install_cassandra_exporter=true \
3327
--build-arg cassandra_exporter_version=$(CASSANDRA_EXPORTER_VERSION) \
34-
--build-arg cassandra_k8s_addons_core_jar=$(CASSANDRA_K8S_ADDONS_CORE_JAR) \
35-
--build-arg cassandra_k8s_addons_jar=$(CASSANDRA_K8S_ADDONS_JAR) \
36-
--build-arg openjre_image="$(OPENJRE_IMAGE)" \
28+
-t $(DOCKER_REGISTRY)cassandra-${CASSANDRA_3_VERSION_IMAGE_TAG} \
29+
-t $(DOCKER_REGISTRY)cassandra-${CASSANDRA_3_VERSION_IMAGE_TAG}:$(CASSANDRA_IMAGE_VERSION) \
30+
.
31+
32+
.PHONY: cassandra-4
33+
cassandra-4:
34+
rm -rf cassandra-4/jars
35+
mvn dependency:copy -Dartifact=com.instaclustr:cassandra-4-k8s-addons:1.0.1 -DoutputDirectory=cassandra-4/jars -Dmdep.stripClassifier=true -Dmdep.overIfNewer=true
36+
mvn dependency:copy -Dartifact=com.instaclustr:cassandra-k8s-addons:1.0.1 -DoutputDirectory=cassandra-4/jars -Dmdep.stripClassifier=true -Dmdep.overIfNewer=true
37+
docker build \
38+
--build-arg cassandra_major_version=4 \
39+
--build-arg cassandra_version=${CASSANDRA_4_VERSION} \
40+
--build-arg openjre_image="$(CASSANDRA_4_OPENJRE_IMAGE)" \
3741
--build-arg apache_mirror_url="$(C_APACHE_MIRROR_URL)" \
38-
--build-arg install_cassandra_exporter="$(INSTALL_CASSANDRA_EXPORTER)" \
39-
-t $(DOCKER_REGISTRY)cassandra-$(CASSANDRA_VERSION_IMAGE_TAG) \
40-
-t $(DOCKER_REGISTRY)cassandra-$(CASSANDRA_VERSION_IMAGE_TAG):$(CASSANDRA_IMAGE_VERSION) \
42+
--build-arg install_cassandra_exporter=false \
43+
-t $(DOCKER_REGISTRY)cassandra-${CASSANDRA_4_VERSION_IMAGE_TAG} \
44+
-t $(DOCKER_REGISTRY)cassandra-${CASSANDRA_4_VERSION_IMAGE_TAG}:$(CASSANDRA_IMAGE_VERSION) \
4145
.
4246

4347
.PHONY: clean
4448
clean:
4549
rm $(CASSANDRA_K8S_ADDONS_JAR)
46-
47-
.DEFAULT_GOAL := cassandra

docker/cassandra/cassandra docker/cassandra/cassandra-3/cassandra

-7
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,12 @@ JVM_OPTS="${JVM_OPTS} -Djava.library.path=${CASSANDRA_HOME}/lib/sigar-bin"
2020
# heap dumps to tmp
2121
JVM_OPTS="${JVM_OPTS} -XX:HeapDumpPath=/var/tmp/cassandra-`date +%s`-pid$$.hprof"
2222

23-
# determine Java version, the assumption here is that C* 4.x runs with Java 11 and C* 3.11.x runs wih Java 8
24-
2523
# read additional JVM options from jvm.options files
2624
for options_file in "${CASSANDRA_CONF}/jvm-operator.options" "${CASSANDRA_CONF}/jvm-jmx.options" "${CASSANDRA_CONF}/jvm.options" "${CASSANDRA_CONF}/jvm.options.d"/*.options
2725
do
2826
JVM_OPTS="${JVM_OPTS} "$((sed -ne "/^-/p" | tr '\n' ' ') < "${options_file}")
2927
done
3028
31-
# Cassandra 4 runs on Java 11 so we need to add specific flags to JVM
32-
if [ "$(grep -c "^4" /usr/share/cassandra/cassandra_version)" = "1" ]; then
33-
JVM_OPTS="${JVM_OPTS} "$((sed -ne "/^-/p" | tr '\n' ' ') < "${CASSANDRA_CONF}/jvm11-server.options")
34-
fi
35-
3629
# source additional environment settings
3730
for env_file in "${CASSANDRA_CONF}/cassandra-env.sh" "${CASSANDRA_CONF}/cassandra-env.sh.d"/*.sh
3831
do
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
CASSANDRA_CONF=/etc/cassandra
22
CASSANDRA_HOME=/usr/share/cassandra
3-
CASSANDRA_CLASSPATH="${CASSANDRA_CONF}:${CASSANDRA_HOME}/*:${CASSANDRA_HOME}/lib/*"
3+
CASSANDRA_CLASSPATH="${CASSANDRA_CONF}:${CASSANDRA_HOME}/*:${CASSANDRA_HOME}/lib/*"
4+
CLASSPATH=${CASSANDRA_CLASSPATH}

docker/cassandra/cassandra-3/default-config/cassandra-env.sh.d/.gitkeep

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<!--
2+
Licensed to the Apache Software Foundation (ASF) under one
3+
or more contributor license agreements. See the NOTICE file
4+
distributed with this work for additional information
5+
regarding copyright ownership. The ASF licenses this file
6+
to you under the Apache License, Version 2.0 (the
7+
"License"); you may not use this file except in compliance
8+
with the License. You may obtain a copy of the License at
9+
10+
http://www.apache.org/licenses/LICENSE-2.0
11+
12+
Unless required by applicable law or agreed to in writing,
13+
software distributed under the License is distributed on an
14+
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
KIND, either express or implied. See the License for the
16+
specific language governing permissions and limitations
17+
under the License.
18+
-->
19+
20+
<configuration>
21+
<appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender">
22+
<target>System.err</target>
23+
<encoder>
24+
<pattern>%-5level %date{"HH:mm:ss,SSS"} %msg%n</pattern>
25+
</encoder>
26+
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
27+
<level>WARN</level>
28+
</filter>
29+
</appender>
30+
31+
<root level="WARN">
32+
<appender-ref ref="STDERR" />
33+
</root>
34+
</configuration>

docker/cassandra/install-cassandra docker/cassandra/cassandra-3/install-cassandra.sh

+9-7
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,20 @@ arch_pkg_dir="${pkg_dir}/${arch}" && mkdir "${arch_pkg_dir}"
1414
C_APACHE_MIRROR_URL="${C_APACHE_MIRROR_URL:-https://dl.bintray.com/apache/cassandra/pool/main/c/cassandra}"
1515
INSTALL_CASSANDRA_EXPORTER="${INSTALL_CASSANDRA_EXPORTER:-true}"
1616

17-
# download the C* packages
18-
(cd "${arch_pkg_dir}" &&
19-
curl -SLO "${C_APACHE_MIRROR_URL}/cassandra_${cassandra_version}_all.deb" &&
20-
curl -SLO "${C_APACHE_MIRROR_URL}/cassandra-tools_${cassandra_version}_all.deb")
17+
if [ "$(find /tmp -type f -name '*.deb' | wc -l)" != "0" ]; then
18+
mv /tmp/cassandra*.deb ${arch_pkg_dir}
19+
else
20+
# download the C* packages
21+
(cd "${arch_pkg_dir}" &&
22+
curl -SLO "${C_APACHE_MIRROR_URL}/cassandra_${cassandra_version}_all.deb" &&
23+
curl -SLO "${C_APACHE_MIRROR_URL}/cassandra-tools_${cassandra_version}_all.deb")
24+
fi
2125

2226
dagi dpkg-dev cpio libcap2-bin dnsutils
2327

2428
APT_GET_OPTS="--allow-unauthenticated" dagi file ${arch_pkg_dir}/cassandra_${cassandra_version}_all.deb
2529
APT_GET_OPTS="--allow-unauthenticated" dagi file ${arch_pkg_dir}/cassandra-tools_${cassandra_version}_all.deb
30+
APT_GET_OPTS="--allow-unauthenticated" dagi vim
2631

2732
# package "cleanup"
2833
mkdir /usr/share/cassandra/agents
@@ -31,9 +36,6 @@ mv /usr/share/cassandra/lib/jamm-*.jar /usr/share/cassandra/agents/jamm.jar
3136
cp /etc/cassandra/hotspot_compiler /usr/share/cassandra/
3237
cp /etc/cassandra/cassandra.yaml /usr/share/cassandra/
3338

34-
# save Cassandra version, handy for further configuration which is version specific
35-
echo ${cassandra_version} > /usr/share/cassandra/cassandra_version
36-
3739
# nuke contents of /etc/cassandra and /var/lib/cassandra since they're injected by volume mounts
3840
rm -rf /etc/cassandra/* /var/lib/cassandra/*
3941

0 commit comments

Comments
 (0)