8.5. 配置 Cluster Operator
使用环境变量配置 Cluster Operator。在 Deployment
配置文件中,指定 Cluster Operator 的容器镜像的环境变量。
AMQ Streams 发行工件提供的 Deployment
配置文件为 install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml
。
您可以使用以下环境变量来配置 Cluster Operator。如果您以待机模式运行 Cluster Operator 副本,则需要额外的 环境变量来启用领导选举机制。
STRIMZI_NAMESPACE
以逗号分隔的 Operator 运行的命名空间列表。如果没有设置,则为空字符串,或设置为
*
,Cluster Operator 在所有命名空间中运行。Cluster Operator 部署可能会使用 Downward API 把它自动设置为 Cluster Operator 部署的命名空间。
Cluster Operator 命名空间的配置示例
env: - name: STRIMZI_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace
STRIMZI_FULL_RECONCILIATION_INTERVAL_MS
- 可选,默认为 120000 ms。定期协调 之间的间隔,以毫秒为单位。
STRIMZI_OPERATION_TIMEOUT_MS
- 可选,默认的 300000 ms。内部操作的超时时间,以毫秒为单位。在常规 OpenShift 操作的集群中使用 AMQ Streams 所需的时间比通常要长(例如,因为下载 Docker 镜像会较慢)。
STRIMZI_ZOOKEEPER_ADMIN_SESSION_TIMEOUT_MS
-
可选,默认为 10000 ms。Cluster Operator 的 ZooKeeper admin 客户端的会话超时,以毫秒为单位。如果 Cluster Operator 的 ZooKeeper 请求因为超时问题而定期失败,则增加这个值。通过
maxSessionTimeout
配置在 ZooKeeper 服务器端设置了最大允许的会话时间。默认情况下,最大会话超时值为 20 倍,默认的tickTime
(默认值为 2000)为 40000 ms。如果您需要更高的超时,请更改maxSessionTimeout
ZooKeeper 服务器配置值。 STRIMZI_OPERATIONS_THREAD_POOL_SIZE
- 可选,默认为 10。worker 线程池大小,用于各种异步和阻止由 Cluster Operator 运行的操作。
STRIMZI_OPERATOR_NAME
- 可选,默认为 pod 的主机名。在发出 OpenShift 事件时,Operator 名称标识 AMQ Streams 实例。
STRIMZI_OPERATOR_NAMESPACE
运行 Cluster Operator 的命名空间的名称。不要手动配置此变量。使用 Downward API。
env: - name: STRIMZI_OPERATOR_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace
STRIMZI_OPERATOR_NAMESPACE_LABELS
可选。运行 AMQ Streams Cluster Operator 的命名空间标签。使用命名空间标签在 网络策略 中配置命名空间选择器。网络策略允许 AMQ Streams Cluster Operator 访问具有这些标签的命名空间的操作对象。如果没有设置,则网络策略中的命名空间选择器会被配置为允许从 OpenShift 集群中任何命名空间访问 Cluster Operator。
env: - name: STRIMZI_OPERATOR_NAMESPACE_LABELS value: label1=value1,label2=value2
STRIMZI_LABELS_EXCLUSION_PATTERN
可选,默认的正则表达式为
^app.kubernetes.io/(?!part-of).*
。用于过滤从主自定义资源传播到其子资源的正则表达式排除模式。标签排除过滤器不适用于 template 部分中的标签,如spec.kafka.template.pod.metadata.labels
。env: - name: STRIMZI_LABELS_EXCLUSION_PATTERN value: "^key1.*"
STRIMZI_CUSTOM_{COMPONENT_NAME}_LABELS
可选。一个或多个自定义标签,应用到
{COMPONENT_NAME}
自定义资源创建的所有 pod。当创建自定义资源或下一个协调时,Cluster Operator 会标记 pod。标签可应用到以下组件:
-
KAFKA
-
KAFKA_CONNECT
-
KAFKA_CONNECT_BUILD
-
ZOOKEEPER
-
ENTITY_OPERATOR
-
KAFKA_MIRROR_MAKER2
-
KAFKA_MIRROR_MAKER
-
CRUISE_CONTROL
-
KAFKA_BRIDGE
-
KAFKA_EXPORTER
-
STRIMZI_CUSTOM_RESOURCE_SELECTOR
可选。过滤 Cluster Operator 处理的自定义资源的标签选择器。Operator 仅在设置了指定标签的自定义资源上运行。Operator 不会看到没有这些标签的资源。标签选择器适用于
Kafka
,KafkaConnect
,KafkaBridge
,KafkaMirrorMaker
, 和KafkaMirrorMaker2
资源。只有在对应的 Kafka 和 Kafka Connect 集群具有匹配的标签时,才会操作KafkaRebalance
和KafkaConnector
资源。env: - name: STRIMZI_CUSTOM_RESOURCE_SELECTOR value: label1=value1,label2=value2
STRIMZI_KAFKA_IMAGES
-
必需。从 Kafka 版本到包含该版本的 Kafka 代理的对应 Docker 镜像的映射。所需的语法为空格或用逗号分开的 <
version> = <image>
对。例如3.5.0=registry.redhat.io/amq-streams/kafka-35-rhel8:2.6.0, 3.6.0=registry.redhat.io/amq-streams/kafka-36-rhel8:2.6.0
。当指定了属性Kafka.spec.kafka.version
但没有在Kafka
资源的Kafka.spec.kafka.image
时使用这个。 STRIMZI_DEFAULT_KAFKA_INIT_IMAGE
-
可选,默认
registry.redhat.io/amq-streams/strimzi-rhel8-operator:2.6.0
。如果没有将镜像指定为Kafka
资源中的kafka-init-image
,则用作 init 容器的镜像名称。init 容器在代理进行初始配置工作之前启动,如机架支持。 STRIMZI_KAFKA_CONNECT_IMAGES
-
必需。从 Kafka 版本到该版本的 Kafka Connect 的对应 Docker 镜像的映射。所需的语法为空格或用逗号分开的 <
version> = <image>
对。例如3.5.0=registry.redhat.io/amq-streams/kafka-35-rhel8:2.6.0, 3.6.0=registry.redhat.io/amq-streams/kafka-36-rhel8:2.6.0
。当指定KafkaConnect.spec.version
属性而不是KafkaConnect.spec.image
时,这会被使用。 STRIMZI_KAFKA_MIRROR_MAKER_IMAGES
-
必需。从 Kafka 版本到该版本的 MirrorMaker 的对应 Docker 镜像的映射。所需的语法为空格或用逗号分开的 <
version> = <image>
对。例如3.5.0=registry.redhat.io/amq-streams/kafka-35-rhel8:2.6.0, 3.6.0=registry.redhat.io/amq-streams/kafka-36-rhel8:2.6.0
。当指定KafkaMirrorMaker.spec.version
属性而不是KafkaMirrorMaker.spec.image
时,这会被使用。 STRIMZI_DEFAULT_TOPIC_OPERATOR_IMAGE
-
可选,默认
registry.redhat.io/amq-streams/strimzi-rhel8-operator:2.6.0
。如果没有将镜像指定为Kafka.spec.entityOperator.topicOperator.image
中的 Kafka.spec.entityOperator.image,则部署主题 Operator 时用作默认
镜像名称。 STRIMZI_DEFAULT_USER_OPERATOR_IMAGE
-
可选,默认
registry.redhat.io/amq-streams/strimzi-rhel8-operator:2.6.0
。如果没有将镜像指定为Kafka.spec.entityOperator.userOperator.image
中的 Kafka.spec.entityOperator.image,则部署 User Operator时要使用的
镜像名称。 STRIMZI_DEFAULT_TLS_SIDECAR_ENTITY_OPERATOR_IMAGE
-
可选,默认
registry.redhat.io/amq-streams/kafka-36-rhel8:2.6.0
。如果没有将镜像指定为Kafka
.spec.entityOperator.tlsSidecar.image 中的Kafka.spec.entityOperator.tlsSidecar.image
时,用作实体 Operator 的 sidecar 容器的默认值。sidecar 提供 TLS 支持。 STRIMZI_IMAGE_PULL_POLICY
-
可选。应用到由 Cluster Operator 管理的所有 pod 中的容器的
ImagePullPolicy
。有效值为Always
、ifNotP
resent 和Never
。如果未指定,则使用 OpenShift 默认值。更改策略将导致对所有 Kafka、Kafka Connect 和 Kafka MirrorMaker 集群进行滚动更新。 STRIMZI_IMAGE_PULL_SECRETS
-
可选。以逗号分隔的
Secret
名称列表。此处引用的 secret 包含拉取容器镜像的容器 registry 的凭证。secret 在 Cluster Operator 创建的所有 pod 的imagePullSecrets
属性中指定。更改此列表会导致所有 Kafka、Kafka Connect 和 Kafka MirrorMaker 集群进行滚动更新。 STRIMZI_KUBERNETES_VERSION
可选。覆盖从 API 服务器检测到的 OpenShift 版本信息。
OpenShift 版本覆盖配置示例
env: - name: STRIMZI_KUBERNETES_VERSION value: | major=1 minor=16 gitVersion=v1.16.2 gitCommit=c97fe5036ef3df2967d086711e6c0c405941e14b gitTreeState=clean buildDate=2019-10-15T19:09:08Z goVersion=go1.12.10 compiler=gc platform=linux/amd64
KUBERNETES_SERVICE_DNS_DOMAIN
可选。覆盖默认的 OpenShift DNS 域名后缀。
默认情况下,OpenShift 集群中分配的服务具有使用默认后缀
cluster.local
的 DNS 域名。例如,对于 broker kafka-0 :
<cluster-name>-kafka-0.<cluster-name>-kafka-brokers.<namespace>.svc.cluster.local
DNS 域名添加到用于主机名验证的 Kafka 代理证书中。
如果您在集群中使用不同的 DNS 域名后缀,请将
KUBERNETES_SERVICE_DNS_DOMAIN
环境变量从默认值改为您用来与 Kafka 代理建立连接。STRIMZI_CONNECT_BUILD_TIMEOUT_MS
- 可选,默认的 300000 ms。使用额外连接器构建新 Kafka Connect 镜像的超时时间(以毫秒为单位)。在使用 AMQ Streams 构建包含许多连接器或使用较慢的容器 registry 时,请考虑增加这个值。
STRIMZI_NETWORK_POLICY_GENERATION
可选,默认
true
。资源的网络策略。网络策略允许 Kafka 组件间的连接。将此环境变量设置为
false
可禁用网络策略生成。例如,如果要使用自定义网络策略,您可以执行此操作。自定义网络策略可让更多地控制组件间的连接。STRIMZI_DNS_CACHE_TTL
-
可选,默认为
30
。在本地 DNS 解析器中缓存成功名称查找的秒数。任何负值表示永久缓存。零表示不缓存,这对于避免应用较长缓存策略的连接错误非常有用。 STRIMZI_POD_SET_RECONCILIATION_ONLY
-
可选,默认
false
。当设置为true
时,Cluster Operator 会仅协调StrimziPodSet
资源,并忽略其他自定义资源(Kafka
、KafkaConnect
等)的更改。此模式可用于确保在需要时重新创建 pod,但不会对集群进行其他更改。 STRIMZI_FEATURE_GATES
- 可选。启用或禁用由 功能门控制的功能。
STRIMZI_POD_SECURITY_PROVIDER_CLASS
-
可选。可插拔的
PodSecurityProvider
类配置,可用于为 Pod 和容器提供安全上下文配置。
8.5.1. 使用网络策略限制对 Cluster Operator 的访问
使用 STRIMZI_OPERATOR_NAMESPACE_LABELS
环境变量,使用命名空间标签为 Cluster Operator 建立网络策略。
Cluster Operator 可以在与它管理的资源或单独的命名空间中运行。默认情况下,STRIMZI_OPERATOR_NAMESPACE
环境变量配置为使用 Downward API 来查找 Cluster Operator 运行的命名空间。如果 Cluster Operator 在与资源相同的命名空间中运行,则 AMQ Streams 只需要本地访问并被 AMQ Streams 允许。
如果 Cluster Operator 在一个独立的命名空间中运行,则 OpenShift 集群中的所有命名空间都可以访问 Cluster Operator,除非配置了网络策略。通过添加命名空间标签,对 Cluster Operator 的访问仅限于指定的命名空间。
为 Cluster Operator 部署配置的网络策略
#... env: # ... - name: STRIMZI_OPERATOR_NAMESPACE_LABELS value: label1=value1,label2=value2 #...
8.5.2. 配置 Cluster Operator 的定期协调
使用 STRIMZI_FULL_RECONCILIATION_INTERVAL_MS
变量设置 Cluster Operator 定期协调的时间间隔。将其值替换为所需间隔(以毫秒为单位)。
为 Cluster Operator 部署配置的协调周期
#... env: # ... - name: STRIMZI_FULL_RECONCILIATION_INTERVAL_MS value: "120000" #...
Cluster Operator 对从 OpenShift 集群接收的适用集群资源的所有通知做出反应。如果 Operator 没有运行,或者因为某种原因没有收到通知,资源将与正在运行的 OpenShift 集群的状态不同步。为了正确处理故障转移,Cluster Operator 会执行定期协调过程,以便它可以将资源的状态与当前集群部署进行比较,以便在所有环境中具有一致的状态。
其他资源
8.5.3. 使用领导选举机制运行多个 Cluster Operator 副本
默认 Cluster Operator 配置可让领导选举机制运行 Cluster Operator 的多个并行副本。一个副本被选为活跃领导值,并运行部署的资源。其他副本以待机模式运行。当领导机停止或失败时,其中一个备用副本被选为新的领导,并开始操作部署的资源。
默认情况下,AMQ Streams 使用单个 Cluster Operator 副本运行,该副本始终是领导副本。当单个 Cluster Operator 副本停止或失败时,OpenShift 会启动新的副本。
运行具有多个副本的 Cluster Operator 并不是必须的。但是,在出现重大故障导致的大规模中断时,在待机时具有副本非常有用。例如,假设多个 worker 节点或整个可用区失败。故障可能会导致 Cluster Operator pod 和许多 Kafka pod 同时停机。如果后续 pod 调度会导致缺少资源,这可能会在运行单个 Cluster Operator 时延迟操作。
8.5.3.1. 为 Cluster Operator 副本启用领导选举机制
在运行额外的 Cluster Operator 副本时,配置领导选举环境变量。支持以下环境变量:
STRIMZI_LEADER_ELECTION_ENABLED
-
可选,默认禁用(
false
)。启用或禁用领导选举机制,允许其他 Cluster Operator 副本在待机上运行。
默认情况下,领导选举机制被禁用。它仅在安装时应用此环境变量时启用。
STRIMZI_LEADER_ELECTION_LEASE_NAME
-
启用领导选举机制时需要。用于领导选举的 OpenShift
Lease
资源的名称。 STRIMZI_LEADER_ELECTION_LEASE_NAMESPACE
启用领导选举机制时需要。创建用于领导选举 OpenShift
Lease
资源的命名空间。您可以使用 Downward API 将其配置为部署 Cluster Operator 的命名空间。env: - name: STRIMZI_LEADER_ELECTION_LEASE_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace
STRIMZI_LEADER_ELECTION_IDENTITY
启用领导选举机制时需要。配置在领导选举过程中使用的给定 Cluster Operator 实例的身份。每个 operator 实例的身份必须是唯一的。您可以使用 Downward API 将其配置为部署 Cluster Operator 的 pod 的名称。
env: - name: STRIMZI_LEADER_ELECTION_IDENTITY valueFrom: fieldRef: fieldPath: metadata.name
STRIMZI_LEADER_ELECTION_LEASE_DURATION_MS
- 可选,默认为 15000 ms。指定获取租期的有效持续时间。
STRIMZI_LEADER_ELECTION_RENEW_DEADLINE_MS
- 可选,默认为 10000 ms。指定领导机应尝试保持领导状态的期间。
STRIMZI_LEADER_ELECTION_RETRY_PERIOD_MS
- 可选,默认为 2000 ms。指定领导对租期锁定的更新频率。
8.5.3.2. 配置 Cluster Operator 副本
要以待机模式运行额外的 Cluster Operator 副本,您需要增加副本数并启用领导选举机制。要配置领导选举机制,请使用领导选举环境变量。
要进行所需的更改,请配置位于 install/cluster-operator/
中的以下 Cluster Operator 安装文件:
- 060-Deployment-strimzi-cluster-operator.yaml
- 022-ClusterRole-strimzi-cluster-operator-role.yaml
- 022-RoleBinding-strimzi-cluster-operator.yaml
领导选举机制具有自己的 ClusterRole
和 RoleBinding
RBAC 资源,这些资源以 Cluster Operator 运行的命名空间为目标,而不是其监视的命名空间。
默认部署配置在与 Cluster Operator 相同的命名空间中创建一个名为 strimzi-cluster-operator
的 Lease
资源。Cluster Operator 使用租期来管理领导选举机制。RBAC 资源提供使用 Lease
资源的权限。如果您使用不同的 Lease
名称或命名空间,请相应地更新 ClusterRole
和 RoleBinding
文件。
先决条件
-
您需要具有创建和管理
CustomResourceDefinition
和 RBAC (ClusterRole
、RoleBinding
和 RoleBinding )资源的权限的帐户。
流程
编辑用于部署 Cluster Operator 的 Deployment
资源,该资源在 060-Deployment-strimzi-cluster-operator.yaml
文件中定义。
将
replicas
属性从默认值(1)更改为与所需副本数匹配的值。增加 Cluster Operator 副本数
apiVersion: apps/v1 kind: Deployment metadata: name: strimzi-cluster-operator labels: app: strimzi spec: replicas: 3
检查领导选举
env
属性是否已设置。如果没有设置,请配置它们。
要启用领导选举机制,
STRIMZI_LEADER_ELECTION_ENABLED
必须设置为true
(默认)。在本例中,租期的名称被改为
my-strimzi-cluster-operator
。为 Cluster Operator 配置领导选举环境变量
# ... spec containers: - name: strimzi-cluster-operator # ... env: - name: STRIMZI_LEADER_ELECTION_ENABLED value: "true" - name: STRIMZI_LEADER_ELECTION_LEASE_NAME value: "my-strimzi-cluster-operator" - name: STRIMZI_LEADER_ELECTION_LEASE_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: STRIMZI_LEADER_ELECTION_IDENTITY valueFrom: fieldRef: fieldPath: metadata.name
有关可用环境变量的描述,请参阅 第 8.5.3.1 节 “为 Cluster Operator 副本启用领导选举机制”。
如果您为领导选举机制中使用的
Lease
资源指定了不同的名称或命名空间,请更新 RBAC 资源。(可选)在
022-ClusterRole-strimzi-cluster-operator-role.yaml
文件中编辑ClusterRole
资源。使用
Lease
资源的名称更新resourceNames
。更新对租期的 ClusterRole 引用
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: strimzi-cluster-operator-leader-election labels: app: strimzi rules: - apiGroups: - coordination.k8s.io resourceNames: - my-strimzi-cluster-operator # ...
(可选)在
022-RoleBinding-strimzi-cluster-operator.yaml
文件中编辑RoleBinding
资源。使用
Lease
资源的名称以及创建的命名空间更新subjects.name
和subjects.namespace
。更新对租期的 RoleBinding 引用
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: strimzi-cluster-operator-leader-election labels: app: strimzi subjects: - kind: ServiceAccount name: my-strimzi-cluster-operator namespace: myproject # ...
部署 Cluster Operator:
oc create -f install/cluster-operator -n myproject
检查部署的状态:
oc get deployments -n myproject
输出显示部署名称和就绪
NAME READY UP-TO-DATE AVAILABLE strimzi-cluster-operator 3/3 3 3
READY
显示就绪/预期的副本数。当AVAILABLE
输出显示正确的副本数时,部署可以成功。
8.5.4. 配置 Cluster Operator HTTP 代理设置
如果您在 HTTP 代理后运行 Kafka 集群,您仍然可以在集群内和移出数据。例如,您可以使用连接器运行 Kafka Connect,该连接器从代理外部推送和拉取镜像。或者,您可以使用代理与授权服务器连接。
配置 Cluster Operator 部署来指定代理环境变量。Cluster Operator 接受标准代理配置(HTTP_PROXY
、HTTPS_PROXY
和 NO_PROXY
)作为环境变量。代理设置应用到所有 AMQ Streams 容器。
代理地址的格式为 http://<ip_address>:<port_number>。要使用名称和密码设置代理,格式为 http://<username>:<password>@<ip-address>:<port_number>。
先决条件
-
您需要具有创建和管理
CustomResourceDefinition
和 RBAC (ClusterRole
、RoleBinding
和 RoleBinding )资源的权限的帐户。
流程
要在 Cluster Operator 中添加代理环境变量,请更新其
部署
配置 (install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml
)。Cluster Operator 的代理配置示例
apiVersion: apps/v1 kind: Deployment spec: # ... template: spec: serviceAccountName: strimzi-cluster-operator containers: # ... env: # ... - name: "HTTP_PROXY" value: "http://proxy.com" 1 - name: "HTTPS_PROXY" value: "https://proxy.com" 2 - name: "NO_PROXY" value: "internal.com, other.domain.com" 3 # ...
或者,直接编辑
Deployment
:oc edit deployment strimzi-cluster-operator
如果您更新了 YAML 文件而不是直接编辑
Deployment
,请应用更改:oc create -f install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml
其他资源
8.5.5. 使用 Cluster Operator 配置禁用 FIPS 模式
在启用了 FIPS 的 OpenShift 集群中运行时,AMQ Streams 会自动切换到 FIPS 模式。通过在 Cluster Operator 的部署配置 中禁用
FIPS_MODE
环境变量来禁用 FIPS 模式。禁用 FIPS 模式后,AMQ Streams 会在 OpenJDK 中为所有组件自动禁用 FIPS。禁用 FIPS 模式后,AMQ Streams 不兼容 FIPS。AMQ Streams operator 以及所有操作对象都相同,就像在启用了 FIPS 的 OpenShift 集群中运行的一样。
流程
要在 Cluster Operator 中禁用 FIPS 模式,更新其
部署
配置install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml
) 并增加FIPS_MODE
环境变量。Cluster Operator 的 FIPS 配置示例
apiVersion: apps/v1 kind: Deployment spec: # ... template: spec: serviceAccountName: strimzi-cluster-operator containers: # ... env: # ... - name: "FIPS_MODE" value: "disabled" 1 # ...
- 1
- 禁用 FIPS 模式。
或者,直接编辑
Deployment
:oc edit deployment strimzi-cluster-operator
如果您更新了 YAML 文件而不是直接编辑
Deployment
,请应用更改:oc apply -f install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml