{"id":34310,"date":"2023-07-10T01:56:15","date_gmt":"2023-06-28T22:48:44","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8kubernetes%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8eredis%e7%9a%84php%e7%95%99%e8%a8%80%e6%9d%bf%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/"},"modified":"2024-04-30T12:47:32","modified_gmt":"2024-04-30T04:47:32","slug":"%e4%bd%bf%e7%94%a8kubernetes%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8eredis%e7%9a%84php%e7%95%99%e8%a8%80%e6%9d%bf%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8kubernetes%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8eredis%e7%9a%84php%e7%95%99%e8%a8%80%e6%9d%bf%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/","title":{"rendered":"\u4f7f\u7528Kubernetes\u90e8\u7f72\u57fa\u4e8eRedis\u7684PHP\u7559\u8a00\u677f\u5e94\u7528\u7a0b\u5e8f"},"content":{"rendered":"<h1>\u9996\u5148<\/h1>\n<p>\u6211\u60f3\u5c1d\u8bd5\u5728Kubernetes\u7684\u624b\u518c\u4e2d\u7684\u6559\u7a0b\u90e8\u5206\u4e2d\u505a\u4ee5\u4e0b\u7684\u5b9e\u9645\u4f8b\u5b50\u3002<\/p>\n<p>\u4f8b: \u90e8\u7f72\u4f7f\u7528Redis\u7684PHP\u7559\u8a00\u677f\u5e94\u7528\u7a0b\u5e8f<br \/>\n\u4f8b: \u5728\u4f7f\u7528PHP \/ Redis\u7684\u7559\u8a00\u677f\u793a\u4f8b\u4e2d\u6dfb\u52a0\u65e5\u5fd7\u8bb0\u5f55\u548c\u5ea6\u91cf\u6307\u6807<\/p>\n<h1>\u5ba2\u4eba\u7559\u8a00\u7c3f\u5e94\u7528\u7a0b\u5e8f\u7684\u67b6\u6784<\/h1>\n<blockquote><p>\u5728\u672c\u6559\u7a0b\u4e2d\uff0c\u6211\u4eec\u5c06\u4ecb\u7ecd\u4f7f\u7528Kubernetes\u548cDocker\u6784\u5efa\u548c\u90e8\u7f72\u7b80\u5355\u591a\u5c42\u6b21Web\u5e94\u7528\u7a0b\u5e8f\u7684\u65b9\u6cd5\u3002\u8be5\u793a\u4f8b\u7531\u4ee5\u4e0b\u7ec4\u4ef6\u7ec4\u6210\uff1a<\/p>\n<p>&#8211; \u5355\u4e2aRedis\u4e3b\u670d\u52a1\u5668\u7528\u4e8e\u4fdd\u5b58\u7559\u8a00\u677f\u6761\u76ee<br \/>\n&#8211; \u591a\u4e2a\u590d\u5236\u7684Redis\u5b9e\u4f8b\u7528\u4e8e\u6570\u636e\u8bfb\u53d6\u5206\u53d1<br \/>\n&#8211; \u591a\u4e2aWeb\u524d\u7aef\u5b9e\u4f8b<\/p><\/blockquote>\n<p>\u4f46\u662f\u5982\u679c\u5c06\u8981\u6784\u5efa\u7684\u7559\u8a00\u7c3f\u5e94\u7528\u7a0b\u5e8f\u7684\u67b6\u6784\u7ed8\u5236\u6210\u56fe\u8868\uff0c\u5219\u4f1a\u5982\u4e0b\u6240\u793a\uff08\u6839\u636e\u6211\u7684\u7406\u89e3\uff09\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d1c6f37434c4406c10c67\/6-0.png\" alt=\"image.png\" \/><\/div>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">redis master<\/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\">redis slave<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">frontend<\/ul>\n<p>\u6309\u7167\u8fd9\u4e2a\u987a\u5e8f\u8fdb\u884c\u5236\u4f5c\u3002<\/p>\n<h2>Redis\u4e3b\u8282\u70b9\u90e8\u7f72<\/h2>\n<h3>\u8c46\u835a<\/h3>\n<p>\u5728\u5ba2\u7559\u8a00\u7c3f\u5e94\u7528\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528Redis\u6765\u5b58\u50a8\u6570\u636e\u3002\u5ba2\u7559\u8a00\u4f1a\u88ab\u5199\u5165\u5230Redis\u7684\u4e3b\u5b9e\u4f8b\u4e2d\u3002<\/p>\n<p>\u6211\u5c06\u5e94\u7528\u4ee5\u4e0b\u6e05\u5355\u6587\u4ef6\u3002\u4f7f\u7528Deployment\u5728\u96c6\u7fa4\u4e2d\u90e8\u7f72\u4e00\u4e2a\u526f\u672c\u6570\u4e3a1\u7684Pod\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">apps\/v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Deployment<\/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\">redis-master<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis<\/span>\r\n      <span class=\"na\">role<\/span><span class=\"pi\">:<\/span> <span class=\"s\">master<\/span>\r\n      <span class=\"na\">tier<\/span><span class=\"pi\">:<\/span> <span class=\"s\">backend<\/span>\r\n  <span class=\"na\">replicas<\/span><span class=\"pi\">:<\/span> <span class=\"m\">1<\/span>\r\n  <span class=\"na\">template<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis<\/span>\r\n        <span class=\"na\">role<\/span><span class=\"pi\">:<\/span> <span class=\"s\">master<\/span>\r\n        <span class=\"na\">tier<\/span><span class=\"pi\">:<\/span> <span class=\"s\">backend<\/span>\r\n    <span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">containers<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">master<\/span>\r\n        <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">k8s.gcr.io\/redis:e2e<\/span>\r\n        <span class=\"na\">resources<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">requests<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">cpu<\/span><span class=\"pi\">:<\/span> <span class=\"s\">100m<\/span>\r\n            <span class=\"na\">memory<\/span><span class=\"pi\">:<\/span> <span class=\"s\">100Mi<\/span>\r\n        <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">containerPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">6379<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>$ kubectl apply -f redis-master-deployment.yaml\r\ndeployment.apps\/redis-master created\r\n$ kubectl get pod\r\nNAME                            READY   STATUS    RESTARTS   AGE\r\nredis-master-6b54579d85-l8hsn   1\/1     Running   0          80s\r\n<\/code><\/pre>\n<p>\u5f53\u68c0\u67e5\u65e5\u5fd7\u65f6\uff0c\u53d1\u73b0Redis\u7684logo\u4ee5ASCII\u827a\u672f\u7684\u5f62\u5f0f\u5448\u73b0\u51fa\u6765\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl logs redis-master-6b54579d85-l8hsn\r\n                _._\r\n           _.-``__ ''-._\r\n      _.-``    `.  `_.  ''-._           Redis 2.8.19 (00000000\/0) 64 bit\r\n  .-`` .-```.  ```\\\/    _.,_ ''-._\r\n (    '      ,       .-`  | `,    )     Running in stand alone mode\r\n |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379\r\n |    `-._   `._    \/     _.-'    |     PID: 1\r\n  `-._    `-._  `-.\/  _.-'    _.-'\r\n |`-._`-._    `-.__.-'    _.-'_.-'|\r\n |    `-._`-._        _.-'_.-'    |           http:\/\/redis.io\r\n  `-._    `-._`-.__.-'_.-'    _.-'\r\n |`-._`-._    `-.__.-'    _.-'_.-'|\r\n |    `-._`-._        _.-'_.-'    |\r\n  `-._    `-._`-.__.-'_.-'    _.-'\r\n      `-._    `-.__.-'    _.-'\r\n          `-._        _.-'\r\n              `-.__.-'\r\n\r\n[1] 23 Aug 12:56:53.934 # Server started, Redis version 2.8.19\r\n[1] 23 Aug 12:56:53.935 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never &gt; \/sys\/kernel\/mm\/transparent_hugepage\/enabled' as root, and add it to your \/etc\/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.\r\n[1] 23 Aug 12:56:53.935 # WARNING: The TCP backlog setting of 511 cannot be enforced because \/proc\/sys\/net\/core\/somaxconn is set to the lower value of 128.\r\n[1] 23 Aug 12:56:53.935 * The server is now ready to accept connections on port 6379\r\n<\/code><\/pre>\n<h3>\u670d\u52a1<\/h3>\n<p>\u4e3a\u4e86\u63a7\u5236\u4e0eRedis\u4e3b\u8282\u70b9\u7684\u901a\u4fe1\uff0c\u9700\u8981\u4f7f\u7528Service\u3002\u5728\u8fd9\u91cc\uff0c\u901a\u4fe1\u4ec5\u9650\u4e8e\u96c6\u7fa4\u5185\u90e8\uff0c\u56e0\u6b64\u5c06\u90e8\u7f72ClusterIP\u3002<\/p>\n<pre class=\"post-pre\"><code><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\">redis-master<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis<\/span>\r\n    <span class=\"na\">role<\/span><span class=\"pi\">:<\/span> <span class=\"s\">master<\/span>\r\n    <span class=\"na\">tier<\/span><span class=\"pi\">:<\/span> <span class=\"s\">backend<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/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\">6379<\/span>\r\n    <span class=\"na\">targetPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">6379<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis<\/span>\r\n    <span class=\"na\">role<\/span><span class=\"pi\">:<\/span> <span class=\"s\">master<\/span>\r\n    <span class=\"na\">tier<\/span><span class=\"pi\">:<\/span> <span class=\"s\">backend<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>$ kubectl apply -f redis-master-service.yaml\r\nservice\/redis-master created\r\n$ kubectl get svc\r\nNAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE\r\nkubernetes     ClusterIP   10.96.0.1       &lt;none&gt;        443\/TCP    31d\r\nredis-master   ClusterIP   10.101.227.29   &lt;none&gt;        6379\/TCP   10s\r\n<\/code><\/pre>\n<h2>\u90e8\u7f72Redis\u4ece\u8282\u70b9<\/h2>\n<h3>\u64ad\u5ba2<\/h3>\n<p>\u5728\u8bbf\u5ba2\u7559\u8a00\u672c\u5e94\u7528\u7a0b\u5e8f\u4e2d\uff0c\u4ece\u4ece\u5c5e\u5b9e\u4f8b\u8bfb\u53d6\u6570\u636e\u3002\u867d\u7136\u6211\u4e0d\u4e86\u89e3Redis\uff0c\u4f46\u6570\u636e\u5e94\u8be5\u4ece\u4e3b\u670d\u52a1\u5668\u590d\u5236\u5230\u4ece\u5c5e\u670d\u52a1\u5668\u3002\u80af\u5b9a\u662f\u8fd9\u6837\u7684\u3002<\/p>\n<p>\u4f7f\u7528\u90e8\u7f72\uff08Deployment\uff09\u6765\u90e8\u7f722\u4e2a\u526f\u672c\uff08Replica\uff09\u7684Pod\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">apps\/v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Deployment<\/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\">redis-slave<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis<\/span>\r\n      <span class=\"na\">role<\/span><span class=\"pi\">:<\/span> <span class=\"s\">slave<\/span>\r\n      <span class=\"na\">tier<\/span><span class=\"pi\">:<\/span> <span class=\"s\">backend<\/span>\r\n  <span class=\"na\">replicas<\/span><span class=\"pi\">:<\/span> <span class=\"m\">2<\/span>\r\n  <span class=\"na\">template<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis<\/span>\r\n        <span class=\"na\">role<\/span><span class=\"pi\">:<\/span> <span class=\"s\">slave<\/span>\r\n        <span class=\"na\">tier<\/span><span class=\"pi\">:<\/span> <span class=\"s\">backend<\/span>\r\n    <span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">containers<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">slave<\/span>\r\n        <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">gcr.io\/google_samples\/gb-redisslave:v3<\/span>\r\n        <span class=\"na\">resources<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">requests<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">cpu<\/span><span class=\"pi\">:<\/span> <span class=\"s\">100m<\/span>\r\n            <span class=\"na\">memory<\/span><span class=\"pi\">:<\/span> <span class=\"s\">100Mi<\/span>\r\n        <span class=\"na\">env<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">GET_HOSTS_FROM<\/span>\r\n          <span class=\"na\">value<\/span><span class=\"pi\">:<\/span> <span class=\"s\">dns<\/span>\r\n        <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">containerPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">6379<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>$ kubectl apply -f redis-slave-deployment.yaml\r\ndeployment.apps\/redis-slave created\r\n$ kubectl get pod\r\nNAME                            READY   STATUS    RESTARTS   AGE\r\nredis-master-6b54579d85-l8hsn   1\/1     Running   0          7m10s\r\nredis-slave-799788557c-599w2    1\/1     Running   0          31s\r\nredis-slave-799788557c-f2lc6    1\/1     Running   0          32s\r\n<\/code><\/pre>\n<h3>\u670d\u52a1<\/h3>\n<p>\u4e0e\u4e3b\u8282\u70b9\u4e00\u6837\uff0c\u4e3a\u4ece\u8282\u70b9\u90e8\u7f72ClusterIP\u3002<\/p>\n<pre class=\"post-pre\"><code><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\">redis-slave<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis<\/span>\r\n    <span class=\"na\">role<\/span><span class=\"pi\">:<\/span> <span class=\"s\">slave<\/span>\r\n    <span class=\"na\">tier<\/span><span class=\"pi\">:<\/span> <span class=\"s\">backend<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/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\">6379<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis<\/span>\r\n    <span class=\"na\">role<\/span><span class=\"pi\">:<\/span> <span class=\"s\">slave<\/span>\r\n    <span class=\"na\">tier<\/span><span class=\"pi\">:<\/span> <span class=\"s\">backend<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>$ kubectl apply -f redis-slave-service.yaml\r\nservice\/redis-slave created\r\n$ kubectl get svc\r\nNAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE\r\nkubernetes     ClusterIP   10.96.0.1       &lt;none&gt;        443\/TCP    31d\r\nredis-master   ClusterIP   10.101.227.29   &lt;none&gt;        6379\/TCP   4m59s\r\nredis-slave    ClusterIP   10.109.67.11    &lt;none&gt;        6379\/TCP   9s\r\n<\/code><\/pre>\n<h2>\u524d\u7aef<\/h2>\n<p>\u8fd9\u4e2a\u5ba2\u4eba\u7559\u8a00\u5e94\u7528\u7a0b\u5e8f\u6709\u4e00\u4e2a\u7528PHP\u7f16\u5199\u7684Web\u524d\u7aef\uff0c\u7528\u6765\u4e3aHTTP\u8bf7\u6c42\u63d0\u4f9b\u670d\u52a1\u3002\u8be5\u5e94\u7528\u7a0b\u5e8f\u88ab\u914d\u7f6e\u4e3a\u5c06\u5199\u8bf7\u6c42\u8fde\u63a5\u5230redis-master\u670d\u52a1\uff0c\u5c06\u8bfb\u8bf7\u6c42\u8fde\u63a5\u5230redis-slave\u670d\u52a1\u3002<\/p>\n<h3>\u64ad\u5ba2<\/h3>\n<p>\u4f7f\u7528 Deployment \u90e8\u7f72\u4e09\u4e2a Replica \u7684 Pod\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">apps\/v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Deployment<\/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\">frontend<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">guestbook<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">guestbook<\/span>\r\n      <span class=\"na\">tier<\/span><span class=\"pi\">:<\/span> <span class=\"s\">frontend<\/span>\r\n  <span class=\"na\">replicas<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3<\/span>\r\n  <span class=\"na\">template<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">guestbook<\/span>\r\n        <span class=\"na\">tier<\/span><span class=\"pi\">:<\/span> <span class=\"s\">frontend<\/span>\r\n    <span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">containers<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">php-redis<\/span>\r\n        <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">gcr.io\/google-samples\/gb-frontend:v4<\/span>\r\n        <span class=\"na\">resources<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">requests<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">cpu<\/span><span class=\"pi\">:<\/span> <span class=\"s\">100m<\/span>\r\n            <span class=\"na\">memory<\/span><span class=\"pi\">:<\/span> <span class=\"s\">100Mi<\/span>\r\n        <span class=\"na\">env<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">GET_HOSTS_FROM<\/span>\r\n          <span class=\"na\">value<\/span><span class=\"pi\">:<\/span> <span class=\"s\">dns<\/span>\r\n        <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">containerPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">80<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>$ kubectl apply -f frontend-deployment.yaml\r\ndeployment.apps\/frontend created\r\n$ kubectl get pods -l app=guestbook -l tier=frontend\r\nNAME                        READY   STATUS    RESTARTS   AGE\r\nfrontend-56fc5b6b47-fx4gv   1\/1     Running   0          3m3s\r\nfrontend-56fc5b6b47-qblhv   1\/1     Running   0          3m3s\r\nfrontend-56fc5b6b47-qlph7   1\/1     Running   0          3m3s\r\n<\/code><\/pre>\n<h3>\u670d\u52a1<\/h3>\n<p>\u4e3a\u4e86\u5c06Guestbook\u5e94\u7528\u7a0b\u5e8f\u516c\u5f00\u7ed9\u5916\u90e8\u7528\u6237\uff0c\u6211\u4eec\u5728\u8fd9\u91cc\u90e8\u7f72\u4e86\u8d1f\u8f7d\u5747\u8861\u5668\uff08LoadBalancer\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code><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\">frontend<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">guestbook<\/span>\r\n    <span class=\"na\">tier<\/span><span class=\"pi\">:<\/span> <span class=\"s\">frontend<\/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\">ports<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">80<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">guestbook<\/span>\r\n    <span class=\"na\">tier<\/span><span class=\"pi\">:<\/span> <span class=\"s\">frontend<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>$ kubectl apply -f frontend-service.yaml\r\nservice\/frontend created\r\n$ kubectl get svc\r\nNAME           TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)        AGE\r\nfrontend       LoadBalancer   10.99.203.0     10.20.30.150   80:31257\/TCP   4s\r\nkubernetes     ClusterIP      10.96.0.1       &lt;none&gt;         443\/TCP        31d\r\nredis-master   ClusterIP      10.101.227.29   &lt;none&gt;         6379\/TCP       16m\r\nredis-slave    ClusterIP      10.109.67.11    &lt;none&gt;         6379\/TCP       11m\r\n<\/code><\/pre>\n<h2>\u786e\u8ba4\u884c\u52a8<\/h2>\n<p>\u4f7f\u7528\u5916\u90e8\u6d4f\u89c8\u5668\u8fde\u63a5\uff0c\u5e76\u786e\u8ba4\u8bbf\u5ba2\u7559\u8a00\u5e94\u7528\u7a0b\u5e8f\u7684\u8fd0\u884c\u60c5\u51b5\u3002<br \/>\n\u53ef\u4ee5\u786e\u8ba4\u80fd\u591f\u50cf\u4e0b\u56fe\u4e00\u6837\u8fde\u63a5\u548c\u8bfb\u5199\u8bbf\u5ba2\u7559\u8a00\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d1c6f37434c4406c10c67\/43-0.png\" alt=\"2020-08-23.png\" \/><\/div>\n<p>\u7531\u4e8e\u81ea\u5df1\u6784\u5efa\u7684\u8fc7\u7a0b\u53ea\u9700\u8981\u5e94\u7528\u516c\u5f00\u7684\u6e05\u5355\u5373\u53ef\uff0c\u56e0\u6b64\u5f88\u5bb9\u6613\u5b9e\u73b0\uff0c\u4f46\u901a\u8fc7\u5c06\u6bcf\u4e2a\u89d2\u8272\u7ed8\u5236\u5230\u56fe\u4e2d\u5e76\u8fdb\u884c\u786e\u8ba4\uff0c\u6211\u4eec\u80fd\u591f\u5b66\u4e60\u5fae\u670d\u52a1\u7684\u57fa\u7840\u77e5\u8bc6\u3002<\/p>\n<hr \/>\n<h1>\u6dfb\u52a0\u65e5\u5fd7\u8bb0\u5f55\u548c\u6307\u6807<\/h1>\n<p>\u4f5c\u4e3a\u7ee7\u7eed\u7684\u53e6\u4e00\u4e2a\u6559\u7a0b\uff0c\u6211\u4eec\u5c06\u5728\u5df2\u521b\u5efa\u7684\u7559\u8a00\u7c3f\u5e94\u7528\u7a0b\u5e8f\u4e2d\u6dfb\u52a0\u65e5\u5fd7\u8bb0\u5f55\u548c\u6307\u6807\u529f\u80fd\u3002<\/p>\n<blockquote><p>\u8fd9\u4e2a\u6559\u7a0b\u662f\u57fa\u4e8e\u4f7f\u7528Redis\u548cPHP\u521b\u5efa\u4e00\u4e2a\u7559\u8a00\u677f\u7684\u6559\u7a0b\u800c\u8bbe\u8ba1\u7684\u3002\u6211\u4eec\u5c06\u5728\u4e0e\u7559\u8a00\u677f\u76f8\u540c\u7684Kubernetes\u96c6\u7fa4\u4e2d\u90e8\u7f72Beats\uff0c\u5b83\u662f\u4e00\u4e2a\u7531Elastic\u5f00\u53d1\u7684\u5f00\u6e90\u8f7b\u91cf\u7ea7\u6570\u636e\u4f20\u8f93\u5de5\u5177\uff0c\u7528\u4e8e\u4f20\u8f93\u65e5\u5fd7\u3001\u6307\u6807\u548c\u7f51\u7edc\u6570\u636e\u3002\u901a\u8fc7Beats\uff0c\u6211\u4eec\u53ef\u4ee5\u6536\u96c6\u3001\u5206\u6790\u548c\u5efa\u7acb\u7d22\u5f15\u6570\u636e\uff0c\u7136\u540e\u5728Kibana\u4e0a\u5c55\u793a\u548c\u5206\u6790\u7ed3\u679c\u3002\u8fd9\u4e2a\u793a\u4f8b\u5305\u62ec\u4ee5\u4e0b\u7ec4\u4ef6\uff1a<\/p>\n<p>&#8211; \u8fd0\u884c\u4e2d\u7684\u4f7f\u7528Redis\u548cPHP\u521b\u5efa\u7684\u7559\u8a00\u677f\u5b9e\u4f8b<br \/>\n&#8211; Elasticsearch\u548cKibana<br \/>\n&#8211; Filebeat<br \/>\n&#8211; Metricbeat<br \/>\n&#8211; Packetbeat<\/p><\/blockquote>\n<h2>\u6dfb\u52a0 ClusterRoleBinding<\/h2>\n<p>\u6211\u4eec\u5c06\u6dfb\u52a0\u4e00\u4e2aClusterRoleBinding\uff0c\u4ee5\u4fbf\u5c06\u5373\u5c06\u521b\u5efa\u7684kube-state-metrics\u548cBeats\u90e8\u7f72\u5230kube-system\u547d\u540d\u7a7a\u95f4\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user=kosuke\r\nclusterrolebinding.rbac.authorization.k8s.io\/cluster-admin-binding created\r\n$ kubectl describe clusterrolebindings.rbac.authorization.k8s.io cluster-admin-binding\r\nName:         cluster-admin-binding\r\nLabels:       &lt;none&gt;\r\nAnnotations:  &lt;none&gt;\r\nRole:\r\n  Kind:  ClusterRole\r\n  Name:  cluster-admin\r\nSubjects:\r\n  Kind  Name    Namespace\r\n  ----  ----    ---------\r\n  User  kosuke\r\n<\/code><\/pre>\n<h2>\u5b89\u88c5kube-state-metrics<\/h2>\n<blockquote><p>Kubernetes\u7684kube-state-metrics\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u670d\u52a1\uff0c\u5b83\u76d1\u542cKubernetes API\u670d\u52a1\u5668\u5e76\u751f\u6210\u4e0e\u5bf9\u8c61\u72b6\u6001\u76f8\u5173\u7684\u6307\u6807\u3002<\/p><\/blockquote>\n<p>\u5728Red Hat\u7684OpenShift\u4e2d\uff0c\u4f7f\u7528Prometheus\u8fdb\u884c\u96c6\u7fa4\u76d1\u63a7\u3002<\/p>\n<p>\u4eceGithub\u4e0a\u514b\u9686\u5e76\u5e94\u7528\u3002<\/p>\n<pre class=\"post-pre\"><code>$ git clone https:\/\/github.com\/kubernetes\/kube-state-metrics.git kube-state-metrics\r\nCloning into 'kube-state-metrics'...\r\nremote: Enumerating objects: 38, done.\r\nremote: Counting objects: 100% (38\/38), done.\r\nremote: Compressing objects: 100% (22\/22), done.\r\nremote: Total 19889 (delta 15), reused 24 (delta 10), pack-reused 19851\r\nReceiving objects: 100% (19889\/19889), 16.64 MiB | 3.81 MiB\/s, done.\r\nResolving deltas: 100% (12629\/12629), done.\r\n$ kubectl apply -f kube-state-metrics\/examples\/standard\r\nclusterrolebinding.rbac.authorization.k8s.io\/kube-state-metrics created\r\nclusterrole.rbac.authorization.k8s.io\/kube-state-metrics created\r\ndeployment.apps\/kube-state-metrics created\r\nserviceaccount\/kube-state-metrics created\r\nservice\/kube-state-metrics created\r\n$ kubectl get pod -n kube-system kube-state-metrics-5c5cb55b4-pf5r5\r\nNAME                                 READY   STATUS    RESTARTS   AGE\r\nkube-state-metrics-5c5cb55b4-pf5r5   1\/1     Running   0          31s\r\n<\/code><\/pre>\n<h2>\u51c6\u5907Elasticsearch<\/h2>\n<p>\u5728\u8fd9\u91cc\uff0c\u5c06\u4f7f\u7528Elasticsearch\u7684\u4e91\u670d\u52a1\u3002<br \/>\nhttps:\/\/cloud.elastic.co\/<\/p>\n<p>\u6211\u5728\u767b\u5f55\u9875\u9762\u4e0a\u4f7f\u7528Google\u767b\u5f55\u4e86\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d1c6f37434c4406c10c67\/60-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u90e8\u7f72Elasticsearch\u3002<br \/>\n\u9009\u62e9\u4e91\u5e73\u53f0\u548c\u533a\u57df\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u9009\u62e9\u4e86GCP\u7684\u4e1c\u4eac\u533a\u57df\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d1c6f37434c4406c10c67\/62-0.png\" alt=\"2020-08-24 (1).png\" \/><\/div>\n<p>\u6211\u5fd8\u8bb0\u622a\u53d6\u56fe\u50cf\u4e86\uff0c\u4f46\u662f\u8bf7\u5411\u4e0b\u6eda\u52a8\uff0c\u8bbe\u7f6e\u540d\u79f0\u5e76\u70b9\u51fb\u201c\u521b\u5efa\u201d\u7c7b\u4f3c\u7684\u6309\u94ae\u3002<\/p>\n<p>\u64cd\u4f5c\u5728\u5982\u4e0b\u753b\u9762\u663e\u793a\u540e\uff0c\u60a8\u53ef\u4ee5\u9009\u62e9\u5c06\u5bc6\u7801\u8bb0\u5f55\u4e0b\u6765\u6216\u4e0b\u8f7d\u3002<br \/>\n\u7a0d\u540e\uff0c\u5c06\u5728\u521b\u5efa\u201cSecret\u201d\u65f6\u4f7f\u7528\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d1c6f37434c4406c10c67\/65-0.jpeg\" alt=\"2020-08-24 (4)_LI.jpg\" \/><\/div>\n<p>\u6211\u4f1a\u7b49\u4e00\u4f1a\u513f\u4ee5\u8fdb\u884c\u90e8\u7f72\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d1c6f37434c4406c10c67\/67-0.png\" alt=\"2020-08-24 (5).png\" \/><\/div>\n<p>\u4e00\u65e6\u90e8\u7f72\u5b8c\u6210\uff0c\u60a8\u4f1a\u770b\u5230\u4ee5\u4e0b\u753b\u9762\uff0c\u8bf7\u8bb0\u4e0b CloudID\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d1c6f37434c4406c10c67\/69-0.jpeg\" alt=\"2020-08-24 (6)_LI.jpg\" \/><\/div>\n<p>\u8fd9\u6837\uff0cElasticsearch\u7684\u51c6\u5907\u5de5\u4f5c\u5df2\u7ecf\u5b8c\u6210\u4e86\u3002<\/p>\n<h2>\u4e0b\u8f7dBeats\u8f6f\u4ef6\u5305<\/h2>\n<p>\u6211\u4eceGithub\u514b\u9686\u4e86\u4e00\u4e2a\u9879\u76ee\u3002\u987a\u4fbf\u63d0\u4e00\u4e0b\uff0c\u5b83\u5927\u7ea6\u6709400MB\uff0c\u5728\u6211\u7684\u73af\u5883\u4e2d\u786c\u76d8\u5df2\u7ecf\u6ee1\u4e86\uff0c\u6240\u4ee5\u6211\u5f97\u91cd\u65b0\u5f00\u59cb\u3002<\/p>\n<pre class=\"post-pre\"><code>$ git clone https:\/\/github.com\/elastic\/examples.git\r\nCloning into 'examples'...\r\nremote: Enumerating objects: 63, done.\r\nremote: Counting objects: 100% (63\/63), done.\r\nremote: Compressing objects: 100% (55\/55), done.\r\nremote: Total 6738 (delta 22), reused 20 (delta 6), pack-reused 6675\r\nReceiving objects: 100% (6738\/6738), 124.89 MiB | 4.09 MiB\/s, done.\r\nResolving deltas: 100% (3258\/3258), done.\r\nChecking out files: 100% (804\/804), done.\r\n$ cd examples\/beats-k8s-send-anywhere\/\r\n<\/code><\/pre>\n<h2>\u521b\u5efa\u4e00\u4e2a\u79d8\u5bc6<\/h2>\n<p>\u521b\u5efa\u5bc6\u94a5\u65f6\uff0c\u4f7f\u7528\u5728\u521b\u5efa Elasticsearch \u65f6\u8bb0\u5f55\u7684\u5bc6\u7801\u548c CloudID\u3002<\/p>\n<p>\u7f16\u8f91\u4e0b\u8f7d\u7684\u8f6f\u4ef6\u5305\u4e2d\u7684\u6587\u4ef6\u3002\u4e3a\u4e86\u5b89\u5168\u8d77\u89c1\uff0c\u5148\u590d\u5236\u539f\u59cb\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>$ cp ELASTIC_CLOUD_AUTH ELASTIC_CLOUD_AUTH.org\r\n$ cp ELASTIC_CLOUD_ID ELASTIC_CLOUD_ID.org\r\n<\/code><\/pre>\n<p>\u590d\u5236\u540e\uff0c\u4f7f\u7528vi\u7b49\u8fdb\u884c\u7f16\u8f91\u3002<br \/>\n\u4f7f\u7528\u7f16\u8f91\u540e\u7684\u6587\u4ef6\u521b\u5efaSecret\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl create secret generic dynamic-logging --from-file=.\/ELASTIC_CLOUD_ID --from-file=.\/ELASTIC_CLOUD_AUTH --namespace=kube-system\r\nsecret\/dynamic-logging created\r\n<\/code><\/pre>\n<h2>Beats\u7684\u90e8\u7f72<\/h2>\n<blockquote><p>\u6bcf\u4e2aBeat\u90fd\u63d0\u4f9b\u4e00\u4e2a\u6e05\u5355\u6587\u4ef6\u3002\u8fd9\u4e9b\u6e05\u5355\u6587\u4ef6\u5c06\u4f7f\u7528\u4e0a\u9762\u521b\u5efa\u7684\u5bc6\u94a5\u914d\u7f6eBeat\u4ee5\u8fde\u63a5\u5230Elasticsearch\u548cKibana\u670d\u52a1\u5668\u3002<\/p><\/blockquote>\n<h3>Filebeat\u7684\u90e8\u7f72<\/h3>\n<blockquote><p>Filebeat\u4f1a\u6536\u96c6Kubernetes\u8282\u70b9\u4ee5\u53ca\u6bcf\u4e2a\u8282\u70b9\u4e0a\u8fd0\u884c\u7684\u6bcf\u4e2aPod\u5185\u7684\u5bb9\u5668\u65e5\u5fd7\u3002Filebeat\u5c06\u4ee5DaemonSet\u7684\u5f62\u5f0f\u90e8\u7f72\u3002<\/p><\/blockquote>\n<p>\u6211\u4f1a\u7533\u8bf7\u5ba3\u8a00\u4e66\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl apply -f filebeat-kubernetes.yaml\r\nconfigmap\/filebeat-dynamic-config created\r\nclusterrolebinding.rbac.authorization.k8s.io\/filebeat-dynamic created\r\nclusterrole.rbac.authorization.k8s.io\/filebeat-dynamic created\r\nserviceaccount\/filebeat-dynamic created\r\nerror: unable to recognize \"filebeat-kubernetes.yaml\": no matches for kind \"DaemonSet\" in version \"extensions\/v1beta1\"\r\n<\/code><\/pre>\n<p>\u68c0\u6d4b\u5230DaemonSet\u51fa\u73b0\u9519\u8bef\u3002\u770b\u8d77\u6765API\u7248\u672c\u8fc7\u4f4e\u3002<br \/>\n\u6211\u4eec\u5c06\u9a8c\u8bc1Kubernetes v1.18\u7684DaemonSet API\u7248\u672c\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl explain DaemonSet | head\r\nKIND:     DaemonSet\r\nVERSION:  apps\/v1\r\n\r\nDESCRIPTION:\r\n     DaemonSet represents the configuration of a daemon set.\r\n\r\nFIELDS:\r\n   apiVersion   &lt;string&gt;\r\n     APIVersion defines the versioned schema of this representation of an\r\n     object. Servers should convert recognized schemas to the latest internal\r\n<\/code><\/pre>\n<p>\u6211\u5df2\u7ecf\u6309\u7167\u4ee5\u4e0b\u65b9\u5f0f\u7f16\u8f91\u4e86\u5ba3\u8a00\u4e66\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\">ConfigMap<\/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\">filebeat-dynamic-config<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">kube-system<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">k8s-app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">filebeat-dynamic<\/span>\r\n    <span class=\"s\">kubernetes.io\/cluster-service<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">true\"<\/span>\r\n<span class=\"na\">data<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"s\">filebeat.yml<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">|-<\/span>\r\n    <span class=\"s\">setup.dashboards.enabled: true<\/span>\r\n    <span class=\"s\">setup.template.enabled: true<\/span>\r\n\r\n    <span class=\"s\">setup.template.settings:<\/span>\r\n      <span class=\"s\">index.number_of_shards: 1<\/span>\r\n\r\n    <span class=\"s\">filebeat.modules:<\/span>\r\n      <span class=\"s\">- module: system<\/span>\r\n        <span class=\"s\">syslog:<\/span>\r\n          <span class=\"s\">enabled: true<\/span>\r\n          <span class=\"s\">#var.paths: [\"\/var\/log\/syslog\"]<\/span>\r\n        <span class=\"s\">auth:<\/span>\r\n          <span class=\"s\">enabled: true<\/span>\r\n          <span class=\"s\">#var.paths: [\"\/var\/log\/authlog\"]<\/span>\r\n\r\n    <span class=\"s\">filebeat.autodiscover:<\/span>\r\n      <span class=\"s\">providers:<\/span>\r\n        <span class=\"s\">- type: kubernetes<\/span>\r\n          <span class=\"s\">templates:<\/span>\r\n            <span class=\"s\">- condition.equals:<\/span>\r\n                <span class=\"s\">kubernetes.labels.app: redis<\/span>\r\n              <span class=\"s\">config:<\/span>\r\n                <span class=\"s\">- module: redis<\/span>\r\n                  <span class=\"s\">log:<\/span>\r\n                    <span class=\"s\">input:<\/span>\r\n                      <span class=\"s\">type: docker<\/span>\r\n                      <span class=\"s\">containers.ids:<\/span>\r\n                        <span class=\"s\">- ${data.kubernetes.container.id}<\/span>\r\n                  <span class=\"s\">slowlog:<\/span>\r\n                    <span class=\"s\">enabled: true<\/span>\r\n                    <span class=\"s\">var.hosts: [\"${data.host}:${data.port}\"]<\/span>\r\n            <span class=\"s\">- condition.contains:<\/span>\r\n                <span class=\"s\">kubernetes.labels.tier: frontend<\/span>\r\n              <span class=\"s\">config:<\/span>\r\n                <span class=\"s\">- module: apache2<\/span>\r\n                  <span class=\"s\">access:<\/span>\r\n                    <span class=\"s\">input:<\/span>\r\n                      <span class=\"s\">type: docker<\/span>\r\n                      <span class=\"s\">containers.ids:<\/span>\r\n                        <span class=\"s\">- ${data.kubernetes.container.id}<\/span>\r\n                  <span class=\"s\">error:<\/span>\r\n                    <span class=\"s\">input:<\/span>\r\n                      <span class=\"s\">type: docker<\/span>\r\n                      <span class=\"s\">containers.ids:<\/span>\r\n                        <span class=\"s\">- ${data.kubernetes.container.id}<\/span>\r\n            <span class=\"s\">- condition.equals:<\/span>\r\n                <span class=\"s\">kubernetes.labels.app: mysql<\/span>\r\n              <span class=\"s\">config:<\/span>\r\n                <span class=\"s\">- module: mysql<\/span>\r\n                  <span class=\"s\">error:<\/span>\r\n                    <span class=\"s\">input:<\/span>\r\n                      <span class=\"s\">type: docker<\/span>\r\n                      <span class=\"s\">containers.ids:<\/span>\r\n                        <span class=\"s\">- ${data.kubernetes.container.id}<\/span>\r\n                  <span class=\"s\">slowlog:<\/span>\r\n                    <span class=\"s\">input:<\/span>\r\n                      <span class=\"s\">type: docker<\/span>\r\n                      <span class=\"s\">containers.ids:<\/span>\r\n                        <span class=\"s\">- ${data.kubernetes.container.id}<\/span>\r\n\r\n    <span class=\"s\">processors:<\/span>\r\n      <span class=\"s\">- drop_event:<\/span>\r\n          <span class=\"s\">when.or:<\/span>\r\n              <span class=\"s\">- and:<\/span>\r\n                  <span class=\"s\">- regexp:<\/span>\r\n                      <span class=\"s\">message: '^\\d+\\.\\d+\\.\\d+\\.\\d+ '<\/span>\r\n                  <span class=\"s\">- equals:<\/span>\r\n                      <span class=\"s\">fileset.name: error<\/span>\r\n              <span class=\"s\">- and:<\/span>\r\n                  <span class=\"s\">- not:<\/span>\r\n                      <span class=\"s\">regexp:<\/span>\r\n                          <span class=\"s\">message: '^\\d+\\.\\d+\\.\\d+\\.\\d+ '<\/span>\r\n                  <span class=\"s\">- equals:<\/span>\r\n                      <span class=\"s\">fileset.name: access<\/span>\r\n      <span class=\"s\">- add_cloud_metadata:<\/span>\r\n      <span class=\"s\">- add_kubernetes_metadata:<\/span>\r\n      <span class=\"s\">- add_docker_metadata:<\/span>\r\n\r\n    <span class=\"s\">cloud.auth: ${ELASTIC_CLOUD_AUTH}<\/span>\r\n    <span class=\"s\">cloud.id: ${ELASTIC_CLOUD_ID}<\/span>\r\n\r\n    <span class=\"s\">output.elasticsearch:<\/span>\r\n      <span class=\"s\">hosts: ${ELASTICSEARCH_HOSTS}<\/span>\r\n      <span class=\"s\">username: ${ELASTICSEARCH_USERNAME}<\/span>\r\n      <span class=\"s\">password: ${ELASTICSEARCH_PASSWORD}<\/span>\r\n    <span class=\"s\">setup.kibana:<\/span>\r\n      <span class=\"s\">host: ${KIBANA_HOST}<\/span>\r\n\r\n<span class=\"s\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">apps\/v1<\/span> <span class=\"c1\">#changed<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">DaemonSet<\/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\">filebeat-dynamic<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">kube-system<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">k8s-app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">filebeat-dynamic<\/span>\r\n    <span class=\"s\">kubernetes.io\/cluster-service<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">true\"<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span> <span class=\"c1\">#added<\/span>\r\n    <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span> <span class=\"c1\">#added<\/span>\r\n     <span class=\"na\">k8s-app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">filebeat-dynamic<\/span> <span class=\"c1\">#added<\/span>\r\n  <span class=\"na\">template<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">k8s-app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">filebeat-dynamic<\/span>\r\n        <span class=\"s\">kubernetes.io\/cluster-service<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">true\"<\/span>\r\n    <span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">serviceAccountName<\/span><span class=\"pi\">:<\/span> <span class=\"s\">filebeat-dynamic<\/span>\r\n      <span class=\"na\">terminationGracePeriodSeconds<\/span><span class=\"pi\">:<\/span> <span class=\"m\">30<\/span>\r\n      <span class=\"na\">containers<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">filebeat-dynamic<\/span>\r\n        <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">docker.elastic.co\/beats\/filebeat:7.6.2<\/span>\r\n        <span class=\"na\">imagePullPolicy<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Always<\/span>\r\n        <span class=\"na\">args<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">[<\/span>\r\n          <span class=\"s2\">\"<\/span><span class=\"s\">-c\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">\/etc\/filebeat.yml\"<\/span><span class=\"pi\">,<\/span>\r\n          <span class=\"s2\">\"<\/span><span class=\"s\">-e\"<\/span><span class=\"pi\">,<\/span>\r\n        <span class=\"pi\">]<\/span>\r\n        <span class=\"na\">env<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ELASTIC_CLOUD_ID<\/span>\r\n          <span class=\"na\">valueFrom<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">secretKeyRef<\/span><span class=\"pi\">:<\/span>\r\n              <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">dynamic-logging<\/span>\r\n              <span class=\"na\">key<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ELASTIC_CLOUD_ID<\/span>\r\n              <span class=\"na\">optional<\/span><span class=\"pi\">:<\/span> <span class=\"no\">true<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ELASTIC_CLOUD_AUTH<\/span>\r\n          <span class=\"na\">valueFrom<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">secretKeyRef<\/span><span class=\"pi\">:<\/span>\r\n              <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">dynamic-logging<\/span>\r\n              <span class=\"na\">key<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ELASTIC_CLOUD_AUTH<\/span>\r\n              <span class=\"na\">optional<\/span><span class=\"pi\">:<\/span> <span class=\"no\">true<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ELASTICSEARCH_HOSTS<\/span>\r\n          <span class=\"na\">valueFrom<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">secretKeyRef<\/span><span class=\"pi\">:<\/span>\r\n              <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">dynamic-logging<\/span>\r\n              <span class=\"na\">key<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ELASTICSEARCH_HOSTS<\/span>\r\n              <span class=\"na\">optional<\/span><span class=\"pi\">:<\/span> <span class=\"no\">true<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">KIBANA_HOST<\/span>\r\n          <span class=\"na\">valueFrom<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">secretKeyRef<\/span><span class=\"pi\">:<\/span>\r\n              <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">dynamic-logging<\/span>\r\n              <span class=\"na\">key<\/span><span class=\"pi\">:<\/span> <span class=\"s\">KIBANA_HOST<\/span>\r\n              <span class=\"na\">optional<\/span><span class=\"pi\">:<\/span> <span class=\"no\">true<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ELASTICSEARCH_USERNAME<\/span>\r\n          <span class=\"na\">valueFrom<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">secretKeyRef<\/span><span class=\"pi\">:<\/span>\r\n              <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">dynamic-logging<\/span>\r\n              <span class=\"na\">key<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ELASTICSEARCH_USERNAME<\/span>\r\n              <span class=\"na\">optional<\/span><span class=\"pi\">:<\/span> <span class=\"no\">true<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ELASTICSEARCH_PASSWORD<\/span>\r\n          <span class=\"na\">valueFrom<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">secretKeyRef<\/span><span class=\"pi\">:<\/span>\r\n              <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">dynamic-logging<\/span>\r\n              <span class=\"na\">key<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ELASTICSEARCH_PASSWORD<\/span>\r\n              <span class=\"na\">optional<\/span><span class=\"pi\">:<\/span> <span class=\"no\">true<\/span>\r\n        <span class=\"na\">securityContext<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">runAsUser<\/span><span class=\"pi\">:<\/span> <span class=\"m\">0<\/span>\r\n        <span class=\"na\">volumeMounts<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">config<\/span>\r\n          <span class=\"na\">mountPath<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/etc\/filebeat.yml<\/span>\r\n          <span class=\"na\">readOnly<\/span><span class=\"pi\">:<\/span> <span class=\"no\">true<\/span>\r\n          <span class=\"na\">subPath<\/span><span class=\"pi\">:<\/span> <span class=\"s\">filebeat.yml<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">data<\/span>\r\n          <span class=\"na\">mountPath<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/usr\/share\/filebeat\/data<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">varlog<\/span>\r\n          <span class=\"na\">mountPath<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/var\/log<\/span>\r\n          <span class=\"na\">readOnly<\/span><span class=\"pi\">:<\/span> <span class=\"no\">true<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">varlibdockercontainers<\/span>\r\n          <span class=\"na\">mountPath<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/var\/lib\/docker\/containers<\/span>\r\n          <span class=\"na\">readOnly<\/span><span class=\"pi\">:<\/span> <span class=\"no\">true<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">dockersock<\/span>\r\n          <span class=\"na\">mountPath<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/var\/run\/docker.sock<\/span>\r\n      <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">config<\/span>\r\n        <span class=\"na\">configMap<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">defaultMode<\/span><span class=\"pi\">:<\/span> <span class=\"m\">0600<\/span>\r\n          <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">filebeat-dynamic-config<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">varlog<\/span>\r\n        <span class=\"na\">hostPath<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">path<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/var\/log<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">varlibdockercontainers<\/span>\r\n        <span class=\"na\">hostPath<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">path<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/var\/lib\/docker\/containers<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">dockersock<\/span>\r\n        <span class=\"na\">hostPath<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">path<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/var\/run\/docker.sock<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">data<\/span>\r\n        <span class=\"na\">emptyDir<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">{}<\/span>\r\n<span class=\"nn\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">rbac.authorization.k8s.io\/v1beta1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ClusterRoleBinding<\/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\">filebeat-dynamic<\/span>\r\n<span class=\"na\">subjects<\/span><span class=\"pi\">:<\/span>\r\n<span class=\"pi\">-<\/span> <span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ServiceAccount<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">filebeat-dynamic<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">kube-system<\/span>\r\n<span class=\"na\">roleRef<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ClusterRole<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">filebeat-dynamic<\/span>\r\n  <span class=\"na\">apiGroup<\/span><span class=\"pi\">:<\/span> <span class=\"s\">rbac.authorization.k8s.io<\/span>\r\n<span class=\"nn\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">rbac.authorization.k8s.io\/v1beta1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ClusterRole<\/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\">filebeat-dynamic<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">k8s-app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">filebeat-dynamic<\/span>\r\n<span class=\"na\">rules<\/span><span class=\"pi\">:<\/span>\r\n<span class=\"pi\">-<\/span> <span class=\"na\">apiGroups<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">[<\/span><span class=\"s2\">\"<\/span><span class=\"s\">\"<\/span><span class=\"pi\">]<\/span> <span class=\"c1\"># \"\" indicates the core API group<\/span>\r\n  <span class=\"na\">resources<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"s\">namespaces<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"s\">pods<\/span>\r\n  <span class=\"na\">verbs<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"s\">get<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"s\">watch<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"s\">list<\/span>\r\n<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\">ServiceAccount<\/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\">filebeat-dynamic<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">kube-system<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">k8s-app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">filebeat-dynamic<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u4f7f\u7528\u7f16\u8f91\u8fc7\u7684\u5ba3\u8a00\u518d\u6b21\u7533\u8bf7\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl apply -f filebeat-kubernetes.yaml\r\nconfigmap\/filebeat-dynamic-config unchanged\r\ndaemonset.apps\/filebeat-dynamic created\r\nclusterrolebinding.rbac.authorization.k8s.io\/filebeat-dynamic unchanged\r\nclusterrole.rbac.authorization.k8s.io\/filebeat-dynamic unchanged\r\nserviceaccount\/filebeat-dynamic unchanged\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>$ kubectl get pod -n kube-system -l k8s-app=filebeat-dynamic\r\nNAME                     READY   STATUS    RESTARTS   AGE\r\nfilebeat-dynamic-2bxv7   1\/1     Running   0          119s\r\nfilebeat-dynamic-bvs22   1\/1     Running   0          119s\r\n<\/code><\/pre>\n<p>\u8fd9\u6b21\u6210\u529f\u4e86\u3002<\/p>\n<h3>\u90e8\u7f72Metricbeat<\/h3>\n<blockquote><p>Metricbeat\u7684\u81ea\u52a8\u68c0\u6d4b\u8bbe\u7f6e\u4e0eFilebeat\u76f8\u540c\u3002<\/p><\/blockquote>\n<p>\u7531\u4e8eAPI\u7684\u7248\u672c\u8f83\u65e7\uff0c\u56e0\u6b64\u9700\u8981\u50cfFileBeat\u4e00\u6837\u7f16\u8f91\u6e05\u5355\u3002\u8981\u7f16\u8f91DaemonSet\u548cDeployment\u7684\u4ee5\u4e0b\u5185\u5bb9\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">API\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u5909\u66f4<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">selector\u306e\u8ffd\u52a0<\/ul>\n<pre class=\"post-pre\"><code>$ kubectl apply -f metricbeat-kubernetes.yaml\r\nconfigmap\/metricbeat-setup-config created\r\njob.batch\/metricbeat-setup created\r\nconfigmap\/metricbeat-daemonset-config created\r\nconfigmap\/metricbeat-daemonset-modules created\r\ndaemonset.apps\/metricbeat created\r\nconfigmap\/metricbeat-deployment-config created\r\nconfigmap\/metricbeat-deployment-modules created\r\ndeployment.apps\/metricbeat created\r\nclusterrolebinding.rbac.authorization.k8s.io\/metricbeat created\r\nclusterrole.rbac.authorization.k8s.io\/metricbeat created\r\nserviceaccount\/metricbeat created\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>$ kubectl get pods -n kube-system -l k8s-app=metricbeat\r\nNAME                          READY   STATUS    RESTARTS   AGE\r\nmetricbeat-5b9dfd9f8d-t7j7t   1\/1     Running   0          2m\r\nmetricbeat-vs7rf              1\/1     Running   0          2m\r\nmetricbeat-wznq4              1\/1     Running   0          2m\r\n<\/code><\/pre>\n<h3>Packetbeat\u90e8\u7f72<\/h3>\n<blockquote><p>Packetbeat\u7684\u914d\u7f6e\u4e0eFilebeat\u548cMetricbeat\u4e0d\u540c\u3002\u4e0e\u6307\u5b9a\u5bb9\u5668\u6807\u7b7e\u7684\u6a21\u5f0f\u5339\u914d\u4e0d\u540c\uff0c\u6211\u4eec\u9700\u8981\u6839\u636e\u76f8\u5173\u534f\u8bae\u548c\u7aef\u53e3\u53f7\u6765\u8fdb\u884c\u914d\u7f6e\u3002<\/p><\/blockquote>\n<p>\u5e94\u7528\u7a0b\u5e8f\u5e76\u6dfb\u52a0\u4e86\u76f8\u540c\u7684DaemonSet API\u7248\u672c\u66f4\u6539\u548c\u9009\u62e9\u5668\u3002<\/p>\n<pre class=\"post-pre\"><code>kubectl apply -f packetbeat-kubernetes.yaml\r\nconfigmap\/packetbeat-dynamic-config created\r\ndaemonset.apps\/packetbeat-dynamic created\r\nclusterrolebinding.rbac.authorization.k8s.io\/packetbeat-dynamic created\r\nclusterrole.rbac.authorization.k8s.io\/packetbeat-dynamic created\r\nserviceaccount\/packetbeat-dynamic created\r\n<\/code><\/pre>\n<p>\u8fd9\u6837\u5c31\u5b8c\u6210\u4e86\u3002<\/p>\n<h2>\u5728Kibana\u4e2d\u8fdb\u884c\u786e\u8ba4<\/h2>\n<p>\u6211\u4e4b\u524d\u51e0\u4e4e\u6ca1\u6709\u4f7f\u7528\u8fc7Elasticsearch\u548cKibana\uff0c\u6240\u4ee5\u4e0d\u786e\u5b9a\u8fd9\u6837\u662f\u5426\u6b63\u786e\uff0c\u4f46\u4f3c\u4e4e\u53ef\u4ee5\u6536\u96c6\u5230\u65e5\u5fd7\u3002<br \/>\n\u5f88\u5bb9\u6613\u505a\u5230\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d1c6f37434c4406c10c67\/107-0.png\" alt=\"2020-08-25.png\" \/><\/div>\n<h1>\u603b\u7ed3<\/h1>\n<p>\u8fd9\u6b21\u6211\u5c1d\u8bd5\u6309\u7167\u6559\u7a0b\u8fdb\u884c\u5b9e\u9645\u64cd\u4f5c\u3002<br \/>\n\u81ea\u5df1\u8fdb\u884c\u6784\u5efa\u5f88\u7b80\u5355\uff0c\u53ea\u9700\u6309\u7167\u624b\u518c\u8fdb\u884c\u5373\u53ef\uff0c\u4f46\u662f\u5728\u6574\u7406\u5b9e\u9645\u67b6\u6784\u7b49\u5185\u5bb9\u7684\u540c\u65f6\u8fdb\u884c\u64cd\u4f5c\uff0c\u5bf9\u7406\u89e3\u6709\u6240\u52a0\u6df1\u3002<br \/>\n\u5173\u4e8eElasticsearch\u548cKibana\uff0c\u867d\u7136\u5df2\u7ecf\u80fd\u591f\u4f7f\u7528\uff0c\u4f46\u6211\u8fd8\u6ca1\u6709\u5b8c\u5168\u7406\u89e3\uff0c\u6240\u4ee5\u6211\u60f3\u5728\u514d\u8d39\u8bd5\u7528\u671f\u5185\u518d\u591a\u5c1d\u8bd5\u4e00\u4e0b\u3002\u8fd8\u670910\u5929\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u6211\u60f3\u5c1d\u8bd5\u5728Kubernetes\u7684\u624b\u518c\u4e2d\u7684\u6559\u7a0b\u90e8\u5206\u4e2d\u505a\u4ee5\u4e0b\u7684\u5b9e\u9645\u4f8b\u5b50\u3002 \u4f8b: \u90e8\u7f72\u4f7f\u7528Redis\u7684PHP\u7559 [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-34310","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>\u4f7f\u7528Kubernetes\u90e8\u7f72\u57fa\u4e8eRedis\u7684PHP\u7559\u8a00\u677f\u5e94\u7528\u7a0b\u5e8f - 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\/\u4f7f\u7528kubernetes\u90e8\u7f72\u57fa\u4e8eredis\u7684php\u7559\u8a00\u677f\u5e94\u7528\u7a0b\u5e8f\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Kubernetes\u90e8\u7f72\u57fa\u4e8eRedis\u7684PHP\u7559\u8a00\u677f\u5e94\u7528\u7a0b\u5e8f\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u6211\u60f3\u5c1d\u8bd5\u5728Kubernetes\u7684\u624b\u518c\u4e2d\u7684\u6559\u7a0b\u90e8\u5206\u4e2d\u505a\u4ee5\u4e0b\u7684\u5b9e\u9645\u4f8b\u5b50\u3002 \u4f8b: \u90e8\u7f72\u4f7f\u7528Redis\u7684PHP\u7559 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528kubernetes\u90e8\u7f72\u57fa\u4e8eredis\u7684php\u7559\u8a00\u677f\u5e94\u7528\u7a0b\u5e8f\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-28T22:48:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T04:47:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d1c6f37434c4406c10c67\/6-0.png\" \/>\n<meta name=\"author\" content=\"\u9038, \u79d1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u9038, \u79d1\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 \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\/%e4%bd%bf%e7%94%a8kubernetes%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8eredis%e7%9a%84php%e7%95%99%e8%a8%80%e6%9d%bf%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8kubernetes%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8eredis%e7%9a%84php%e7%95%99%e8%a8%80%e6%9d%bf%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/\",\"name\":\"\u4f7f\u7528Kubernetes\u90e8\u7f72\u57fa\u4e8eRedis\u7684PHP\u7559\u8a00\u677f\u5e94\u7528\u7a0b\u5e8f - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-06-28T22:48:44+00:00\",\"dateModified\":\"2024-04-30T04:47:32+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8kubernetes%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8eredis%e7%9a%84php%e7%95%99%e8%a8%80%e6%9d%bf%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8kubernetes%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8eredis%e7%9a%84php%e7%95%99%e8%a8%80%e6%9d%bf%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8kubernetes%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8eredis%e7%9a%84php%e7%95%99%e8%a8%80%e6%9d%bf%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Kubernetes\u90e8\u7f72\u57fa\u4e8eRedis\u7684PHP\u7559\u8a00\u677f\u5e94\u7528\u7a0b\u5e8f\"}]},{\"@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\/85c1dae56e6ea1e695c73d33c684d487\",\"name\":\"\u9038, \u79d1\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g\",\"caption\":\"\u9038, \u79d1\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keyi\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8kubernetes%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8eredis%e7%9a%84php%e7%95%99%e8%a8%80%e6%9d%bf%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Kubernetes\u90e8\u7f72\u57fa\u4e8eRedis\u7684PHP\u7559\u8a00\u677f\u5e94\u7528\u7a0b\u5e8f - 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\/\u4f7f\u7528kubernetes\u90e8\u7f72\u57fa\u4e8eredis\u7684php\u7559\u8a00\u677f\u5e94\u7528\u7a0b\u5e8f\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Kubernetes\u90e8\u7f72\u57fa\u4e8eRedis\u7684PHP\u7559\u8a00\u677f\u5e94\u7528\u7a0b\u5e8f","og_description":"\u9996\u5148 \u6211\u60f3\u5c1d\u8bd5\u5728Kubernetes\u7684\u624b\u518c\u4e2d\u7684\u6559\u7a0b\u90e8\u5206\u4e2d\u505a\u4ee5\u4e0b\u7684\u5b9e\u9645\u4f8b\u5b50\u3002 \u4f8b: \u90e8\u7f72\u4f7f\u7528Redis\u7684PHP\u7559 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528kubernetes\u90e8\u7f72\u57fa\u4e8eredis\u7684php\u7559\u8a00\u677f\u5e94\u7528\u7a0b\u5e8f\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-06-28T22:48:44+00:00","article_modified_time":"2024-04-30T04:47:32+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d1c6f37434c4406c10c67\/6-0.png"}],"author":"\u9038, \u79d1","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u9038, \u79d1","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"9 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8kubernetes%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8eredis%e7%9a%84php%e7%95%99%e8%a8%80%e6%9d%bf%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8kubernetes%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8eredis%e7%9a%84php%e7%95%99%e8%a8%80%e6%9d%bf%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/","name":"\u4f7f\u7528Kubernetes\u90e8\u7f72\u57fa\u4e8eRedis\u7684PHP\u7559\u8a00\u677f\u5e94\u7528\u7a0b\u5e8f - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-06-28T22:48:44+00:00","dateModified":"2024-04-30T04:47:32+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8kubernetes%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8eredis%e7%9a%84php%e7%95%99%e8%a8%80%e6%9d%bf%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8kubernetes%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8eredis%e7%9a%84php%e7%95%99%e8%a8%80%e6%9d%bf%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8kubernetes%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8eredis%e7%9a%84php%e7%95%99%e8%a8%80%e6%9d%bf%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Kubernetes\u90e8\u7f72\u57fa\u4e8eRedis\u7684PHP\u7559\u8a00\u677f\u5e94\u7528\u7a0b\u5e8f"}]},{"@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\/85c1dae56e6ea1e695c73d33c684d487","name":"\u9038, \u79d1","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g","caption":"\u9038, \u79d1"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keyi\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8kubernetes%e9%83%a8%e7%bd%b2%e5%9f%ba%e4%ba%8eredis%e7%9a%84php%e7%95%99%e8%a8%80%e6%9d%bf%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%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\/34310","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\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=34310"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/34310\/revisions"}],"predecessor-version":[{"id":91998,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/34310\/revisions\/91998"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=34310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=34310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=34310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}