小编roo*_*099的帖子

Grafana 状态时间线面板,其中包含由标签提供的值(状态)

我确实有一个普罗米修斯时间序列,其中包含如下示例:

a_metric{band="1", state="A"} 1
a_metric{band="2", state="C"} 1
a_metric{band="1", state="A"} 1
a_metric{band="2", state="C"} 1
a_metric{band="1", state="B"} 1
a_metric{band="1", state="B"} 1
...
Run Code Online (Sandbox Code Playgroud)

我想在状态时间线面板中可视化该时间序列,以便bands 成为水平带,而states 成为这些带内的离散状态。为此,我必须从标签中提取值state(并使用它们而不是值 1)。

这可能吗?这样的可视化可以实现吗?

如果我理解正确的话,普罗米修斯label_values()不能在这里服务,因为它仅限于模板。我怀疑 Grafana 转换可能会发挥作用,但我还没有这方面的经验。由于 Prometheus 没有字符串类型的指标,因此也出现了复杂性。

更新这是一个基本图像,应@JanGaray 的要求。

基本形象

grafana prometheus

17
推荐指数
2
解决办法
1万
查看次数

获取最近创建的 pod 的名称

在 OpenShift 中,有没有比这个更优雅的方法来获取应用程序中最近创建的 pod 的名称my_app

name=$(oc get pods -l app=my_app -o=jsonpath='{range.items[*]}{.status.startTime}{"\t"}{.metadata.name}{"\n"}{end}' | sort -r | head -1 | awk '{print $2}')
Run Code Online (Sandbox Code Playgroud)

这个想法是排序.status.startTime并输出一个.metadata.name。到目前为止,我还没有使用成功oc get用这两个选项--sort-by,并-o jsonpath在同一时间,所以我在这个版本回落到UNIX管道。

我正在使用 OpenShift v3.9。我还为 Kubernetes 标记了这个问题,因为它大概适用于kubectl(而不是oc)以类似的方式(没有-l app=my_app)。

jsonpath openshift kubernetes

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

带有 Unix 域套接字的 Python 中的 gRPC 服务器

Python 中的 gRPC 支持是否允许我实现一个侦听 Unix 域套接字(而不是端口)的服务器?我正在使用 Python 3.5.3 和grpcio/ grpcio-tools1.18.0。

到目前为止,我还没有找到任何相关的例子,也没有直接的证据。在官方 的例子使用server.add_insecure_port('[::]:50051'),而且其还不清楚插座可能适合在那里。

python sockets grpc

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

存在容忍度的 Kubernetes DaemonSets

我正在考虑将我的 Kubernetes 集群分区为专用节点区域,供专用用户组专用,如此处所述。我想知道污染节点会如何影响DaemonSets,包括那些对集群操作至关重要的节点(例如kube-proxykube-flannel-ds-amd64)?

文档守护进程 pod 尊重污点和容忍度。kubectl taint nodes node-x zone=zone-y:NoSchedule但如果是这样,当 pod(不在我的控制之下,而是由 Kubernetes 自己拥有DaemonSet kube-proxy)不具有相应的容忍度时,系统如何在受污染的节点上调度 kube-proxy pod 。

到目前为止,我凭经验发现,Kubernetes 1.14 无论如何都会重新安排 kube-proxy pod(在我在 tainted 上删除它之后node-x),这似乎与文档相矛盾。另一方面,我自己的情况似乎并非如此DaemonSet。当我杀死它的 pod 时,node-x只有在我删除节点的污点之后(或者可能是在我向 pod 内的 pod 规范添加了容忍度之后DaemonSet),它才会被重新安排。

那么DaemonSets 和 tolerations 详细来说是如何互操作的。难道某些DaemonSets(比如kube-proxykube-flannel-ds-amd64)被特殊对待了?

kubernetes daemonset

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

使用 Kubernetes NGINX 入口控制器后面的相对 URL 托管 web 应用程序

我在 NGINX入口控制器后面的 Kubernetes 1.13 集群中托管一个 Web 应用程序。的Ingress指定path: /my-webapp/?(.*)annotations: { nginx.ingress.kubernetes.io/rewrite-target: /$1 }使得所述web应用可以从在集群外部够到http://my-cluster/my-webapp。(入口控制器公开为my-cluster.)

剩下的一个问题是,webapp 包含引用例如 CGI 脚本和 CSS 样式表的“相对”URL。例如,<link rel="stylesheet" type="text/css" href="/my-stylesheet.css" />当前未加载样式表。我认为这是因为浏览器在错误的 URL 上请求它(http://my-cluster/my-webapp/my-stylesheet.css应该是正确的)并且需要更多的注释。

这种情况下正确的配置是什么?

UPDATE检查器显示浏览器当前从 URL 请求样式表http://my-cluster/my-stylesheet.css,这确实是错误的,需要修复。

更新 看起来像是一个与 NGINX 反向代理相关的问题,而不是 Kubernetes NGINX 入口控制器。我想知道建议的食谱是否以及如何在这种特殊情况下也适用。首先,我尝试切换到引用样式表的相对 URL(根据已接受答案中的配方 One),但这到目前为止还没有奏效: ,尽管它显示,但<link rel="stylesheet" type="text/css" href="my-stylesheet.css" />浏览器显然仍在尝试从 获取样式表在 URL 栏中,检查器报告的 URL 与.http://my-cluster/my-stylesheet.csshttp://my-cluster/my-webappbaseURI

nginx-reverse-proxy kubernetes-ingress

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

尽管输入图像暴露了“oc new-app”,但“oc new-app”不会暴露端口

我正在探索 OpenShift 3.9,并成功地使用oc new-appDocker 构建策略构建并运行了第一个容器。我的 Dockerfile 包含命令EXPOSE 5432.

发布后oc describe istag/my_app:latest | grep ^ExposesExposes Ports: 5432/tcp看起来不错:该镜像公开了端口 5432。但据oc describe po/my_app-1-some_id | grep "^\s*Port"报道Port: <none>,总体而言,该端口似乎是在 Docker 级别公开的,但尚未在 Kubernetes/OpenShift 级别公开。

OpenShift 文档说明如下:

new-app 命令尝试检测输入图像中暴露的端口。它使用最低数字公开端口来生成公开该端口的服务。为了公开不同的端口,在 new-app 完成后,只需使用 oc Exposure 命令来生成附加服务。

为什么oc new-app在这种情况下不公开端口 5432(事实上它也不创建任何service资源)以及如何让它自动这样做,因为输入图像已经这样做了,并且从文档来看似乎是可能的?

更新以下是有关如何创建新应用程序的更多详细信息:

oc new-app ssh://my_account@my_git_server/my_path/my_repo.git
  --context-dir=my_dir --strategy=docker --name my_app
Run Code Online (Sandbox Code Playgroud)

Git 存储库包含一个迄今为止微不足道的内容my_dir/Dockerfile,并且它又包含命令EXPOSE 5432

openshift docker

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

使用 Docker Engine API 部署新堆栈

我研究了Docker Engine API (v1.37),发现它的方法与docker命令密切相关,正如人们所期望的那样。例如,API 提供了一个方法GET /nodes,并且有一个命令docker node

然而,我还没有docker stack在当前的 API 中找到等效的东西。那么是否可以使用此 API 进行部署(从撰写文件)。

docker

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

无法安装 Kubernetes Metrics Server

我想安装 Kubernetes Metrics Server 并按照此配方(来自 Kubernetes 手册)尝试 Metrics API。我目前有一个安装了 kubeadm 的 Kubernetes 1.13 集群。

该配方的启用 API 聚合部分建议更改/etc/kubernetes/manifests/kube-apiserver.yaml. 当前设置如下:

--proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
--proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
--requestheader-allowed-names=front-proxy-client
--requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
--requestheader-extra-headers-prefix=X-Remote-Extra-
--requestheader-group-headers=X-Remote-Group
--requestheader-username-headers=X-Remote-User
Run Code Online (Sandbox Code Playgroud)

建议的新设置如下:

--requestheader-client-ca-file=/etc/kubernetes/certs/proxy-ca.crt
--proxy-client-cert-file=/etc/kubernetes/certs/proxy.crt
--proxy-client-key-file=/etc/kubernetes/certs/proxy.key
--requestheader-allowed-names=aggregator
--requestheader-extra-headers-prefix=X-Remote-Extra-
--requestheader-group-headers=X-Remote-Group
--requestheader-username-headers=X-Remote-User
Run Code Online (Sandbox Code Playgroud)

如果我在没有进行这些更改的情况下安装指标服务器,其日志将包含如下错误:

无法完全收集指标:...无法从 Kubelet 获取指标...x509:由未知机构签名的证书

这些凭证从何而来?它们意味着什么?我目前没有目录/etc/kubernetes/certs

更新我现在尝试在 内的适当位置添加以下内容metrics-server-deployment.yaml,但是问题仍然存在(在没有 的情况下--kubelet-insecure-tls):

command:
- /metrics-server
- --client-ca-file
- /etc/kubernetes/pki/ca.crt

volumeMounts:
- mountPath: /etc/kubernetes/pki/ca.crt
  name: ca
  readOnly: true

volumens:
- hostPath:
    path: /etc/kubernetes/pki/ca.crt
    type: File
  name: ca
Run Code Online (Sandbox Code Playgroud)

更新 这 …

kubernetes

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

使用 FastAPI/Starlette 提供静态文件时的相对 URL 路径

我有一个简单的 FastAPI 应用程序,它提供一个文件,test.html如下app/main.py所示:

@app.get('/')
def index():
  return FileResponse('static/test.html')
Run Code Online (Sandbox Code Playgroud)

目录结构是这样的:

app/main.py
app/static/test.html
Run Code Online (Sandbox Code Playgroud)

我可以更改它吗?它可以使用修改后的目录结构(其中app/static/是同级目录)吗?

我已经尝试过return FileResponse('../static/test.html'),但到目前为止还没有奏效;产生的错误是“运行时错误:路径../static/test.html 处的文件不存在。”

static-files starlette fastapi

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

Prometheus 黑盒导出器每个作业引用多个模块

job对于在 下引用多个模块的普罗米修斯黑盒导出器,a 的语义是什么params.module

我想这意味着所有模块都已尝试,并且只有所有模块都成功时探测才会成功。我遇到的所有示例都仅使用单个模块(通常module: [http_2xx]),并且到目前为止我还没有配置示例,也没有在源代码中查找它。也许这里有人已经/肯定从直接经验中知道了。

prometheus prometheus-blackbox-exporter

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