在本地的k3s上部署Elasticsearch 7.4.0,使用Elastic Cloud on Kubernetes

首先

由于我对Elasticsearch很感兴趣,所以决定在本地创建一个环境来尝试一下。
既然如此,我将使用最新发布的版本7.4.0,以及之前文章中构建的k3s环境。
(由于没有k3s特有的要素,所以我认为它可以在普通的Kubernetes环境中正常运行)

创建CRD

Elastic Cloud on Kubernetes以独特的自定义资源定义了Elasticsearch和Kibana。这些定义可在官方文档的快速入门部分找到。

$ 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。

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

部署 Elasticsearch

这次我们将使用hostPath来方便地将主机目录用于数据持久化。
如果要实现多节点配置,则需要进行考虑。
此外,我们还将使用LoadBalancer使外部能够通过HTTP访问。

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

如果健康状态是绿色,阶段为就绪,则是可以的。

由于密码存储在secret中,所以我们可以按照以下方式获取并使用。

$ 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的部署

我们可以使用LoadBalancer让Kibana能够通过HTTP从外部接收访问。

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。

スクリーンショット 2019-10-12 12.45.16.png
广告
将在 10 秒后关闭
bannerAds