{"id":43309,"date":"2022-11-14T15:16:45","date_gmt":"2023-04-13T16:11:28","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e4%bd%bf%e7%94%a8jsonnet-builder%e8%87%aa%e5%ae%9a%e4%b9%89kube-prometheus%e6%97%b6%e7%9a%84%e5%a4%84%e7%90%86%e5%a4%87%e5%bf%98%e5%bd%95%e3%80%82\/"},"modified":"2024-04-29T00:37:53","modified_gmt":"2024-04-28T16:37:53","slug":"%e5%bd%93%e4%bd%bf%e7%94%a8jsonnet-builder%e8%87%aa%e5%ae%9a%e4%b9%89kube-prometheus%e6%97%b6%e7%9a%84%e5%a4%84%e7%90%86%e5%a4%87%e5%bf%98%e5%bd%95%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e4%bd%bf%e7%94%a8jsonnet-builder%e8%87%aa%e5%ae%9a%e4%b9%89kube-prometheus%e6%97%b6%e7%9a%84%e5%a4%84%e7%90%86%e5%a4%87%e5%bf%98%e5%bd%95%e3%80%82\/","title":{"rendered":"\u5f53\u4f7f\u7528jsonnet-builder\u81ea\u5b9a\u4e49kube-prometheus\u65f6\u7684\u5904\u7406\u5907\u5fd8\u5f55"},"content":{"rendered":"<h1>\u9996\u5148<\/h1>\n<p>kube-prometheus\u4ee5\u4fbf\u6377\u7684Operator\u5f62\u5f0f\u63d0\u4f9b\uff0c\u7528\u4e8e\u5728k8s\u96c6\u7fa4\u4e2d\u8fd0\u884cprometheus\u3001grafana\u548calertmanager\u3002\u5355\u72ec\u4f7f\u7528Prometheus Operator\u9700\u8981\u540c\u65f6\u8fd0\u884cGrafana\u7b49\u5468\u8fb9\u5e94\u7528\u7a0b\u5e8f\uff0c\u56e0\u6b64\u80fd\u591f\u4e00\u952e\u90e8\u7f72\u5b83\u4eec\u786e\u5b9e\u975e\u5e38\u65b9\u4fbf\u3002<\/p>\n<p>\u4f46\u662f\u7f51\u7edc\u7b56\u7565\u88ab\u4e25\u683c\u8bbe\u7f6e\uff0c\u57fa\u672c\u4e0a\u53ea\u5141\u8bb8\u90e8\u7f72\u7684Pod\u4e4b\u95f4\u8fdb\u884c\u901a\u4fe1\u3002<\/p>\n<p>\u4e0d\u8ad6\u662f\u5f9e\u5916\u90e8\u7db2\u9801\u700f\u89bd\u5668\u9032\u884c\u5b58\u53d6\u9084\u662f\u5f9e\u6307\u5b9a\u7684\u7db2\u9801\u700f\u89bd\u5668\u9032\u884c\u901a\u8a0a\uff0c\u90fd\u53ea\u8a18\u8f09\u4e86\u4f7f\u7528 port-forward \u7684\u65b9\u5f0f\u3002<\/p>\n<p>\u6211\u5c06\u8be6\u7ec6\u8bb0\u5f55\u7ecf\u8fc7Ingress\u8bbf\u95eeGrafana\u7684\u65b9\u5f0f\u5e76\u8fdb\u884c\u4e86\u5404\u79cd\u81ea\u5b9a\u4e49\u7684\u60c5\u51b5\uff0c\u91cd\u70b9\u662f\u5173\u4e8e\u5728jsonnet\u4e2d\u7684\u5907\u5fd8\u5f55\u3002<\/p>\n<p>\u672c\u6587\u9996\u5148\u8bb0\u5f55\u4e86\u4e00\u79cd\u5173\u4e8e\u901a\u8fc7\u66f4\u6539\u8fd0\u884c\u65f6\u6765\u8bbf\u95eeGrafana\u7684\u9ed8\u8ba4\u914d\u7f6e\u7684\u4e34\u65f6\u65b9\u6cd5\u3002\u7136\u540e\u4ecb\u7ecd\u4e86\u4f7f\u7528jsonnet-builder\u81ea\u5b9a\u4e49\u914d\u7f6e\u4fe1\u606f\u5e76\u90e8\u7f72\u5305\u542bGrafana\u7684\u5176\u4ed6\u66f4\u6539\u7684\u65b9\u6cd5\u3002<\/p>\n<h1>\u73af\u5883<\/h1>\n<h2>\u672c\u756a\u7cfb\u96c6\u7fa4<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Kubernetes v1.25.6 (Kubespray v2.21.0)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">kube-prometheus v0.12.0<\/ul>\n<h2>\u9a8c\u8bc1\u96c6\u7fa4<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Kubernetes v1.27.5 (Kubespray v2.23.0)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">kube-prometheus v0.13.0<\/ul>\n<p>jsonnet\u3001gojson2yaml\u548cjb\u547d\u4ee4\u5df2\u88ab\u653e\u7f6e\u5728~\/go\/bin\/\u7684@latest\u4f4d\u7f6e\uff0c\u5e76\u5df2\u6ce8\u518c\u5230PATH\u73af\u5883\u53d8\u91cf\u4e2d\u3002<\/p>\n<h2>\u5f15\u5165\u65b9\u5f0f<\/h2>\n<p>\u6309\u7167README.md\u4e2d\u7684\u201cQuick Start\u201d\u90e8\u5206\u8fdb\u884c\u64cd\u4f5c\u3002<br \/>\n\u6ca1\u6709\u7279\u6b8a\u6b65\u9aa4\uff0c\u53ea\u9700\u4fdd\u7559\u4ee5\u4f9b\u786e\u8ba4\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>git clone https:\/\/github.com\/prometheus-operator\/kube-prometheus.git\r\n<span class=\"nv\">$ <\/span><span class=\"nb\">cd <\/span>kube-prometheus\r\n\r\n<span class=\"c\">## Compatibility Matrix\u3092\u53c2\u7167\u3057\u3001\u9069\u5207\u306atag\u3092checkout\u3059\u308b<\/span>\r\n<span class=\"nv\">$ <\/span>git checkout refs\/tags\/v0.12.0 <span class=\"nt\">-b<\/span> my_v0.12.0\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span><span class=\"nb\">sudo <\/span>kubectl apply <span class=\"nt\">--server-side<\/span> <span class=\"nt\">-f<\/span> manifests\/setup\r\n<span class=\"nv\">$ <\/span><span class=\"nb\">sudo <\/span>kubectl <span class=\"nb\">wait<\/span> <span class=\"se\">\\<\/span>\r\n        <span class=\"nt\">--for<\/span> <span class=\"nv\">condition<\/span><span class=\"o\">=<\/span>Established <span class=\"se\">\\<\/span>\r\n        <span class=\"nt\">--all<\/span> CustomResourceDefinition <span class=\"se\">\\<\/span>\r\n        <span class=\"nt\">--namespace<\/span><span class=\"o\">=<\/span>monitoring         \r\n<span class=\"nv\">$ <\/span><span class=\"nb\">sudo <\/span>kubectl apply <span class=\"nt\">-f<\/span> manifests\/\r\n<\/code><\/pre>\n<h1>\u63a2\u7d22\u5982\u4f55\u5e94\u5bf9\u8bfe\u9898\u548cGrafana\u65b9\u9762\u7684\u914d\u5408\u3002<\/h1>\n<p>\u7531\u4e8eGrafana\u7684\u9ed8\u8ba4\u72b6\u6001\u90e8\u7f72\u5728\u9876\u5c42\u76ee\u5f55(&#8216;\/&#8217;)\u4e0a\uff0c\u6211\u4e0d\u77e5\u9053\u5982\u4f55\u66f4\u6539context-root\u4ee5\u4fbf\u5728\/subpath\u7c7b\u4f3c\u4e8e\/grafana\/\u7684\u8def\u5f84\u4e2d\u8bbf\u95ee\u3002<\/p>\n<p>\u6839\u636eGrafana\u7684\u6307\u5357\uff0c\u53ef\u4ee5\u901a\u8fc7\u66f4\u6539context-root\u6765\u4fee\u6539\uff0c\u4f46\u76f8\u5173\u4fe1\u606f\u4f3c\u4e4e\u5f88\u5c11\u3002\u6211\u5c06\u5c1d\u8bd5\u6839\u636eGrafana\u6307\u5357\uff0c\u901a\u8fc7ConfigMap\u6765\u8fdb\u884c\u4fee\u6539\u3002<\/p>\n<ul class=\"post-ul\">https:\/\/grafana.com\/tutorials\/run-grafana-behind-a-proxy\/<\/ul>\n<p>\u4e3a\u4e86\u5bfb\u627e\u7ebf\u7d22\uff0c\u9996\u5148\u4f1a\u67e5\u770bPod\u4e2d\u7684\u914d\u7f6e\u6587\u4ef6\u60c5\u51b5\u7b49\u3002<\/p>\n<p>\u5947\u8ff9\u822c\u5730\uff0cGrafana\u7684Pod\u4f3c\u4e4e\u53ef\u4ee5\u6b63\u5e38\u4f7f\u7528\u8bf8\u5982bash\u548cls\u7b49\u5b9e\u7528\u7a0b\u5e8f\u547d\u4ee4\u3002<\/p>\n<p>\u5728\u8fdb\u884c\u5404\u79cd\u641c\u7d22\u540e\uff0c\u53ef\u4ee5\u53d1\u73b0\/etc\/grafana\/grafana.ini\u5b58\u5728\uff0c\u5e76\u4e14\u53ef\u4ee5\u786e\u8ba4\u4ece\u5b9a\u4e49\u4e2d\u5c06secret\/grafana-config\u6620\u5c04\u8fdb\u6765\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\">## Pod\u306e\u4e2d\u306b\u79fb\u52d5 + \u63a2\u7d22<\/span>\r\n<span class=\"nv\">$ <\/span><span class=\"nb\">sudo <\/span>kubectl <span class=\"nt\">-n<\/span> monitoring <span class=\"nb\">exec<\/span> <span class=\"nt\">-it<\/span> grafana-9f58f8675-4n957 <span class=\"nt\">--<\/span> bash\r\nbash-5.1<span class=\"nv\">$ <\/span><span class=\"nb\">ls<\/span> \/etc\/grafana\/\r\ngrafana.ini   provisioning\r\n\r\n<span class=\"c\">## \/etc\/grafana \u304c\u3069\u3046\u3084\u3063\u3066\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304bDeployment\u306e\u5b9a\u7fa9\u3092\u78ba\u8a8d<\/span>\r\n<span class=\"nv\">$ <\/span><span class=\"nb\">sudo <\/span>kubectl <span class=\"nt\">-n<\/span> monitoring get deploy grafana <span class=\"nt\">-o<\/span> yaml\r\n...\r\n        - mountPath: \/etc\/grafana                   \r\n          name: grafana-config \r\n...\r\n      - name: grafana-config\r\n        secret:\r\n          defaultMode: 420\r\n          secretName: grafana-config\r\n...\r\n\r\n<span class=\"c\">## Secret\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304b\u3089 grafana-config \u306e\u5185\u5bb9\u3092\u78ba\u8a8d<\/span>\r\n<span class=\"nv\">$ <\/span><span class=\"nb\">sudo <\/span>kubectl <span class=\"nt\">-n<\/span> monitoring get secret grafana-config <span class=\"nt\">-o<\/span> yaml\r\napiVersion: v1\r\ndata:\r\n  grafana.ini: <span class=\"nv\">W2RhdGVfZm9ybWF0c10KZGVmYXVsdF90aW1lem9uZSA9IFVUQwo<\/span><span class=\"o\">=<\/span>\r\nkind: Secret\r\n...\r\n<\/code><\/pre>\n<p>\u7531\u4e8e\u5b83\u4f3c\u4e4e\u662fBase64\u7f16\u7801\u7684, \u6240\u4ee5\u6211\u4eec\u5c06\u5bf9\u5176\u8fdb\u884c\u89e3\u7801\u4ee5\u786e\u8ba4\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"W2RhdGVfZm9ybWF0c10KZGVmYXVsdF90aW1lem9uZSA9IFVUQwo=\"<\/span> | <span class=\"nb\">base64<\/span> <span class=\"nt\">-d<\/span>\r\n<span class=\"o\">[<\/span>date_formats]\r\ndefault_timezone <span class=\"o\">=<\/span> UTC\r\n<\/code><\/pre>\n<p>\u5411\u73b0\u6709\u7684grafana.ini\u6587\u4ef6\u5185\u5bb9\u4e2d\u6dfb\u52a0[server]\u8282\u7684\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span><span class=\"nb\">cat<\/span> <span class=\"o\">&lt;&lt;<\/span><span class=\"no\">EOF<\/span><span class=\"sh\"> | base64\r\n[date_formats]\r\ndefault_timezone = UTC\r\n[server]\r\ndomain = grafana.example.com\r\nroot_url = %(protocol)s:\/\/%(domain)s:%(http_port)s\/grafana\/\r\nserve_from_sub_path = true\r\n<\/span><span class=\"no\">EOF\r\n<\/span>W2RhdGVfZm9ybWF0c10KZGVmYXVsdF90aW1lem9uZSA9IFVUQwpbc2VydmVyXQpkb21haW4gPSBn\r\ncmFmYW5hLmV4YW1wbGUuY29tCnJvb3RfdXJsID0gJShwcm90b2NvbClzOi8vJShkb21haW4pczol\r\n<span class=\"nv\">KGh0dHBfcG9ydClzL2dyYWZhbmEvCnNlcnZlX2Zyb21fc3ViX3BhdGggPSB0cnVlCg<\/span><span class=\"o\">==<\/span>\r\n<\/code><\/pre>\n<p>\u5728\u8be5\u57df\u4e2d\uff0c\u6307\u5b9a\u4e86\u4e00\u4e2a\u542f\u7528\u4e86TLS\u548cHTTP\/2\u7684Nginx\u4ee3\u7406\u670d\u52a1\u5668\u7684\u540d\u79f0\u3002<br \/>\n\u7279\u522b\u662f\u5728\u4e0d\u4f7f\u7528\u6b64\u7c7b\u4ee3\u7406\u670d\u52a1\u5668\u7684\u60c5\u51b5\u4e0b\uff0c\u5e94\u6307\u5b9a\u7528\u4e8eWeb\u6d4f\u89c8\u5668\u7684\u4e3b\u673a\u540d\uff08\u5206\u914d\u7ed9Ingress\u7684IP\u5730\u5740\u7b49\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\"># Please edit the object below. Lines beginning with a '#' will be ignored,<\/span>\r\n<span class=\"c1\"># and an empty file will abort the edit. If an error occurs while saving this file will be<\/span>\r\n<span class=\"c1\"># reopened with the relevant failures.<\/span>\r\n<span class=\"c1\">#                                          <\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>  \r\n<span class=\"na\">data<\/span><span class=\"pi\">:<\/span>                                                                           \r\n  <span class=\"na\">grafana.ini<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">|<\/span>\r\n      <span class=\"s\">W2RhdGVfZm9ybWF0c10KZGVmYXVsdF90aW1lem9uZSA9IFVUQwpbc2VydmVyXQpkb21haW4gPSBn<\/span>\r\n      <span class=\"s\">cmFmYW5hLmV4YW1wbGUuY29tCnJvb3RfdXJsID0gJShwcm90b2NvbClzOi8vJShkb21haW4pczol<\/span>\r\n      <span class=\"s\">KGh0dHBfcG9ydClzL2dyYWZhbmEvCnNlcnZlX2Zyb21fc3ViX3BhdGggPSB0cnVlCg==           <\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Secret<\/span>           \r\n<span class=\"nn\">...<\/span>          \r\n<\/code><\/pre>\n<p>\u7de8\u96c6\u540e\u5e94\u8be5\u4f1a\u4ee5\u660e\u6587\u7f16\u8f91\uff0c\u7136\u540e\u7f16\u7801\u6210Base64\uff0c\u4f46\u662f\u7531\u4e8e\u66f4\u6539\u4e86context-root\uff0c\u6240\u4ee5\u53ea\u91cd\u65b0\u542f\u52a8grafana\u7684Pod\u662f\u65e0\u6cd5\u901a\u8fc7ReadinessProbe\u7684\u3002\u6211\u4eec\u9700\u8981\u4fee\u6539Deployment\u5bf9\u8c61\u800c\u4e0d\u91cd\u65b0\u542f\u52a8\uff0c\u6765\u7f16\u8f91\/api\/health\u7684\u90e8\u5206\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span><span class=\"nb\">sudo <\/span>kubectl <span class=\"nt\">-n<\/span> monitoring edit deploy grafana\r\n<\/code><\/pre>\n<p>\u66f4\u6539\u6b63\u5728\u8bbf\u95ee\u7684API\u8def\u5f84\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">...<\/span>\r\n        <span class=\"na\">readinessProbe<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">failureThreshold<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3<\/span>\r\n          <span class=\"na\">httpGet<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">path<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/grafana\/api\/health<\/span>\r\n            <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"s\">http<\/span>\r\n            <span class=\"na\">scheme<\/span><span class=\"pi\">:<\/span> <span class=\"s\">HTTP<\/span>\r\n<span class=\"nn\">...<\/span>\r\n<\/code><\/pre>\n<p>\u5f53\u60a8\u4fdd\u5b58\u5e76\u9000\u51fa\u65f6\uff0cPod \u5c06\u81ea\u52a8\u91cd\u65b0\u542f\u52a8\u3002Reconsile \u673a\u5236\u771f\u7684\u5f88\u65b9\u4fbf\u3002<\/p>\n<h1>\u4eceIngress\u8fde\u63a5\u5230Grafana<\/h1>\n<p>\u5b9e\u9645\u901a\u8fc7Web\u6d4f\u89c8\u5668\u8bbf\u95ee\u662f\u901a\u8fc7\u5177\u6709\u5168\u5c40IP\u7684\u884c\u6307\u5b9a\u7684\u670d\u52a1\u5668\u540d\u79f0\u7684nginx\u8fdb\u884cHTTPS\u8fde\u63a5\uff0c\u5e76\u901a\u8fc7\u8fd9\u4e2a\u670d\u52a1\u5668\u8fdb\u884c\u4ee3\u7406\u5230http:\/\/192.168.110.79\/\u3002<\/p>\n<p>\u6211\u5c06\u5728\u8fd9\u91cc\u603b\u7ed3\u6709\u5173Ingress\u7684\u66f4\u6539\uff0c\u5305\u62ec\u521d\u59cb\u8bbe\u7f6e\u3002<\/p>\n<h2>Ingress\u7684\u521d\u59cb\u8bbe\u7f6e<\/h2>\n<p>\u5982\u679c\u5df2\u7ecf\u4f7f\u7528Ingress\uff0c\u8bf7\u53ea\u9700\u6dfb\u52a0\u540e\u7eed\u7684Ingress\u5bf9\u8c61\u7b49\u5373\u53ef\uff0c\u6240\u4ee5\u8fd9\u4e00\u90e8\u5206\u53ef\u4ee5\u8df3\u8fc7\u3002\u4ec5\u4f9b\u53c2\u8003\uff0c\u5047\u8bbe\u60a8\u5df2\u7ecf\u4f7f\u7528kubespray\u7b49\u5de5\u5177\u542f\u7528\u4e86Ingress Controller\uff0c\u6211\u5c06\u63d0\u4f9bIngress\u7684\u521d\u59cb\u8bbe\u7f6e\u6587\u4ef6\u3002<\/p>\n<p>\u7531\u4e8e\u6ca1\u6709\u4efb\u4f55IngressClass\uff0c\u56e0\u6b64\u9884\u5148\u5b9a\u4e49ingressclass\/nginx\u4ee5\u4f9b\u7a0d\u540e\u5728Ingress\u5bf9\u8c61\u7684\u5b9a\u4e49\u4e2d\u4f7f\u7528\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">networking.k8s.io\/v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">IngressClass<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nginx<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">controller<\/span><span class=\"pi\">:<\/span> <span class=\"s\">k8s.io\/ingress-nginx<\/span>\r\n<\/code><\/pre>\n<p>\u4e3a\u4e86\u901a\u8fc7Web\u6d4f\u89c8\u5668\u8bbf\u95ee\uff0c\u9700\u8981\u5206\u914d\u4e00\u4e2a\u9759\u6001\u5730\u5740\u3002<br \/>\nk8s\u6b63\u5728\u8fd0\u884c\u7684192.168.110.0\/24\u662f\u5185\u90e8\u7f51\u7edc\uff0cWeb\u6d4f\u89c8\u5668\u6240\u5728\u7684\u7f51\u7edc\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Service<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ingress-nginx-controller<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ingress-nginx<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">type<\/span><span class=\"pi\">:<\/span> <span class=\"s\">LoadBalancer<\/span>\r\n  <span class=\"na\">loadBalancerIP<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">192.168.110.79\"<\/span>\r\n  <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">http<\/span>\r\n    <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">80<\/span>\r\n    <span class=\"na\">targetPort<\/span><span class=\"pi\">:<\/span> <span class=\"s\">http<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app.kubernetes.io\/name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ingress-nginx<\/span>\r\n<\/code><\/pre>\n<p>\u901a\u8fc7\u8fd9\u4e9b\u8bbe\u7f6e\uff0c\u60a8\u73b0\u5728\u53ef\u4ee5\u901a\u8fc7Web\u6d4f\u89c8\u5668\u4ece192.168.110.79\u8fde\u63a5\u5230Ingress\u3002<\/p>\n<h2>\u521b\u5efaIngress\u5bf9\u8c61<\/h2>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">networking.k8s.io\/v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Ingress<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">my-ingress<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">group<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ingress-nginx<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ingress-nginx<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">ingressClassName<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nginx<\/span>\r\n  <span class=\"na\">rules<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">http<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">paths<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">backend<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">service<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">monitoring-grafana-svc<\/span> \r\n            <span class=\"na\">port<\/span><span class=\"pi\">:<\/span>\r\n              <span class=\"na\">number<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3000<\/span>\r\n        <span class=\"na\">path<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/grafana<\/span>\r\n        <span class=\"na\">pathType<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Prefix<\/span>\r\n<\/code><\/pre>\n<p>\u7528\u540d\u79f0\u201cmonitoring-grafana-svc\u201d\u6307\u5b9aService\u5bf9\u8c61\u7684\u540d\u5b57\u8fdb\u884c\u5b9a\u4e49\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Service<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">monitoring-grafana-svc<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">group<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ingress-nginx<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ingress-nginx<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">type<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ExternalName<\/span>\r\n  <span class=\"na\">externalName<\/span><span class=\"pi\">:<\/span> <span class=\"s\">grafana.monitoring.svc.cluster.local<\/span>\r\n<\/code><\/pre>\n<h2>\u7f51\u7edc\u7b56\u7565\u7684\u4fee\u6539<\/h2>\n<p>\u5c3d\u7ba1\u5c1d\u8bd5\u4eceIngress\u8fde\u63a5\u5230Grafana\uff0c\u4ecd\u7136\u4f1a\u51fa\u73b0503\u9519\u8bef\u3002<br \/>\n\u6b63\u5982\u524d\u6587\u6240\u8ff0\uff0c\u7531\u4e8e\u7f51\u7edc\u7b56\u7565\u8f83\u4e25\u683c\uff0c\u9700\u8981\u989d\u5916\u8bbe\u7f6e\u6743\u9650\u4ee5\u5141\u8bb8\u4eceIngress\u8bbf\u95ee\u3002<\/p>\n<p>\u6211\u4f1a\u68c0\u67e5\u5f53\u524d\u7684\u7f51\u7edc\u7b56\u7565\u3002<\/p>\n<p>\u5728\u4e2d\u56fd\uff0c\u539f\u751f\u5730\uff0c\u6709\u8bb8\u591a\u9009\u9879\u53ef\u4ee5\u91cd\u65b0\u8868\u8ff0\u8fd9\u6bb5\u8bdd\u3002\u8fd9\u662f\u5176\u4e2d\u7684\u4e00\u4e2a\u9009\u9879\uff1a<br \/>\n\u4ee5\u4ee5\u4e0b\u65b9\u5f0f\u8f93\u51fa\uff1a$ sudo kubectl -n monitoring get networkpolicy grafana -o yaml\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">networking.k8s.io\/v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">NetworkPolicy<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">egress<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"pi\">{}<\/span>\r\n  <span class=\"na\">ingress<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">from<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">podSelector<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">app.kubernetes.io\/name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">prometheus<\/span>\r\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3000<\/span>\r\n      <span class=\"na\">protocol<\/span><span class=\"pi\">:<\/span> <span class=\"s\">TCP<\/span>\r\n  <span class=\"na\">podSelector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">app.kubernetes.io\/component<\/span><span class=\"pi\">:<\/span> <span class=\"s\">grafana<\/span>\r\n      <span class=\"na\">app.kubernetes.io\/name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">grafana<\/span>\r\n      <span class=\"na\">app.kubernetes.io\/part-of<\/span><span class=\"pi\">:<\/span> <span class=\"s\">kube-prometheus<\/span>\r\n  <span class=\"na\">policyTypes<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"s\">Egress<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"s\">Ingress<\/span>\r\n<\/code><\/pre>\n<p>Prometheus Pod\u548cGrafana Pod\u4e4b\u95f4\u7684\u8fde\u63a5\u88ab\u5141\u8bb8\uff0c\u4f46\u5176\u4ed6\u8bbf\u95ee\u88ab\u7981\u6b62\u3002<\/p>\n<p>\u6211\u5011\u5c07\u4f7f\u7528namespaceSelector\u4f86\u5141\u8a31\u4f86\u81eaIngress\u7684\u9023\u63a5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">networking.k8s.io\/v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">NetworkPolicy<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">egress<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"pi\">{}<\/span>\r\n  <span class=\"na\">ingress<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">from<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">podSelector<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">app.kubernetes.io\/name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">prometheus<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">namespaceSelector<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ingress-nginx<\/span>\r\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3000<\/span>\r\n      <span class=\"na\">protocol<\/span><span class=\"pi\">:<\/span> <span class=\"s\">TCP<\/span>\r\n  <span class=\"na\">podSelector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">app.kubernetes.io\/component<\/span><span class=\"pi\">:<\/span> <span class=\"s\">grafana<\/span>\r\n      <span class=\"na\">app.kubernetes.io\/name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">grafana<\/span>\r\n      <span class=\"na\">app.kubernetes.io\/part-of<\/span><span class=\"pi\">:<\/span> <span class=\"s\">kube-prometheus<\/span>\r\n  <span class=\"na\">policyTypes<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"s\">Egress<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"s\">Ingress<\/span>\r\n<\/code><\/pre>\n<p>\u5982\u679c\u5728podSelector\u548cnamespaceSelector\u8fd9\u4e24\u4e2a\u90fd\u52a0\u4e0a&#8217;-&#8216;\u5e76\u884c\u6392\u5217\uff0c\u5219\u6210\u4e3a&#8221;OR&#8221;\u6761\u4ef6\u3002\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u5982\u679c\u4e0d\u7ed9\u7b2c\u4e8c\u4e2a\u5143\u7d20\u52a0\u4e0a&#8221;-&#8220;\uff0c\u5219\u4f1a\u88ab\u5408\u5e76\u4e3a[{ podSelector: { matchLabels: &#8230; }, namespaceSelector: { matchLabels: &#8230; } }]\uff0c\u7ed3\u679c\u4f1a\u88ab\u5904\u7406\u4e3a&#8221;AND&#8221;\u6761\u4ef6\u3002<\/p>\n<p>\u76ee\u524d\u4e3a\u6b62\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7https:\/\/grafana.example.com\/grafana\/ \u8fdb\u5165\u63a7\u5236\u53f0\u3002<\/p>\n<h3>\u53e6\u4e00\u79cd\u89e3\u51b3\u65b9\u6848\u662f\u7f51\u7edc\u7b56\u7565\u7684\u53e6\u4e00\u79cd\u89e3\u653e\u3002<\/h3>\n<p>\u901a\u8fc7\u589e\u52a0\u8868\u5355\u5757\u4e5f\u53ef\u4ee5\u83b7\u5f97\u76f8\u540c\u7684\u7ed3\u679c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">networking.k8s.io\/v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">NetworkPolicy<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">egress<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"pi\">{}<\/span>\r\n  <span class=\"na\">ingress<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">from<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">podSelector<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">app.kubernetes.io\/name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">prometheus<\/span>\r\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3000<\/span>\r\n      <span class=\"na\">protocol<\/span><span class=\"pi\">:<\/span> <span class=\"s\">TCP<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">from<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">namespaceSelector<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ingress-nginx<\/span>\r\n    <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3000<\/span>\r\n      <span class=\"na\">protocol<\/span><span class=\"pi\">:<\/span> <span class=\"s\">TCP<\/span>\r\n  <span class=\"na\">podSelector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">app.kubernetes.io\/component<\/span><span class=\"pi\">:<\/span> <span class=\"s\">grafana<\/span>\r\n      <span class=\"na\">app.kubernetes.io\/name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">grafana<\/span>\r\n      <span class=\"na\">app.kubernetes.io\/part-of<\/span><span class=\"pi\">:<\/span> <span class=\"s\">kube-prometheus<\/span>\r\n  <span class=\"na\">policyTypes<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"s\">Egress<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"s\">Ingress<\/span>\r\n<\/code><\/pre>\n<h1>Grafana UI\u7684\u9ed8\u8ba4\u5bc6\u7801\u662f\u4ec0\u4e48\uff1f<\/h1>\n<p>\u8fd9\u4e2a\u73af\u5883\u4e0b\u8fd0\u884c\u7684Grafana\u7684\u9ed8\u8ba4\u8d26\u53f7(ID, \u5bc6\u7801)\u662f(admin, admin)\u3002<\/p>\n<p>\u8fd9\u662f\u6309\u7167Grafana\u5b98\u65b9\u6587\u6863\u6240\u793a\u3002<\/p>\n<p>\u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u6211\u4eec\u5df2\u7ecf\u6210\u529f\u8fde\u63a5\u5230\u4e86Grafana\u7684\u7528\u6237\u754c\u9762\u3002<\/p>\n<h1>\u4f7f\u7528jsonnet-builder\u81ea\u5b9a\u4e49kube-prometheus\u7684\u51c6\u5907\u5de5\u4f5c\u3002<\/h1>\n<p>\u5728\u90e8\u7f72\u540e\u7f16\u8f91Secret\u548cDeployment\u5bf9\u8c61\u7684\u65b9\u6cd5\u5f88\u7b80\u5355\uff0c\u4f5c\u4e3a\u521d\u6b65\u6b65\u9aa4\u5e76\u6ca1\u6709\u95ee\u9898\uff0c\u4f46\u662fkube-prometheus\u4f3c\u4e4e\u5e76\u4e0d\u8fd9\u6837\u8ba4\u4e3a\u3002<\/p>\n<p>\u5982\u679c\u8981\u4f7f\u7528kube-prometheus\u4e2d\u9884\u671f\u7684jsonnet-builder\u6765\u751f\u6210\u81ea\u5b9a\u4e49\u7684\u5b9a\u4e49\u6587\u4ef6\uff0c\u9700\u8981\u4e8b\u5148\u8fdb\u884c\u4ee5\u4e0b\u51c6\u5907\u5de5\u4f5c\u3002<\/p>\n<p>\u4e8b\u5148\u4f7f\u7528go\u547d\u4ee4\u5f15\u5165jsonnet\u547d\u4ee4\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>go <span class=\"nb\">install<\/span> <span class=\"nt\">-a<\/span> github.com\/jsonnet-bundler\/jsonnet-bundler\/cmd\/jb@latest\r\n<span class=\"nv\">$ <\/span>go <span class=\"nb\">install <\/span>github.com\/brancz\/gojsontoyaml@latest\r\n<span class=\"nv\">$ <\/span>go <span class=\"nb\">install <\/span>github.com\/google\/go-jsonnet\/cmd\/jsonnet@latest\r\n<\/code><\/pre>\n<p>\u5b89\u88c5\u7684\u547d\u4ee4\u5c06\u4f4d\u4e8e~\/go\/bin\/\u76ee\u5f55\u4e2d\u3002<br \/>\n\u6dfb\u52a0\u5230PATH\u73af\u5883\u53d8\u91cf\u7684\u65b9\u6cd5\u6709\u5f88\u591a\u79cd\uff0c\u4f46\u662f\u5982\u679c\u5728Ubuntu\u4e0a\uff0c\u5efa\u8bae\u4f7f\u7528\u540d\u4e3a~\/.bash_aliases\u7684\u9ed8\u8ba4\u5b58\u5728\u7684\u522b\u540d\u914d\u7f6e\u6587\u4ef6\u6765\u52a0\u8f7d\u3002<\/p>\n<p>\u5982\u679c\u76f4\u63a5\u7f16\u8f91~\/.bashrc\u6587\u4ef6\uff0c\u5e76\u4e14\/etc\/skel\/.bashrc\u5728\u5347\u7ea7\u7b49\u64cd\u4f5c\u4e2d\u53d1\u751f\u53d8\u5316\uff0c\u4f1a\u5bfc\u81f4\u9700\u8981\u5408\u5e76\u4fee\u6539\u70b9\uff0c\u589e\u52a0\u989d\u5916\u7684\u5de5\u4f5c\u91cf\u3002\u800c\u4f7f\u7528~\/.bash_aliases\uff0c\u53ea\u9700\u8981\u4ece\/etc\/skel\/\u590d\u5236\u5373\u53ef\u3002<\/p>\n<p>\u5728customizing.md\u6587\u6863\u4e2d\u4ecb\u7ecd\u4e86\u751f\u6210\u6587\u4ef6\u7684\u6b65\u9aa4\uff0c\u4f46\u6211\u4eec\u5c06\u5728v0.12.0\u5206\u652f\u4e0a\u8fdb\u884c\u64cd\u4f5c\u3002<\/p>\n<h1>\u5141\u8bb8\u6765\u81eaIngress\u7684\u901a\u4fe1\u8fde\u63a5\u5230Grafana\u7684\u81ea\u5b9a\u4e49\u793a\u4f8b1.<\/h1>\n<p>\u4e3a\u4e86\u4ee5\u58f0\u660e\u6027\u7684\u65b9\u5f0f\u6267\u884c\u521a\u521a\u76f4\u63a5\u66f4\u6539\u8fd0\u884c\u65f6\u7684\u5185\u5bb9\uff0c\u9700\u8981\u4fee\u6539 examples\/kustomize.jsonnet \u6587\u4ef6\uff0c\u5e76\u751f\u6210\u5df2\u66f4\u6539\u7684 YAML \u6587\u4ef6\u3002<\/p>\n<h2>\u6dfb\u52a0 namespaceSelector<\/h2>\n<p>\u6211\u5011\u6703\u9032\u884c\u4ee5\u4e0b\u66f4\u6539\u3002<\/p>\n<p>\u8bf7\u6ce8\u610f\u503c\u4e0d\u662f\u4ee5\u5e76\u5217\u7684\u5f62\u5f0f\uff0c\u800c\u662f\u4ee5\u4e00\u4e2a\u70b9\u7684\u65b9\u5f0f\u5448\u73b0\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">local<\/span> <span class=\"nx\">kp<\/span> <span class=\"p\">=<\/span>                \r\n  <span class=\"p\">(<\/span><span class=\"k\">import<\/span> <span class=\"s\">'kube-prometheus\/main.libsonnet'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n    <span class=\"p\">(<\/span><span class=\"k\">import<\/span> <span class=\"s\">'kube-prometheus\/addons\/managed-cluster.libsonnet'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n <span class=\"p\">{<\/span>                    \r\n    <span class=\"nx\">values<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span> \r\n      <span class=\"p\">...<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"c1\">\/\/ \u4ee5\u4e0b\u306e\u30d6\u30ed\u30c3\u30af\u3092\u8ffd\u52a0<\/span>\r\n    <span class=\"nx\">grafana<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">networkPolicy<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">spec<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">ingress<\/span><span class=\"p\">+:<\/span> <span class=\"p\">[{<\/span>\r\n            <span class=\"nx\">from<\/span><span class=\"p\">:<\/span> <span class=\"p\">[{<\/span>\r\n              <span class=\"nx\">namespaceSelector<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">matchLabels<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                  <span class=\"s\">'name'<\/span><span class=\"p\">:<\/span> <span class=\"s\">'ingress-nginx'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"p\">},<\/span>\r\n              <span class=\"p\">},<\/span>\r\n            <span class=\"p\">}],<\/span>\r\n            <span class=\"nx\">ports<\/span><span class=\"p\">:<\/span> <span class=\"p\">[{<\/span>\r\n              <span class=\"nx\">port<\/span><span class=\"p\">:<\/span> <span class=\"mi\">3000<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">protocol<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"TCP\"<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"p\">}],<\/span>\r\n          <span class=\"p\">}],<\/span>\r\n        <span class=\"p\">},<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n  <span class=\"p\">};<\/span>\r\n<\/code><\/pre>\n<h2>\u7f16\u8f91grafana.ini\u6587\u4ef6<\/h2>\n<p>\u5c06context_root\u66f4\u6539\u4e3a&#8221;\u53d8\u66f4&#8221;\uff0c\u5e76\u5c06\u66f4\u6539\u5185\u5bb9\u6dfb\u52a0\u5230grafana.ini\u4ee5\u4fbf\u4f7f\u7528\u5b50\u8def\u5f84\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">local<\/span> <span class=\"nx\">kp<\/span> <span class=\"p\">=<\/span>\r\n  <span class=\"p\">(<\/span><span class=\"k\">import<\/span> <span class=\"s\">'kube-prometheus\/main.libsonnet'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span> \r\n    <span class=\"p\">(<\/span><span class=\"k\">import<\/span> <span class=\"s\">'kube-prometheus\/addons\/managed-cluster.libsonnet'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n  <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">values<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">common<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">namespace<\/span><span class=\"p\">:<\/span> <span class=\"s\">'monitoring'<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"p\">},<\/span>\r\n      <span class=\"nx\">grafana<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">config<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">sections<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">server<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">domain<\/span><span class=\"p\">:<\/span> <span class=\"s\">'grafana.examples.com'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">root_url<\/span><span class=\"p\">:<\/span> <span class=\"s\">'%(protocol)s:\/\/%(domain)s:%(http_port)s\/grafana\/'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">serve_from_sub_pa<\/span>\r\n<span class=\"nx\">th<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span> <span class=\"p\">},<\/span>\r\n          <span class=\"p\">},<\/span>\r\n        <span class=\"p\">},<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n  <span class=\"p\">};<\/span>\r\n<\/code><\/pre>\n<h2>\u66f4\u6539ReadinessProbe\u7684\u8def\u5f84<\/h2>\n<p>\u6211\u5c06\u6309\u7167\u4ee5\u4e0b\u65b9\u5f0f\u8fdb\u884c\u7f16\u8f91\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">local<\/span> <span class=\"nx\">kp<\/span> <span class=\"p\">=<\/span>                \r\n  <span class=\"p\">(<\/span><span class=\"k\">import<\/span> <span class=\"s\">'kube-prometheus\/main.libsonnet'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n    <span class=\"p\">(<\/span><span class=\"k\">import<\/span> <span class=\"s\">'kube-prometheus\/addons\/managed-cluster.libsonnet'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n <span class=\"p\">{<\/span>                    \r\n    <span class=\"nx\">values<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span> \r\n      <span class=\"p\">...<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nx\">grafana<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">networkPolicy<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"p\">...<\/span>\r\n      <span class=\"p\">},<\/span>\r\n      <span class=\"c1\">\/\/ \u4ee5\u4e0b\u306e\u30d6\u30ed\u30c3\u30af\u3092\u8ffd\u52a0<\/span>\r\n      <span class=\"nx\">deployment<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">spec<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">template<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">spec<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n              <span class=\"nx\">containers<\/span><span class=\"p\">:<\/span> <span class=\"nx\">std<\/span><span class=\"p\">.<\/span><span class=\"nb\">map<\/span><span class=\"p\">(<\/span>\r\n                <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">container<\/span><span class=\"p\">)<\/span>\r\n                  <span class=\"k\">if<\/span> <span class=\"nx\">container<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span> <span class=\"p\">==<\/span> <span class=\"s\">\"grafana\"<\/span> <span class=\"k\">then<\/span>\r\n                    <span class=\"nx\">container<\/span> <span class=\"p\">{<\/span>\r\n                      <span class=\"nx\">readinessProbe<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n                        <span class=\"nx\">httpGet<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n                          <span class=\"nx\">path<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"\/grafana\/api\/health\"<\/span>\r\n                        <span class=\"p\">},<\/span>\r\n                      <span class=\"p\">},<\/span>\r\n                    <span class=\"p\">}<\/span>\r\n                  <span class=\"k\">else<\/span>\r\n                    <span class=\"nx\">container<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"k\">super<\/span><span class=\"p\">.<\/span><span class=\"nx\">containers<\/span>\r\n              <span class=\"p\">),<\/span>\r\n            <span class=\"p\">},<\/span>\r\n          <span class=\"p\">},<\/span>\r\n        <span class=\"p\">},<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n  <span class=\"p\">};<\/span>\r\n<\/code><\/pre>\n<p>\u8bf7\u6ce8\u610f\uff0c\u4e8b\u5148\u5728 vendor\/grafana\/grafana.libsonnet \u4e2d\u51c6\u5907\u597d\u7684 local defaults = containers \u53d8\u91cf\u53ef\u4ee5\u7528\u4e8e\u6dfb\u52a0\u65b0\u7684\u9644\u5c5e\u5bb9\u5668\u7b49\u5176\u4ed6\u955c\u50cf\u7684\u4e00\u5957\u5bb9\u5668\uff0c\u4f46\u65e0\u6cd5\u4fee\u6539\u4e0e\u73b0\u6709 Grafana \u5bb9\u5668\u76f8\u5173\u7684\u8bbe\u7f6e\uff08\u4f8b\u5982 env\uff09\u3002<\/p>\n<p>\u9ebb\u70e6\u7684\u662f\u5bb9\u5668\uff1a\u7531\u4e8econtainers\u662f\u4e00\u4e2a\u6570\u7ec4\uff0c\u6240\u4ee5\u4e0d\u80fd\u4f7f\u7528\u7c7b\u4f3ccontainers+\uff1a\u7684\u8868\u793a\u6765\u66f4\u6539\u5bf9\u8c61\u7684\u5143\u7d20\uff0c\u5fc5\u987b\u4f7f\u7528std.map()\u548csuper.containers\u6765\u5c06\u51fd\u6570\u5e94\u7528\u4e8e\u5404\u4e2a\u5143\u7d20\u3002<\/p>\n<p>\u5982\u679c\u6211\u4eec\u5047\u8bbe\u6570\u7ec4\u53ea\u6709\u4e00\u4e2a\u5143\u7d20\u7684\u8bdd\uff0c\u90a3\u4e48if-else\u8bed\u53e5\u5c31\u4e0d\u518d\u9700\u8981\uff0c\u4ee3\u7801\u4f1a\u66f4\u52a0\u7b80\u6d01\u3002\u4e0d\u8fc7\u8003\u8651\u5230\u5c06\u6765\u53ef\u80fd\u51fa\u73b0\u610f\u5916\u60c5\u51b5\uff0c\u4f7f\u7528\u8fd9\u79cd\u5199\u6cd5\u4f1a\u66f4\u52a0\u5b89\u5168\uff0c\u907f\u514d\u51fa\u73b0\u672a\u9884\u6599\u7684\u7ed3\u679c\u3002<\/p>\n<p>\u5982\u679c\u8981\u5220\u9664if\u301celse\u8bed\u53e5\uff0c\u5219\u5728super.containers\u4e4b\u524d\u9700\u8981\u4e00\u4e2a}\u3002\u5728\u6b64\u5904\u5217\u51fa\u7684else\u8bed\u53e5\u524d\u7684{\u6ca1\u6709\u9017\u53f7\u3002\u4ec5\u4ec5\u7b80\u5355\u5730\u5220\u9664\u6216\u6dfb\u52a0if\u8bed\u53e5\u5c06\u5bfc\u81f4\u9519\u8bef\u3002jsonnet\u662f\u4e00\u79cd\u76f8\u5f53\u590d\u6742\u7684\u8bed\u8a00\uff0c\u96be\u4ee5\u638c\u63e1\u3002<\/p>\n<h3>\u5bf9ChatGPT\u7684\u5e94\u7528<\/h3>\n<p>\u7531\u4e8e\u6211\u4e4b\u524d\u4ece\u672a\u63a5\u89e6\u8fc7Jsonnet\uff0c\u6240\u4ee5\u5728\u8fd9\u65b9\u9762\u6211\u8fdb\u884c\u4e86\u8bb8\u591a\u5c1d\u8bd5\u548c\u56f0\u60d1\uff0c\u6700\u7ec8\u901a\u8fc7\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u627e\u5230\u4e86\u524d\u9762\u63d0\u5230\u7684\u65b9\u6cd5\u3002<\/p>\n<ul class=\"post-ul\">https:\/\/chat.openai.com\/share\/85e6eee2-1b26-47fe-b879-b7e01872476a<\/ul>\n<p>\u5c3d\u7ba1\u6211\u8ba4\u4e3a\u5982\u679c\u6ca1\u6709\u6700\u521d\u7684\u8bd5\u9519\uff0c\u53ef\u80fd\u5c31\u65e0\u6cd5\u8fbe\u5230\u76ee\u6807\uff0c\u4f46\u5982\u679c\u6307\u793a\u6070\u5f53\u7684\u8bdd\uff0c\u4e5f\u786e\u5b9e\u6709\u5f88\u591a\u65b9\u4fbf\u7684\u60c5\u51b5\u3002<\/p>\n<h2>\u5141\u8bb8\u6765\u81eaadapter\u7684\u901a\u4fe1\u7684\u7f51\u7edc\u7b56\u7565\/prometheus-k8s\u3002<\/h2>\n<p>\u5728v0.12.0\u7248\u672c\u4e2d\uff0cNetworkPolicy\u7684\u8bbe\u7f6e\u4e0d\u5b8c\u6574\uff0c\u4f7f\u5f97\u9002\u914d\u5668\u65e0\u6cd5\u4e0eprometheus\u4e3b\u4f53\u8fdb\u884c\u901a\u4fe1\u5e76\u88ab\u963b\u65ad\u3002<\/p>\n<p>\u6211\u5c06\u5982\u4e0b\u8fdb\u884c\u7f16\u8f91\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">local<\/span> <span class=\"nx\">kp<\/span> <span class=\"p\">=<\/span>                                                       \r\n  <span class=\"p\">(<\/span><span class=\"k\">import<\/span> <span class=\"s\">'kube-prometheus\/main.libsonnet'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span> <span class=\"p\">{<\/span>      \r\n    <span class=\"nx\">values<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>           \r\n      <span class=\"nx\">common<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>        \r\n        <span class=\"p\">...<\/span>        \r\n      <span class=\"p\">},<\/span>                                                                \r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nx\">prometheus<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">networkPolicy<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">spec<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>                                  \r\n          <span class=\"nx\">ingress<\/span><span class=\"p\">+:<\/span> <span class=\"p\">[{<\/span>                   \r\n            <span class=\"nx\">from<\/span><span class=\"p\">:<\/span> <span class=\"p\">[{<\/span>           \r\n              <span class=\"nx\">podSelector<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">matchLabels<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>                                                                                                  \r\n                  <span class=\"s\">'app.kubernetes.io\/name'<\/span><span class=\"p\">:<\/span> <span class=\"s\">'prometheus-adapter'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"p\">},<\/span>\r\n              <span class=\"p\">},<\/span>\r\n            <span class=\"p\">}],<\/span>\r\n            <span class=\"nx\">ports<\/span><span class=\"p\">:<\/span> <span class=\"p\">[{<\/span>                                    \r\n              <span class=\"nx\">port<\/span><span class=\"p\">:<\/span> <span class=\"mi\">9090<\/span><span class=\"p\">,<\/span>                \r\n              <span class=\"nx\">protocol<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"TCP\"<\/span><span class=\"p\">,<\/span> \r\n            <span class=\"p\">}],<\/span>         \r\n          <span class=\"p\">}],<\/span>                                                                                                                   \r\n        <span class=\"p\">},<\/span>        \r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n  <span class=\"p\">};<\/span>\r\n\r\n<\/code><\/pre>\n<h2>\u751f\u6210Manifests\u548cManifests\u7684\u5dee\u5f02<\/h2>\n<p>\u6700\u540e\uff0c\u8bf7\u4f7f\u7528Makefile\u6765\u751f\u6210YAML\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span><span class=\"nb\">rm<\/span> <span class=\"nt\">-rf<\/span> manifests\r\n<span class=\"nv\">$ <\/span>make generate\r\n<\/code><\/pre>\n<p>\u751f\u6210\u7684 manifests\/grafana-networkPolicy.yaml \u6587\u4ef6\u5982\u4e0b\u6240\u793a\uff0c\u4e0e\u624b\u52a8\u4fee\u6539\u7684\u6587\u4ef6\u76f8\u540c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gh\">diff --git a\/manifests\/grafana-networkPolicy.yaml b\/manifests\/grafana-networkPolicy.yaml\r\nindex cab676c8..a259b618 100644\r\n<\/span><span class=\"gd\">--- a\/manifests\/grafana-networkPolicy.yaml\r\n<\/span><span class=\"gi\">+++ b\/manifests\/grafana-networkPolicy.yaml\r\n<\/span><span class=\"p\">@@ -16,6 +16,9 @@<\/span> spec:\r\n     - podSelector:\r\n         matchLabels:\r\n           app.kubernetes.io\/name: prometheus\r\n<span class=\"gi\">+    - namespaceSelector:\r\n+        matchLabels:\r\n+          name: ingress-nginx\r\n<\/span>     ports:\r\n     - port: 3000\r\n       protocol: TCP\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0b\u662fgrafana.ini\u7684\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gh\">diff --git a\/manifests\/grafana-config.yaml b\/manifests\/grafana-config.yaml\r\nindex 10d9c6a9..beab186a 100644\r\n<\/span><span class=\"gd\">--- a\/manifests\/grafana-config.yaml\r\n<\/span><span class=\"gi\">+++ b\/manifests\/grafana-config.yaml\r\n<\/span><span class=\"p\">@@ -12,4 +12,8 @@<\/span> stringData:\r\n   grafana.ini: |\r\n     [date_formats]\r\n     default_timezone = UTC\r\n<span class=\"gi\">+    [server]\r\n+    domain = grafana.example.com\r\n+    root_url = %(protocol)s:\/\/%(domain)s:%(http_port)s\/grafana\/\r\n+    serve_from_sub_path = true\r\n<\/span> type: Opaque\r\n<\/code><\/pre>\n<p>grafana-deployment.yaml\u5df2\u7ecf\u88ab\u8fd9\u6837\u914d\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gh\">diff --git a\/manifests\/grafana-deployment.yaml b\/manifests\/grafana-deployment.yaml\r\nindex eca41b6e..60fa54a6 100644\r\n<\/span><span class=\"gd\">--- a\/manifests\/grafana-deployment.yaml\r\n<\/span><span class=\"gi\">+++ b\/manifests\/grafana-deployment.yaml\r\n<\/span><span class=\"p\">@@ -18,7 +18,7 @@<\/span> spec:\r\n   template:\r\n     metadata:\r\n       annotations:\r\n<span class=\"gd\">-        checksum\/grafana-config: adbde4cde1aa3ca57c408943af53e6f7\r\n<\/span><span class=\"gi\">+        checksum\/grafana-config: c9018225d844e770a4c521083fe592b9\r\n<\/span>         checksum\/grafana-dashboardproviders: d8fb24844314114bed088b83042b1bdb\r\n         checksum\/grafana-datasources: 0800bab7ea1e2d8ad5c09586d089e033\r\n       labels:\r\n<span class=\"p\">@@ -37,7 +37,7 @@<\/span> spec:\r\n           name: http\r\n         readinessProbe:\r\n           httpGet:\r\n<span class=\"gd\">-            path: \/api\/health\r\n<\/span><span class=\"gi\">+            path: \/grafana\/api\/health\r\n<\/span>             port: http\r\n         resources:\r\n           limits:\r\n<\/code><\/pre>\n<p>\u5728\u5e94\u7528\u4e86\u4e4b\u524d\u7684\u66f4\u6539\u5e76\u66f4\u65b0\u4e86manifests\/\u6587\u4ef6\u5939\u540e\uff0c$ git status\u7684\u8f93\u51fa\u5c06\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code>On branch my_v0.12.0\r\nChanges not staged <span class=\"k\">for <\/span>commit:\r\n  <span class=\"o\">(<\/span>use <span class=\"s2\">\"git add &lt;file&gt;...\"<\/span> to update what will be committed<span class=\"o\">)<\/span>\r\n  <span class=\"o\">(<\/span>use <span class=\"s2\">\"git restore &lt;file&gt;...\"<\/span> to discard changes <span class=\"k\">in <\/span>working directory<span class=\"o\">)<\/span>\r\n        modified:   examples\/kustomize.jsonnet\r\n        modified:   jsonnet\/kube-prometheus\/components\/grafana.libsonnet\r\n        modified:   manifests\/grafana-config.yaml\r\n        modified:   manifests\/grafana-deployment.yaml\r\n        modified:   manifests\/grafana-networkPolicy.yaml\r\n\r\nno changes added to commit <span class=\"o\">(<\/span>use <span class=\"s2\">\"git add\"<\/span> and\/or <span class=\"s2\">\"git commit -a\"<\/span><span class=\"o\">)<\/span>\r\n<\/code><\/pre>\n<p>\u5347\u7ea7\u7684\u65b9\u6cd5\u4e0e\u5e38\u89c4\u5b89\u88c5\u65b9\u6cd5\u76f8\u540c\u3002<\/p>\n<h1>\u3010\u81ea\u5b9a\u4e49\u793a\u4f8b2\u3011\u5220\u9664\u6240\u6709NetworkPolicy<\/h1>\n<p>\u5982\u679c\u60a8\u6307\u5b9a examples\/networkpolicies-disabled.jsonnet \u4f5c\u4e3a examples\/kustomize.jsonnet \u7684\u66ff\u4ee3\uff0c\u5219\u4e0e NetworkPolicy \u76f8\u5173\u7684\u6587\u4ef6\u5c06\u4e0d\u4f1a\u8f93\u51fa\u5230 manifests\/\uff0c\u56e0\u4e3a examples\/networkpolicies-disabled.jsonnet \u5df2\u7ecf\u51c6\u5907\u597d\u4e86\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gh\">diff --git a\/Makefile b\/Makefile\r\nindex 8a438b21..6cf226a0 100644\r\n<\/span><span class=\"gd\">--- a\/Makefile\r\n<\/span><span class=\"gi\">+++ b\/Makefile\r\n<\/span><span class=\"p\">@@ -39,7 +39,7 @@<\/span> check-docs: $(MDOX_BIN) $(shell find examples) build.sh example.jsonnet\r\n .PHONY: generate\r\n generate: manifests\r\n \r\n<span class=\"gd\">-manifests: examples\/kustomize.jsonnet $(GOJSONTOYAML_BIN) vendor\r\n<\/span><span class=\"gi\">+manifests: examples\/networkpolicies-disabled.jsonnet $(GOJSONTOYAML_BIN) vendor\r\n<\/span>        .\/build.sh $&lt;\r\n \r\n vendor: $(JB_BIN) jsonnetfile.json jsonnetfile.lock.json\r\n<\/code><\/pre>\n<p>\u8fd9\u79cd\u65b9\u6cd5\u9700\u8981\u7f16\u8f91\u6587\u4ef6\uff0c\u5305\u62ec\u4e4b\u524d\u7684grafana.ini\u7684\u66f4\u6539\uff0c\u6240\u4ee5\u6709\u70b9\u9ebb\u70e6\u3002<\/p>\n<p>\u6beb\u7121\u7591\u554f\u5730\uff0c\u6211\u5011\u53ef\u4ee5\u5229\u7528 examples\/kustomize.jsonnet\uff0c\u6309\u7167\u4ee5\u4e0b\u65b9\u5f0f\u9032\u884c\u7de8\u8f2f\u4ee5\u878d\u5165 networkpolicies-disabled \u7684\u529f\u80fd\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gh\">diff --git a\/examples\/kustomize.jsonnet b\/examples\/kustomize.jsonnet\r\nindex c12f98b3..5186d9b6 100644\r\n<\/span><span class=\"gd\">--- a\/examples\/kustomize.jsonnet\r\n<\/span><span class=\"gi\">+++ b\/examples\/kustomize.jsonnet\r\n<\/span><span class=\"p\">@@ -1,9 +1,17 @@<\/span>\r\n local kp =\r\n<span class=\"gd\">-  (import 'kube-prometheus\/main.libsonnet') + {\r\n<\/span><span class=\"gi\">+  (import 'kube-prometheus\/main.libsonnet') + \r\n+  (import 'kube-prometheus\/addons\/networkpolicies-disabled.libsonnet') + {\r\n<\/span>     values+:: {\r\n       common+: {\r\n         namespace: 'monitoring',\r\n       },\r\n<span class=\"gi\">+      grafana+:: {\r\n+        config+: {\r\n+          sections+: {\r\n+            \"server\": {domain: \"grafana.example.com\", root_url: \"%(protocol)s:\/\/%(domain)s:%(http_port)s\/grafana\/\", serve_from_sub_path:\r\n<\/span> true},\r\n<span class=\"gi\">+          },\r\n+        },\r\n+      },\r\n<\/span>     },\r\n   };\r\n\r\n\r\n<\/code><\/pre>\n<p>\u5982\u679c\u5728\u65b9\u6cd52\u4e2d\u53cd\u6620\u4e4b\u524d\u7684\u66f4\u6539\uff0c\u5219git status\u7684\u8f93\u51fa\u5c06\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>git status\r\nOn branch my_v0.12.0\r\nChanges not staged <span class=\"k\">for <\/span>commit:\r\n  <span class=\"o\">(<\/span>use <span class=\"s2\">\"git add\/rm &lt;file&gt;...\"<\/span> to update what will be committed<span class=\"o\">)<\/span>\r\n  <span class=\"o\">(<\/span>use <span class=\"s2\">\"git restore &lt;file&gt;...\"<\/span> to discard changes <span class=\"k\">in <\/span>working directory<span class=\"o\">)<\/span>\r\n        modified:   examples\/kustomize.jsonnet\r\n        modified:   jsonnet\/kube-prometheus\/components\/grafana.libsonnet\r\n        modified:   kustomization.yaml\r\n        deleted:    manifests\/alertmanager-networkPolicy.yaml\r\n        deleted:    manifests\/blackboxExporter-networkPolicy.yaml\r\n        deleted:    manifests\/grafana-networkPolicy.yaml\r\n        deleted:    manifests\/kubeStateMetrics-networkPolicy.yaml\r\n        deleted:    manifests\/nodeExporter-networkPolicy.yaml\r\n        deleted:    manifests\/prometheus-networkPolicy.yaml\r\n        deleted:    manifests\/prometheusAdapter-networkPolicy.yaml\r\n        deleted:    manifests\/prometheusOperator-networkPolicy.yaml\r\n\r\nno changes added to commit <span class=\"o\">(<\/span>use <span class=\"s2\">\"git add\"<\/span> and\/or <span class=\"s2\">\"git commit -a\"<\/span><span class=\"o\">)<\/span>\r\n<\/code><\/pre>\n<h1>\u6307\u5b9a\u53d1\u9001\u8b66\u62a5\u90ae\u4ef6\u7684\u76ee\u6807\u3002<\/h1>\n<p>\u5728\u6d4b\u8bd5\u73af\u5883\u4e2d\u6ca1\u6709\u5fc5\u8981\u53d1\u9001\u7535\u5b50\u90ae\u4ef6\uff0c\u4f46\u5728\u751f\u4ea7\u73af\u5883\u4e2d\uff0c\u6211\u4eec\u5c3d\u53ef\u80fd\u5730\u60f3\u8981\u5c3d\u65e9\u53d1\u73b0\u5f02\u5e38\u60c5\u51b5\u3002<\/p>\n<p>\u6839\u636e\u4e25\u91cd\u7a0b\u5ea6\u53d1\u9001\u7535\u5b50\u90ae\u4ef6\u3002<\/p>\n<p>\u8fd9\u4e2a\u9700\u6c42\u662f\u81ea\u7136\u800c\u7136\u53ef\u4ee5\u9884\u6599\u5230\u7684\uff0c\u6240\u4ee5\u53d8\u66f4\u5f88\u5bb9\u6613\u5b8c\u6210\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">local<\/span> <span class=\"nx\">kp<\/span> <span class=\"p\">=<\/span>\r\n  <span class=\"p\">(<\/span><span class=\"k\">import<\/span> <span class=\"s\">'kube-prometheus\/main.libsonnet'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">values<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">common<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">namespace<\/span><span class=\"p\">:<\/span> <span class=\"s\">'monitoring'<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"p\">},<\/span>\r\n      <span class=\"nx\">alertmanager<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">config<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">global<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">resolve_timeout<\/span><span class=\"p\">:<\/span> <span class=\"s\">'5m'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">smtp_smarthost<\/span><span class=\"p\">:<\/span> <span class=\"s\">'smtp.example.com:25'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">smtp_from<\/span><span class=\"p\">:<\/span> <span class=\"s\">'grafana@example.com'<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"p\">},<\/span>\r\n          <span class=\"nx\">receivers<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n            <span class=\"p\">{<\/span>\r\n              <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'Critical'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">email_configs<\/span><span class=\"p\">:<\/span> <span class=\"p\">[{<\/span>\r\n                <span class=\"nx\">to<\/span><span class=\"p\">:<\/span> <span class=\"s\">'admin@example.com'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"p\">}],<\/span>\r\n            <span class=\"p\">},<\/span>\r\n            <span class=\"p\">{<\/span> <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'Default'<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>\r\n            <span class=\"p\">{<\/span> <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'Watchdog'<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>\r\n            <span class=\"p\">{<\/span> <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'null'<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>\r\n          <span class=\"p\">],<\/span>\r\n        <span class=\"p\">},<\/span>\r\n      <span class=\"p\">},<\/span>\r\n     <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n  <span class=\"p\">};<\/span>\r\n<\/code><\/pre>\n<p>\u5982\u679c\u53d1\u751f\u4e86\u88ab\u5206\u7c7b\u4e3a\u4e25\u91cd\u8b66\u62a5\u7684\u60c5\u51b5\uff0c\u5c06\u53d1\u9001\u7535\u5b50\u90ae\u4ef6\u3002<\/p>\n<h1>\u505c\u6b62KubeSchedulerDown\u548cKubeControllerManagerDown\u7684\u8b66\u62a5\u3002<\/h1>\n<p>\u5728\u67d0\u4e9b\u73af\u5883\u4e2d\uff0c\u5bf9\u4e8ekube-scheduler\u548ckube-controller-manager\u7684\u76d1\u63a7\u53ef\u80fd\u4e0d\u9002\u5f53\u3002<\/p>\n<p>\u7531\u4e8e\u8fd9\u4e9b\u88ab\u5206\u7c7b\u4e3a\u5173\u952e\u4fe1\u606f\uff0c\u4e00\u65e6\u60a8\u53d1\u9001\u7535\u5b50\u90ae\u4ef6\uff0c\u60a8\u53ef\u80fd\u4f1a\u5b9a\u671f\u6536\u5230\u8b66\u544a\u90ae\u4ef6\u3002<\/p>\n<p>\u76ee\u524d\uff0c\u5728 jsonnet\/kube-prometheus\/addons \u4e2d\u6709\u4e00\u4e2a\u65b9\u4fbf\u7684\u5b9a\u4e49\u6765\u505c\u6b62\u8fd9\u4e2a\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5728 examples\/kustomize.jsonnet \u4e2d\u6dfb\u52a0\u4ee5\u4e0b import \u8bed\u53e5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">local<\/span> <span class=\"nx\">kp<\/span> <span class=\"p\">=<\/span>\r\n  <span class=\"p\">(<\/span><span class=\"k\">import<\/span> <span class=\"s\">'kube-prometheus\/main.libsonnet'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span> \r\n    <span class=\"p\">(<\/span><span class=\"k\">import<\/span> <span class=\"s\">'kube-prometheus\/addons\/managed-cluster.libsonnet'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n  <span class=\"p\">{<\/span>\r\n<\/code><\/pre>\n<p>\u53ea\u9700\u6dfb\u52a0\u4e00\u884c\uff0c\u4f46\u8bf7\u6ce8\u610f{ \u548c +\u3002<\/p>\n<p>\u6839\u636ediff\u7684\u7ed3\u679c\uff0c\u5982\u4e0b\u6240\u793a\u3002 diff de , .)<\/p>\n<pre class=\"post-pre\"><code><span class=\"gh\">diff --git a\/examples\/kustomize.jsonnet b\/examples\/kustomize.jsonnet\r\nindex 04f151ad..ee33e27e 100644\r\n<\/span><span class=\"gd\">--- a\/examples\/kustomize.jsonnet\r\n<\/span><span class=\"gi\">+++ b\/examples\/kustomize.jsonnet\r\n<\/span><span class=\"p\">@@ -1,5 +1,7 @@<\/span>\r\n local kp =\r\n<span class=\"gd\">-  (import 'kube-prometheus\/main.libsonnet') + {\r\n<\/span><span class=\"gi\">+  (import 'kube-prometheus\/main.libsonnet') + \r\n+    (import 'kube-prometheus\/addons\/managed-cluster.libsonnet') +\r\n+  {\r\n<\/span>     values+:: {\r\n       common+: {\r\n         namespace: 'monitoring',\r\n<\/code><\/pre>\n<p>\u5982\u679c\u60a8\u5c06\u751f\u6210\u7684YAML\u6587\u4ef6\u901a\u8fc7`kubectl apply -f manifests`\u5e94\u7528\u540e\uff0c\u8b66\u62a5\u5c06\u6d88\u5931\u3002\u4f46\u5982\u679c\u60a8\u8fd8\u662f\u62c5\u5fc3\uff0c\u53ef\u80fd\u53ef\u4ee5\u8003\u8651\u5220\u9664\u4e0d\u518d\u9700\u8981\u7684ServiceMonitor\u5bf9\u8c61\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>kubectl <span class=\"nt\">-n<\/span> monitoring delete servicemonitor kube-controller-manager\r\n<span class=\"nv\">$ <\/span>kubectl <span class=\"nt\">-n<\/span> monitoring delete servicemonitor kube-scheduler\r\n<\/code><\/pre>\n<h1>\u5e0c\u671b\u505c\u6b62node-exporter\u7684CPUThrottlingHigh\u8b66\u62a5\u3002<\/h1>\n<p>\u7531\u4e8e\u4e25\u91cd\u6027\u4e3a\u201cinfo\u201d\uff0c\u56e0\u6b64\u4e0d\u4f1a\u53d1\u9001\u7535\u5b50\u90ae\u4ef6\uff0c\u4f46\u5982\u679c\u60a8\u6709\u4efb\u4f55\u5173\u6ce8\u7684\u95ee\u9898\uff0c\u53ef\u4ee5\u8fdb\u884c\u4ee5\u4e0b\u81ea\u5b9a\u4e49\u3002<\/p>\n<p>\u8bf7\u6839\u636e\u5177\u4f53\u73af\u5883\u7684\u53d8\u5316\u60c5\u51b5\uff0c\u5c06\u8d44\u6e90\u7684\u6307\u5b9a\u503c\u8c03\u6574\u4e3a\u539f\u503c\u76842\u500d\u30013\u500d\u7b49\u8fdb\u884c\u89c2\u5bdf\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gh\">diff --git a\/examples\/kustomize.jsonnet b\/examples\/kustomize.jsonnet\r\nindex 0cfc8d3a..687c4d15 100644\r\n<\/span><span class=\"gd\">--- a\/examples\/kustomize.jsonnet\r\n<\/span><span class=\"gi\">+++ b\/examples\/kustomize.jsonnet\r\n<\/span><span class=\"p\">@@ -12,6 +14,32 @@<\/span> local kp =\r\n           },\r\n         },\r\n       },\r\n<span class=\"gi\">+      nodeExporter+:: {\r\n+        resources+: {\r\n+          requests+: { cpu: \"306m\", },\r\n+          limits+: { cpu: \"750m\", },\r\n+        },\r\n+      },\r\n+      blackboxExporter+:: {\r\n+        resources+: {\r\n+          requests+: { cpu: \"80m\", },\r\n+          limits+: { cpu: \"160m\", },\r\n+        },\r\n+      },\r\n+      kubeStateMetrics+:: {\r\n+        kubeRbacProxyMain+:: {\r\n+          resources+: {\r\n+            requests+: { cpu: \"80m\", },\r\n+            limits+: { cpu: \"160m\", },\r\n+          },\r\n+        },\r\n+        kubeRbacProxySelf+:: {\r\n+          resources+: {\r\n+            requests+: { cpu: \"40m\", },\r\n+            limits+: { cpu: \"80m\", },\r\n+          },\r\n+        },\r\n+      },\r\n<\/span>     },\r\n   };\r\n<\/code><\/pre>\n<h1>\u3010\u81ea\u5b9a\u4e49\u793a\u4f8b6\u3011\u5e0c\u671b\u6d88\u9664Rook\/Ceph\u6587\u4ef6\u7cfb\u7edf\u4e2d\u7684inode\u8b66\u62a5<\/h1>\n<p>Rook\/Ceph\u6240\u63d0\u4f9b\u7684storageclass\/rook-cephfs\u662f\u4e00\u79cd\u53ef\u901a\u8fc7ReadWriteMany\u65b9\u5f0f\u8bbf\u95ee\u7684\u5b58\u50a8\u529f\u80fd\uff0c\u4f46\u662f\u5c3d\u7ba1inodes\u88ab\u52a8\u6001\u5206\u914d\uff0c\u4e00\u65e6\u5199\u5165\u4e86\u4e00\u5b9a\u6570\u91cf\u7684\u6587\u4ef6\uff0c\u5c31\u4f1a\u8fbe\u5230\u4e0a\u9650\u3002<\/p>\n<p>\u7531\u4e8e\u8fd9\u4e2a\u539f\u56e0\uff0cdf -i\u547d\u4ee4\u7684\u8f93\u51fa\u663e\u793ainode\u4f7f\u7528\u7387\u8fbe\u5230100%\uff0c\u89e6\u53d1\u4e86\u8b66\u62a5\u3002<\/p>\n<p>\u4e3a\u4e86\u89e3\u51b3KubePersistentVolumeInodesFillingUp\u89c4\u5219\u7684\u95ee\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5bf9\u89c4\u5219\u8fdb\u884c\u5373\u5e2d\u7f16\u8f91\u6765\u786e\u5b9a\u89e3\u51b3\u65b9\u6848\u3002<\/p>\n<pre class=\"post-pre\"><code>        <span class=\"s\">unless on(namespace, persistentvolumeclaim)<\/span>\r\n        <span class=\"s\">kube_persistentvolumeclaim_info{storageclass=\"rook-cephfs\"} == <\/span><span class=\"m\">1<\/span>\r\n<\/code><\/pre>\n<p>\u8fd9\u4e2a\u89c4\u5219\u6709\u4e24\u4e2a\u4e0a\u9650\uff0c\u4e00\u4e2a\u662f\u6bcf1\u7c73\uff0c\u53e6\u4e00\u4e2a\u662f\u6bcf1\u5c0f\u65f6\uff0c\u56e0\u6b64\u6211\u4eec\u5fc5\u987b\u533a\u5206\u5b83\u4eec\u5e76\u5206\u522b\u66f4\u65b0\u89c4\u5219\u3002<\/p>\n<p>\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e00\u53d8\u66f4\uff0c\u6211\u4eec\u5bf9 examples\/kustomize.jsonnet \u8fdb\u884c\u4e86\u5982\u4e0b\u4fee\u6539\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gh\">diff --git a\/examples\/kustomize.jsonnet b\/examples\/kustomize.jsonnet\r\nindex c12f98b3..09141738 100644\r\n<\/span><span class=\"gd\">--- a\/examples\/kustomize.jsonnet\r\n<\/span><span class=\"gi\">+++ b\/examples\/kustomize.jsonnet\r\n<\/span><span class=\"p\">@@ -5,6 +5,34 @@<\/span> local kp =\r\n         namespace: 'monitoring',\r\n       },\r\n     },\r\n<span class=\"gi\">+    kubernetesControlPlane+: {\r\n+      prometheusRule+: {\r\n+        spec+: {\r\n+          groups: std.map(\r\n+            function(group)\r\n+              if group.name == 'kubernetes-storage' then\r\n+                group {\r\n+                  rules: std.map(\r\n+                    function(rule)\r\n+                      if rule.alert == 'KubePersistentVolumeInodesFillingUp' then\r\n+                        rule {\r\n+                          expr+: |||\r\n+                            unless on(namespace, persistentvolumeclaim)\r\n+                            kube_persistentvolumeclaim_info{storageclass=\"rook-cephfs\"} == 1\r\n+                          |||\r\n+                       }\r\n+                      else\r\n+                        rule,\r\n+                    super.rules\r\n+                  ),\r\n+                }\r\n+              else\r\n+                group,\r\n+            super.groups\r\n+          ),\r\n+        },\r\n+      },\r\n+    },\r\n<\/span>   };\r\n \r\n local manifests =\r\n<\/code><\/pre>\n<p>\u6211\u4eec\u4e5f\u4f1a\u68c0\u67e5\u7531make generate\u751f\u6210\u7684YAML\u6587\u4ef6\u7684\u5dee\u5f02\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gh\">diff --git a\/manifests\/kubernetesControlPlane-prometheusRule.yaml b\/manifests\/kubernetesControlPlane-prometheusRule.yaml\r\nindex ce0fefd6..0dd03e65 100644\r\n<\/span><span class=\"gd\">--- a\/manifests\/kubernetesControlPlane-prometheusRule.yaml\r\n<\/span><span class=\"gi\">+++ b\/manifests\/kubernetesControlPlane-prometheusRule.yaml\r\n<\/span><span class=\"p\">@@ -440,6 +440,8 @@<\/span> spec:\r\n         kube_persistentvolumeclaim_access_mode{ access_mode=\"ReadOnlyMany\"} == 1\r\n         unless on(namespace, persistentvolumeclaim)\r\n         kube_persistentvolumeclaim_labels{label_excluded_from_alerts=\"true\"} == 1\r\n<span class=\"gi\">+        unless on(namespace, persistentvolumeclaim)\r\n+        kube_persistentvolumeclaim_info{storageclass=\"rook-cephfs\"} == 1\r\n<\/span>       for: 1m\r\n       labels:\r\n         severity: critical\r\n<span class=\"p\">@@ -465,6 +467,8 @@<\/span> spec:\r\n         kube_persistentvolumeclaim_access_mode{ access_mode=\"ReadOnlyMany\"} == 1\r\n         unless on(namespace, persistentvolumeclaim)\r\n         kube_persistentvolumeclaim_labels{label_excluded_from_alerts=\"true\"} == 1\r\n<span class=\"gi\">+        unless on(namespace, persistentvolumeclaim)\r\n+        kube_persistentvolumeclaim_info{storageclass=\"rook-cephfs\"} == 1\r\n<\/span>       for: 1h\r\n       labels:\r\n         severity: warning\r\n<\/code><\/pre>\n<h2>\u53c2\u8003\u6587\u732e<\/h2>\n<p>kube-prometheus\u4e2d\u7684\u53d8\u66f4\u793a\u4f8b\u662f\u6dfb\u52a0\u4e86\u65b0\u89c4\u5219\uff0c\u4ee5\u53ca\u4fee\u6539\u9ed8\u8ba4\u89c4\u5219\u4e2d\u7684\u4e00\u90e8\u5206\uff0c\u8fd9\u9700\u8981\u4e00\u4e9b\u5de7\u5999\u7684\u64cd\u4f5c\u3002\u4ee5\u4e0b\u8d44\u6599\u53ef\u4ee5\u4f5c\u4e3a\u53c2\u8003\u3002<\/p>\n<ul class=\"post-ul\">https:\/\/groups.google.com\/g\/prometheus-users\/c\/ha6wLqFlFTc<\/ul>\n<h1>\u3010\u4e2a\u6027\u5316\u793a\u4f8b7\u3011\u60f3\u8981\u6dfb\u52a0Rook\/Ceph\u7684\u5ea6\u91cf\u6307\u6807\u548c\u4eea\u8868\u677f\u3002<\/h1>\n<p>\u6211\u4eec\u6b63\u5728\u4ee5\u4e0b\u73af\u5883\u4e2d\u8fdb\u884c\u9a8c\u8bc1\u3002<\/p>\n<ul class=\"post-ul\">Rook\/Ceph v1.11.10 (Ceph v17.2.6\u3001namespace: rook-ceph)<\/ul>\n<h2>\u5728Rook\/Ceph\u4e2d\u7684\u914d\u7f6e\u8bbe\u7f6e<\/h2>\n<p>rook\u7684Git\u5b58\u50a8\u5e93\u5305\u542b\u4e86\u7528\u4e8e\u76d1\u63a7\u7684YAML\u6587\u4ef6\u7b49\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">rook\/deploy\/examples\/monitoring\/service-monitor.yaml<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">rook\/deploy\/examples\/monitoring\/localrules.yaml<\/ul>\n<p>\u8fd9\u4e24\u4e2aYAML\u6587\u4ef6\u5e94\u8be5\u8bbe\u7f6e\u5728namespace: rook-ceph\u4e2d\u3002<br \/>\n\u7531\u4e8eYAML\u6587\u4ef6\u4e2d\u5df2\u7ecf\u6307\u5b9a\u4e86namespace: rook-ceph\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u8fdb\u884c\u7f16\u8f91\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span><span class=\"nb\">sudo <\/span>kubectl <span class=\"nt\">-n<\/span> rook-ceph apply <span class=\"nt\">-f<\/span> rook\/deploy\/examples\/monitoring\/service-monitor.yaml\r\n<span class=\"nv\">$ <\/span><span class=\"nb\">sudo <\/span>kubectl <span class=\"nt\">-n<\/span> rook-ceph apply <span class=\"nt\">-f<\/span> rook\/deploy\/examples\/monitoring\/localrules.yaml\r\n<\/code><\/pre>\n<p>\u8fd9\u6837\u5c31\u53ef\u4ee5\u5728Prometheus\u4e0a\u6536\u96c6\u6307\u6807\u4e86\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span><span class=\"nb\">sudo <\/span>kubectl <span class=\"nt\">-n<\/span> rook-ceph get ServiceMonitor rook-ceph-mgr\r\n<span class=\"nv\">$ <\/span><span class=\"nb\">sudo <\/span>kubectl <span class=\"nt\">-n<\/span> rook-ceph get PrometheusRule prometheus-ceph-rules\r\n<\/code><\/pre>\n<h2>Prometheus\u7684\u914d\u7f6e\u5728\u8fd9\u4e00\u4fa7<\/h2>\n<p>Grafana Dashboard\u7684\u5b9a\u4e49\u5728\u4ee5\u4e0b\u5b98\u65b9\u7f51\u7ad9\u4e0a\u63d0\u4f9b\u94fe\u63a5\u3002<\/p>\n<ul class=\"post-ul\">https:\/\/rook.io\/docs\/rook\/latest\/Storage-Configuration\/Monitoring\/ceph-monitoring\/#grafana-dashboards<\/ul>\n<p>\u6211\u5c06\u4f7f\u7528\u60a8\u53ef\u4ee5\u4ece\u8fd9\u91cc\u4e0b\u8f7d\u7684\u4e0b\u4e00\u4e2a\u6587\u4ef6\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">2842_rev17.json (Ceph &#8211; Cluster)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">5336_rev9.json (Ceph &#8211; OSD (Single))<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">5342_rev9.json (Ceph &#8211; Pools)<\/ul>\n<p>\u5c06\u8fd9\u4e9b\u6587\u4ef6\u4f5c\u4e3a\u540d\u4e3a namespace: monitoring \u7684ConfigMap\u5bf9\u8c61\u8fdb\u884c\u6ce8\u518c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span><span class=\"nb\">sudo <\/span>kubectl <span class=\"nt\">-n<\/span> monitoring create configmap grafana-dashboard-ceph-cluster <span class=\"nt\">--from-file<\/span><span class=\"o\">=<\/span>2842_rev17.json\r\n<span class=\"nv\">$ <\/span><span class=\"nb\">sudo <\/span>kubectl <span class=\"nt\">-n<\/span> monitoring create configmap grafana-dashboard-ceph-osd <span class=\"nt\">--from-file<\/span><span class=\"o\">=<\/span>5336_rev9.json\r\n<span class=\"nv\">$ <\/span><span class=\"nb\">sudo <\/span>kubectl <span class=\"nt\">-n<\/span> monitoring create configmap grafana-dashboard-ceph-pools <span class=\"nt\">--from-file<\/span><span class=\"o\">=<\/span>5342_rev9.json\r\n<\/code><\/pre>\n<p>\u5728Kube-Prometheus\u7684\u90e8\u5206\u4e2d\uff0c\u6211\u4eec\u5c06\u5728examples\/kustomize.jsonnet\u4e2d\u8fdb\u884c\u4ee5\u4e0b\u66f4\u6539\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">local<\/span> <span class=\"nx\">kp<\/span> <span class=\"p\">=<\/span>\r\n  <span class=\"p\">(<\/span><span class=\"k\">import<\/span> <span class=\"s\">'kube-prometheus\/main.libsonnet'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span> \r\n    <span class=\"p\">(<\/span><span class=\"k\">import<\/span> <span class=\"s\">'kube-prometheus\/addons\/managed-cluster.libsonnet'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n  <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">values<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">common<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">namespace<\/span><span class=\"p\">:<\/span> <span class=\"s\">'monitoring'<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"p\">},<\/span>\r\n      <span class=\"nx\">prometheus<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">namespaces<\/span><span class=\"p\">+:<\/span> <span class=\"p\">[<\/span><span class=\"s\">'rook-ceph'<\/span><span class=\"p\">],<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nx\">grafana<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">networkPolicy<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n         <span class=\"c1\">\/\/ \u7701\u7565<\/span>\r\n      <span class=\"p\">},<\/span>\r\n      <span class=\"nx\">deployment<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">spec<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">template<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">spec<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n              <span class=\"nx\">containers<\/span><span class=\"p\">:<\/span> <span class=\"nx\">std<\/span><span class=\"p\">.<\/span><span class=\"nb\">map<\/span><span class=\"p\">(<\/span>\r\n                <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">container<\/span><span class=\"p\">)<\/span>\r\n                  <span class=\"k\">if<\/span> <span class=\"nx\">container<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span> <span class=\"p\">==<\/span> <span class=\"s\">\"grafana\"<\/span> <span class=\"k\">then<\/span>\r\n                    <span class=\"nx\">container<\/span> <span class=\"p\">{<\/span>\r\n                      <span class=\"nx\">readinessProbe<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n                        <span class=\"nx\">httpGet<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n                          <span class=\"nx\">path<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"\/grafana\/api\/health\"<\/span>\r\n                        <span class=\"p\">},<\/span>\r\n                      <span class=\"p\">},<\/span>\r\n                      <span class=\"nx\">volumeMounts<\/span><span class=\"p\">+:<\/span> <span class=\"p\">[<\/span>\r\n                        <span class=\"p\">{<\/span>\r\n                          <span class=\"nx\">mountPath<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"\/grafana-dashboard-definitions\/0\/ceph-cluster\"<\/span><span class=\"p\">,<\/span>\r\n                          <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-cluster\"<\/span><span class=\"p\">,<\/span>\r\n                          <span class=\"nx\">readOnly<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\r\n                        <span class=\"p\">},<\/span>\r\n                        <span class=\"p\">{<\/span>\r\n                          <span class=\"nx\">mountPath<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"\/grafana-dashboard-definitions\/0\/ceph-osd\"<\/span><span class=\"p\">,<\/span>\r\n                          <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-osd\"<\/span><span class=\"p\">,<\/span>\r\n                          <span class=\"nx\">readOnly<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\r\n                        <span class=\"p\">},<\/span>\r\n                        <span class=\"p\">{<\/span>\r\n                          <span class=\"nx\">mountPath<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"\/grafana-dashboard-definitions\/0\/ceph-pool\"<\/span><span class=\"p\">,<\/span>\r\n                          <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-pools\"<\/span><span class=\"p\">,<\/span>\r\n                          <span class=\"nx\">readOnly<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\r\n                        <span class=\"p\">},<\/span>\r\n                      <span class=\"p\">],<\/span>\r\n                    <span class=\"p\">}<\/span>\r\n                  <span class=\"k\">else<\/span>\r\n                    <span class=\"nx\">container<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"k\">super<\/span><span class=\"p\">.<\/span><span class=\"nx\">containers<\/span>\r\n              <span class=\"p\">),<\/span>\r\n              <span class=\"nx\">volumes<\/span><span class=\"p\">+:<\/span> <span class=\"p\">[<\/span>\r\n                <span class=\"p\">{<\/span>\r\n                  <span class=\"nx\">configMap<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                    <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-cluster\"<\/span><span class=\"p\">,<\/span>\r\n                  <span class=\"p\">},<\/span>\r\n                  <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-cluster\"<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"p\">},<\/span>\r\n                <span class=\"p\">{<\/span>\r\n                  <span class=\"nx\">configMap<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                    <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-osd\"<\/span><span class=\"p\">,<\/span>\r\n                  <span class=\"p\">},<\/span>\r\n                  <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-osd\"<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"p\">},<\/span>\r\n                <span class=\"p\">{<\/span>\r\n                  <span class=\"nx\">configMap<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                    <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-pools\"<\/span><span class=\"p\">,<\/span>\r\n                  <span class=\"p\">},<\/span>\r\n                  <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-pools\"<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"p\">},<\/span>\r\n              <span class=\"p\">],<\/span>\r\n            <span class=\"p\">},<\/span>\r\n          <span class=\"p\">},<\/span>\r\n        <span class=\"p\">},<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n  <span class=\"p\">};<\/span>\r\n<\/code><\/pre>\n<p>\u7f16\u8f91 examples\/kustomize.jsonnet \u540e\uff0c\u901a\u8fc7\u6267\u884c make generate \u547d\u4ee4\u66f4\u65b0 manifests\/\uff0c\u7136\u540e\u4f7f\u7528 kube apply \u547d\u4ee4\u8fdb\u884c\u5e94\u7528\u3002<\/p>\n<p>\u65e0\u9700\u91cd\u65b0\u542f\u52a8Pod\uff0c\u53ea\u9700\u7b49\u5f85\u4e00\u6bb5\u65f6\u95f4\uff0c\u7136\u540e\u8bbf\u95eeGrafana\u7684\u4eea\u8868\u76d8\u754c\u9762\uff0c\u5373\u53ef\u663e\u793a\u5df2\u6dfb\u52a0\u7684\u4e09\u4e2a\u9762\u677f\u3002<\/p>\n<h2>\u4fee\u6539localrules.yaml\u6587\u4ef6<\/h2>\n<p>\u4e3a\u4e86\u5c06\u4ee5\u4e0b\u8b66\u544a\u53d8\u4e3a\u65e0\u5bb3\uff0c\u6211\u4fee\u6539\u4e86localrules.yaml\u6587\u4ef6\u4e2d\u7684severity\u5e76\u5c06\u5176\u4fee\u6b63\u4e3ainfo\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">CephNodeNetworkPacketDrops<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">CephNodeNetworkPacketErrors<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">CephNodeInconsistentMTU<\/ul>\n<p>\u4fee\u6539 rook\/deploy\/examples\/monitoring\/localrules.yaml \u5e76\u4f7f\u7528 kube apply \u547d\u4ee4\u5373\u53ef\u7acb\u5373\u751f\u6548\u3002<\/p>\n<h1>\u73b0\u5728\u6574\u4e2a\u4f7f\u7528\u4e2d\u7684 examples\/kustomize.jsonnet \u6587\u4ef6<\/h1>\n<p>\u4ee5\u4e0b\u662f\u6211\u76ee\u524d\u6b63\u5728\u4f7f\u7528\u7684 kustomize.jsonnet \u6587\u4ef6\u4f9b\u60a8\u53c2\u8003\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">local<\/span> <span class=\"nx\">kp<\/span> <span class=\"p\">=<\/span>                         \r\n  <span class=\"p\">(<\/span><span class=\"k\">import<\/span> <span class=\"s\">'kube-prometheus\/main.libsonnet'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>            \r\n  <span class=\"p\">(<\/span><span class=\"k\">import<\/span> <span class=\"s\">'kube-prometheus\/addons\/managed-cluster.libsonnet'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">values<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>                  \r\n      <span class=\"nx\">common<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>                        \r\n        <span class=\"nx\">namespace<\/span><span class=\"p\">:<\/span> <span class=\"s\">'monitoring'<\/span><span class=\"p\">,<\/span>                       \r\n      <span class=\"p\">},<\/span>                                             \r\n      <span class=\"nx\">nodeExporter<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>                              \r\n        <span class=\"nx\">resources<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>     \r\n          <span class=\"nx\">requests<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">cpu<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"500m\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>                                                                                                      \r\n          <span class=\"nx\">limits<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">cpu<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"1000m\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>                   \r\n        <span class=\"p\">},<\/span>                                                                                                                  \r\n      <span class=\"p\">},<\/span>                                                         \r\n      <span class=\"nx\">blackboxExporter<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>                            \r\n        <span class=\"nx\">resources<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>                                                            \r\n          <span class=\"nx\">requests<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">cpu<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"80m\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>\r\n          <span class=\"nx\">limits<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">cpu<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"160m\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>                                             \r\n        <span class=\"p\">},<\/span>                                                             \r\n      <span class=\"p\">},<\/span>                                                                                    \r\n      <span class=\"nx\">kubeStateMetrics<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>                             \r\n        <span class=\"nx\">resources<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>                          \r\n          <span class=\"nx\">requests<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">cpu<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"50m\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>                                             \r\n          <span class=\"nx\">limits<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">cpu<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"300m\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>                           \r\n        <span class=\"p\">},<\/span>                                \r\n        <span class=\"nx\">kubeRbacProxyMain<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">resources<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>        \r\n            <span class=\"nx\">requests<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">cpu<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"120m\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>\r\n            <span class=\"nx\">limits<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">cpu<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"320m\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>      \r\n          <span class=\"p\">},<\/span>                                                     \r\n        <span class=\"p\">},<\/span>                      \r\n        <span class=\"nx\">kubeRbacProxySelf<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">resources<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>  \r\n            <span class=\"nx\">requests<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">cpu<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"120m\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>\r\n            <span class=\"nx\">limits<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">cpu<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"320m\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>\r\n          <span class=\"p\">},<\/span>                                               \r\n        <span class=\"p\">},<\/span>                         \r\n      <span class=\"p\">},<\/span>                                                 \r\n      <span class=\"nx\">grafana<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>                                   \r\n        <span class=\"nx\">resources<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>                    \r\n          <span class=\"nx\">requests<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">cpu<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"300m\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>  \r\n          <span class=\"nx\">limits<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">cpu<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"600m\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>                   \r\n        <span class=\"p\">},<\/span>                                                                                                                                  \r\n        <span class=\"nx\">config<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>                                   \r\n          <span class=\"nx\">sections<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>    \r\n            <span class=\"nx\">server<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">domain<\/span><span class=\"p\">:<\/span> <span class=\"s\">'admin.example.com'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">root_url<\/span><span class=\"p\">:<\/span> <span class=\"s\">'%(protocol)s:\/\/%(domain)s:%(http_port)s\/grafana\/'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">serve_from_sub_path<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span> <span class=\"p\">}<\/span>\r\n<span class=\"p\">,<\/span>                                                       \r\n            <span class=\"s\">\"auth.proxy\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">enabled<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span> <span class=\"nx\">auto_sign_up<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span> <span class=\"nx\">header_name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"X-WEBAUTH-USER\"<\/span><span class=\"p\">,<\/span> <span class=\"nx\">header_property<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"username\"<\/span> <span class=\"p\">},<\/span>\r\n          <span class=\"p\">},<\/span>                                                     \r\n        <span class=\"p\">},<\/span>                                             \r\n      <span class=\"p\">},<\/span>\r\n      <span class=\"nx\">alertmanager<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>                                                                                                           <span class=\"p\">[<\/span><span class=\"mi\">121<\/span><span class=\"err\">\/<\/span><span class=\"mi\">1857<\/span><span class=\"p\">]<\/span>\r\n        <span class=\"nx\">config<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>                                                               \r\n          <span class=\"nx\">global<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>                                                   \r\n            <span class=\"nx\">resolve_timeout<\/span><span class=\"p\">:<\/span> <span class=\"s\">'5m'<\/span><span class=\"p\">,<\/span>                                                          \r\n            <span class=\"nx\">smtp_smarthost<\/span><span class=\"p\">:<\/span> <span class=\"s\">'smarthost1.example.com:25'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">smtp_from<\/span><span class=\"p\">:<\/span> <span class=\"s\">'admin-dev@example.com'<\/span><span class=\"p\">,<\/span>                         \r\n            <span class=\"nx\">smtp_require_tls<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>                                              \r\n          <span class=\"p\">},<\/span>                                                   \r\n          <span class=\"nx\">receivers<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>                    \r\n            <span class=\"p\">{<\/span>                                                                \r\n              <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'Critical'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">email_configs<\/span><span class=\"p\">:<\/span> <span class=\"p\">[{<\/span>\r\n                <span class=\"nx\">to<\/span><span class=\"p\">:<\/span> <span class=\"s\">'admin-dev@example.com'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">require_tls<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>                              \r\n              <span class=\"p\">}],<\/span>               \r\n            <span class=\"p\">},<\/span>                                      \r\n            <span class=\"p\">{<\/span>\r\n              <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'Warning'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">email_configs<\/span><span class=\"p\">:<\/span> <span class=\"p\">[{<\/span>\r\n                <span class=\"nx\">to<\/span><span class=\"p\">:<\/span> <span class=\"s\">'admin-dev@example.com'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">require_tls<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"p\">}],<\/span>\r\n            <span class=\"p\">},<\/span>\r\n            <span class=\"p\">{<\/span> <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'Default'<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>\r\n            <span class=\"p\">{<\/span> <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'Watchdog'<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>\r\n            <span class=\"p\">{<\/span> <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'null'<\/span><span class=\"p\">,<\/span> <span class=\"p\">},<\/span>\r\n          <span class=\"p\">],<\/span>\r\n        <span class=\"p\">},<\/span>\r\n      <span class=\"p\">},<\/span>\r\n      <span class=\"nx\">prometheus<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">namespaces<\/span><span class=\"p\">+:<\/span> <span class=\"p\">[<\/span><span class=\"s\">'rook-ceph'<\/span><span class=\"p\">],<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nx\">grafana<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">networkPolicy<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">spec<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">ingress<\/span><span class=\"p\">+:<\/span> <span class=\"p\">[{<\/span>\r\n            <span class=\"nx\">from<\/span><span class=\"p\">:<\/span> <span class=\"p\">[{<\/span>\r\n              <span class=\"nx\">namespaceSelector<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">matchLabels<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                  <span class=\"s\">'name'<\/span><span class=\"p\">:<\/span> <span class=\"s\">'ingress-nginx'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"p\">},<\/span>\r\n              <span class=\"p\">},<\/span>\r\n            <span class=\"p\">}],<\/span>\r\n            <span class=\"nx\">ports<\/span><span class=\"p\">:<\/span> <span class=\"p\">[{<\/span>\r\n              <span class=\"nx\">port<\/span><span class=\"p\">:<\/span> <span class=\"mi\">3000<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">protocol<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"TCP\"<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"p\">}],<\/span>\r\n          <span class=\"p\">}],<\/span>\r\n        <span class=\"p\">},<\/span>\r\n      <span class=\"p\">},<\/span>\r\n      <span class=\"nx\">deployment<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>                                                                                                               <span class=\"p\">[<\/span><span class=\"mi\">70<\/span><span class=\"err\">\/<\/span><span class=\"mi\">1857<\/span><span class=\"p\">]<\/span>\r\n        <span class=\"nx\">spec<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">template<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">spec<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n              <span class=\"nx\">containers<\/span><span class=\"p\">:<\/span> <span class=\"nx\">std<\/span><span class=\"p\">.<\/span><span class=\"nb\">map<\/span><span class=\"p\">(<\/span>\r\n                <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">container<\/span><span class=\"p\">)<\/span>\r\n                  <span class=\"k\">if<\/span> <span class=\"nx\">container<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span> <span class=\"p\">==<\/span> <span class=\"s\">\"grafana\"<\/span> <span class=\"k\">then<\/span>\r\n                    <span class=\"nx\">container<\/span> <span class=\"p\">{<\/span>\r\n                      <span class=\"nx\">readinessProbe<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n                        <span class=\"nx\">httpGet<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n                          <span class=\"nx\">path<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"\/grafana\/api\/health\"<\/span>\r\n                        <span class=\"p\">},<\/span>\r\n                      <span class=\"p\">},<\/span>\r\n                      <span class=\"nx\">volumeMounts<\/span><span class=\"p\">+:<\/span> <span class=\"p\">[<\/span>\r\n                        <span class=\"p\">{<\/span>\r\n                          <span class=\"nx\">mountPath<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"\/grafana-dashboard-definitions\/0\/ceph-cluster\"<\/span><span class=\"p\">,<\/span>\r\n                          <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-cluster\"<\/span><span class=\"p\">,<\/span>\r\n                          <span class=\"nx\">readOnly<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\r\n                        <span class=\"p\">},<\/span>\r\n                        <span class=\"p\">{<\/span>\r\n                          <span class=\"nx\">mountPath<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"\/grafana-dashboard-definitions\/0\/ceph-osd\"<\/span><span class=\"p\">,<\/span>\r\n                          <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-osd\"<\/span><span class=\"p\">,<\/span>\r\n                          <span class=\"nx\">readOnly<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\r\n                        <span class=\"p\">},<\/span>\r\n                        <span class=\"p\">{<\/span>\r\n                          <span class=\"nx\">mountPath<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"\/grafana-dashboard-definitions\/0\/ceph-pool\"<\/span><span class=\"p\">,<\/span>\r\n                          <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-pools\"<\/span><span class=\"p\">,<\/span>\r\n                          <span class=\"nx\">readOnly<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\r\n                        <span class=\"p\">},<\/span>\r\n                      <span class=\"p\">],<\/span>\r\n                    <span class=\"p\">}<\/span>\r\n                  <span class=\"k\">else<\/span>\r\n                    <span class=\"nx\">container<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"k\">super<\/span><span class=\"p\">.<\/span><span class=\"nx\">containers<\/span>\r\n              <span class=\"p\">),<\/span>\r\n              <span class=\"nx\">volumes<\/span><span class=\"p\">+:<\/span> <span class=\"p\">[<\/span>\r\n                <span class=\"p\">{<\/span>\r\n                  <span class=\"nx\">configMap<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                    <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-cluster\"<\/span><span class=\"p\">,<\/span>\r\n                  <span class=\"p\">},<\/span>\r\n                  <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-cluster\"<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"p\">},<\/span>\r\n                <span class=\"p\">{<\/span>\r\n                  <span class=\"nx\">configMap<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                    <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-osd\"<\/span><span class=\"p\">,<\/span>\r\n                  <span class=\"p\">},<\/span>\r\n                  <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-osd\"<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"p\">},<\/span>\r\n                <span class=\"p\">{<\/span>\r\n                  <span class=\"nx\">configMap<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                    <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-pools\"<\/span><span class=\"p\">,<\/span>\r\n                  <span class=\"p\">},<\/span>\r\n                  <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"grafana-dashboard-ceph-pools\"<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"p\">},<\/span>\r\n              <span class=\"p\">],<\/span>\r\n            <span class=\"p\">},<\/span>\r\n          <span class=\"p\">},<\/span>\r\n        <span class=\"p\">},<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nx\">prometheus<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>                                                                                                                 <span class=\"p\">[<\/span><span class=\"mi\">10<\/span><span class=\"err\">\/<\/span><span class=\"mi\">1857<\/span><span class=\"p\">]<\/span>\r\n      <span class=\"nx\">networkPolicy<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">spec<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">ingress<\/span><span class=\"p\">+:<\/span> <span class=\"p\">[{<\/span>\r\n            <span class=\"nx\">from<\/span><span class=\"p\">:<\/span> <span class=\"p\">[{<\/span>\r\n              <span class=\"nx\">podSelector<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">matchLabels<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                  <span class=\"s\">'app.kubernetes.io\/name'<\/span><span class=\"p\">:<\/span> <span class=\"s\">'prometheus-adapter'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"p\">},<\/span>\r\n              <span class=\"p\">},<\/span>\r\n            <span class=\"p\">}],<\/span>\r\n            <span class=\"nx\">ports<\/span><span class=\"p\">:<\/span> <span class=\"p\">[{<\/span>\r\n              <span class=\"nx\">port<\/span><span class=\"p\">:<\/span> <span class=\"mi\">9090<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">protocol<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"TCP\"<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"p\">}],<\/span>\r\n          <span class=\"p\">}],<\/span>\r\n        <span class=\"p\">},<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nx\">kubernetesControlPlane<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">prometheusRule<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">spec<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">groups<\/span><span class=\"p\">:<\/span> <span class=\"nx\">std<\/span><span class=\"p\">.<\/span><span class=\"nb\">map<\/span><span class=\"p\">(<\/span>\r\n            <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">group<\/span><span class=\"p\">)<\/span>\r\n              <span class=\"k\">if<\/span> <span class=\"nx\">group<\/span><span class=\"p\">.<\/span><span class=\"nx\">name<\/span> <span class=\"p\">==<\/span> <span class=\"s\">'kubernetes-storage'<\/span> <span class=\"k\">then<\/span>\r\n                <span class=\"nx\">group<\/span> <span class=\"p\">{<\/span>\r\n                  <span class=\"nx\">rules<\/span><span class=\"p\">:<\/span> <span class=\"nx\">std<\/span><span class=\"p\">.<\/span><span class=\"nb\">map<\/span><span class=\"p\">(<\/span>\r\n                    <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">rule<\/span><span class=\"p\">)<\/span>\r\n                      <span class=\"k\">if<\/span> <span class=\"nx\">rule<\/span><span class=\"p\">.<\/span><span class=\"nx\">alert<\/span> <span class=\"p\">==<\/span> <span class=\"s\">'KubePersistentVolumeInodesFillingUp'<\/span> <span class=\"k\">then<\/span>\r\n                        <span class=\"nx\">rule<\/span> <span class=\"p\">{<\/span>\r\n                          <span class=\"nx\">expr<\/span><span class=\"p\">+:<\/span> <span class=\"s\">|||\r\n                            unless on(namespace, persistentvolumeclaim)\r\n                            kube_persistentvolumeclaim_info{storageclass=\"rook-cephfs\"} == 1\r\n                          |||<\/span>\r\n                       <span class=\"p\">}<\/span>\r\n                      <span class=\"k\">else<\/span>\r\n                        <span class=\"nx\">rule<\/span><span class=\"p\">,<\/span>\r\n                    <span class=\"k\">super<\/span><span class=\"p\">.<\/span><span class=\"nx\">rules<\/span>\r\n                  <span class=\"p\">),<\/span>\r\n                <span class=\"p\">}<\/span>\r\n              <span class=\"k\">else<\/span>\r\n                <span class=\"nx\">group<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"k\">super<\/span><span class=\"p\">.<\/span><span class=\"nx\">groups<\/span>\r\n          <span class=\"p\">),<\/span>\r\n        <span class=\"p\">},<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n  <span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">local<\/span> <span class=\"nx\">manifests<\/span> <span class=\"p\">=<\/span>\r\n  <span class=\"p\">{<\/span>\r\n    <span class=\"p\">[<\/span><span class=\"s\">'setup\/'<\/span> <span class=\"p\">+<\/span> <span class=\"nx\">resource<\/span><span class=\"p\">]:<\/span> <span class=\"nx\">kp<\/span><span class=\"p\">[<\/span><span class=\"nx\">component<\/span><span class=\"p\">][<\/span><span class=\"nx\">resource<\/span><span class=\"p\">]<\/span>\r\n    <span class=\"k\">for<\/span> <span class=\"nx\">component<\/span> <span class=\"k\">in<\/span> <span class=\"nx\">std<\/span><span class=\"p\">.<\/span><span class=\"nb\">objectFields<\/span><span class=\"p\">(<\/span><span class=\"nx\">kp<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"k\">for<\/span> <span class=\"nx\">resource<\/span> <span class=\"k\">in<\/span> <span class=\"nx\">std<\/span><span class=\"p\">.<\/span><span class=\"nb\">filter<\/span><span class=\"p\">(<\/span>\r\n      <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">resource<\/span><span class=\"p\">)<\/span>\r\n        <span class=\"nx\">kp<\/span><span class=\"p\">[<\/span><span class=\"nx\">component<\/span><span class=\"p\">][<\/span><span class=\"nx\">resource<\/span><span class=\"p\">].<\/span><span class=\"nx\">kind<\/span> <span class=\"p\">==<\/span> <span class=\"s\">'CustomResourceDefinition'<\/span> <span class=\"err\">||<\/span> <span class=\"nx\">kp<\/span><span class=\"p\">[<\/span><span class=\"nx\">component<\/span><span class=\"p\">][<\/span><span class=\"nx\">resource<\/span><span class=\"p\">].<\/span><span class=\"nx\">kind<\/span> <span class=\"p\">==<\/span> <span class=\"s\">'Namespace'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">std<\/span><span class=\"p\">.<\/span><span class=\"nb\">objectFields<\/span><span class=\"p\">(<\/span><span class=\"nx\">kp<\/span><span class=\"p\">[<\/span><span class=\"nx\">compo<\/span>\r\n<span class=\"nx\">nent<\/span><span class=\"p\">])<\/span>\r\n    <span class=\"p\">)<\/span>\r\n  <span class=\"p\">}<\/span> <span class=\"p\">+<\/span>\r\n  <span class=\"p\">{<\/span>\r\n    <span class=\"p\">[<\/span><span class=\"nx\">component<\/span> <span class=\"p\">+<\/span> <span class=\"s\">'-'<\/span> <span class=\"p\">+<\/span> <span class=\"nx\">resource<\/span><span class=\"p\">]:<\/span> <span class=\"nx\">kp<\/span><span class=\"p\">[<\/span><span class=\"nx\">component<\/span><span class=\"p\">][<\/span><span class=\"nx\">resource<\/span><span class=\"p\">]<\/span>\r\n    <span class=\"k\">for<\/span> <span class=\"nx\">component<\/span> <span class=\"k\">in<\/span> <span class=\"nx\">std<\/span><span class=\"p\">.<\/span><span class=\"nb\">objectFields<\/span><span class=\"p\">(<\/span><span class=\"nx\">kp<\/span><span class=\"p\">)<\/span>\r\n    <span class=\"k\">for<\/span> <span class=\"nx\">resource<\/span> <span class=\"k\">in<\/span> <span class=\"nx\">std<\/span><span class=\"p\">.<\/span><span class=\"nb\">filter<\/span><span class=\"p\">(<\/span>\r\n      <span class=\"kd\">function<\/span><span class=\"p\">(<\/span><span class=\"nx\">resource<\/span><span class=\"p\">)<\/span>\r\n        <span class=\"nx\">kp<\/span><span class=\"p\">[<\/span><span class=\"nx\">component<\/span><span class=\"p\">][<\/span><span class=\"nx\">resource<\/span><span class=\"p\">].<\/span><span class=\"nx\">kind<\/span> <span class=\"err\">!<\/span><span class=\"p\">=<\/span> <span class=\"s\">'CustomResourceDefinition'<\/span> <span class=\"err\">&amp;&amp;<\/span> <span class=\"nx\">kp<\/span><span class=\"p\">[<\/span><span class=\"nx\">component<\/span><span class=\"p\">][<\/span><span class=\"nx\">resource<\/span><span class=\"p\">].<\/span><span class=\"nx\">kind<\/span> <span class=\"err\">!<\/span><span class=\"p\">=<\/span> <span class=\"s\">'Namespace'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">std<\/span><span class=\"p\">.<\/span><span class=\"nb\">objectFields<\/span><span class=\"p\">(<\/span><span class=\"nx\">kp<\/span><span class=\"p\">[<\/span><span class=\"nx\">compo<\/span>\r\n<span class=\"nx\">nent<\/span><span class=\"p\">])<\/span>\r\n    <span class=\"p\">)<\/span>\r\n  <span class=\"p\">};<\/span>\r\n\r\n<span class=\"k\">local<\/span> <span class=\"nx\">kustomizationResourceFile<\/span><span class=\"p\">(<\/span><span class=\"nx\">name<\/span><span class=\"p\">)<\/span> <span class=\"p\">=<\/span> <span class=\"s\">'.\/manifests\/'<\/span> <span class=\"p\">+<\/span> <span class=\"nx\">name<\/span> <span class=\"p\">+<\/span> <span class=\"s\">'.yaml'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">local<\/span> <span class=\"nx\">kustomization<\/span> <span class=\"p\">=<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">apiVersion<\/span><span class=\"p\">:<\/span> <span class=\"s\">'kustomize.config.k8s.io\/v1beta1'<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"nx\">kind<\/span><span class=\"p\">:<\/span> <span class=\"s\">'Kustomization'<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"nx\">resources<\/span><span class=\"p\">:<\/span> <span class=\"nx\">std<\/span><span class=\"p\">.<\/span><span class=\"nb\">map<\/span><span class=\"p\">(<\/span><span class=\"nx\">kustomizationResourceFile<\/span><span class=\"p\">,<\/span> <span class=\"nx\">std<\/span><span class=\"p\">.<\/span><span class=\"nb\">objectFields<\/span><span class=\"p\">(<\/span><span class=\"nx\">manifests<\/span><span class=\"p\">)),<\/span>\r\n<span class=\"p\">};<\/span>\r\n\r\n<span class=\"nx\">manifests<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"s\">'..\/kustomization'<\/span><span class=\"p\">:<\/span> <span class=\"nx\">kustomization<\/span><span class=\"p\">,<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u56e0\u4e3a\u6211\u4eec\u8fd8\u6ca1\u6709\u89e3\u91carequire_tls\uff1afalse\u7684\u8bbe\u7f6e\uff0c\u4f46\u662f\u5373\u4f7f\u6ca1\u6709\u8fd9\u4e2a\u8bbe\u7f6e\uff0c\u60a8\u4e5f\u53ef\u4ee5\u8fde\u63a5\u5230smarthost\u768425\u53f7\u7aef\u53e3\u5e76\u53d1\u9001\u7535\u5b50\u90ae\u4ef6\u800c\u65e0\u9700\u8eab\u4efd\u9a8c\u8bc1\uff0c\u6240\u4ee5\u8fd9\u662f\u4e0d\u5fc5\u8981\u7684\u3002<\/p>\n<h1>\u6700\u540e<\/h1>\n<p>\u4f7f\u7528jsonnet-builder\u5bf9kube-prometheus\u8fdb\u884c\u5b9a\u5236\u662f\u6211\u7b2c\u4e00\u6b21\u5c1d\u8bd5\uff0c\u4e0e\u540e\u6765\u8fdb\u884c\u66f4\u6539\u76f8\u6bd4\u786e\u5b9e\u975e\u5e38\u56f0\u96be\u3002\u6211\u4ecd\u7136\u5bf9\u9009\u62e9\u7684\u65b9\u6cd5\u662f\u5426\u5408\u9002\u611f\u5230\u56f0\u60d1\u3002<\/p>\n<p>\u8003\u8651\u5230\u4e4b\u540e\u53d1\u9001\u7684\u8b66\u62a5\u90ae\u4ef6\u4ee5\u53ca\u5220\u9664KubeSchedulerDown\u8b66\u62a5\uff0c\u6211\u8ba4\u4e3a\u4f7f\u7528jsonnet\u8fdb\u884c\u5b9a\u5236\u662f\u5408\u9002\u7684\u65b9\u6cd5\u3002<\/p>\n<p>\u5c3d\u7ba1\u6211\u8ba4\u4e3ajsonnet\u662f\u4e00\u79cd\u65b9\u4fbf\u7684\u5de5\u5177\uff0c\u4f46\u4e0e\u5176\u56fa\u5b88\u4e8e\u8fd9\u9879\u6280\u672f\u5e76\u4f7f\u7528jsonnet\u8fdb\u884c\u6240\u6709\u66f4\u6539\uff0c\u4e0d\u5982\u7075\u6d3b\u9009\u62e9\u53d8\u66f4\u65b9\u5f0f\u66f4\u597d\u3002<\/p>\n<p>\u6211\u8fd8\u8bb0\u5f97\u4ee5\u524d\uff0c\u5728\u9009\u62e9Linux\u7684RHEL\u7cfb\u53d1\u884c\u7248\u65f6\uff0c\u8bd5\u56fe\u521b\u5efa\u548c\u6ce8\u518c\u81ea\u5df1\u5236\u4f5c\u7684\u5e94\u7528\u7a0b\u5e8f\u7684RPM\u65f6\u9047\u5230\u4e86\u5f88\u5927\u7684\u56f0\u96be\u3002\u5373\u4f7f\u6280\u672f\u672c\u8eab\u5f88\u597d\uff0c\u4f46\u6211\u4eec\u4e5f\u9700\u8981\u8003\u8651\u5728\u5176\u4e2d\u6295\u5165\u7684\u65f6\u95f4\u4e0e\u5176\u76ee\u7684\u548c\u5185\u5bb9\u4e4b\u95f4\u7684\u5e73\u8861\u3002<\/p>\n<p>\u6211\u8ba4\u4e3ajsonnet\u662f\u4e00\u9879\u503c\u5f97\u5b66\u4e60\u7684\u6280\u672f\uff0c\u4f46\u611f\u89c9\u5b83\u6709\u4e00\u79cd\u50cfm4\u5b8f\u4e00\u6837\u96be\u4ee5\u5e94\u4ed8\u7684\u6c1b\u56f4\u3002<\/p>\n<p>\u8981\u719f\u7ec3\u4f7f\u7528\uff0c\u9700\u8981\u9605\u8bfb https:\/\/jsonnet.org\/ \u7684\u6587\u6863\uff0c\u5e76\u4e14\u9700\u8981\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u7406\u89e3\u5176\u5185\u90e8\u5904\u7406\u7684\u65b9\u6cd5\u3002<\/p>\n<p>\u4ee5\u4e0a &#8211; all the above<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 kube-prometheus\u4ee5\u4fbf\u6377\u7684Operator\u5f62\u5f0f\u63d0\u4f9b\uff0c\u7528\u4e8e\u5728k8s\u96c6\u7fa4\u4e2d\u8fd0\u884cprometheu [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-43309","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5f53\u4f7f\u7528jsonnet-builder\u81ea\u5b9a\u4e49kube-prometheus\u65f6\u7684\u5904\u7406\u5907\u5fd8\u5f55 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5f53\u4f7f\u7528jsonnet-builder\u81ea\u5b9a\u4e49kube-prometheus\u65f6\u7684\u5904\u7406\u5907\u5fd8\u5f55\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5f53\u4f7f\u7528jsonnet-builder\u81ea\u5b9a\u4e49kube-prometheus\u65f6\u7684\u5904\u7406\u5907\u5fd8\u5f55\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 kube-prometheus\u4ee5\u4fbf\u6377\u7684Operator\u5f62\u5f0f\u63d0\u4f9b\uff0c\u7528\u4e8e\u5728k8s\u96c6\u7fa4\u4e2d\u8fd0\u884cprometheu [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5f53\u4f7f\u7528jsonnet-builder\u81ea\u5b9a\u4e49kube-prometheus\u65f6\u7684\u5904\u7406\u5907\u5fd8\u5f55\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-13T16:11:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-28T16:37:53+00:00\" \/>\n<meta name=\"author\" content=\"\u96c5, \u609f\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u96c5, \u609f\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e4%bd%bf%e7%94%a8jsonnet-builder%e8%87%aa%e5%ae%9a%e4%b9%89kube-prometheus%e6%97%b6%e7%9a%84%e5%a4%84%e7%90%86%e5%a4%87%e5%bf%98%e5%bd%95%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e4%bd%bf%e7%94%a8jsonnet-builder%e8%87%aa%e5%ae%9a%e4%b9%89kube-prometheus%e6%97%b6%e7%9a%84%e5%a4%84%e7%90%86%e5%a4%87%e5%bf%98%e5%bd%95%e3%80%82\/\",\"name\":\"\u5f53\u4f7f\u7528jsonnet-builder\u81ea\u5b9a\u4e49kube-prometheus\u65f6\u7684\u5904\u7406\u5907\u5fd8\u5f55 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-04-13T16:11:28+00:00\",\"dateModified\":\"2024-04-28T16:37:53+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e4%bd%bf%e7%94%a8jsonnet-builder%e8%87%aa%e5%ae%9a%e4%b9%89kube-prometheus%e6%97%b6%e7%9a%84%e5%a4%84%e7%90%86%e5%a4%87%e5%bf%98%e5%bd%95%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e4%bd%bf%e7%94%a8jsonnet-builder%e8%87%aa%e5%ae%9a%e4%b9%89kube-prometheus%e6%97%b6%e7%9a%84%e5%a4%84%e7%90%86%e5%a4%87%e5%bf%98%e5%bd%95%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e4%bd%bf%e7%94%a8jsonnet-builder%e8%87%aa%e5%ae%9a%e4%b9%89kube-prometheus%e6%97%b6%e7%9a%84%e5%a4%84%e7%90%86%e5%a4%87%e5%bf%98%e5%bd%95%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5f53\u4f7f\u7528jsonnet-builder\u81ea\u5b9a\u4e49kube-prometheus\u65f6\u7684\u5904\u7406\u5907\u5fd8\u5f55\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6\",\"name\":\"\u96c5, \u609f\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g\",\"caption\":\"\u96c5, \u609f\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yawu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e4%bd%bf%e7%94%a8jsonnet-builder%e8%87%aa%e5%ae%9a%e4%b9%89kube-prometheus%e6%97%b6%e7%9a%84%e5%a4%84%e7%90%86%e5%a4%87%e5%bf%98%e5%bd%95%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5f53\u4f7f\u7528jsonnet-builder\u81ea\u5b9a\u4e49kube-prometheus\u65f6\u7684\u5904\u7406\u5907\u5fd8\u5f55 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5f53\u4f7f\u7528jsonnet-builder\u81ea\u5b9a\u4e49kube-prometheus\u65f6\u7684\u5904\u7406\u5907\u5fd8\u5f55\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5f53\u4f7f\u7528jsonnet-builder\u81ea\u5b9a\u4e49kube-prometheus\u65f6\u7684\u5904\u7406\u5907\u5fd8\u5f55","og_description":"\u9996\u5148 kube-prometheus\u4ee5\u4fbf\u6377\u7684Operator\u5f62\u5f0f\u63d0\u4f9b\uff0c\u7528\u4e8e\u5728k8s\u96c6\u7fa4\u4e2d\u8fd0\u884cprometheu [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5f53\u4f7f\u7528jsonnet-builder\u81ea\u5b9a\u4e49kube-prometheus\u65f6\u7684\u5904\u7406\u5907\u5fd8\u5f55\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-04-13T16:11:28+00:00","article_modified_time":"2024-04-28T16:37:53+00:00","author":"\u96c5, \u609f","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u96c5, \u609f","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"13 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e4%bd%bf%e7%94%a8jsonnet-builder%e8%87%aa%e5%ae%9a%e4%b9%89kube-prometheus%e6%97%b6%e7%9a%84%e5%a4%84%e7%90%86%e5%a4%87%e5%bf%98%e5%bd%95%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e4%bd%bf%e7%94%a8jsonnet-builder%e8%87%aa%e5%ae%9a%e4%b9%89kube-prometheus%e6%97%b6%e7%9a%84%e5%a4%84%e7%90%86%e5%a4%87%e5%bf%98%e5%bd%95%e3%80%82\/","name":"\u5f53\u4f7f\u7528jsonnet-builder\u81ea\u5b9a\u4e49kube-prometheus\u65f6\u7684\u5904\u7406\u5907\u5fd8\u5f55 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-04-13T16:11:28+00:00","dateModified":"2024-04-28T16:37:53+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e4%bd%bf%e7%94%a8jsonnet-builder%e8%87%aa%e5%ae%9a%e4%b9%89kube-prometheus%e6%97%b6%e7%9a%84%e5%a4%84%e7%90%86%e5%a4%87%e5%bf%98%e5%bd%95%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e4%bd%bf%e7%94%a8jsonnet-builder%e8%87%aa%e5%ae%9a%e4%b9%89kube-prometheus%e6%97%b6%e7%9a%84%e5%a4%84%e7%90%86%e5%a4%87%e5%bf%98%e5%bd%95%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e4%bd%bf%e7%94%a8jsonnet-builder%e8%87%aa%e5%ae%9a%e4%b9%89kube-prometheus%e6%97%b6%e7%9a%84%e5%a4%84%e7%90%86%e5%a4%87%e5%bf%98%e5%bd%95%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5f53\u4f7f\u7528jsonnet-builder\u81ea\u5b9a\u4e49kube-prometheus\u65f6\u7684\u5904\u7406\u5907\u5fd8\u5f55"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/f044a4b7fa4ee2701702942002419ca6","name":"\u96c5, \u609f","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e71a913e914f1aad1efc391f92084294bac54bc782acd289638580134cf667a6?s=96&d=mm&r=g","caption":"\u96c5, \u609f"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yawu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e4%bd%bf%e7%94%a8jsonnet-builder%e8%87%aa%e5%ae%9a%e4%b9%89kube-prometheus%e6%97%b6%e7%9a%84%e5%a4%84%e7%90%86%e5%a4%87%e5%bf%98%e5%bd%95%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/43309","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=43309"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/43309\/revisions"}],"predecessor-version":[{"id":68864,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/43309\/revisions\/68864"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=43309"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=43309"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=43309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}