{"id":22651,"date":"2025-04-19T06:13:08","date_gmt":"2025-04-18T22:13:08","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/22651.html"},"modified":"2025-04-19T06:13:08","modified_gmt":"2025-04-18T22:13:08","slug":"opensearch%e9%9b%86%e7%be%a4%e9%83%a8%e7%bd%b2%e3%80%90docker%e3%80%81%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%81helm%e5%a4%9a%e7%a7%8d%e9%83%a8%e7%bd%b2%e6%96%b9%e5%bc%8f%e3%80%91","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/22651.html","title":{"rendered":"Opensearch\u96c6\u7fa4\u90e8\u7f72\u3010docker\u3001\u670d\u52a1\u5668\u3001Helm\u591a\u79cd\u90e8\u7f72\u65b9\u5f0f\u3011"},"content":{"rendered":"<h2>\u64cd\u4f5c\u7cfb\u7edf\u517c\u5bb9\u6027<\/h2>\n<p>\u6211\u4eec\u5efa\u8bae\u5728 Red Hat Enterprise Linux (RHEL) \u6216\u4f7f\u7528systemd\u7684\u57fa\u4e8e Debian \u7684 Linux \u53d1\u884c\u7248\u4e0a\u5b89\u88c5 OpenSearch &#xff0c;\u4f8b\u5982 CentOS\u3001Amazon Linux 2 \u548c Ubuntu Long-Term Support (LTS)\u3002OpenSearch \u5e94\u8be5\u9002\u7528\u4e8e\u5927\u591a\u6570 Linux \u53d1\u884c\u7248&#xff0c;\u4f46\u6211\u4eec\u53ea\u6d4b\u8bd5\u4e86\u5c11\u6570\u51e0\u4e2a\u3002\u5bf9\u4e8e\u4efb\u4f55\u7248\u672c\u7684 OpenSearch&#xff0c;\u6211\u4eec\u5efa\u8bae\u4f7f\u7528 RHEL 7 \u6216 8\u3001CentOS 7 \u6216 8\u3001Amazon Linux 2\u3001Ubuntu 16.04\u300118.04 \u6216 20.04\u3002<\/p>\n<h2>Java \u517c\u5bb9\u6027<\/h2>\n<p>\u9002\u7528\u4e8e Linux \u7684 OpenSearch \u53d1\u884c\u7248\u5728\u76ee\u5f55\u4e2d\u9644\u5e26\u4e86\u517c\u5bb9\u7684Adoptium JDK\u7248\u672c\u7684 Java \u3002jdk\u8981\u67e5\u627e JDK \u7248\u672c&#xff0c;\u8bf7\u8fd0\u884c.\/jdk\/bin\/java -version. \u4f8b\u5982&#xff0c;OpenSearch 1.0.0 tarball \u968f\u9644 Java 15.0.1&#043;9&#xff08;\u975e LTS&#xff09;&#xff0c;OpenSearch 1.3.0 \u968f\u9644 Java 11.0.14.1&#043;1 (LTS)&#xff0c;OpenSearch 2.0.0 \u968f\u9644 Java 17.0.2 &#043;8 (LTS)\u3002OpenSearch \u4f7f\u7528\u6240\u6709\u517c\u5bb9\u7684 Java \u7248\u672c\u8fdb\u884c\u4e86\u6d4b\u8bd5\u3002<\/p>\n<table>\n<tr>OpenSearch\u7248\u672c\u517c\u5bb9\u7684 Java \u7248\u672c\u9700\u8981 Java \u7248\u672c<\/tr>\n<tbody>\n<tr>\n<td>1.0 &#8211; 1.2.x<\/td>\n<td>11, 15<\/td>\n<td>15.0.1&#043;9<\/td>\n<\/tr>\n<tr>\n<td>1.3.x<\/td>\n<td>8, 11, 14<\/td>\n<td>11.0.14.1&#043;1<\/td>\n<\/tr>\n<tr>\n<td>2.0.0<\/td>\n<td>11, 17<\/td>\n<td>17.0.2&#043;8<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>docker\u5b89\u88c5<\/h2>\n<h3>\u521b\u5efadocker-compose.yml<\/h3>\n<p>version: <span class=\"token string\">&#039;3&#039;<\/span><br \/>\nservices:<br \/>\n  opensearch-node1:<br \/>\n    image: opensearchproject\/opensearch:2.2.0<br \/>\n    container_name: opensearch-node1<br \/>\n    environment:<br \/>\n      &#8211; cluster.name<span class=\"token operator\">&#061;<\/span>opensearch-cluster<br \/>\n      &#8211; node.name<span class=\"token operator\">&#061;<\/span>opensearch-node1<br \/>\n      &#8211; discovery.seed_hosts<span class=\"token operator\">&#061;<\/span>opensearch-node1,opensearch-node2<br \/>\n      &#8211; cluster.initial_master_nodes<span class=\"token operator\">&#061;<\/span>opensearch-node1,opensearch-node2<br \/>\n      &#8211; bootstrap.memory_lock<span class=\"token operator\">&#061;<\/span>true <span class=\"token comment\"># along with the memlock settings below, disables swapping<\/span><br \/>\n      &#8211; <span class=\"token string\">&#034;OPENSEARCH_JAVA_OPTS&#061;-Xms512m -Xmx512m&#034;<\/span> <span class=\"token comment\"># minimum and maximum Java heap size, recommend setting both to 50% of system RAM<\/span><br \/>\n    ulimits:<br \/>\n      memlock:<br \/>\n        soft: -1<br \/>\n        hard: -1<br \/>\n      nofile:<br \/>\n        soft: <span class=\"token number\">65536<\/span> <span class=\"token comment\"># maximum number of open files for the OpenSearch user, set to at least 65536 on modern systems<\/span><br \/>\n        hard: <span class=\"token number\">65536<\/span><br \/>\n    volumes:<br \/>\n      &#8211; opensearch-data1:\/usr\/share\/opensearch\/data<br \/>\n    ports:<br \/>\n      &#8211; <span class=\"token number\">9200<\/span>:9200<br \/>\n      &#8211; <span class=\"token number\">9600<\/span>:9600 <span class=\"token comment\"># required for Performance Analyzer<\/span><br \/>\n    networks:<br \/>\n      &#8211; opensearch-net<br \/>\n  opensearch-node2:<br \/>\n    image: opensearchproject\/opensearch:2.2.0<br \/>\n    container_name: opensearch-node2<br \/>\n    environment:<br \/>\n      &#8211; cluster.name<span class=\"token operator\">&#061;<\/span>opensearch-cluster<br \/>\n      &#8211; node.name<span class=\"token operator\">&#061;<\/span>opensearch-node2<br \/>\n      &#8211; discovery.seed_hosts<span class=\"token operator\">&#061;<\/span>opensearch-node1,opensearch-node2<br \/>\n      &#8211; cluster.initial_master_nodes<span class=\"token operator\">&#061;<\/span>opensearch-node1,opensearch-node2<br \/>\n      &#8211; bootstrap.memory_lock<span class=\"token operator\">&#061;<\/span>true<br \/>\n      &#8211; <span class=\"token string\">&#034;OPENSEARCH_JAVA_OPTS&#061;-Xms512m -Xmx512m&#034;<\/span><br \/>\n    ulimits:<br \/>\n      memlock:<br \/>\n        soft: -1<br \/>\n        hard: -1<br \/>\n      nofile:<br \/>\n        soft: <span class=\"token number\">65536<\/span><br \/>\n        hard: <span class=\"token number\">65536<\/span><br \/>\n    volumes:<br \/>\n      &#8211; opensearch-data2:\/usr\/share\/opensearch\/data<br \/>\n    networks:<br \/>\n      &#8211; opensearch-net<br \/>\n  opensearch-dashboards:<br \/>\n    image: opensearchproject\/opensearch-dashboards:2.2.0<br \/>\n    container_name: opensearch-dashboards<br \/>\n    ports:<br \/>\n      &#8211; <span class=\"token number\">5601<\/span>:5601<br \/>\n    expose:<br \/>\n      &#8211; <span class=\"token string\">&#034;5601&#034;<\/span><br \/>\n    environment:<br \/>\n      OPENSEARCH_HOSTS: <span class=\"token string\">&#039;[&#034;https:\/\/opensearch-node1:9200&#034;,&#034;https:\/\/opensearch-node2:9200&#034;]&#039;<\/span> <span class=\"token comment\"># must be a string with no spaces when specified as an environment variable<\/span><br \/>\n    networks:<br \/>\n      &#8211; opensearch-net<\/p>\n<p>volumes:<br \/>\n  opensearch-data1:<br \/>\n  opensearch-data2:<\/p>\n<p>networks:<br \/>\n  opensearch-net:<\/p>\n<h3>\u542f\u52a8\u96c6\u7fa4<\/h3>\n<p>docker-compose up<\/p>\n<p>\u542f\u52a8\u65e5\u5fd7 <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221304-6802ce70c9b79.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> \u770b\u5230\u4ee5\u4e0b\u4fe1\u606f\u5e76\u4e14\u65e5\u5fd7\u6ca1\u660e\u663eerror\u8bf4\u660e\u542f\u52a8\u6210\u529f <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221305-6802ce71013e9.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> \u67e5\u770b\u96c6\u7fa4\u8282\u70b9 <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221305-6802ce71218e5.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> \u901a\u8fc7opensearch-dashboard\u67e5\u770b <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221305-6802ce713da8a.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> \u8bbf\u95ee\u670d\u52a1\u5668\u76845601\u7aef\u53e3 \u7528\u6237\u540d\u5bc6\u7801\u4e3aadmin admin <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221305-6802ce715c49b.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> \u8fdb\u5165opensearch-dashboard\u9875\u9762 <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221305-6802ce718ac4b.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> \u505c\u6b62\u96c6\u7fa4<\/p>\n<p>docker-compose down<\/p>\n<p>\u505c\u6b62\u96c6\u7fa4\u5e76\u5220\u9664\u6240\u6709\u6570\u636e\u4fe1\u606f<\/p>\n<p>docker-compose down -v<\/p>\n<h2>\u88f8\u670d\u52a1\u5668\u5b89\u88c5<\/h2>\n<p>\u8bbe\u8ba1\u96c6\u7fa4\u7684\u65b9\u6cd5\u6709\u5f88\u591a\u79cd\u7ec4\u5408\u3002 \u4e0b\u56fe\u663e\u793a\u4e86\u4e00\u4e2a\u57fa\u672c\u67b6\u6784&#xff0c;\u5176\u4e2d\u5305\u62ec\u4e00\u4e2a\u56db\u8282\u70b9\u96c6\u7fa4&#xff0c;\u8be5\u96c6\u7fa4\u5177\u6709\u4e00\u4e2a\u96c6\u7fa4\u7ba1\u7406\u5668\u8282\u70b9\u3001\u4e00\u4e2a\u534f\u8c03\u8282\u70b9\u548c\u4e24\u4e2a\u6570\u636e\u8282\u70b9\u3002 \u66f4\u591a\u8282\u70b9\u4fe1\u606f\u8bf7\u53c2\u7167\u914d\u7f6e\u8be6\u89e3\u3002<\/p>\n<h3>\u96c6\u7fa4\u67b6\u6784<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221305-6802ce71bf08c.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h3>\u670d\u52a1\u5668\u89c4\u5212<\/h3>\n<table>\n<tr>IP\u5730\u5740\u914d\u7f6e\u8282\u70b9<\/tr>\n<tbody>\n<tr>\n<td>172.21.84.119<\/td>\n<td>2C 4G 100G SATA<\/td>\n<td>Cluster manager data ingest<\/td>\n<\/tr>\n<tr>\n<td>172.21.84.120<\/td>\n<td>2C 4G 100G SATA<\/td>\n<td>Cluster manager data ingest<\/td>\n<\/tr>\n<tr>\n<td>172.21.84.121<\/td>\n<td>2C 4G 100G SATA<\/td>\n<td>Cluster manager data ingest<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u8fdb\u7fa4\u4e4b\u95f4\u8bf7\u786e\u4fdd\u4ee5\u4e0b\u7aef\u53e3\u662f\u8fde\u901a\u7684\u3002 \u9700\u8981\u4e3a OpenSearch \u7ec4\u4ef6\u6253\u5f00\u4ee5\u4e0b\u7aef\u53e3\u3002<\/p>\n<table>\n<tr>\u7aef\u53e3\u53f7\u5f00\u653e\u641c\u7d22\u7ec4\u4ef6<\/tr>\n<tbody>\n<tr>\n<td>443<\/td>\n<td>AWS OpenSearch Service \u4e2d\u7684 OpenSearch \u4eea\u8868\u677f&#xff0c;\u5177\u6709\u4f20\u8f93\u4e2d\u52a0\u5bc6 (TLS)<\/td>\n<\/tr>\n<tr>\n<td>5601<\/td>\n<td>\u5f00\u653e\u641c\u7d22\u4eea\u8868\u677f<\/td>\n<\/tr>\n<tr>\n<td>9200<\/td>\n<td>\u5f00\u653e\u641c\u7d22 REST API<\/td>\n<\/tr>\n<tr>\n<td>9250<\/td>\n<td>\u8de8\u96c6\u7fa4\u641c\u7d22<\/td>\n<\/tr>\n<tr>\n<td>9300<\/td>\n<td>\u8282\u70b9\u901a\u4fe1\u548c\u4f20\u8f93<\/td>\n<\/tr>\n<tr>\n<td>9600<\/td>\n<td>\u6027\u80fd\u5206\u6790\u5668<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>\u5b89\u88c5\u6b65\u9aa4<\/h3>\n<li>\u8bf7\u5728\u6240\u6709\u8282\u70b9\u5b89\u88c5\u5355\u673a\u7248opensearch\u5e76\u6d4b\u8bd5\u542f\u52a8\u6210\u529f&#xff08;\u5b89\u88c5\u6b65\u9aa4\u8bf7\u53c2\u9605\u2013\u5355\u673a\u7248\u5b89\u88c5&#xff09;<\/li>\n<li>\u5220\u9664\u5bf9\u5e94\u5355\u673a\u542f\u52a8opensearch\u7684\u65e5\u5fd7\u548c\u6570\u636e\u6587\u4ef6\u76ee\u5f55 data logs<\/li>\n<li>\u4fee\u6539\u914d\u7f6e\u6587\u4ef6<\/li>\n<h4>172.21.84.119 \u914d\u7f6e\u6587\u4ef6<\/h4>\n<p>cluster.name: bigdata<br \/>\nnode.name: master01<br \/>\nnode.roles: <span class=\"token punctuation\">[<\/span>cluster_manager ,data, ingest<span class=\"token punctuation\">]<\/span><br \/>\npath.data: \/data\/opensearch\/opensearch-2.2.0\/data<br \/>\npath.logs: \/data\/opensearch\/opensearch-2.2.0\/logs<br \/>\nnetwork.host: <span class=\"token number\">172.21<\/span>.84.119<br \/>\nhttp.port: <span class=\"token number\">9200<\/span><br \/>\ndiscovery.seed_hosts: <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;master01&#034;<\/span>, <span class=\"token string\">&#034;node01&#034;<\/span>, <span class=\"token string\">&#034;node02&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\ncluster.initial_cluster_manager_nodes: <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;master01&#034;<\/span>, <span class=\"token string\">&#034;node01&#034;<\/span>, <span class=\"token string\">&#034;node02&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\nplugins.security.ssl.transport.pemcert_filepath: esnode.pem<br \/>\nplugins.security.ssl.transport.pemkey_filepath: esnode-key.pem<br \/>\nplugins.security.ssl.transport.pemtrustedcas_filepath: root-ca.pem<br \/>\nplugins.security.ssl.transport.enforce_hostname_verification: <span class=\"token boolean\">false<\/span><br \/>\nplugins.security.ssl.http.enabled: <span class=\"token boolean\">true<\/span><br \/>\nplugins.security.ssl.http.pemcert_filepath: esnode.pem<br \/>\nplugins.security.ssl.http.pemkey_filepath: esnode-key.pem<br \/>\nplugins.security.ssl.http.pemtrustedcas_filepath: root-ca.pem<br \/>\nplugins.security.allow_unsafe_democertificates: <span class=\"token boolean\">true<\/span><br \/>\nplugins.security.allow_default_init_securityindex: <span class=\"token boolean\">true<\/span><br \/>\nplugins.security.authcz.admin_dn:<br \/>\n<span class=\"token assign-left variable\">CN<\/span><span class=\"token operator\">&#061;<\/span>kirk,OU<span class=\"token operator\">&#061;<\/span>client,O<span class=\"token operator\">&#061;<\/span>client,L<span class=\"token operator\">&#061;<\/span>test, <span class=\"token assign-left variable\">C<\/span><span class=\"token operator\">&#061;<\/span>de<br \/>\nplugins.security.audit.type: internal_opensearch<br \/>\nplugins.security.enable_snapshot_restore_privilege: <span class=\"token boolean\">true<\/span><br \/>\nplugins.security.check_snapshot_restore_write_privileges: <span class=\"token boolean\">true<\/span><br \/>\nplugins.security.restapi.roles_enabled: <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;all_access&#034;<\/span>, <span class=\"token string\">&#034;security_rest_api_access&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\nplugins.security.system_indices.enabled: <span class=\"token boolean\">true<\/span><br \/>\nplugins.security.system_indices.indices: <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;.plugins-ml-model&#034;<\/span>, <span class=\"token string\">&#034;.plugins-ml-task&#034;<\/span>, <span class=\"token string\">&#034;.opendistro-alerting-config&#034;<\/span>, <span class=\"token string\">&#034;.opendistro-alerting-alert*&#034;<\/span>, <span class=\"token string\">&#034;.opendistro-anomaly-results*&#034;<\/span>, <span class=\"token string\">&#034;.opendistro-anomaly-detector*&#034;<\/span>, <span class=\"token string\">&#034;.opendistro-anomaly-checkpoints&#034;<\/span>, <span class=\"token string\">&#034;.opendistro-anomaly-detection-state&#034;<\/span>, <span class=\"token string\">&#034;.opendistro-reports-&#034;<\/span>, <span class=\"token string\">&#034;.opensearch-notifications-&#034;<\/span>, <span class=\"token string\">&#034;.opensearch-notebooks&#034;<\/span>, <span class=\"token string\">&#034;.opensearch-observability&#034;<\/span>, <span class=\"token string\">&#034;.opendistro-asynchronous-search-response*&#034;<\/span>, <span class=\"token string\">&#034;.replication-metadata-store&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\nnode.max_local_storage_nodes: <span class=\"token number\">3<\/span><\/p>\n<h4>172.21.84.120 \u914d\u7f6e\u6587\u4ef6<\/h4>\n<p>\u6ce8: \u76f8\u540c\u914d\u7f6e\u4e0d\u518d\u5c55\u793a<\/p>\n<p>cluster.name: bigdata<br \/>\nnode.name: master01<br \/>\nnode.roles: <span class=\"token punctuation\">[<\/span>cluster_manager ,data, ingest<span class=\"token punctuation\">]<\/span><br \/>\npath.data: \/data\/opensearch\/opensearch-2.2.0\/data<br \/>\npath.logs: \/data\/opensearch\/opensearch-2.2.0\/logs<br \/>\nnetwork.host: <span class=\"token number\">172.21<\/span>.84.120<\/p>\n<h4>172.21.84.121 \u914d\u7f6e\u6587\u4ef6<\/h4>\n<p>cluster.name: bigdata<br \/>\nnode.name: master01<br \/>\nnode.roles: <span class=\"token punctuation\">[<\/span>cluster_manager ,data, ingest<span class=\"token punctuation\">]<\/span><br \/>\npath.data: \/data\/opensearch\/opensearch-2.2.0\/data<br \/>\npath.logs: \/data\/opensearch\/opensearch-2.2.0\/logs<br \/>\nnetwork.host: <span class=\"token number\">172.21<\/span>.84.121<\/p>\n<h4>\u4f9d\u6b21\u542f\u52a8\u4e09\u53f0openserach<\/h4>\n<p><span class=\"token function\">su<\/span> &#8211; opensearch -c <span class=\"token string\">&#034;\/data\/opensearch\/opensearch-2.2.0\/bin\/opensearch&#034;<\/span><\/p>\n<p>\u770b\u5230\u5982\u4e0b\u4fe1\u606f&#xff0c;\u96c6\u7fa4\u521b\u5efa\u6210\u529f <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221305-6802ce71f036a.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h4>\u67e5\u770b\u96c6\u7fa4<\/h4>\n<p>\u67e5\u770b\u8282\u70b9\u4fe1\u606f <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221306-6802ce7218d73.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> \u67e5\u770b\u96c6\u7fa4\u5065\u5eb7\u72b6\u6001 <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221306-6802ce7237661.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> \u81f3\u6b64\u88f8\u91d1\u5c5e\u7248\u90e8\u7f72\u5b8c\u6210<\/p>\n<h2>Helm\u5b89\u88c5<\/h2>\n<h3>\u5b98\u65b9\u5b89\u88c5<\/h3>\n<p>\u8bf7\u786e\u4fddk8s\u96c6\u7fa4\u5b89\u88c5\u4e86helm\u547d\u4ee4&#xff0c;\u4e14\u53ef\u4ee5\u94fe\u63a5\u5916\u7f51\u3002\u9ed8\u8ba4 Helm \u90e8\u7f72\u4e00\u4e2a\u4e09\u8282\u70b9\u96c6\u7fa4\u3002\u6211\u4eec\u5efa\u8bae\u60a8\u4e3a\u6b64\u90e8\u7f72\u81f3\u5c11\u6709 8 GiB \u7684\u53ef\u7528\u5185\u5b58\u3002 \u4f8b\u5982&#xff0c;\u5982\u679c\u53ef\u7528\u5185\u5b58\u5c11\u4e8e 4 GiB&#xff0c;\u53ef\u80fd\u4f1a\u90e8\u7f72\u4f1a\u5931\u8d25\u3002 \u7248\u672c\u8981\u6c42<\/p>\n<ul>\n<li>Kubernetes &gt;&#061; 1.14<\/li>\n<li>Helm &gt;&#061; 2.17.0<\/li>\n<\/ul>\n<p>Kubernetes \u4e2d\u90e8\u7f72 NFS-Subdir-External-Provisioner \u4e3a NFS \u63d0\u4f9b\u52a8\u6001\u5206\u914d\u5377 <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221306-6802ce7254ea8.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> \u5e76\u4e14\u81ea\u52a8\u7ed1\u5b9apv,pvc,\u82e5\u7ed1\u5b9a\u5931\u8d25\u9700\u6267\u884c<\/p>\n<p>kubectl patch storageclass nfs-storage -p <span class=\"token string\">&#039;{&#034;metadata&#034;: {&#034;annotations&#034;:{&#034;storageclass.kubernetes.io\/is-default-class&#034;:&#034;true&#034;}}}&#039;<\/span><\/p>\n<h4>\u5b89\u88c5\u6b65\u9aa4<\/h4>\n<li>\u5c06opensearch helm-charts \u5b58\u50a8\u5e93\u6dfb\u52a0\u5230 Helm&#xff1a; helm repo add opensearch https:\/\/opensearch-project.github.io\/helm-charts\/ <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221306-6802ce7270606.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/li>\n<li>\u4ece\u56fe\u8868\u5b58\u50a8\u5e93\u672c\u5730\u66f4\u65b0\u53ef\u7528\u6e90&#xff1a;<\/li>\n<p> helm repo update<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221306-6802ce728b75c.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<li>\u8981\u641c\u7d22\u4e0e OpenSearch \u76f8\u5173\u7684 Helm \u56fe\u8868<\/li>\n<p>helm search repo opensearch<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221306-6802ce72a85fa.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<li>\u90e8\u7f72 OpenSearch<\/li>\n<p>helm <span class=\"token function\">install<\/span> my-deployment opensearch\/opensearch<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221306-6802ce72c5554.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> \u67e5\u770b\u90e8\u7f72\u7684pod <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221306-6802ce72e6ff4.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> \u786e\u8ba4\u8282\u70b9\u8fd0\u884c\u72b6\u6001 <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221307-6802ce7314b01.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> \u5378\u8f7dopensearch <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221307-6802ce733fcbc.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> \u8fd0\u884c helm delete my-deployment<\/p>\n<h3>\u81ea\u5b9a\u4e49\u5b89\u88c5<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221307-6802ce735cf53.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/> \u5176\u4e2ddata\u8282\u70b9\u4e5f\u53ef\u62c6\u5206\u51fa\u6765\u672c\u6587\u4e0d\u505a\u5c55\u793a\u3002<\/p>\n<p>openserach-master.yaml<\/p>\n<p> &#8212;<br \/>\nclusterName: <span class=\"token string\">&#034;opensearch-cluster&#034;<\/span><br \/>\nnodeGroup: <span class=\"token string\">&#034;master&#034;<\/span><\/p>\n<p><span class=\"token comment\"># If discovery.type in the opensearch configuration is set to &#034;single-node&#034;,<\/span><br \/>\n<span class=\"token comment\"># this should be set to &#034;true&#034;<\/span><br \/>\n<span class=\"token comment\"># If &#034;true&#034;, replicas will be forced to 1<\/span><br \/>\nsingleNode: <span class=\"token boolean\">false<\/span><\/p>\n<p><span class=\"token comment\"># The service that non master groups will try to connect to when joining the cluster<\/span><br \/>\n<span class=\"token comment\"># This should be set to clusterName &#043; &#034;-&#034; &#043; nodeGroup for your master group<\/span><br \/>\nmasterService: <span class=\"token string\">&#034;opensearch-cluster-master&#034;<\/span><\/p>\n<p><span class=\"token comment\"># OpenSearch roles that will be applied to this nodeGroup<\/span><br \/>\n<span class=\"token comment\"># These will be set as environment variable &#034;node.roles&#034;. E.g. node.roles&#061;master,ingest,data,remote_cluster_client<\/span><br \/>\nroles:<br \/>\n  &#8211; master<br \/>\n  &#8211; ingest<br \/>\n  &#8211; data<\/p>\n<p>replicas: <span class=\"token number\">3<\/span><\/p>\n<p><span class=\"token comment\"># if not set, falls back to parsing .Values.imageTag, then .Chart.appVersion.<\/span><br \/>\nmajorVersion: <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p>global:<br \/>\n  <span class=\"token comment\"># Set if you want to change the default docker registry, e.g. a private one.<\/span><br \/>\n  dockerRegistry: <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># Allows you to add any config files in {{ .Values.opensearchHome }}\/config<\/span><br \/>\nopensearchHome: \/usr\/share\/opensearch<br \/>\n<span class=\"token comment\"># such as opensearch.yml and log4j2.properties<\/span><br \/>\nconfig:<br \/>\n  <span class=\"token comment\"># Values must be YAML literal style scalar \/ YAML multiline string.<\/span><br \/>\n  <span class=\"token comment\"># &lt;filename&gt;: |<\/span><br \/>\n  <span class=\"token comment\">#   &lt;formatted-value(s)&gt;<\/span><br \/>\n  <span class=\"token comment\"># log4j2.properties: |<\/span><br \/>\n  <span class=\"token comment\">#   status &#061; error<\/span><br \/>\n  <span class=\"token comment\">#<\/span><br \/>\n  <span class=\"token comment\">#   appender.console.type &#061; Console<\/span><br \/>\n  <span class=\"token comment\">#   appender.console.name &#061; console<\/span><br \/>\n  <span class=\"token comment\">#   appender.console.layout.type &#061; PatternLayout<\/span><br \/>\n  <span class=\"token comment\">#   appender.console.layout.pattern &#061; [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n<\/span><br \/>\n  <span class=\"token comment\">#<\/span><br \/>\n  <span class=\"token comment\">#   rootLogger.level &#061; info<\/span><br \/>\n  <span class=\"token comment\">#   rootLogger.appenderRef.console.ref &#061; console<\/span><br \/>\n  opensearch.yml: <span class=\"token operator\">|<\/span><br \/>\n    cluster.name: opensearch-cluster<br \/>\n    <span class=\"token comment\"># Bind to all interfaces because we don&#039;t know what IP address Docker will assign to us.<\/span><br \/>\n    network.host: <span class=\"token number\">0.0<\/span>.0.0<br \/>\n    <span class=\"token comment\"># Setting network.host to a non-loopback address enables the annoying bootstrap checks. &#034;Single-node&#034; mode disables them again.<\/span><br \/>\n    <span class=\"token comment\"># Implicitly done if &#034;.singleNode&#034; is set to &#034;true&#034;.<\/span><br \/>\n    <span class=\"token comment\"># discovery.type: single-node<\/span><br \/>\n    <span class=\"token comment\"># Start OpenSearch Security Demo Configuration<\/span><br \/>\n    <span class=\"token comment\"># WARNING: revise all the lines below before you go into production<\/span><br \/>\n    plugins:<br \/>\n      security:<br \/>\n        ssl:<br \/>\n          transport:<br \/>\n            pemcert_filepath: esnode.pem<br \/>\n            pemkey_filepath: esnode-key.pem<br \/>\n            pemtrustedcas_filepath: root-ca.pem<br \/>\n            enforce_hostname_verification: <span class=\"token boolean\">false<\/span><br \/>\n          http:<br \/>\n            enabled: <span class=\"token boolean\">true<\/span><br \/>\n            pemcert_filepath: esnode.pem<br \/>\n            pemkey_filepath: esnode-key.pem<br \/>\n            pemtrustedcas_filepath: root-ca.pem<br \/>\n        allow_unsafe_democertificates: <span class=\"token boolean\">true<\/span><br \/>\n        allow_default_init_securityindex: <span class=\"token boolean\">true<\/span><br \/>\n        authcz:<br \/>\n          admin_dn:<br \/>\n            &#8211; <span class=\"token assign-left variable\">CN<\/span><span class=\"token operator\">&#061;<\/span>kirk,OU<span class=\"token operator\">&#061;<\/span>client,O<span class=\"token operator\">&#061;<\/span>client,L<span class=\"token operator\">&#061;<\/span>test,C<span class=\"token operator\">&#061;<\/span>de<br \/>\n        audit.type: internal_opensearch<br \/>\n        enable_snapshot_restore_privilege: <span class=\"token boolean\">true<\/span><br \/>\n        check_snapshot_restore_write_privileges: <span class=\"token boolean\">true<\/span><br \/>\n        restapi:<br \/>\n          roles_enabled: <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;all_access&#034;<\/span>, <span class=\"token string\">&#034;security_rest_api_access&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n        system_indices:<br \/>\n          enabled: <span class=\"token boolean\">true<\/span><br \/>\n          indices:<br \/>\n            <span class=\"token punctuation\">[<\/span><br \/>\n              <span class=\"token string\">&#034;.opendistro-alerting-config&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-alerting-alert*&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-anomaly-results*&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-anomaly-detector*&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-anomaly-checkpoints&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-anomaly-detection-state&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-reports-*&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-notifications-*&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-notebooks&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-asynchronous-search-response*&#034;<\/span>,<br \/>\n            <span class=\"token punctuation\">]<\/span><br \/>\n    <span class=\"token comment\">######## End OpenSearch Security Demo Configuration ########<\/span><br \/>\n  <span class=\"token comment\"># log4j2.properties:<\/span><\/p>\n<p><span class=\"token comment\"># Extra environment variables to append to this nodeGroup<\/span><br \/>\n<span class=\"token comment\"># This will be appended to the current &#039;env:&#039; key. You can use any of the kubernetes env<\/span><br \/>\n<span class=\"token comment\"># syntax here<\/span><br \/>\nextraEnvs: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n<span class=\"token comment\">#  &#8211; name: MY_ENVIRONMENT_VAR<\/span><br \/>\n<span class=\"token comment\">#    value: the_value_goes_here<\/span><\/p>\n<p><span class=\"token comment\"># Allows you to load environment variables from kubernetes secret or config map<\/span><br \/>\nenvFrom: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n<span class=\"token comment\"># &#8211; secretRef:<\/span><br \/>\n<span class=\"token comment\">#     name: env-secret<\/span><br \/>\n<span class=\"token comment\"># &#8211; configMapRef:<\/span><br \/>\n<span class=\"token comment\">#     name: config-map<\/span><\/p>\n<p><span class=\"token comment\"># A list of secrets and their paths to mount inside the pod<\/span><br \/>\n<span class=\"token comment\"># This is useful for mounting certificates for security and for mounting<\/span><br \/>\n<span class=\"token comment\"># the X-Pack license<\/span><br \/>\nsecretMounts: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>hostAliases: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n<span class=\"token comment\"># &#8211; ip: &#034;127.0.0.1&#034;<\/span><br \/>\n<span class=\"token comment\">#   hostnames:<\/span><br \/>\n<span class=\"token comment\">#   &#8211; &#034;foo.local&#034;<\/span><br \/>\n<span class=\"token comment\">#   &#8211; &#034;bar.local&#034;<\/span><\/p>\n<p>image:<br \/>\n  repository: <span class=\"token string\">&#034;opensearchproject\/opensearch&#034;<\/span><br \/>\n  <span class=\"token comment\"># override image tag, which is .Chart.AppVersion by default<\/span><br \/>\n  tag: <span class=\"token string\">&#034;&#034;<\/span><br \/>\n  pullPolicy: <span class=\"token string\">&#034;IfNotPresent&#034;<\/span><\/p>\n<p>podAnnotations: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token comment\"># iam.amazonaws.com\/role: es-cluster<\/span><\/p>\n<p><span class=\"token comment\"># additionals labels<\/span><br \/>\nlabels: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p>opensearchJavaOpts: <span class=\"token string\">&#034;-Xmx512M -Xms512M&#034;<\/span><\/p>\n<p>resources:<br \/>\n  requests:<br \/>\n    cpu: <span class=\"token string\">&#034;500m&#034;<\/span><br \/>\n    memory: <span class=\"token string\">&#034;100Mi&#034;<\/span><\/p>\n<p>initResources: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token comment\">#  limits:<\/span><br \/>\n<span class=\"token comment\">#     cpu: &#034;25m&#034;<\/span><br \/>\n<span class=\"token comment\">#     memory: &#034;128Mi&#034;<\/span><br \/>\n<span class=\"token comment\">#  requests:<\/span><br \/>\n<span class=\"token comment\">#     cpu: &#034;25m&#034;<\/span><br \/>\n<span class=\"token comment\">#     memory: &#034;128Mi&#034;<\/span><\/p>\n<p>sidecarResources: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token comment\">#   limits:<\/span><br \/>\n<span class=\"token comment\">#     cpu: &#034;25m&#034;<\/span><br \/>\n<span class=\"token comment\">#     memory: &#034;128Mi&#034;<\/span><br \/>\n<span class=\"token comment\">#   requests:<\/span><br \/>\n<span class=\"token comment\">#     cpu: &#034;25m&#034;<\/span><br \/>\n<span class=\"token comment\">#     memory: &#034;128Mi&#034;<\/span><\/p>\n<p>networkHost: <span class=\"token string\">&#034;0.0.0.0&#034;<\/span><\/p>\n<p>rbac:<br \/>\n  create: <span class=\"token boolean\">false<\/span><br \/>\n  serviceAccountAnnotations: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n  serviceAccountName: <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p>podSecurityPolicy:<br \/>\n  create: <span class=\"token boolean\">false<\/span><br \/>\n  name: <span class=\"token string\">&#034;&#034;<\/span><br \/>\n  spec:<br \/>\n    privileged: <span class=\"token boolean\">true<\/span><br \/>\n    fsGroup:<br \/>\n      rule: RunAsAny<br \/>\n    runAsUser:<br \/>\n      rule: RunAsAny<br \/>\n    seLinux:<br \/>\n      rule: RunAsAny<br \/>\n    supplementalGroups:<br \/>\n      rule: RunAsAny<br \/>\n    volumes:<br \/>\n      &#8211; secret<br \/>\n      &#8211; configMap<br \/>\n      &#8211; persistentVolumeClaim<br \/>\n      &#8211; emptyDir<\/p>\n<p>persistence:<br \/>\n  enabled: <span class=\"token boolean\">true<\/span><br \/>\n  <span class=\"token comment\"># Set to false to disable the &#096;fsgroup-volume&#096; initContainer that will update permissions on the persistent disk.<\/span><br \/>\n  enableInitChown: <span class=\"token boolean\">true<\/span><br \/>\n  <span class=\"token comment\"># override image, which is busybox by default<\/span><br \/>\n  <span class=\"token comment\"># image: busybox<\/span><br \/>\n  <span class=\"token comment\"># override image tag, which is latest by default<\/span><br \/>\n  <span class=\"token comment\"># imageTag:<\/span><br \/>\n  labels:<br \/>\n    <span class=\"token comment\"># Add default labels for the volumeClaimTemplate of the StatefulSet<\/span><br \/>\n    enabled: <span class=\"token boolean\">false<\/span><br \/>\n  <span class=\"token comment\"># OpenSearch Persistent Volume Storage Class<\/span><br \/>\n  <span class=\"token comment\"># If defined, storageClassName: &lt;storageClass&gt;<\/span><br \/>\n  <span class=\"token comment\"># If set to &#034;-&#034;, storageClassName: &#034;&#034;, which disables dynamic provisioning<\/span><br \/>\n  <span class=\"token comment\"># If undefined (the default) or set to null, no storageClassName spec is<\/span><br \/>\n  <span class=\"token comment\">#   set, choosing the default provisioner.  (gp2 on AWS, standard on<\/span><br \/>\n  <span class=\"token comment\">#   GKE, AWS &amp; OpenStack)<\/span><br \/>\n  <span class=\"token comment\">#<\/span><br \/>\n  <span class=\"token comment\"># storageClass: &#034;-&#034;<\/span><br \/>\n  accessModes:<br \/>\n    &#8211; ReadWriteOnce<br \/>\n  size: 5Gi<br \/>\n  annotations: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p>extraVolumes: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n  <span class=\"token comment\"># &#8211; name: extras<\/span><br \/>\n  <span class=\"token comment\">#   emptyDir: {}<\/span><\/p>\n<p>extraVolumeMounts: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n  <span class=\"token comment\"># &#8211; name: extras<\/span><br \/>\n  <span class=\"token comment\">#   mountPath: \/usr\/share\/extras<\/span><br \/>\n  <span class=\"token comment\">#   readOnly: true<\/span><\/p>\n<p>extraContainers: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n  <span class=\"token comment\"># &#8211; name: do-something<\/span><br \/>\n  <span class=\"token comment\">#   image: busybox<\/span><br \/>\n  <span class=\"token comment\">#   command: [&#039;do&#039;, &#039;something&#039;]<\/span><\/p>\n<p>extraInitContainers: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n  <span class=\"token comment\"># &#8211; name: do-somethings<\/span><br \/>\n  <span class=\"token comment\">#   image: busybox<\/span><br \/>\n  <span class=\"token comment\">#   command: [&#039;do&#039;, &#039;something&#039;]<\/span><\/p>\n<p><span class=\"token comment\"># This is the PriorityClass settings as defined in<\/span><br \/>\n<span class=\"token comment\"># https:\/\/kubernetes.io\/docs\/concepts\/configuration\/pod-priority-preemption\/#priorityclass<\/span><br \/>\npriorityClassName: <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># By default this will make sure two pods don&#039;t end up on the same node<\/span><br \/>\n<span class=\"token comment\"># Changing this to a region would allow you to spread pods across regions<\/span><br \/>\nantiAffinityTopologyKey: <span class=\"token string\">&#034;kubernetes.io\/hostname&#034;<\/span><\/p>\n<p><span class=\"token comment\"># Hard means that by default pods will only be scheduled if there are enough nodes for them<\/span><br \/>\n<span class=\"token comment\"># and that they will never end up on the same node. Setting this to soft will do this &#034;best effort&#034;<\/span><br \/>\nantiAffinity: <span class=\"token string\">&#034;soft&#034;<\/span><\/p>\n<p><span class=\"token comment\"># This is the node affinity settings as defined in<\/span><br \/>\n<span class=\"token comment\"># https:\/\/kubernetes.io\/docs\/concepts\/configuration\/assign-pod-node\/#node-affinity-beta-feature<\/span><br \/>\nnodeAffinity: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># This is the pod topology spread constraints<\/span><br \/>\n<span class=\"token comment\"># https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/pod-topology-spread-constraints\/<\/span><br \/>\ntopologySpreadConstraints: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p><span class=\"token comment\"># The default is to deploy all pods serially. By setting this to parallel all pods are started at<\/span><br \/>\n<span class=\"token comment\"># the same time when bootstrapping the cluster<\/span><br \/>\npodManagementPolicy: <span class=\"token string\">&#034;Parallel&#034;<\/span><\/p>\n<p><span class=\"token comment\"># The environment variables injected by service links are not used, but can lead to slow OpenSearch boot times when<\/span><br \/>\n<span class=\"token comment\"># there are many services in the current namespace.<\/span><br \/>\n<span class=\"token comment\"># If you experience slow pod startups you probably want to set this to &#096;false&#096;.<\/span><br \/>\nenableServiceLinks: <span class=\"token boolean\">true<\/span><\/p>\n<p>protocol: https<br \/>\nhttpPort: <span class=\"token number\">9200<\/span><br \/>\ntransportPort: <span class=\"token number\">9300<\/span><\/p>\n<p>service:<br \/>\n  labels: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n  labelsHeadless: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n  headless:<br \/>\n    annotations: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n  type: ClusterIP<br \/>\n  nodePort: <span class=\"token string\">&#034;&#034;<\/span><br \/>\n  annotations: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n  httpPortName: http<br \/>\n  transportPortName: transport<br \/>\n  loadBalancerIP: <span class=\"token string\">&#034;&#034;<\/span><br \/>\n  loadBalancerSourceRanges: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n  externalTrafficPolicy: <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p>updateStrategy: RollingUpdate<\/p>\n<p><span class=\"token comment\"># This is the max unavailable setting for the pod disruption budget<\/span><br \/>\n<span class=\"token comment\"># The default value of 1 will make sure that kubernetes won&#039;t allow more than 1<\/span><br \/>\n<span class=\"token comment\"># of your pods to be unavailable during maintenance<\/span><br \/>\nmaxUnavailable: <span class=\"token number\">1<\/span><\/p>\n<p>podSecurityContext:<br \/>\n  fsGroup: <span class=\"token number\">1000<\/span><br \/>\n  runAsUser: <span class=\"token number\">1000<\/span><\/p>\n<p>securityContext:<br \/>\n  capabilities:<br \/>\n    drop:<br \/>\n      &#8211; ALL<br \/>\n  <span class=\"token comment\"># readOnlyRootFilesystem: true<\/span><br \/>\n  runAsNonRoot: <span class=\"token boolean\">true<\/span><br \/>\n  runAsUser: <span class=\"token number\">1000<\/span><\/p>\n<p>securityConfig:<br \/>\n  enabled: <span class=\"token boolean\">true<\/span><br \/>\n  path: <span class=\"token string\">&#034;\/usr\/share\/opensearch\/plugins\/opensearch-security\/securityconfig&#034;<\/span><br \/>\n  actionGroupsSecret:<br \/>\n  configSecret:<br \/>\n  internalUsersSecret:<br \/>\n  rolesSecret:<br \/>\n  rolesMappingSecret:<br \/>\n  tenantsSecret:<br \/>\n  <span class=\"token comment\"># The following option simplifies securityConfig by using a single secret and<\/span><br \/>\n  <span class=\"token comment\"># specifying the config files as keys in the secret instead of creating<\/span><br \/>\n  <span class=\"token comment\"># different secrets for for each config file.<\/span><br \/>\n  <span class=\"token comment\"># Note that this is an alternative to the individual secret configuration<\/span><br \/>\n  <span class=\"token comment\"># above and shouldn&#039;t be used if the above secrets are used.<\/span><br \/>\n  config:<br \/>\n    <span class=\"token comment\"># There are multiple ways to define the configuration here:<\/span><br \/>\n    <span class=\"token comment\"># * If you define anything under data, the chart will automatically create<\/span><br \/>\n    <span class=\"token comment\">#   a secret and mount it.<\/span><br \/>\n    <span class=\"token comment\"># * If you define securityConfigSecret, the chart will assume this secret is<\/span><br \/>\n    <span class=\"token comment\">#   created externally and mount it.<\/span><br \/>\n    <span class=\"token comment\"># * It is an error to define both data and securityConfigSecret.<\/span><br \/>\n    securityConfigSecret: <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    dataComplete: <span class=\"token boolean\">true<\/span><br \/>\n    data: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n      <span class=\"token comment\"># config.yml: |-<\/span><br \/>\n      <span class=\"token comment\"># internal_users.yml: |-<\/span><br \/>\n      <span class=\"token comment\"># roles.yml: |-<\/span><br \/>\n      <span class=\"token comment\"># roles_mapping.yml: |-<\/span><br \/>\n      <span class=\"token comment\"># action_groups.yml: |-<\/span><br \/>\n      <span class=\"token comment\"># tenants.yml: |-<\/span><\/p>\n<p><span class=\"token comment\"># How long to wait for opensearch to stop gracefully<\/span><br \/>\nterminationGracePeriod: <span class=\"token number\">120<\/span><\/p>\n<p>sysctlVmMaxMapCount: <span class=\"token number\">262144<\/span><\/p>\n<p>startupProbe:<br \/>\n  tcpSocket:<br \/>\n    port: <span class=\"token number\">9200<\/span><br \/>\n  initialDelaySeconds: <span class=\"token number\">5<\/span><br \/>\n  periodSeconds: <span class=\"token number\">10<\/span><br \/>\n  timeoutSeconds: <span class=\"token number\">3<\/span><br \/>\n  failureThreshold: <span class=\"token number\">30<\/span><br \/>\nreadinessProbe:<br \/>\n  tcpSocket:<br \/>\n    port: <span class=\"token number\">9200<\/span><br \/>\n  periodSeconds: <span class=\"token number\">5<\/span><br \/>\n  timeoutSeconds: <span class=\"token number\">3<\/span><br \/>\n  failureThreshold: <span class=\"token number\">3<\/span><\/p>\n<p><span class=\"token comment\">## Use an alternate scheduler.<\/span><br \/>\n<span class=\"token comment\">## ref: https:\/\/kubernetes.io\/docs\/tasks\/administer-cluster\/configure-multiple-schedulers\/<\/span><br \/>\n<span class=\"token comment\">##<\/span><br \/>\nschedulerName: <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p>imagePullSecrets: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\nnodeSelector: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\ntolerations: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p><span class=\"token comment\"># Enabling this will publically expose your OpenSearch instance.<\/span><br \/>\n<span class=\"token comment\"># Only enable this if you have security enabled on your cluster<\/span><br \/>\ningress:<br \/>\n  enabled: <span class=\"token boolean\">false<\/span><br \/>\n  <span class=\"token comment\"># For Kubernetes &gt;&#061; 1.18 you should specify the ingress-controller via the field ingressClassName<\/span><br \/>\n  <span class=\"token comment\"># See https:\/\/kubernetes.io\/blog\/2020\/04\/02\/improvements-to-the-ingress-api-in-kubernetes-1.18\/#specifying-the-class-of-an-ingress<\/span><br \/>\n  <span class=\"token comment\"># ingressClassName: nginx<\/span><\/p>\n<p>  annotations: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token comment\"># kubernetes.io\/ingress.class: nginx<\/span><br \/>\n    <span class=\"token comment\"># kubernetes.io\/tls-acme: &#034;true&#034;<\/span><br \/>\n  path: \/<br \/>\n  hosts:<br \/>\n    &#8211; chart-example.local<br \/>\n  tls: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n  <span class=\"token comment\">#  &#8211; secretName: chart-example-tls<\/span><br \/>\n  <span class=\"token comment\">#    hosts:<\/span><br \/>\n  <span class=\"token comment\">#      &#8211; chart-example.local<\/span><\/p>\n<p>nameOverride: <span class=\"token string\">&#034;&#034;<\/span><br \/>\nfullnameOverride: <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p>masterTerminationFix: <span class=\"token boolean\">false<\/span><\/p>\n<p>lifecycle: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token comment\"># preStop:<\/span><br \/>\n  <span class=\"token comment\">#   exec:<\/span><br \/>\n  <span class=\"token comment\">#     command: [&#034;\/bin\/sh&#034;, &#034;-c&#034;, &#034;echo Hello from the postStart handler &gt; \/usr\/share\/message&#034;]<\/span><br \/>\n  <span class=\"token comment\"># postStart:<\/span><br \/>\n  <span class=\"token comment\">#   exec:<\/span><br \/>\n  <span class=\"token comment\">#     command:<\/span><br \/>\n  <span class=\"token comment\">#       &#8211; bash<\/span><br \/>\n  <span class=\"token comment\">#       &#8211; -c<\/span><br \/>\n  <span class=\"token comment\">#       &#8211; |<\/span><br \/>\n  <span class=\"token comment\">#         #!\/bin\/bash<\/span><br \/>\n  <span class=\"token comment\">#         # Add a template to adjust number of shards\/replicas1<\/span><br \/>\n  <span class=\"token comment\">#         TEMPLATE_NAME&#061;my_template<\/span><br \/>\n  <span class=\"token comment\">#         INDEX_PATTERN&#061;&#034;logstash-*&#034;<\/span><br \/>\n  <span class=\"token comment\">#         SHARD_COUNT&#061;8<\/span><br \/>\n  <span class=\"token comment\">#         REPLICA_COUNT&#061;1<\/span><br \/>\n  <span class=\"token comment\">#         ES_URL&#061;http:\/\/localhost:9200<\/span><br \/>\n  <span class=\"token comment\">#         while [[ &#034;$(curl -s -o \/dev\/null -w &#039;%{http_code}\\\\n&#039; $ES_URL)&#034; !&#061; &#034;200&#034; ]]; do sleep 1; done<\/span><br \/>\n  <span class=\"token comment\">#         curl -XPUT &#034;$ES_URL\/_template\/$TEMPLATE_NAME&#034; -H &#039;Content-Type: application\/json&#039; -d&#039;{&#034;index_patterns&#034;:[&#039;\\\\&#034;&#034;$INDEX_PATTERN&#034;\\\\&#034;&#039;],&#034;settings&#034;:{&#034;number_of_shards&#034;:&#039;$SHARD_COUNT&#039;,&#034;number_of_replicas&#034;:&#039;$REPLICA_COUNT&#039;}}&#039;<\/span><\/p>\n<p>keystore: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n<span class=\"token comment\"># To add secrets to the keystore:<\/span><br \/>\n<span class=\"token comment\">#  &#8211; secretName: opensearch-encryption-key<\/span><\/p>\n<p>networkPolicy:<br \/>\n  create: <span class=\"token boolean\">false<\/span><br \/>\n  <span class=\"token comment\">## Enable creation of NetworkPolicy resources. Only Ingress traffic is filtered for now.<\/span><br \/>\n  <span class=\"token comment\">## In order for a Pod to access OpenSearch, it needs to have the following label:<\/span><br \/>\n  <span class=\"token comment\">## {{ template &#034;uname&#034; . }}-client: &#034;true&#034;<\/span><br \/>\n  <span class=\"token comment\">## Example for default configuration to access HTTP port:<\/span><br \/>\n  <span class=\"token comment\">## opensearch-master-http-client: &#034;true&#034;<\/span><br \/>\n  <span class=\"token comment\">## Example for default configuration to access transport port:<\/span><br \/>\n  <span class=\"token comment\">## opensearch-master-transport-client: &#034;true&#034;<\/span><\/p>\n<p>  http:<br \/>\n    enabled: <span class=\"token boolean\">false<\/span><\/p>\n<p><span class=\"token comment\"># Deprecated<\/span><br \/>\n<span class=\"token comment\"># please use the above podSecurityContext.fsGroup instead<\/span><br \/>\nfsGroup: <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\">## Set optimal sysctl&#039;s. This requires privilege. Can be disabled if<\/span><br \/>\n<span class=\"token comment\">## the system has already been preconfigured. (Ex: https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/vm-max-map-count.html)<\/span><br \/>\n<span class=\"token comment\">## Also see: https:\/\/kubernetes.io\/docs\/tasks\/administer-cluster\/sysctl-cluster\/<\/span><br \/>\nsysctl:<br \/>\n  enabled: <span class=\"token boolean\">false<\/span><\/p>\n<p><span class=\"token comment\">## Enable to add 3rd Party \/ Custom plugins not offered in the default OpenSearch image.<\/span><br \/>\nplugins:<br \/>\n  enabled: <span class=\"token boolean\">false<\/span><br \/>\n  installList: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n  <span class=\"token comment\"># &#8211; example-fake-plugin<\/span><\/p>\n<p><span class=\"token comment\"># &#8212; Array of extra K8s manifests to deploy<\/span><br \/>\nextraObjects: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n  <span class=\"token comment\"># &#8211; apiVersion: secrets-store.csi.x-k8s.io\/v1<\/span><br \/>\n  <span class=\"token comment\">#   kind: SecretProviderClass<\/span><br \/>\n  <span class=\"token comment\">#   metadata:<\/span><br \/>\n  <span class=\"token comment\">#     name: argocd-secrets-store<\/span><br \/>\n  <span class=\"token comment\">#   spec:<\/span><br \/>\n  <span class=\"token comment\">#     provider: aws<\/span><br \/>\n  <span class=\"token comment\">#     parameters:<\/span><br \/>\n  <span class=\"token comment\">#       objects: |<\/span><br \/>\n  <span class=\"token comment\">#         &#8211; objectName: &#034;argocd&#034;<\/span><br \/>\n  <span class=\"token comment\">#           objectType: &#034;secretsmanager&#034;<\/span><br \/>\n  <span class=\"token comment\">#           jmesPath:<\/span><br \/>\n  <span class=\"token comment\">#               &#8211; path: &#034;client_id&#034;<\/span><br \/>\n  <span class=\"token comment\">#                 objectAlias: &#034;client_id&#034;<\/span><br \/>\n  <span class=\"token comment\">#               &#8211; path: &#034;client_secret&#034;<\/span><br \/>\n  <span class=\"token comment\">#                 objectAlias: &#034;client_secret&#034;<\/span><br \/>\n  <span class=\"token comment\">#     secretObjects:<\/span><br \/>\n  <span class=\"token comment\">#     &#8211; data:<\/span><br \/>\n  <span class=\"token comment\">#       &#8211; key: client_id<\/span><br \/>\n  <span class=\"token comment\">#         objectName: client_id<\/span><br \/>\n  <span class=\"token comment\">#       &#8211; key: client_secret<\/span><br \/>\n  <span class=\"token comment\">#         objectName: client_secret<\/span><br \/>\n  <span class=\"token comment\">#       secretName: argocd-secrets-store<\/span><br \/>\n  <span class=\"token comment\">#       type: Opaque<\/span><br \/>\n  <span class=\"token comment\">#       labels:<\/span><br \/>\n  <span class=\"token comment\">#         app.kubernetes.io\/part-of: argocd<\/span><\/p>\n<p>\u5b89\u88c5\u547d\u4ee4 \u6ce8&#xff1a;version\u5e76\u975eopensearch\u7248\u672c&#xff0c;\u800c\u662fCHART VERSION <img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221307-6802ce739befe.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>helm <span class=\"token function\">install<\/span> opensearch-master -f openserach-master.yaml &#8211;version <span class=\"token number\">2.5<\/span>.1 opensearch\/opensearch<br \/>\nopensearch-client.yaml<\/p>\n<p>&#8212;<br \/>\nclusterName: <span class=\"token string\">&#034;opensearch-cluster&#034;<\/span><br \/>\nnodeGroup: <span class=\"token string\">&#034;client&#034;<\/span><\/p>\n<p><span class=\"token comment\"># If discovery.type in the opensearch configuration is set to &#034;single-node&#034;,<\/span><br \/>\n<span class=\"token comment\"># this should be set to &#034;true&#034;<\/span><br \/>\n<span class=\"token comment\"># If &#034;true&#034;, replicas will be forced to 1<\/span><br \/>\nsingleNode: <span class=\"token boolean\">false<\/span><\/p>\n<p><span class=\"token comment\"># The service that non master groups will try to connect to when joining the cluster<\/span><br \/>\n<span class=\"token comment\"># This should be set to clusterName &#043; &#034;-&#034; &#043; nodeGroup for your master group<\/span><br \/>\nmasterService: <span class=\"token string\">&#034;opensearch-cluster-master&#034;<\/span><\/p>\n<p><span class=\"token comment\"># OpenSearch roles that will be applied to this nodeGroup<\/span><br \/>\n<span class=\"token comment\"># These will be set as environment variable &#034;node.roles&#034;. E.g. node.roles&#061;master,ingest,data,remote_cluster_client<\/span><br \/>\nroles:<br \/>\n  &#8211; remote_cluster_client<\/p>\n<p>replicas: <span class=\"token number\">2<\/span><\/p>\n<p><span class=\"token comment\"># if not set, falls back to parsing .Values.imageTag, then .Chart.appVersion.<\/span><br \/>\nmajorVersion: <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p>global:<br \/>\n  <span class=\"token comment\"># Set if you want to change the default docker registry, e.g. a private one.<\/span><br \/>\n  dockerRegistry: <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># Allows you to add any config files in {{ .Values.opensearchHome }}\/config<\/span><br \/>\nopensearchHome: \/usr\/share\/opensearch<br \/>\n<span class=\"token comment\"># such as opensearch.yml and log4j2.properties<\/span><br \/>\nconfig:<br \/>\n  <span class=\"token comment\"># Values must be YAML literal style scalar \/ YAML multiline string.<\/span><br \/>\n  <span class=\"token comment\"># &lt;filename&gt;: |<\/span><br \/>\n  <span class=\"token comment\">#   &lt;formatted-value(s)&gt;<\/span><br \/>\n  <span class=\"token comment\"># log4j2.properties: |<\/span><br \/>\n  <span class=\"token comment\">#   status &#061; error<\/span><br \/>\n  <span class=\"token comment\">#<\/span><br \/>\n  <span class=\"token comment\">#   appender.console.type &#061; Console<\/span><br \/>\n  <span class=\"token comment\">#   appender.console.name &#061; console<\/span><br \/>\n  <span class=\"token comment\">#   appender.console.layout.type &#061; PatternLayout<\/span><br \/>\n  <span class=\"token comment\">#   appender.console.layout.pattern &#061; [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n<\/span><br \/>\n  <span class=\"token comment\">#<\/span><br \/>\n  <span class=\"token comment\">#   rootLogger.level &#061; info<\/span><br \/>\n  <span class=\"token comment\">#   rootLogger.appenderRef.console.ref &#061; console<\/span><br \/>\n  opensearch.yml: <span class=\"token operator\">|<\/span><br \/>\n    cluster.name: opensearch-cluster<br \/>\n    <span class=\"token comment\"># Bind to all interfaces because we don&#039;t know what IP address Docker will assign to us.<\/span><br \/>\n    network.host: <span class=\"token number\">0.0<\/span>.0.0<br \/>\n    <span class=\"token comment\"># Setting network.host to a non-loopback address enables the annoying bootstrap checks. &#034;Single-node&#034; mode disables them again.<\/span><br \/>\n    <span class=\"token comment\"># Implicitly done if &#034;.singleNode&#034; is set to &#034;true&#034;.<\/span><br \/>\n    <span class=\"token comment\"># discovery.type: single-node<\/span><br \/>\n    <span class=\"token comment\"># Start OpenSearch Security Demo Configuration<\/span><br \/>\n    <span class=\"token comment\"># WARNING: revise all the lines below before you go into production<\/span><br \/>\n    plugins:<br \/>\n      security:<br \/>\n        ssl:<br \/>\n          transport:<br \/>\n            pemcert_filepath: esnode.pem<br \/>\n            pemkey_filepath: esnode-key.pem<br \/>\n            pemtrustedcas_filepath: root-ca.pem<br \/>\n            enforce_hostname_verification: <span class=\"token boolean\">false<\/span><br \/>\n          http:<br \/>\n            enabled: <span class=\"token boolean\">true<\/span><br \/>\n            pemcert_filepath: esnode.pem<br \/>\n            pemkey_filepath: esnode-key.pem<br \/>\n            pemtrustedcas_filepath: root-ca.pem<br \/>\n        allow_unsafe_democertificates: <span class=\"token boolean\">true<\/span><br \/>\n        allow_default_init_securityindex: <span class=\"token boolean\">true<\/span><br \/>\n        authcz:<br \/>\n          admin_dn:<br \/>\n            &#8211; <span class=\"token assign-left variable\">CN<\/span><span class=\"token operator\">&#061;<\/span>kirk,OU<span class=\"token operator\">&#061;<\/span>client,O<span class=\"token operator\">&#061;<\/span>client,L<span class=\"token operator\">&#061;<\/span>test,C<span class=\"token operator\">&#061;<\/span>de<br \/>\n        audit.type: internal_opensearch<br \/>\n        enable_snapshot_restore_privilege: <span class=\"token boolean\">true<\/span><br \/>\n        check_snapshot_restore_write_privileges: <span class=\"token boolean\">true<\/span><br \/>\n        restapi:<br \/>\n          roles_enabled: <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;all_access&#034;<\/span>, <span class=\"token string\">&#034;security_rest_api_access&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n        system_indices:<br \/>\n          enabled: <span class=\"token boolean\">true<\/span><br \/>\n          indices:<br \/>\n            <span class=\"token punctuation\">[<\/span><br \/>\n              <span class=\"token string\">&#034;.opendistro-alerting-config&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-alerting-alert*&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-anomaly-results*&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-anomaly-detector*&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-anomaly-checkpoints&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-anomaly-detection-state&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-reports-*&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-notifications-*&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-notebooks&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-asynchronous-search-response*&#034;<\/span>,<br \/>\n            <span class=\"token punctuation\">]<\/span><br \/>\n    <span class=\"token comment\">######## End OpenSearch Security Demo Configuration ########<\/span><br \/>\n  <span class=\"token comment\"># log4j2.properties:<\/span><\/p>\n<p><span class=\"token comment\"># Extra environment variables to append to this nodeGroup<\/span><br \/>\n<span class=\"token comment\"># This will be appended to the current &#039;env:&#039; key. You can use any of the kubernetes env<\/span><br \/>\n<span class=\"token comment\"># syntax here<\/span><br \/>\nextraEnvs: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n<span class=\"token comment\">#  &#8211; name: MY_ENVIRONMENT_VAR<\/span><br \/>\n<span class=\"token comment\">#    value: the_value_goes_here<\/span><\/p>\n<p><span class=\"token comment\"># Allows you to load environment variables from kubernetes secret or config map<\/span><br \/>\nenvFrom: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n<span class=\"token comment\"># &#8211; secretRef:<\/span><br \/>\n<span class=\"token comment\">#     name: env-secret<\/span><br \/>\n<span class=\"token comment\"># &#8211; configMapRef:<\/span><br \/>\n<span class=\"token comment\">#     name: config-map<\/span><\/p>\n<p><span class=\"token comment\"># A list of secrets and their paths to mount inside the pod<\/span><br \/>\n<span class=\"token comment\"># This is useful for mounting certificates for security and for mounting<\/span><br \/>\n<span class=\"token comment\"># the X-Pack license<\/span><br \/>\nsecretMounts: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>hostAliases: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n<span class=\"token comment\"># &#8211; ip: &#034;127.0.0.1&#034;<\/span><br \/>\n<span class=\"token comment\">#   hostnames:<\/span><br \/>\n<span class=\"token comment\">#   &#8211; &#034;foo.local&#034;<\/span><br \/>\n<span class=\"token comment\">#   &#8211; &#034;bar.local&#034;<\/span><\/p>\n<p>image:<br \/>\n  repository: <span class=\"token string\">&#034;opensearchproject\/opensearch&#034;<\/span><br \/>\n  <span class=\"token comment\"># override image tag, which is .Chart.AppVersion by default<\/span><br \/>\n  tag: <span class=\"token string\">&#034;&#034;<\/span><br \/>\n  pullPolicy: <span class=\"token string\">&#034;IfNotPresent&#034;<\/span><\/p>\n<p>podAnnotations: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token comment\"># iam.amazonaws.com\/role: es-cluster<\/span><\/p>\n<p><span class=\"token comment\"># additionals labels<\/span><br \/>\nlabels: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p>opensearchJavaOpts: <span class=\"token string\">&#034;-Xmx512M -Xms512M&#034;<\/span><\/p>\n<p>resources:<br \/>\n  requests:<br \/>\n    cpu: <span class=\"token string\">&#034;500m&#034;<\/span><br \/>\n    memory: <span class=\"token string\">&#034;100Mi&#034;<\/span><\/p>\n<p>initResources: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token comment\">#  limits:<\/span><br \/>\n<span class=\"token comment\">#     cpu: &#034;25m&#034;<\/span><br \/>\n<span class=\"token comment\">#     memory: &#034;128Mi&#034;<\/span><br \/>\n<span class=\"token comment\">#  requests:<\/span><br \/>\n<span class=\"token comment\">#     cpu: &#034;25m&#034;<\/span><br \/>\n<span class=\"token comment\">#     memory: &#034;128Mi&#034;<\/span><\/p>\n<p>sidecarResources: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token comment\">#   limits:<\/span><br \/>\n<span class=\"token comment\">#     cpu: &#034;25m&#034;<\/span><br \/>\n<span class=\"token comment\">#     memory: &#034;128Mi&#034;<\/span><br \/>\n<span class=\"token comment\">#   requests:<\/span><br \/>\n<span class=\"token comment\">#     cpu: &#034;25m&#034;<\/span><br \/>\n<span class=\"token comment\">#     memory: &#034;128Mi&#034;<\/span><\/p>\n<p>networkHost: <span class=\"token string\">&#034;0.0.0.0&#034;<\/span><\/p>\n<p>rbac:<br \/>\n  create: <span class=\"token boolean\">false<\/span><br \/>\n  serviceAccountAnnotations: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n  serviceAccountName: <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p>podSecurityPolicy:<br \/>\n  create: <span class=\"token boolean\">false<\/span><br \/>\n  name: <span class=\"token string\">&#034;&#034;<\/span><br \/>\n  spec:<br \/>\n    privileged: <span class=\"token boolean\">true<\/span><br \/>\n    fsGroup:<br \/>\n      rule: RunAsAny<br \/>\n    runAsUser:<br \/>\n      rule: RunAsAny<br \/>\n    seLinux:<br \/>\n      rule: RunAsAny<br \/>\n    supplementalGroups:<br \/>\n      rule: RunAsAny<br \/>\n    volumes:<br \/>\n      &#8211; secret<br \/>\n      &#8211; configMap<br \/>\n      &#8211; persistentVolumeClaim<br \/>\n      &#8211; emptyDir<\/p>\n<p>persistence:<br \/>\n  enabled: <span class=\"token boolean\">false<\/span><br \/>\n  <span class=\"token comment\"># Set to false to disable the &#096;fsgroup-volume&#096; initContainer that will update permissions on the persistent disk.<\/span><br \/>\n  enableInitChown: <span class=\"token boolean\">false<\/span><br \/>\n  <span class=\"token comment\"># override image, which is busybox by default<\/span><br \/>\n  <span class=\"token comment\"># image: busybox<\/span><br \/>\n  <span class=\"token comment\"># override image tag, which is latest by default<\/span><br \/>\n  <span class=\"token comment\"># imageTag:<\/span><br \/>\n  labels:<br \/>\n    <span class=\"token comment\"># Add default labels for the volumeClaimTemplate of the StatefulSet<\/span><br \/>\n    enabled: <span class=\"token boolean\">false<\/span><br \/>\n  <span class=\"token comment\"># OpenSearch Persistent Volume Storage Class<\/span><br \/>\n  <span class=\"token comment\"># If defined, storageClassName: &lt;storageClass&gt;<\/span><br \/>\n  <span class=\"token comment\"># If set to &#034;-&#034;, storageClassName: &#034;&#034;, which disables dynamic provisioning<\/span><br \/>\n  <span class=\"token comment\"># If undefined (the default) or set to null, no storageClassName spec is<\/span><br \/>\n  <span class=\"token comment\">#   set, choosing the default provisioner.  (gp2 on AWS, standard on<\/span><br \/>\n  <span class=\"token comment\">#   GKE, AWS &amp; OpenStack)<\/span><br \/>\n  <span class=\"token comment\">#<\/span><br \/>\n  <span class=\"token comment\"># storageClass: &#034;-&#034;<\/span><br \/>\n  accessModes:<br \/>\n    &#8211; ReadWriteOnce<br \/>\n  size: 1Gi<br \/>\n  annotations: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p>extraVolumes: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n  <span class=\"token comment\"># &#8211; name: extras<\/span><br \/>\n  <span class=\"token comment\">#   emptyDir: {}<\/span><\/p>\n<p>extraVolumeMounts: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n  <span class=\"token comment\"># &#8211; name: extras<\/span><br \/>\n  <span class=\"token comment\">#   mountPath: \/usr\/share\/extras<\/span><br \/>\n  <span class=\"token comment\">#   readOnly: true<\/span><\/p>\n<p>extraContainers: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n  <span class=\"token comment\"># &#8211; name: do-something<\/span><br \/>\n  <span class=\"token comment\">#   image: busybox<\/span><br \/>\n  <span class=\"token comment\">#   command: [&#039;do&#039;, &#039;something&#039;]<\/span><\/p>\n<p>extraInitContainers: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n  <span class=\"token comment\"># &#8211; name: do-somethings<\/span><br \/>\n  <span class=\"token comment\">#   image: busybox<\/span><br \/>\n  <span class=\"token comment\">#   command: [&#039;do&#039;, &#039;something&#039;]<\/span><\/p>\n<p><span class=\"token comment\"># This is the PriorityClass settings as defined in<\/span><br \/>\n<span class=\"token comment\"># https:\/\/kubernetes.io\/docs\/concepts\/configuration\/pod-priority-preemption\/#priorityclass<\/span><br \/>\npriorityClassName: <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\"># By default this will make sure two pods don&#039;t end up on the same node<\/span><br \/>\n<span class=\"token comment\"># Changing this to a region would allow you to spread pods across regions<\/span><br \/>\nantiAffinityTopologyKey: <span class=\"token string\">&#034;kubernetes.io\/hostname&#034;<\/span><\/p>\n<p><span class=\"token comment\"># Hard means that by default pods will only be scheduled if there are enough nodes for them<\/span><br \/>\n<span class=\"token comment\"># and that they will never end up on the same node. Setting this to soft will do this &#034;best effort&#034;<\/span><br \/>\nantiAffinity: <span class=\"token string\">&#034;soft&#034;<\/span><\/p>\n<p><span class=\"token comment\"># This is the node affinity settings as defined in<\/span><br \/>\n<span class=\"token comment\"># https:\/\/kubernetes.io\/docs\/concepts\/configuration\/assign-pod-node\/#node-affinity-beta-feature<\/span><br \/>\nnodeAffinity: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># This is the pod topology spread constraints<\/span><br \/>\n<span class=\"token comment\"># https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/pod-topology-spread-constraints\/<\/span><br \/>\ntopologySpreadConstraints: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p><span class=\"token comment\"># The default is to deploy all pods serially. By setting this to parallel all pods are started at<\/span><br \/>\n<span class=\"token comment\"># the same time when bootstrapping the cluster<\/span><br \/>\npodManagementPolicy: <span class=\"token string\">&#034;Parallel&#034;<\/span><\/p>\n<p><span class=\"token comment\"># The environment variables injected by service links are not used, but can lead to slow OpenSearch boot times when<\/span><br \/>\n<span class=\"token comment\"># there are many services in the current namespace.<\/span><br \/>\n<span class=\"token comment\"># If you experience slow pod startups you probably want to set this to &#096;false&#096;.<\/span><br \/>\nenableServiceLinks: <span class=\"token boolean\">true<\/span><\/p>\n<p>protocol: https<br \/>\nhttpPort: <span class=\"token number\">9200<\/span><br \/>\ntransportPort: <span class=\"token number\">9300<\/span><\/p>\n<p>service:<br \/>\n  type: NodePort<br \/>\n  nodePort: <span class=\"token string\">&#034;30601&#034;<\/span><\/p>\n<p>updateStrategy: RollingUpdate<\/p>\n<p><span class=\"token comment\"># This is the max unavailable setting for the pod disruption budget<\/span><br \/>\n<span class=\"token comment\"># The default value of 1 will make sure that kubernetes won&#039;t allow more than 1<\/span><br \/>\n<span class=\"token comment\"># of your pods to be unavailable during maintenance<\/span><br \/>\nmaxUnavailable: <span class=\"token number\">1<\/span><\/p>\n<p>podSecurityContext:<br \/>\n  fsGroup: <span class=\"token number\">1000<\/span><br \/>\n  runAsUser: <span class=\"token number\">1000<\/span><\/p>\n<p>securityContext:<br \/>\n  capabilities:<br \/>\n    drop:<br \/>\n      &#8211; ALL<br \/>\n  <span class=\"token comment\"># readOnlyRootFilesystem: true<\/span><br \/>\n  runAsNonRoot: <span class=\"token boolean\">true<\/span><br \/>\n  runAsUser: <span class=\"token number\">1000<\/span><\/p>\n<p>securityConfig:<br \/>\n  enabled: <span class=\"token boolean\">true<\/span><br \/>\n  path: <span class=\"token string\">&#034;\/usr\/share\/opensearch\/plugins\/opensearch-security\/securityconfig&#034;<\/span><br \/>\n  actionGroupsSecret:<br \/>\n  configSecret:<br \/>\n  internalUsersSecret:<br \/>\n  rolesSecret:<br \/>\n  rolesMappingSecret:<br \/>\n  tenantsSecret:<br \/>\n  <span class=\"token comment\"># The following option simplifies securityConfig by using a single secret and<\/span><br \/>\n  <span class=\"token comment\"># specifying the config files as keys in the secret instead of creating<\/span><br \/>\n  <span class=\"token comment\"># different secrets for for each config file.<\/span><br \/>\n  <span class=\"token comment\"># Note that this is an alternative to the individual secret configuration<\/span><br \/>\n  <span class=\"token comment\"># above and shouldn&#039;t be used if the above secrets are used.<\/span><br \/>\n  config:<br \/>\n    <span class=\"token comment\"># There are multiple ways to define the configuration here:<\/span><br \/>\n    <span class=\"token comment\"># * If you define anything under data, the chart will automatically create<\/span><br \/>\n    <span class=\"token comment\">#   a secret and mount it.<\/span><br \/>\n    <span class=\"token comment\"># * If you define securityConfigSecret, the chart will assume this secret is<\/span><br \/>\n    <span class=\"token comment\">#   created externally and mount it.<\/span><br \/>\n    <span class=\"token comment\"># * It is an error to define both data and securityConfigSecret.<\/span><br \/>\n    securityConfigSecret: <span class=\"token string\">&#034;&#034;<\/span><br \/>\n    dataComplete: <span class=\"token boolean\">true<\/span><br \/>\n    data: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n      <span class=\"token comment\"># config.yml: |-<\/span><br \/>\n      <span class=\"token comment\"># internal_users.yml: |-<\/span><br \/>\n      <span class=\"token comment\"># roles.yml: |-<\/span><br \/>\n      <span class=\"token comment\"># roles_mapping.yml: |-<\/span><br \/>\n      <span class=\"token comment\"># action_groups.yml: |-<\/span><br \/>\n      <span class=\"token comment\"># tenants.yml: |-<\/span><\/p>\n<p><span class=\"token comment\"># How long to wait for opensearch to stop gracefully<\/span><br \/>\nterminationGracePeriod: <span class=\"token number\">120<\/span><\/p>\n<p>sysctlVmMaxMapCount: <span class=\"token number\">262144<\/span><\/p>\n<p>startupProbe:<br \/>\n  tcpSocket:<br \/>\n    port: <span class=\"token number\">9200<\/span><br \/>\n  initialDelaySeconds: <span class=\"token number\">5<\/span><br \/>\n  periodSeconds: <span class=\"token number\">10<\/span><br \/>\n  timeoutSeconds: <span class=\"token number\">3<\/span><br \/>\n  failureThreshold: <span class=\"token number\">30<\/span><br \/>\nreadinessProbe:<br \/>\n  tcpSocket:<br \/>\n    port: <span class=\"token number\">9200<\/span><br \/>\n  periodSeconds: <span class=\"token number\">5<\/span><br \/>\n  timeoutSeconds: <span class=\"token number\">3<\/span><br \/>\n  failureThreshold: <span class=\"token number\">3<\/span><\/p>\n<p><span class=\"token comment\">## Use an alternate scheduler.<\/span><br \/>\n<span class=\"token comment\">## ref: https:\/\/kubernetes.io\/docs\/tasks\/administer-cluster\/configure-multiple-schedulers\/<\/span><br \/>\n<span class=\"token comment\">##<\/span><br \/>\nschedulerName: <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p>imagePullSecrets: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\nnodeSelector: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\ntolerations: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p><span class=\"token comment\"># Enabling this will publically expose your OpenSearch instance.<\/span><br \/>\n<span class=\"token comment\"># Only enable this if you have security enabled on your cluster<\/span><br \/>\ningress:<br \/>\n  enabled: <span class=\"token boolean\">false<\/span><br \/>\n  <span class=\"token comment\"># For Kubernetes &gt;&#061; 1.18 you should specify the ingress-controller via the field ingressClassName<\/span><br \/>\n  <span class=\"token comment\"># See https:\/\/kubernetes.io\/blog\/2020\/04\/02\/improvements-to-the-ingress-api-in-kubernetes-1.18\/#specifying-the-class-of-an-ingress<\/span><br \/>\n  <span class=\"token comment\"># ingressClassName: nginx<\/span><\/p>\n<p>  annotations: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token comment\"># kubernetes.io\/ingress.class: nginx<\/span><br \/>\n    <span class=\"token comment\"># kubernetes.io\/tls-acme: &#034;true&#034;<\/span><br \/>\n  path: \/<br \/>\n  hosts:<br \/>\n    &#8211; chart-example.local<br \/>\n  tls: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n  <span class=\"token comment\">#  &#8211; secretName: chart-example-tls<\/span><br \/>\n  <span class=\"token comment\">#    hosts:<\/span><br \/>\n  <span class=\"token comment\">#      &#8211; chart-example.local<\/span><\/p>\n<p>nameOverride: <span class=\"token string\">&#034;&#034;<\/span><br \/>\nfullnameOverride: <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p>masterTerminationFix: <span class=\"token boolean\">false<\/span><\/p>\n<p>lifecycle: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token comment\"># preStop:<\/span><br \/>\n  <span class=\"token comment\">#   exec:<\/span><br \/>\n  <span class=\"token comment\">#     command: [&#034;\/bin\/sh&#034;, &#034;-c&#034;, &#034;echo Hello from the postStart handler &gt; \/usr\/share\/message&#034;]<\/span><br \/>\n  <span class=\"token comment\"># postStart:<\/span><br \/>\n  <span class=\"token comment\">#   exec:<\/span><br \/>\n  <span class=\"token comment\">#     command:<\/span><br \/>\n  <span class=\"token comment\">#       &#8211; bash<\/span><br \/>\n  <span class=\"token comment\">#       &#8211; -c<\/span><br \/>\n  <span class=\"token comment\">#       &#8211; |<\/span><br \/>\n  <span class=\"token comment\">#         #!\/bin\/bash<\/span><br \/>\n  <span class=\"token comment\">#         # Add a template to adjust number of shards\/replicas1<\/span><br \/>\n  <span class=\"token comment\">#         TEMPLATE_NAME&#061;my_template<\/span><br \/>\n  <span class=\"token comment\">#         INDEX_PATTERN&#061;&#034;logstash-*&#034;<\/span><br \/>\n  <span class=\"token comment\">#         SHARD_COUNT&#061;8<\/span><br \/>\n  <span class=\"token comment\">#         REPLICA_COUNT&#061;1<\/span><br \/>\n  <span class=\"token comment\">#         ES_URL&#061;http:\/\/localhost:9200<\/span><br \/>\n  <span class=\"token comment\">#         while [[ &#034;$(curl -s -o \/dev\/null -w &#039;%{http_code}\\\\n&#039; $ES_URL)&#034; !&#061; &#034;200&#034; ]]; do sleep 1; done<\/span><br \/>\n  <span class=\"token comment\">#         curl -XPUT &#034;$ES_URL\/_template\/$TEMPLATE_NAME&#034; -H &#039;Content-Type: application\/json&#039; -d&#039;{&#034;index_patterns&#034;:[&#039;\\\\&#034;&#034;$INDEX_PATTERN&#034;\\\\&#034;&#039;],&#034;settings&#034;:{&#034;number_of_shards&#034;:&#039;$SHARD_COUNT&#039;,&#034;number_of_replicas&#034;:&#039;$REPLICA_COUNT&#039;}}&#039;<\/span><\/p>\n<p>keystore: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n<span class=\"token comment\"># To add secrets to the keystore:<\/span><br \/>\n<span class=\"token comment\">#  &#8211; secretName: opensearch-encryption-key<\/span><\/p>\n<p>networkPolicy:<br \/>\n  create: <span class=\"token boolean\">false<\/span><br \/>\n  <span class=\"token comment\">## Enable creation of NetworkPolicy resources. Only Ingress traffic is filtered for now.<\/span><br \/>\n  <span class=\"token comment\">## In order for a Pod to access OpenSearch, it needs to have the following label:<\/span><br \/>\n  <span class=\"token comment\">## {{ template &#034;uname&#034; . }}-client: &#034;true&#034;<\/span><br \/>\n  <span class=\"token comment\">## Example for default configuration to access HTTP port:<\/span><br \/>\n  <span class=\"token comment\">## opensearch-master-http-client: &#034;true&#034;<\/span><br \/>\n  <span class=\"token comment\">## Example for default configuration to access transport port:<\/span><br \/>\n  <span class=\"token comment\">## opensearch-master-transport-client: &#034;true&#034;<\/span><\/p>\n<p>  http:<br \/>\n    enabled: <span class=\"token boolean\">false<\/span><\/p>\n<p><span class=\"token comment\"># Deprecated<\/span><br \/>\n<span class=\"token comment\"># please use the above podSecurityContext.fsGroup instead<\/span><br \/>\nfsGroup: <span class=\"token string\">&#034;&#034;<\/span><\/p>\n<p><span class=\"token comment\">## Set optimal sysctl&#039;s. This requires privilege. Can be disabled if<\/span><br \/>\n<span class=\"token comment\">## the system has already been preconfigured. (Ex: https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/vm-max-map-count.html)<\/span><br \/>\n<span class=\"token comment\">## Also see: https:\/\/kubernetes.io\/docs\/tasks\/administer-cluster\/sysctl-cluster\/<\/span><br \/>\nsysctl:<br \/>\n  enabled: <span class=\"token boolean\">false<\/span><\/p>\n<p><span class=\"token comment\">## Enable to add 3rd Party \/ Custom plugins not offered in the default OpenSearch image.<\/span><br \/>\nplugins:<br \/>\n  enabled: <span class=\"token boolean\">false<\/span><br \/>\n  installList: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n  <span class=\"token comment\"># &#8211; example-fake-plugin<\/span><\/p>\n<p><span class=\"token comment\"># &#8212; Array of extra K8s manifests to deploy<\/span><br \/>\nextraObjects: <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n  <span class=\"token comment\"># &#8211; apiVersion: secrets-store.csi.x-k8s.io\/v1<\/span><br \/>\n  <span class=\"token comment\">#   kind: SecretProviderClass<\/span><br \/>\n  <span class=\"token comment\">#   metadata:<\/span><br \/>\n  <span class=\"token comment\">#     name: argocd-secrets-store<\/span><br \/>\n  <span class=\"token comment\">#   spec:<\/span><br \/>\n  <span class=\"token comment\">#     provider: aws<\/span><br \/>\n  <span class=\"token comment\">#     parameters:<\/span><br \/>\n  <span class=\"token comment\">#       objects: |<\/span><br \/>\n  <span class=\"token comment\">#         &#8211; objectName: &#034;argocd&#034;<\/span><br \/>\n  <span class=\"token comment\">#           objectType: &#034;secretsmanager&#034;<\/span><br \/>\n  <span class=\"token comment\">#           jmesPath:<\/span><br \/>\n  <span class=\"token comment\">#               &#8211; path: &#034;client_id&#034;<\/span><br \/>\n  <span class=\"token comment\">#                 objectAlias: &#034;client_id&#034;<\/span><br \/>\n  <span class=\"token comment\">#               &#8211; path: &#034;client_secret&#034;<\/span><br \/>\n  <span class=\"token comment\">#                 objectAlias: &#034;client_secret&#034;<\/span><br \/>\n  <span class=\"token comment\">#     secretObjects:<\/span><br \/>\n  <span class=\"token comment\">#     &#8211; data:<\/span><br \/>\n  <span class=\"token comment\">#       &#8211; key: client_id<\/span><br \/>\n  <span class=\"token comment\">#         objectName: client_id<\/span><br \/>\n  <span class=\"token comment\">#       &#8211; key: client_secret<\/span><br \/>\n  <span class=\"token comment\">#         objectName: client_secret<\/span><br \/>\n  <span class=\"token comment\">#       secretName: argocd-secrets-store<\/span><br \/>\n  <span class=\"token comment\">#       type: Opaque<\/span><br \/>\n  <span class=\"token comment\">#       labels:<\/span><br \/>\n  <span class=\"token comment\">#         app.kubernetes.io\/part-of: argocd<\/span><\/p>\n<p>helm <span class=\"token function\">install<\/span> opensearch-client -f openserach-client.yaml &#8211;version <span class=\"token number\">2.5<\/span>.1 opensearch\/opensearch<\/p>\n<p>\u8bbf\u95ee\u6d4b\u8bd5 <img decoding=\"async\" src=\"2025-04-19ylwuqwbv0lf.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h4>yaml\u6587\u4ef6\u90e8\u7f72opensearch\u4e09\u8282\u70b9<\/h4>\n<p>\u90e8\u7f72\u6587\u4ef6\u5982\u4e0b: os_cm.yml\u3001os_headless.yml\u3001os_statefulset_hostpath.yml\u3001os_svc.yml<\/p>\n<p>\u9700\u8981\u6ce8\u610f\u955c\u50cf\u5730\u5740\u53ef\u4ee5\u62c9\u53d6\u5230&#xff0c;\u6b64\u65b9\u6848\u91c7\u7528\u7684\u662fhostpath\u65b9\u5f0f\u9700\u8981\u6bcf\u4e2apod\u8282\u70b9\u521b\u5efa\u76ee\u5f55&#xff0c;\u4e5f\u53ef\u91c7\u7528nfs\u5171\u4eab\u76ee\u5f55\u65b9\u5f0f\u505a\u6570\u636e\u6301\u4e45\u5316\u3002 \u6267\u884c<\/p>\n<p>kubectl apply -f os_cm.yml<br \/>\nkubectl apply -f os_headless.yml<br \/>\nkubectl apply -f os_statefulset_hostpath.yml<br \/>\nkubectl apply -f os_svc.yml <\/p>\n<p>\u67e5\u770b\u6587\u4ef6\u5185\u5bb9<\/p>\n<p><span class=\"token punctuation\">[<\/span>root&#064;master01 openserach_install<span class=\"token punctuation\">]<\/span><span class=\"token comment\"># cat os_cm.yml<\/span><\/p>\n<p>apiVersion: v1<br \/>\ndata:<br \/>\n  opensearch.yml: <span class=\"token operator\">|<\/span><br \/>\n    cluster.name: opensearch-cluster<\/p>\n<p>    <span class=\"token comment\"># Bind to all interfaces because we don&#039;t know what IP address Docker will assign to us.<\/span><br \/>\n    network.host: <span class=\"token number\">0.0<\/span>.0.0<\/p>\n<p>    <span class=\"token comment\"># Setting network.host to a non-loopback address enables the annoying bootstrap checks. &#034;Single-node&#034; mode disables them again.<\/span><br \/>\n    <span class=\"token comment\"># Implicitly done if &#034;.singleNode&#034; is set to &#034;true&#034;.<\/span><br \/>\n    <span class=\"token comment\"># discovery.type: single-node<\/span><\/p>\n<p>    <span class=\"token comment\"># Start OpenSearch Security Demo Configuration<\/span><br \/>\n    <span class=\"token comment\"># WARNING: revise all the lines below before you go into production<\/span><br \/>\n    plugins:<br \/>\n      security:<br \/>\n        ssl:<br \/>\n          transport:<br \/>\n            pemcert_filepath: esnode.pem<br \/>\n            pemkey_filepath: esnode-key.pem<br \/>\n            pemtrustedcas_filepath: root-ca.pem<br \/>\n            enforce_hostname_verification: <span class=\"token boolean\">false<\/span><br \/>\n          http:<br \/>\n            enabled: <span class=\"token boolean\">true<\/span><br \/>\n            pemcert_filepath: esnode.pem<br \/>\n            pemkey_filepath: esnode-key.pem<br \/>\n            pemtrustedcas_filepath: root-ca.pem<br \/>\n        allow_unsafe_democertificates: <span class=\"token boolean\">true<\/span><br \/>\n        allow_default_init_securityindex: <span class=\"token boolean\">true<\/span><br \/>\n        authcz:<br \/>\n          admin_dn:<br \/>\n            &#8211; <span class=\"token assign-left variable\">CN<\/span><span class=\"token operator\">&#061;<\/span>kirk,OU<span class=\"token operator\">&#061;<\/span>client,O<span class=\"token operator\">&#061;<\/span>client,L<span class=\"token operator\">&#061;<\/span>test,C<span class=\"token operator\">&#061;<\/span>de<br \/>\n        audit.type: internal_opensearch<br \/>\n        enable_snapshot_restore_privilege: <span class=\"token boolean\">true<\/span><br \/>\n        check_snapshot_restore_write_privileges: <span class=\"token boolean\">true<\/span><br \/>\n        restapi:<br \/>\n          roles_enabled: <span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;all_access&#034;<\/span>, <span class=\"token string\">&#034;security_rest_api_access&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n        system_indices:<br \/>\n          enabled: <span class=\"token boolean\">true<\/span><br \/>\n          indices:<br \/>\n            <span class=\"token punctuation\">[<\/span><br \/>\n              <span class=\"token string\">&#034;.opendistro-alerting-config&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-alerting-alert*&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-anomaly-results*&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-anomaly-detector*&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-anomaly-checkpoints&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-anomaly-detection-state&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-reports-*&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-notifications-*&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-notebooks&#034;<\/span>,<br \/>\n              <span class=\"token string\">&#034;.opendistro-asynchronous-search-response*&#034;<\/span>,<br \/>\n            <span class=\"token punctuation\">]<\/span><br \/>\n    <span class=\"token comment\">######## End OpenSearch Security Demo Configuration ########<\/span><br \/>\nkind: ConfigMap<br \/>\nmetadata:<br \/>\n  labels:<br \/>\n    app.kubernetes.io\/component: opensearch-cluster-master<br \/>\n    app.kubernetes.io\/instance: opensearch-server<br \/>\n    app.kubernetes.io\/name: opensearch<br \/>\n  name: opensearch-cluster-master-config<br \/>\n  namespace: default<br \/>\n<span class=\"token punctuation\">[<\/span>root&#064;master01 openserach_install<span class=\"token punctuation\">]<\/span><span class=\"token comment\"># cat os_headless.yml<\/span><br \/>\napiVersion: v1<br \/>\nkind: Service<br \/>\nmetadata:<br \/>\n  annotations:<br \/>\n    service.alpha.kubernetes.io\/tolerate-unready-endpoints: <span class=\"token string\">&#034;true&#034;<\/span><br \/>\n  labels:<br \/>\n    app.kubernetes.io\/component: opensearch-cluster-master<br \/>\n    app.kubernetes.io\/instance: opensearch-server<br \/>\n    app.kubernetes.io\/name: opensearch<br \/>\n  name: opensearch-cluster-master-headless<br \/>\n  namespace: default<br \/>\nspec:<br \/>\n  clusterIP: None<br \/>\n  clusterIPs:<br \/>\n  &#8211; None<br \/>\n  internalTrafficPolicy: Cluster<br \/>\n  ipFamilies:<br \/>\n  &#8211; IPv4<br \/>\n  ipFamilyPolicy: SingleStack<br \/>\n  ports:<br \/>\n  &#8211; name: http<br \/>\n    port: <span class=\"token number\">9200<\/span><br \/>\n    protocol: TCP<br \/>\n    targetPort: <span class=\"token number\">9200<\/span><br \/>\n  &#8211; name: transport<br \/>\n    port: <span class=\"token number\">9300<\/span><br \/>\n    protocol: TCP<br \/>\n    targetPort: <span class=\"token number\">9300<\/span><br \/>\n  publishNotReadyAddresses: <span class=\"token boolean\">true<\/span><br \/>\n  selector:<br \/>\n    app.kubernetes.io\/instance: opensearch-server<br \/>\n    app.kubernetes.io\/name: opensearch<br \/>\n  sessionAffinity: None<\/p>\n<p><span class=\"token function\">cat<\/span>  os_statefulset_hostpath.yml <\/p>\n<p>apiVersion: v1<br \/>\nitems:<br \/>\n&#8211; apiVersion: apps\/v1<br \/>\n  kind: StatefulSet<br \/>\n  metadata:<br \/>\n    annotations:<br \/>\n      majorVersion: <span class=\"token string\">&#034;2&#034;<\/span><br \/>\n    generation: <span class=\"token number\">1<\/span><br \/>\n    labels:<br \/>\n      app.kubernetes.io\/component: opensearch-cluster-master<br \/>\n      app.kubernetes.io\/instance: opensearch-server<br \/>\n      app.kubernetes.io\/name: opensearch<br \/>\n    name: opensearch-cluster-master<br \/>\n    namespace: default<br \/>\n  spec:<br \/>\n    podManagementPolicy: Parallel<br \/>\n    replicas: <span class=\"token number\">3<\/span><br \/>\n    revisionHistoryLimit: <span class=\"token number\">10<\/span><br \/>\n    selector:<br \/>\n      matchLabels:<br \/>\n        app.kubernetes.io\/instance: opensearch-server<br \/>\n        app.kubernetes.io\/name: opensearch<br \/>\n    serviceName: opensearch-cluster-master-headless<br \/>\n    template:<br \/>\n      metadata:<br \/>\n        creationTimestamp: null<br \/>\n        labels:<br \/>\n          app.kubernetes.io\/component: opensearch-cluster-master<br \/>\n          app.kubernetes.io\/instance: opensearch-server<br \/>\n          app.kubernetes.io\/name: opensearch<br \/>\n        name: opensearch-cluster-master<br \/>\n      spec:<br \/>\n        affinity:<br \/>\n          podAntiAffinity:<br \/>\n            preferredDuringSchedulingIgnoredDuringExecution:<br \/>\n            &#8211; podAffinityTerm:<br \/>\n                labelSelector:<br \/>\n                  matchExpressions:<br \/>\n                  &#8211; key: app.kubernetes.io\/instance<br \/>\n                    operator: In<br \/>\n                    values:<br \/>\n                    &#8211; opensearch-server<br \/>\n                  &#8211; key: app.kubernetes.io\/name<br \/>\n                    operator: In<br \/>\n                    values:<br \/>\n                    &#8211; opensearch<br \/>\n                topologyKey: kubernetes.io\/hostname<br \/>\n              weight: <span class=\"token number\">1<\/span><br \/>\n        containers:<br \/>\n        &#8211; env:<br \/>\n          &#8211; name: node.name<br \/>\n            valueFrom:<br \/>\n              fieldRef:<br \/>\n                apiVersion: v1<br \/>\n                fieldPath: metadata.name<br \/>\n          &#8211; name: cluster.initial_master_nodes<br \/>\n            value: opensearch-cluster-master-0,opensearch-cluster-master-1,opensearch-cluster-master-2,<br \/>\n          &#8211; name: discovery.seed_hosts<br \/>\n            value: opensearch-cluster-master-headless<br \/>\n          &#8211; name: cluster.name<br \/>\n            value: opensearch-cluster<br \/>\n          &#8211; name: network.host<br \/>\n            value: <span class=\"token number\">0.0<\/span>.0.0<br \/>\n          &#8211; name: OPENSEARCH_JAVA_OPTS<br \/>\n            value: -Xmx512M -Xms512M<br \/>\n          &#8211; name: node.roles<br \/>\n            value: master,ingest,data,remote_cluster_client,<br \/>\n          image: opensearchproject\/opensearch:2.0.0<br \/>\n          imagePullPolicy: IfNotPresent<br \/>\n          name: opensearch<br \/>\n          ports:<br \/>\n          &#8211; containerPort: <span class=\"token number\">9200<\/span><br \/>\n            name: http<br \/>\n            protocol: TCP<br \/>\n          &#8211; containerPort: <span class=\"token number\">9300<\/span><br \/>\n            name: transport<br \/>\n            protocol: TCP<br \/>\n          readinessProbe:<br \/>\n            failureThreshold: <span class=\"token number\">3<\/span><br \/>\n            periodSeconds: <span class=\"token number\">5<\/span><br \/>\n            successThreshold: <span class=\"token number\">1<\/span><br \/>\n            tcpSocket:<br \/>\n              port: <span class=\"token number\">9200<\/span><br \/>\n            timeoutSeconds: <span class=\"token number\">3<\/span><br \/>\n          resources:<br \/>\n            requests:<br \/>\n              cpu: <span class=\"token string\">&#034;1&#034;<\/span><br \/>\n              memory: 100Mi<br \/>\n          securityContext:<br \/>\n            capabilities:<br \/>\n              drop:<br \/>\n              &#8211; ALL<br \/>\n            runAsNonRoot: <span class=\"token boolean\">true<\/span><br \/>\n            runAsUser: <span class=\"token number\">1000<\/span><br \/>\n          startupProbe:<br \/>\n            failureThreshold: <span class=\"token number\">30<\/span><br \/>\n            initialDelaySeconds: <span class=\"token number\">5<\/span><br \/>\n            periodSeconds: <span class=\"token number\">10<\/span><br \/>\n            successThreshold: <span class=\"token number\">1<\/span><br \/>\n            tcpSocket:<br \/>\n              port: <span class=\"token number\">9200<\/span><br \/>\n            timeoutSeconds: <span class=\"token number\">3<\/span><br \/>\n          terminationMessagePath: \/dev\/termination-log<br \/>\n          terminationMessagePolicy: File<br \/>\n          volumeMounts:<br \/>\n          &#8211; mountPath: \/usr\/share\/opensearch\/data<br \/>\n            name: opensearch-cluster-master<br \/>\n          &#8211; mountPath: \/usr\/share\/opensearch\/config\/opensearch.yml<br \/>\n            name: config<br \/>\n            subPath: opensearch.yml<br \/>\n        dnsPolicy: ClusterFirst<br \/>\n        enableServiceLinks: <span class=\"token boolean\">true<\/span><br \/>\n        initContainers:<br \/>\n        &#8211; args:<br \/>\n          &#8211; <span class=\"token function\">chown<\/span> -R <span class=\"token number\">1000<\/span>:1000 \/usr\/share\/opensearch\/data<br \/>\n          command:<br \/>\n          &#8211; <span class=\"token function\">sh<\/span><br \/>\n          &#8211; -c<br \/>\n          image: busybox:latest<br \/>\n          imagePullPolicy: Always<br \/>\n          name: fsgroup-volume<br \/>\n          resources: <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n          securityContext:<br \/>\n            runAsUser: <span class=\"token number\">0<\/span><br \/>\n          terminationMessagePath: \/dev\/termination-log<br \/>\n          terminationMessagePolicy: File<br \/>\n          volumeMounts:<br \/>\n          &#8211; mountPath: \/usr\/share\/opensearch\/data<br \/>\n            name: opensearch-cluster-master<br \/>\n        restartPolicy: Always<br \/>\n        schedulerName: default-scheduler<br \/>\n        securityContext:<br \/>\n          fsGroup: <span class=\"token number\">1000<\/span><br \/>\n          runAsUser: <span class=\"token number\">1000<\/span><br \/>\n        terminationGracePeriodSeconds: <span class=\"token number\">120<\/span><br \/>\n        volumes:<br \/>\n        &#8211; configMap:<br \/>\n            defaultMode: <span class=\"token number\">420<\/span><br \/>\n            name: opensearch-cluster-master-config<br \/>\n          name: config<br \/>\n        &#8211; hostPath:<br \/>\n            path: \/tmp\/osdata<br \/>\n          name: opensearch-cluster-master<br \/>\n    updateStrategy:<br \/>\n      type: RollingUpdate<br \/>\nkind: List<\/p>\n<p><span class=\"token function\">cat<\/span> os_svc.yml<\/p>\n<p>apiVersion: v1<br \/>\nkind: Service<br \/>\nmetadata:<br \/>\n  labels:<br \/>\n    app.kubernetes.io\/component: opensearch-cluster-master<br \/>\n    app.kubernetes.io\/instance: opensearch-server<br \/>\n    app.kubernetes.io\/name: opensearch<br \/>\n  name: opensearch-cluster-master<br \/>\n  namespace: default<br \/>\nspec:<br \/>\n  internalTrafficPolicy: Cluster<br \/>\n  ipFamilies:<br \/>\n  &#8211; IPv4<br \/>\n  ipFamilyPolicy: SingleStack<br \/>\n  ports:<br \/>\n  &#8211; name: http<br \/>\n    port: <span class=\"token number\">9200<\/span><br \/>\n    nodePort: <span class=\"token number\">32001<\/span><br \/>\n    protocol: TCP<br \/>\n    targetPort: <span class=\"token number\">9200<\/span><br \/>\n  &#8211; name: transport<br \/>\n    port: <span class=\"token number\">9300<\/span><br \/>\n    protocol: TCP<br \/>\n    targetPort: <span class=\"token number\">9300<\/span><br \/>\n  selector:<br \/>\n    app.kubernetes.io\/instance: opensearch-server<br \/>\n    app.kubernetes.io\/name: opensearch<br \/>\n  sessionAffinity: None<br \/>\n  type: NodePort<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6587\u7ae0\u6d4f\u89c8\u9605\u8bfb2.5k\u6b21\uff0c\u70b9\u8d5e30\u6b21\uff0c\u6536\u85cf23\u6b21\u3002\u5176\u4e2ddata\u8282\u70b9\u4e5f\u53ef\u62c6\u5206\u51fa\u6765\u672c\u6587\u4e0d\u505a\u5c55\u793a\u3002do sleep 1;\u5b89\u88c5\u547d\u4ee4\u3002_opensearch\u90e8\u7f72<\/p>\n","protected":false},"author":2,"featured_media":22631,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[27,1745,1744],"topic":[],"class_list":["post-22651","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server","tag-docker","tag-helm","tag-opensearch"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Opensearch\u96c6\u7fa4\u90e8\u7f72\u3010docker\u3001\u670d\u52a1\u5668\u3001Helm\u591a\u79cd\u90e8\u7f72\u65b9\u5f0f\u3011 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/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.wsisp.com\/helps\/22651.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Opensearch\u96c6\u7fa4\u90e8\u7f72\u3010docker\u3001\u670d\u52a1\u5668\u3001Helm\u591a\u79cd\u90e8\u7f72\u65b9\u5f0f\u3011 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u6587\u7ae0\u6d4f\u89c8\u9605\u8bfb2.5k\u6b21\uff0c\u70b9\u8d5e30\u6b21\uff0c\u6536\u85cf23\u6b21\u3002\u5176\u4e2ddata\u8282\u70b9\u4e5f\u53ef\u62c6\u5206\u51fa\u6765\u672c\u6587\u4e0d\u505a\u5c55\u793a\u3002do sleep 1;\u5b89\u88c5\u547d\u4ee4\u3002_opensearch\u90e8\u7f72\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/22651.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2025-04-18T22:13:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221304-6802ce70c9b79.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/22651.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/22651.html\",\"name\":\"Opensearch\u96c6\u7fa4\u90e8\u7f72\u3010docker\u3001\u670d\u52a1\u5668\u3001Helm\u591a\u79cd\u90e8\u7f72\u65b9\u5f0f\u3011 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2025-04-18T22:13:08+00:00\",\"dateModified\":\"2025-04-18T22:13:08+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/22651.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/22651.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/22651.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Opensearch\u96c6\u7fa4\u90e8\u7f72\u3010docker\u3001\u670d\u52a1\u5668\u3001Helm\u591a\u79cd\u90e8\u7f72\u65b9\u5f0f\u3011\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Opensearch\u96c6\u7fa4\u90e8\u7f72\u3010docker\u3001\u670d\u52a1\u5668\u3001Helm\u591a\u79cd\u90e8\u7f72\u65b9\u5f0f\u3011 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","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.wsisp.com\/helps\/22651.html","og_locale":"zh_CN","og_type":"article","og_title":"Opensearch\u96c6\u7fa4\u90e8\u7f72\u3010docker\u3001\u670d\u52a1\u5668\u3001Helm\u591a\u79cd\u90e8\u7f72\u65b9\u5f0f\u3011 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u6587\u7ae0\u6d4f\u89c8\u9605\u8bfb2.5k\u6b21\uff0c\u70b9\u8d5e30\u6b21\uff0c\u6536\u85cf23\u6b21\u3002\u5176\u4e2ddata\u8282\u70b9\u4e5f\u53ef\u62c6\u5206\u51fa\u6765\u672c\u6587\u4e0d\u505a\u5c55\u793a\u3002do sleep 1;\u5b89\u88c5\u547d\u4ee4\u3002_opensearch\u90e8\u7f72","og_url":"https:\/\/www.wsisp.com\/helps\/22651.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2025-04-18T22:13:08+00:00","og_image":[{"url":"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/04\/20250418221304-6802ce70c9b79.png"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"22 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/22651.html","url":"https:\/\/www.wsisp.com\/helps\/22651.html","name":"Opensearch\u96c6\u7fa4\u90e8\u7f72\u3010docker\u3001\u670d\u52a1\u5668\u3001Helm\u591a\u79cd\u90e8\u7f72\u65b9\u5f0f\u3011 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2025-04-18T22:13:08+00:00","dateModified":"2025-04-18T22:13:08+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/22651.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/22651.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/22651.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"Opensearch\u96c6\u7fa4\u90e8\u7f72\u3010docker\u3001\u670d\u52a1\u5668\u3001Helm\u591a\u79cd\u90e8\u7f72\u65b9\u5f0f\u3011"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/22651","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=22651"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/22651\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media\/22631"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=22651"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=22651"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=22651"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=22651"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}