我确实有一个普罗米修斯时间序列,其中包含如下示例:
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)
我想在状态时间线面板中可视化该时间序列,以便band
s 成为水平带,而state
s 成为这些带内的离散状态。为此,我必须从标签中提取值state
(并使用它们而不是值 1)。
这可能吗?这样的可视化可以实现吗?
如果我理解正确的话,普罗米修斯label_values()
不能在这里服务,因为它仅限于模板。我怀疑 Grafana 转换可能会发挥作用,但我还没有这方面的经验。由于 Prometheus 没有字符串类型的指标,因此也出现了复杂性。
更新这是一个基本图像,应@JanGaray 的要求。
在 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
)。
我正在考虑将我的 Kubernetes 集群分区为专用节点区域,供专用用户组专用,如此处所述。我想知道污染节点会如何影响DaemonSets
,包括那些对集群操作至关重要的节点(例如kube-proxy
,kube-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
),它才会被重新安排。
那么DaemonSet
s 和 tolerations 详细来说是如何互操作的。难道某些DaemonSet
s(比如kube-proxy
,kube-flannel-ds-amd64
)被特殊对待了?
我在 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.css
http://my-cluster/my-webapp
baseURI
我正在探索 OpenShift 3.9,并成功地使用oc new-app
Docker 构建策略构建并运行了第一个容器。我的 Dockerfile 包含命令EXPOSE 5432
.
发布后oc describe istag/my_app:latest | grep ^Exposes
,Exposes 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
。
我研究了Docker Engine API (v1.37),发现它的方法与docker
命令密切相关,正如人们所期望的那样。例如,API 提供了一个方法GET /nodes
,并且有一个命令docker node
。
然而,我还没有docker stack
在当前的 API 中找到等效的东西。那么是否可以使用此 API 进行部署(从撰写文件)。
我想安装 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)
更新 这 …
我有一个简单的 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 处的文件不存在。”
job
对于在 下引用多个模块的普罗米修斯黑盒导出器,a 的语义是什么params.module
?
我想这意味着所有模块都已尝试,并且只有所有模块都成功时探测才会成功。我遇到的所有示例都仅使用单个模块(通常module: [http_2xx]
),并且到目前为止我还没有配置示例,也没有在源代码中查找它。也许这里有人已经/肯定从直接经验中知道了。
kubernetes ×3
docker ×2
openshift ×2
prometheus ×2
daemonset ×1
fastapi ×1
grafana ×1
grpc ×1
jsonpath ×1
prometheus-blackbox-exporter ×1
python ×1
sockets ×1
starlette ×1
static-files ×1