其他信息

更深入的安装见解

本节展示了不同的步骤及其变体,并对其进行更详细的解释。它还展示了可以增量更新堆栈各个部分的 helm upgrade 命令,这有助于开发和升级。

在默认模式下使用 VM 启动 minikube。默认情况下,它使用两个 CPU,这可以调整。

minikube start

使用自定义设置启动。

minikube stop
minikube delete
minikube start --memory 8192 --cpus 4

根据驱动程序的不同,调整设置可能适用于已创建的 minikube 实例。

minikube stop
minikube config set memory 8192
minikube config set cpus 4
minikube start

在 Linux 上使用 Podman 驱动程序启动 minikube。这可以实现更快的启动时间、更少的内存使用量,并且对 CPU 使用率没有限制。

minikube start --driver=kvm2 --container-runtime=cri-o --docker-opt="default-ulimit=nofile=102400:102400"

这需要 libvirtd 运行。

sudo systemctl enable libvirtd
sudo systemctl start libvirtd
sudo usermod -a -G libvirt $USER
# now relogin, for usermod to become effective

对于当今无法扩展到 3-5 个以上 Keycloak 实例的轻量级安装

minikube start --driver=podman --container-runtime=cri-o

在 Linux 上,允许通过 sudo 使用 Podman 和 crio

  1. 运行 sudo visudo

  2. 将以下内容添加到 sudoer 文件

    username ALL=(ALL) NOPASSWD: /usr/bin/podman
    username ALL=(ALL) NOPASSWD: /usr/bin/crictl

添加 Ingress

minikube addons enable ingress

所有其他安装都使用 task 脚本化。它以正确的顺序并行运行所有任务(如果可能)。如果任务定义发生更改,它将再次运行该任务。使用 task -f 强制再次运行所有任务,例如在重置 minikube 后。

有关更多信息,请查看 使用工具 task 进行自动化

自定义 Keycloak

Keycloak 在安装时启用了监控。

通过 keycloak/values.yaml 添加本地自定义设置

  • monitoring 设置为 false 以在不使用监控选项的情况下安装 Keycloak。

  • disableCaches 设置为 true 以禁用 Keycloak 存储中的缓存。

暂停/恢复设置

可以暂停和恢复设置,而无需重启或重新安装所有 pod。

要停止,请运行以下命令

minikube stop

要恢复,请运行以下命令。

minikube start

在 minikube 重新启动后,Ingress 的 IP 地址可能会有所不同。因此,需要更新所有 Ingress。为此,请运行 task

重置被测系统 (Keycloak)

这将清除数据库并重启 Keycloak 实例。完成后,它将重新初始化 Gatling 的用户。

task reset-keycloak

将 Provider 部署到 minikube

Keycloak 可以通过 Provider 进行扩展。此设置也支持这一点。

所有 Provider JAR 都需要放置在 keycloak/providers 中。

默认情况下部署了 dataprovider 模块。

要测试 dataprovider 模块是否已部署,请测试 URL https://keycloak-keycloak.xx.xx.xx.xx.nip.io/realms/master/dataset/status。使用 ./isup.sh 脚本来查找 Keycloak 的 IP 地址。

使用无效 TLS 证书运行 kcadm.sh

minikube 设置不包含受信任的 TLS 证书,并且证书也不匹配主机名。

要禁用 Java 中的 TLS 检查,请参阅模块 provision/tlsdisableagent,以了解如何运行例如 kcadm.sh

运行 Gatling

要在本地计算机上使用 Gatling 运行基准测试并将指标转发到 minikube 中的 Graphite 导出器,您需要传递 minikube 的 IP 地址作为环境变量,该变量随后在 gatling.conf 中使用。

export GRAPHITE_TCP_ADDR=$(minikube ip)

Gatling 指标到 Prometheus 的映射(包括指标名称和标签)在 graphite_mapping.yaml 中配置。测试运行后,指标将以 gatling_usersgatling_requests 的形式提供。

此设置假定只有一个负载驱动程序正在运行。如果运行了更多负载驱动程序,则 Gatling 配置中的 rootPathPrefix 以及 gatling.conf 设置需要更改。目前,这被认为超出范围,因为一个 Gatling 实例可以生成比所需负载大几个数量级的负载。

Prometheus Gatling 导出器将指标保留 5 分钟,然后忘记它们。到那时,Prometheus 已经抓取了它们并将值存储在其数据库中。

连接到运行 minikube 的远程主机

当在远程主机上运行 minikube 时,端口无法从主机外部远程访问。如果可以,这将是一个安全问题,因为 minikube 上部署的应用程序以及 Kubernetes API 本身使用了默认密码,有时甚至没有密码。

要远程连接到 Keycloak 和其他服务,一种方法是使用 SSH 端口转发。

由于 Keycloak 对配置的端口和 IP 地址非常敏感,因此端口转发需要绑定与 minikube 上相同的端口。由于它在 minikube 上以端口 443 运行,因此这需要以 root 用户身份运行 SSH,以便它可以本地绑定端口 443。

假设通过 mininkube ip 检索到的远程主机上 minikube 的 IP 地址为 192.168.39.19,则以下步骤有效。

每当远程主机上的 minikube 实例被重新创建时,它都会收到不同的 IP 地址,并且需要调整命令。

  1. 在本地 hosts 文件中添加一个条目,将 minikube 的主机名指向该条目

    127.0.0.1 kubebox.192.168.39.19.nip.io grafana.192.168.39.19.nip.io keycloak.192.168.39.19.nip.io
  2. 将当前用户的 SSH 密钥放在 root 用户的 /root/.ssh 中,以便 sudo ssh 可以访问它们。

  3. 运行带有端口转发的 SSH

    sudo ssh -L 443:192.168.39.19:443 user@remotehost

现在像往常一样将浏览器指向 https://keycloak-keycloak.192.168.39.19.nip.io 以与应用程序交互。在 SSH 隧道就位的情况下,响应时间会稍慢一些,因此用户无法在其本地计算机上运行具有代表性的负载测试,而 minikube 在远程计算机上运行。

为了优化连接的服务器端,请考虑更新 sshd 中的 MaxSessions 参数,否则通过一个 SSH 会话的会话数将限制为 10,用户可能会看到浏览器阻塞。建议的数字为 100。