在本地的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。