{"id":7275,"date":"2022-12-24T10:26:36","date_gmt":"2022-12-24T01:26:36","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=7275"},"modified":"2022-12-24T12:36:29","modified_gmt":"2022-12-24T03:36:29","slug":"kubernetes-elasticsearch-%ec%84%a4%ec%b9%98%ed%95%98%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=7275","title":{"rendered":"Kubernetes &#8211; Elasticsearch \uc124\uce58\ud558\uae30"},"content":{"rendered":"<h1>Kubernetes &#8211; Elasticsearch \uc124\uce58\ud558\uae30<\/h1>\n<p><a href=\"https:\/\/choco-life.tistory.com\/54\">\ucc38\uc870<\/a><\/p>\n<p><a href=\"https:\/\/github.com\/pires\/kubernetes-elasticsearch-cluster\">\ucc38\uc870<\/a><\/p>\n<p>k8s \uc5d0 Elasticsearch \ub97c \uc124\uce58\ud558\ub294 \ubc29\ubc95\uc744 \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc6b0\uc120\uc740 \ud558\ub098\uc758 \ub178\ub4dc\ub9cc \uc0dd\uc131\ud558\uace0,<br \/>\n\uadf8 \ub178\ub4dc\uc5d0\uc11c \ub9c8\uc2a4\ud130\/\ub370\uc774\ud0c0 \ub178\ub4dc \uc5ed\ud560\uc744 \ubaa8\ub450 \uc218\ud589\ud558\ub3c4\ub85d \ud569\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c\uc73c\ub85c 3\uac1c\uc758 \ub9c8\uc2a4\ud130 \ub178\ub4dc\ub97c \uc0dd\uc131\ud558\uace0,<br \/>\nN\uac1c\uc758 \ub370\uc774\ud0c0 \ub178\ub4dc\ub97c \uc0dd\uc131\ud558\ub294 \ubc29\ubc95\uc744 \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n<h2>namespace \uc0dd\uc131<\/h2>\n<pre><code class=\"language-bash\">vi elasticsearch-namespace.yaml\n---------------------------\napiVersion: v1\nkind: Namespace\nmetadata:\n  name: elasticsearch\n---------------------------<\/code><\/pre>\n<h2>configmap \uc0dd\uc131<\/h2>\n<pre><code class=\"language-bash\">vi elasticsearch-configmap.yaml\n---------------------------\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  namespace: elasticsearch\n  name: elasticsearch-config\n  labels:\n    app: elasticsearch\n    # role: data\ndata:\n  elasticsearch.yml: |-\n    cluster.name: ${CLUSTER_NAME}    # \ud074\ub7ec\uc2a4\ud130 \uc774\ub984\n    # node.name: ${NODE_NAME}        # \ub178\ub4dc \uc774\ub984\n    # discovery.seed_hosts: ${NODE_LIST}               # \ub178\ub4dc \ub9ac\uc2a4\ud2b8\n    # cluster.initial_master_nodes: ${MASTER_NODES}    # \ub9c8\uc2a4\ud130 \ub178\ub4dc\n    network.host: 0.0.0.0            # \uc678\ubd80 \uc811\uadfc\n    # node:                          # \ub178\ub4dc \uc815\ubcf4 \uc635\uc158\n    #   master: false\n    #   data: true\n    #   ingest: false\n    # xpack.security.enabled: true   # X pack \uc758 \uacbd\uc6b0 \ubcf4\uc548\uc124\uc815\n    # xpack.monitoring.collection.enabled: true\n---------------------------<\/code><\/pre>\n<h2>persistentvolume \uc0dd\uc131<\/h2>\n<pre><code class=\"language-bash\">vi elasticsearch-persistentvolume.yaml\n---------------------------\napiVersion: v1\nkind: PersistentVolume\nmetadata:\n  namespace: elasticsearch\n  name: elasticsearch-pv\n  labels:\n    name: elasticsearch\nspec:\n  storageClassName: standard\n  capacity:\n    storage: 1Gi\n  volumeMode: Filesystem\n  accessModes:\n    - ReadWriteOnce\n  claimRef:\n    namespace: elasticsearch\n    name: elasticsearch-persistent-storage-elasticsearch-node-0\n  persistentVolumeReclaimPolicy: Delete\n  hostPath:\n    path: \/data\/es\n    type: DirectoryOrCreate\n---------------------------<\/code><\/pre>\n<h2>statefulset \uc0dd\uc131<\/h2>\n<pre><code class=\"language-bash\">vi elasticsearch-statefulset.yaml\n---------------------------\napiVersion: apps\/v1\nkind: StatefulSet\nmetadata:\n  namespace: elasticsearch\n  name: elasticsearch-node\n  labels:\n    app: elasticsearch\n    #role: data\nspec:\n  serviceName: &quot;elasticsearch&quot;\n  selector:\n    matchLabels:\n      app: elasticsearch\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        app: elasticsearch\n    spec:\n      containers:\n        - name: elasticsearch\n          image: docker.elastic.co\/elasticsearch\/elasticsearch:7.17.8\n          # image: docker.elastic.co\/elasticsearch\/elasticsearch-oss:6.8.23\n          imagePullPolicy: IfNotPresent\n          env:\n            - name: CLUSTER_NAME\n              value: elasticsearch-cluster\n            #- name: discovery.seed_hosts\n            #  value: &quot;elasticsearch&quot;\n            - name: discovery.type\n              value: single-node\n            - name: &quot;ES_JAVA_OPTS&quot;\n              value: &quot;-Xms300m -Xmx300m&quot;\n          ports:\n            - name: rest\n              containerPort: 9200\n            - name: transport\n              containerPort: 9300\n          volumeMounts:\n            - name: config\n              mountPath: \/usr\/share\/elasticsearch\/config\/elasticsearch.yml\n              readOnly: true\n              subPath: elasticsearch.yml\n            - name: elasticsearch-persistent-storage\n              mountPath: \/usr\/share\/elasticsearch\/data\n            - name: tz-seoul\n              mountPath: \/etc\/localtime\n      initContainers:\n        - name: fix-permissions\n          image: busybox\n          command: [&quot;sh&quot;, &quot;-c&quot;, &quot;chown -R 1000:1000 \/usr\/share\/elasticsearch\/data&quot;]\n          securityContext:\n            privileged: true\n          volumeMounts:\n            - name: elasticsearch-persistent-storage\n              mountPath: \/usr\/share\/elasticsearch\/data\n      volumes:\n        - name: config\n          configMap:\n            name: elasticsearch-config\n        - name: tz-seoul\n          hostPath:\n            path: \/usr\/share\/zoneinfo\/Asia\/Seoul\n  volumeClaimTemplates:\n    - metadata:\n        name: elasticsearch-persistent-storage\n        annotations:\n          volume.beta.kubernetes.io\/storage-class: &quot;gp2&quot;\n      spec:\n        accessModes: [ &quot;ReadWriteOnce&quot; ]\n        storageClassName: standard\n        resources:\n          requests:\n            storage: 1Gi\n---------------------------<\/code><\/pre>\n<h2>service \uc0dd\uc131<\/h2>\n<pre><code class=\"language-bash\">vi elasticsearch-service.yaml\n---------------------------\napiVersion: v1\nkind: Service\nmetadata:\n  namespace: elasticsearch\n  name: elasticsearch\n  labels:\n    app: elasticsearch\nspec:\n  type: ClusterIP\n  ports:\n    - name: rest\n      port: 9200\n    - name: transport\n      port: 9300\n  selector:\n    app: elasticsearch\n---\nkind: Service\napiVersion: v1\nmetadata:\n  namespace: elasticsearch\n  name: elasticsearch-nodeport\n  labels:\n    app: elasticsearch\nspec:\n  type: NodePort\n  ports:\n    - nodePort: 30920\n      port: 9200\n      targetPort: 9200\n      protocol: TCP\n  selector:\n    app: elasticsearch\n---------------------------<\/code><\/pre>\n<h2>\uc124\uce58 \ubc0f \ud655\uc778\ud558\uae30<\/h2>\n<pre><code class=\"language-bash\">kubectl apply -f elasticsearch-namespace.yaml\nkubectl apply -f elasticsearch-configmap.yaml\nkubectl apply -f elasticsearch-persistentvolume.yaml\nkubectl apply -f elasticsearch-statefulset.yaml\nkubectl apply -f elasticsearch-service.yaml<\/code><\/pre>\n<pre><code class=\"language-bash\">kubectl get svc -n elasticsearch\nNAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE\nelasticsearch            ClusterIP   None            &lt;none&gt;        9200\/TCP,9300\/TCP   8m52s\nelasticsearch-nodeport   NodePort    10.107.47.146   &lt;none&gt;        9200:30920\/TCP      11s\ncurl http:\/\/10.107.47.146:9200\/\n{\n  &quot;name&quot; : &quot;elasticsearch-node-0&quot;,\n  &quot;cluster_name&quot; : &quot;elasticsearch-cluster&quot;,\n  &quot;cluster_uuid&quot; : &quot;NU-vCCGBTaaEvFpGgtDcMA&quot;,\n  &quot;version&quot; : {\n    &quot;number&quot; : &quot;7.17.8&quot;,\n    &quot;build_flavor&quot; : &quot;default&quot;,\n    &quot;build_type&quot; : &quot;docker&quot;,\n    &quot;build_hash&quot; : &quot;120eabe1c8a0cb2ae87cffc109a5b65d213e9df1&quot;,\n    &quot;build_date&quot; : &quot;2022-12-02T17:33:09.727072865Z&quot;,\n    &quot;build_snapshot&quot; : false,\n    &quot;lucene_version&quot; : &quot;8.11.1&quot;,\n    &quot;minimum_wire_compatibility_version&quot; : &quot;6.8.0&quot;,\n    &quot;minimum_index_compatibility_version&quot; : &quot;6.0.0-beta1&quot;\n  },\n  &quot;tagline&quot; : &quot;You Know, for Search&quot;\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Kubernetes &#8211; Elasticsearch \uc124\uce58\ud558\uae30 \ucc38\uc870 \ucc38\uc870 k8s \uc5d0 Elasticsearch \ub97c \uc124\uce58\ud558\ub294 \ubc29\ubc95\uc744 \uc124\uba85\ud569\ub2c8\ub2e4. \uc6b0\uc120\uc740 \ud558\ub098\uc758 \ub178\ub4dc\ub9cc \uc0dd\uc131\ud558\uace0, \uadf8 \ub178\ub4dc\uc5d0\uc11c \ub9c8\uc2a4\ud130\/\ub370\uc774\ud0c0 \ub178\ub4dc \uc5ed\ud560\uc744 \ubaa8\ub450 \uc218\ud589\ud558\ub3c4\ub85d \ud569\ub2c8\ub2e4. \ub2e4\uc74c\uc73c\ub85c 3\uac1c\uc758 \ub9c8\uc2a4\ud130 \ub178\ub4dc\ub97c \uc0dd\uc131\ud558\uace0, N\uac1c\uc758 \ub370\uc774\ud0c0 \ub178\ub4dc\ub97c \uc0dd\uc131\ud558\ub294 \ubc29\ubc95\uc744 \uc124\uba85\ud569\ub2c8\ub2e4. namespace \uc0dd\uc131 vi elasticsearch-namespace.yaml &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; apiVersion: v1 kind: Namespace metadata: name: elasticsearch &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; configmap \uc0dd\uc131 vi elasticsearch-configmap.yaml &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; apiVersion:\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=7275\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[],"class_list":["post-7275","post","type-post","status-publish","format-standard","hentry","category-kubernetes"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7275"}],"version-history":[{"count":8,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7275\/revisions"}],"predecessor-version":[{"id":7286,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7275\/revisions\/7286"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}