@@ -20,6 +20,8 @@ import (
20
20
"github.com/zncdatadev/operator-go/pkg/status"
21
21
corev1 "k8s.io/api/core/v1"
22
22
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
23
+
24
+ commonsv1alpha1 "github.com/zncdatadev/operator-go/pkg/apis/commons/v1alpha1"
23
25
)
24
26
25
27
const (
@@ -48,18 +50,20 @@ const (
48
50
ImageTag = "3.7.1-kubedoop0.0.0-dev"
49
51
ImagePullPolicy = corev1 .PullIfNotPresent
50
52
51
- KubedoopKafkaDataDirName = "data" // kafka log dirs
52
- KubedoopLogConfigDirName = "log-config"
53
- KubedoopConfigDirName = "config"
54
- KubedoopTmpDirName = "tmp"
55
- KubedoopLogDirName = "log"
56
-
57
- KubedoopRoot = "/kubedoop"
58
- KubedoopTmpDir = KubedoopRoot + "/tmp"
59
- KubedoopDataDir = KubedoopRoot + "/data"
60
- KubedoopConfigDir = KubedoopRoot + "/config"
61
- KubedoopLogConfigDir = KubedoopRoot + "/log_config"
62
- KubedoopLogDir = KubedoopRoot + "/log"
53
+ KubedoopKafkaDataDirName = "data" // kafka log dirs
54
+ KubedoopLogConfigDirName = "log-config"
55
+ KubedoopConfigDirName = "config"
56
+ KubedoopLogDirName = "log"
57
+ KubedoopListenerBroker = "listener-broker"
58
+ KubedoopListenerBootstrap = "listener-bootstrap"
59
+
60
+ KubedoopRoot = "/kubedoop"
61
+ KubedoopDataDir = KubedoopRoot + "/data"
62
+ KubedoopConfigDir = KubedoopRoot + "/config"
63
+ KubedoopLogConfigDir = KubedoopRoot + "/log_config"
64
+ KubedoopLogDir = KubedoopRoot + "/log"
65
+ KubedoopListenerBrokerDir = KubedoopRoot + "/listener-broker"
66
+ KubedoopListenerBootstrapDir = KubedoopRoot + "/listener-bootstrap"
63
67
)
64
68
65
69
// +kubebuilder:object:root=true
@@ -91,20 +95,20 @@ type KafkaClusterSpec struct {
91
95
// +kubebuilder:validation:Required
92
96
ClusterConfig * ClusterConfigSpec `json:"clusterConfig,omitempty"`
93
97
98
+ // +kubebuilder:validation:Optional
99
+ ClusterOperation * commonsv1alpha1.ClusterOperationSpec `json:"clusterOperation,omitempty"`
100
+
94
101
// +kubebuilder:validation:Required
95
102
Brokers * BrokersSpec `json:"brokers,omitempty"`
96
103
}
97
104
98
105
type ClusterConfigSpec struct {
99
- // +kubebuilder:validation:Optional
100
- Service * ServiceSpec `json:"service,omitempty"`
101
-
102
106
// +kubebuilder:validation:Optional
103
107
// +kubebuilder:default:="cluster.local"
104
108
ClusterDomain string `json:"clusterDomain,omitempty"`
105
109
106
110
// +kubebuilder:validation:Optional
107
- Tls * TlsSpec `json:"tls,omitempty"`
111
+ Tls * KafkaTlsSpec `json:"tls,omitempty"`
108
112
109
113
// +kubebuilder:validation:Optional
110
114
VectorAggregatorConfigMapName string `json:"vectorAggregatorConfigMapName,omitempty"`
@@ -113,7 +117,7 @@ type ClusterConfigSpec struct {
113
117
ZookeeperConfigMapName string `json:"zookeeperConfigMapName,omitempty"`
114
118
}
115
119
116
- type TlsSpec struct {
120
+ type KafkaTlsSpec struct {
117
121
// The SecretClass to use for internal broker communication. Use mutual verification between brokers (mandatory).
118
122
// This setting controls: - Which cert the brokers should use to authenticate themselves against other brokers -
119
123
// Which ca.crt to use when validating the other brokers Defaults to tls
@@ -154,16 +158,9 @@ type BrokersSpec struct {
154
158
RoleGroups map [string ]* BrokersRoleGroupSpec `json:"roleGroups,omitempty"`
155
159
156
160
// +kubebuilder:validation:Optional
157
- PodDisruptionBudget * PodDisruptionBudgetSpec `json:"podDisruptionBudget,omitempty"`
158
-
159
- // +kubebuilder:validation:Optional
160
- CliOverrides []string `json:"cliOverrides,omitempty"`
161
-
162
- // +kubebuilder:validation:Optional
163
- ConfigOverrides * ConfigOverridesSpec `json:"configOverrides,omitempty"`
161
+ Roleconfig * commonsv1alpha1.RoleConfigSpec `json:"roleconfig,omitempty"`
164
162
165
- // +kubebuilder:validation:Optional
166
- EnvOverrides map [string ]string `json:"envOverrides,omitempty"`
163
+ * commonsv1alpha1.OverridesSpec `json:",inline"`
167
164
}
168
165
169
166
type BrokersRoleGroupSpec struct {
@@ -174,91 +171,32 @@ type BrokersRoleGroupSpec struct {
174
171
// +kubebuilder:validation:Required
175
172
Config * BrokersConfigSpec `json:"config,omitempty"`
176
173
177
- // +kubebuilder:validation:Optional
178
- CliOverrides []string `json:"cliOverrides,omitempty"`
179
-
180
- // +kubebuilder:validation:Optional
181
- ConfigOverrides * ConfigOverridesSpec `json:"configOverrides,omitempty"`
182
-
183
- // +kubebuilder:validation:Optional
184
- EnvOverrides map [string ]string `json:"envOverrides,omitempty"`
174
+ * commonsv1alpha1.OverridesSpec `json:",inline"`
185
175
}
186
176
187
177
type BrokersConfigSpec struct {
188
- // +kubebuilder:validation:Optional
189
- Resources * ResourcesSpec `json:"resources,omitempty"`
178
+ * commonsv1alpha1.RoleGroupConfigSpec `json:",inline"`
190
179
180
+ // The ListenerClass used for connecting to brokers. Should use a direct connection ListenerClass to minimize cost
181
+ // and minimize performance overhead (such as `cluster-internal` or `external-unstable`)
191
182
// +kubebuilder:validation:Optional
192
183
// +kubebuilder:default:="cluster-internal"
193
- ListenerClass string `json:"listenerClass,omitempty"`
194
-
195
- // +kubebuilder:validation:Optional
196
- SecurityContext * corev1.PodSecurityContext `json:"securityContext"`
197
-
198
- // +kubebuilder:validation:Optional
199
- Affinity * corev1.Affinity `json:"affinity"`
200
-
201
- // +kubebuilder:validation:Optional
202
- NodeSelector map [string ]string `json:"nodeSelector,omitempty"`
203
-
204
- // +kubebuilder:validation:Optional
205
- Tolerations []corev1.Toleration `json:"tolerations"`
184
+ BrokerListenerClass string `json:"listenerClass,omitempty"`
206
185
186
+ // The ListenerClass used for bootstrapping new clients. Should use a stable ListenerClass to avoid unnecessary client restarts (such as `cluster-internal` or `external-stable`).
207
187
// +kubebuilder:validation:Optional
208
- PodDisruptionBudget * PodDisruptionBudgetSpec `json:"podDisruptionBudget ,omitempty"`
188
+ BootstrapListenerClass string `json:"bootstrapListenerClass ,omitempty"`
209
189
190
+ // Request secret (currently only autoTls certificates) lifetime from the secret operator, e.g. `7d`, or `30d`.
191
+ // Please note that this can be shortened by the `maxCertificateLifetime` setting on the SecretClass issuing the TLS certificate.
210
192
// +kubebuilder:validation:Optional
211
- StorageClass string `json:"storageClass,omitempty"`
212
-
213
- // +kubebuilder:validation:Optional
214
- // +kubebuilder:default="8Gi"
215
- StorageSize string `json:"storageSize,omitempty"`
216
-
217
- // +kubebuilder:validation:Optional
218
- ExtraEnv map [string ]string `json:"extraEnv,omitempty"`
219
-
220
- // +kubebuilder:validation:Optional
221
- ExtraSecret map [string ]string `json:"extraSecret,omitempty"`
222
-
223
- // +kubebuilder:validation:Optional
224
- Logging * BrokersContainerLoggingSpec `json:"logging,omitempty"`
225
- }
226
- type BrokersContainerLoggingSpec struct {
227
- // +kubebuilder:validation:Optional
228
- // +kubebuilder:default=false
229
- EnableVectorAgent bool `json:"enableVectorAgent,omitempty"`
230
- // +kubebuilder:validation:Optional
231
- Broker * LoggingConfigSpec `json:"broker,omitempty"`
193
+ RequestedSecretLifeTime string `json:"requestedSecretLifeTime,omitempty"`
232
194
}
233
195
type ConfigOverridesSpec struct {
234
- Log4j map [string ]string `json:"log4j .properties,omitempty"`
196
+ Server map [string ]string `json:"server .properties,omitempty"`
235
197
Security map [string ]string `json:"security.properties,omitempty"`
236
198
}
237
199
238
- type PodDisruptionBudgetSpec struct {
239
- // +kubebuilder:validation:Optional
240
- MinAvailable int32 `json:"minAvailable,omitempty"`
241
-
242
- // +kubebuilder:validation:Optional
243
- MaxUnavailable int32 `json:"maxUnavailable,omitempty"`
244
- }
245
-
246
- type ServiceSpec struct {
247
- // +kubebuilder:validation:Optional
248
- Annotations map [string ]string `json:"annotations,omitempty"`
249
-
250
- // +kubebuilder:validation:Optional
251
- // +kubebuilder:validation:enum=ClusterIP;NodePort;LoadBalancer;ExternalName
252
- // +kubebuilder:default=ClusterIP
253
- Type corev1.ServiceType `json:"type,omitempty"`
254
-
255
- // +kubebuilder:validation:Optional
256
- // +kubebuilder:validation:Minimum=1
257
- // +kubebuilder:validation:Maximum=65535
258
- // +kubebuilder:default=18080
259
- Port int32 `json:"port,omitempty"`
260
- }
261
-
262
200
func init () {
263
201
SchemeBuilder .Register (& KafkaCluster {}, & KafkaClusterList {})
264
202
}
0 commit comments