Elastic Cloud on Kubernetes에서 온프레미 k3s에 Elasticsearch 7.4.0 배포

소개



Elasticsearch를 만지고 싶었기 때문에 수중에 환경을 만들어 보기로 했습니다.
모처럼이므로 최근 출시된 최신 7.4.0+ 마지막 기사 에서 구축한 k3s 환경을 사용합니다.
(k3s 특유의 요소는 없기 때문에, 통상의 Kubernetes 환경에서도 변함없이 움직인다고 생각합니다)

CRD 작성



Elastic Cloud on Kubernetes는 Elasticsearch와 Kibana를 고유한 Custom Resource로 정의합니다.
공식 문서QuickStart 에 있는,
$ kubectl apply -f https://download.elastic.co/downloads/eck/1.0.0-beta1/all-in-one.yaml

을 실행합니다.
※2019/10/12 현재, 공식 문서 기재의 URL은 404가 되고 있습니다.
URL의 버젼 부분을 Github의 릴리스 로 공개되고 있는 표기로 하면 좋을 것 같습니다.
상기에서는 「1.0.0-beta1-bc12」라고 하고 있습니다.
※2019/10/23 갱신
1.0.0-beta1이 공개됨에 따라 위의 설명은 더 이상 필요하지 않습니다.
공식 문서의 기재대로 문제 없습니다.

네임스페이스 만들기



관리상 Namespace를 나누고 싶기 때문에 작성합니다.
이번에는 "elastic"로했습니다.

namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: elastic
  labels:
    name: elastic
$ kubectl apply -f namespace.yaml
namespace/elastic created

Elasticsearch 배포



이번에는 간편하게 호스트 디렉토리를 hostPath로 데이터 영속화에 이용합니다.
다중 노드 구성으로 할 때는 검토.
또한 LoadBalancer로 외부로부터의 액세스를 HTTP로 받을 수 있도록 합니다.

elasticsearch.yaml
apiVersion: elasticsearch.k8s.elastic.co/v1beta1
kind: Elasticsearch
metadata:
  name: elasticsearch
  namespace: elastic
spec:
  version: 7.4.0
  nodeSets:
  - name: node
    count: 1
    config:
      node.master: true
      node.data: true
      node.ingest: true
      node.store.allow_mmap: false
    podTemplate:
      spec:
        volumes:
        - name: elasticsearch-data
          hostPath:
            path: /opt/k8s-elastic
  http:
    tls:
      selfSignedCertificate:
        disabled: true
    service:
      spec:
        ports:
          - port: 9200
            targetPort: 9200
        type: LoadBalancer
        loadBalancerIP: 192.168.24.103
$ kubectl apply -f elasticsearch.yaml
elasticsearch.elasticsearch.k8s.elastic.co/elasticsearch created

조금 기다린 후 elasticsearch 리소스의 상태를 확인하고,
$ kubectl get elasticsearch -n elastic
NAME            HEALTH   NODES   VERSION   PHASE   AGE
elasticsearch   green    1       7.4.0     Ready   3m15s

위와 같이 HEALTH가 green, PHASE가 Ready이면 OK입니다.

비밀번호가 보안에 저장되어 있으므로 다음과 같이 얻고,
$ PASSWORD=$(kubectl get secret elasticsearch-es-elastic-user -o=jsonpath='{.data.elastic}' -n elastic | base64 --decode)

curl로 액세스해 보겠습니다.
$ curl -u "elastic:$PASSWORD" http://192.168.24.103:9200
{
  "name" : "elasticsearch-es-node-0",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "WGWsr4wSQV2eodUKapxyoA",
  "version" : {
    "number" : "7.4.0",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "22e1767283e61a198cb4db791ea66e3f11ab9910",
    "build_date" : "2019-09-27T08:36:48.569419Z",
    "build_snapshot" : false,
    "lucene_version" : "8.2.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

Kibana 배포



Kibana도 LoadBalancer로 외부로부터의 액세스를 HTTP로 받을 수 있도록 합니다.

kibana.yaml
apiVersion: kibana.k8s.elastic.co/v1beta1
kind: Kibana
metadata:
  name: kibana
  namespace: elastic
spec:
  version: 7.4.0
  count: 1
  elasticsearchRef:
    name: elasticsearch
  http:
    tls:
      selfSignedCertificate:
        disabled: true
    service:
      spec:
        ports:
          - port: 80
            targetPort: 5601
        type: LoadBalancer
        loadBalancerIP: 192.168.24.104
$ kubectl apply -f kibana.yaml 
kibana.kibana.k8s.elastic.co/kibana created

배포가 끝나면 브라우저에서 http://192.168.24.104에 액세스하면,


로그인 화면이 표시됩니다.
Username,Password는 Elasticsearch와 같은 것을 입력하면 OK입니다.

좋은 웹페이지 즐겨찾기