小编Joo*_*oer的帖子

Kubernetes检查服务帐户权限

通过Helm Chart部署服务时,安装失败,因为tiller不允许serviceaccount创建ServiceMonitor资源。

注意:

  • ServiceMonitor 是Prometheus操作员定义的CRD,用于自动获取Pod中正在运行的容器的指标。
  • Helm Tiller安装在单个名称空间中,并且已使用Role和RoleBinding设置了RBAC。

我想验证tiller服务帐户的权限。
kubectl使用该auth can-i命令,此类查询(请参见下文)始终返回no

  • kubectl auth can-i list deployment --as=tiller
  • kubectl auth can-i list deployment --as=staging:tiller

检查服务帐户权限的正确方法是什么?
如何启用该tiller帐户创建ServiceMonitor资源?

kubernetes kubectl

11
推荐指数
3
解决办法
4029
查看次数

如何在Kubernetes上自定义config.toml?

我有一个连接到在Google(GKE)上运行的k8s集群的Gitlab云。该集群是通过Gitlab云创建的。

我想自定义的config.toml,因为我想解决的K8S缓存中提出这个问题

config.tomlrunner-gitlab-runnerConfigMap中找到了配置。我更新了ConfigMap以包含此config.toml设置:

  config.toml: |
    concurrent = 4
    check_interval = 3
    log_level = "info"
    listen_address = '[::]:9252'
    [[runners]]
      executor = "kubernetes"
      cache_dir = "/tmp/gitlab/cache"
      [runners.kubernetes]
        memory_limit = "1Gi"
        [runners.kubernetes.node_selector]
          gitlab = "true"
        [[runners.kubernetes.volumes.host_path]]
          name = "gitlab-cache"
          mount_path = "/tmp/gitlab/cache"
          host_path = "/home/core/data/gitlab-runner/data"
Run Code Online (Sandbox Code Playgroud)

要应用更改,我删除了runner-gitlab-runner-xxxx-xxxpod,因此使用更新的来创建一个新的pod config.toml

但是,当我查看新的广告连播时,/home/gitlab-runner/.gitlab-runner/config.toml现在包含两个[[runners]]部分:

listen_address = "[::]:9252"
concurrent = 4
check_interval = 3
log_level = "info"

[session_server]
  session_timeout = 1800 …
Run Code Online (Sandbox Code Playgroud)

gitlab gitlab-ci kubernetes gitlab-ci-runner

8
推荐指数
1
解决办法
1965
查看次数

Prometheus metrics_path中的问号被编码

因为Prometheus仅支持json中的文本度量和许多工具返回指标(如Finatra,Spring Boot),所以我创建了一个将json转换为文本的简单代理.因为我想将它用于多个源,所以通过查询参数设置要从中检索实际度量的目标.

指标网址如下所示:/metrics?prefix=finatra&url=http:// :9990/admin/metrics.json

这在浏览器或卷曲中工作正常.但是,在普罗米修斯的'?' 被编码为'%3F',因此请求失败:/metrics%3Fprefix=finatra&url=http:// :9990/admin/metrics.json

如何防止Prometheus编码'?'?这是普罗米修斯的错误吗?我已经尝试用'%'或'\'来逃避,使用unicode等,但仍然没有运气.

prometheus

7
推荐指数
1
解决办法
1128
查看次数

Scalatest自定义匹配器“应包含”

这是我经常遇到的情况,但是我还没有找到解决方案。

假设您有一个人员列表,而您只想验证人员名称。这有效:

persons.map(_.name) should contain theSameElementsAs(List("A","B"))
Run Code Online (Sandbox Code Playgroud)

相反,我宁愿这样写

val toName: Person => String = _.name
persons should contain theSameElementsAs(List("A","B")) (after mapping toName)
Run Code Online (Sandbox Code Playgroud)

因为这就是你怎么说

但是有时候,您想使用一个自定义匹配器,该匹配器不仅可以匹配对象的一个​​属性。怎么可能使用

persons should contain(..)
Run Code Online (Sandbox Code Playgroud)

语法,但能够以某种方式使用自定义匹配器?

在这两种情况下,我都可以使用Hamcrest匹配器轻松地使用JUnit或TestNG解决这两种情况,但是我还没有找到使用ScalaTest做到这一点的方法。

我尝试使用Explicitly特性中的“ before be”语法,但这是不可能的,因为这需要一个“ Normalization”,它定义了“ normalized”方法对参数和返回类型使用相同的类型。因此,不可能将Person更改为String。另外,我还没有成功实现类似trait的“ Explicitly”,因为它不喜欢我返回的Equality [。]类型和/或它不再知道原始列表类型是什么,因此使用“ _.name”可以不编译。

欢迎任何建议。

scala scalatest

6
推荐指数
1
解决办法
1300
查看次数

GraalVM 原生镜像 jvm 指标

运行 Micronaut 应用程序的本机映像时,检索 Prometheus 指标失败,因为它无法获取 jvm 指标。

当然native-image预编译应用程序并且只包含实际使用的内容,但是在运行本机映像时使用什么样的 JVM?我认为它也是标准热点虚拟机的大大简化版本。

那么在运行本机映像时甚至可以获取 jvm 指标还是应该使用其他方法来检索正在运行的应用程序的 cpu 和内存统计信息?

在这种情况下,我使用了 Micronaut,但我认为从具有 prometheus 指标的任何本机图像应用程序获取指标是很常见的。

重现:

- install Micronaut cli (e.g. via Homebrew on Mac)
- install GraalVM 19.2.0 (e.g. via Sdkman on Mac)
- install GraalVM native-image tool: gu install native-image
- create application: mn create-app --features=management,micrometer-prometheus,graal-native-image --build maven metrics-graalvm-image
- update src/main/resources/application.yml to allow anonymous access to prometheus endpoint:

endpoints:
  all:
    enabled: true
    sensitive: false

- run application: man exec:exec
- check prometheus …
Run Code Online (Sandbox Code Playgroud)

micrometer micronaut prometheus-java graalvm-native-image

5
推荐指数
1
解决办法
618
查看次数

Java 21 中泛型的不兼容更改

还有其他人也注意到 Java 21 中 Java 泛型的变化吗?

我们使用Jdbi进行数据库访问,当更新到 Java 21 时,会出现问题,因为无法再确定泛型类型。

在调试时我注意到一个条件

java.lang.reflect.Type type = ...
if (type instanceof Class) {..}
Run Code Online (Sandbox Code Playgroud)

其中type是一个接口,在 Java 17 中计算结果为false,但true在 Java 21 中计算结果为 。

Jdbi的某些泛型依赖于Geantyref库。静态方法GenericTypeReflector.getTypeParameter(..)在 Java 17 中返回泛型类型,但null在 Java 21 中返回。

在发行说明或其他公告中,我找不到任何有关 Java 21 中有关泛型的更改的信息。也没有发现向后兼容的重大更改。

我假设一些内部结构可能由于记录反射 (JEP-440) 或开关的模式匹配 (JEP-441) 而发生了变化,但我已经将这些功能用作 17 预览版功能,没有任何问题。

有人知道是什么导致了这些变化以及为什么吗?

2023 年 11 月 17 日更新

我想我已经明白了。我将问题追溯到记录类的构造函数参数。似乎在 Java 21 中,记录类的默认构造函数的参数不知何故不具有泛型类型。所以对于像这样的记录

record Person(Optional<String> name, Optional<Integer> age) {}
Run Code Online (Sandbox Code Playgroud)

泛型类型String并 …

java generics jdbi java-21

5
推荐指数
1
解决办法
538
查看次数

sbt忽略测试失败

对于Jenkins的SonarQube工作,即使某些测试可能会失败,我们仍希望继续.目前Sonar Runner没有开始,因为测试失败了.在Maven中你只需添加-DtestFailureIgnore = true,但我找不到任何类似的SBT.

我确实找到了onFailuresbt 的东西,但没有找到任何地方如何使用它的例子.这可以用来忽略测试失败,这样构建工作就会继续,所以Sonar Runner会在之后启动吗?

或者Jenkins中有一个设置忽略构建的结果?我们使用'sbt clean coverage test coverageReport'作为构建命令,并在构建后步骤中使用Sonar Runner.

scala sbt jenkins sonarqube

4
推荐指数
1
解决办法
1191
查看次数

为什么sbt报告"错误:无法检索sbt 0.13.11"?

在Scala的项目中,我更新了build.properties0.13.80.13.11.那个"打破"了,因为它不再启动,即它无法下载0.13.11罐子?!sbt打印一个尝试过的repo列表,但repo.typesafe.com不是其中之一.

我当地安装的sbt是0.13.8.

出于某种原因scala-sbt,在Typesafe的Bintray中不再提供罐子.最大版本有0.13.9.

我知道得到它的地方是https://repo.typesafe.com/typesafe/ivy-releases/,但我怎么告诉sbt使用这个回购?

我已经尝试过了:

  • 添加一个解析器 plugins.sbt
  • 添加一个解析器 build.sbt
  • 将回购添加到 .sbt/repositories

但我无法让它发挥作用.

如何告诉sbt在哪里获取二进制文件?

scala sbt

4
推荐指数
1
解决办法
8593
查看次数

(反应性)Mongo测试失败:无法识别的字段'快照'

我在BitBucket管道中运行的测试"突然"开始失败并出现此错误:无法识别的字段'snapshot'(代码= 9).

在本地测试都运行正常.本地和BitBucket我都使用Mongo 3.7 docker容器.活跃的Mongo版本是0.13.0

任何人都知道为什么会这样,以及如何解决这个问题?

mongodb reactivemongo bitbucket-pipelines

4
推荐指数
1
解决办法
2834
查看次数