Elastic:使用Elastic Helm Chart来部署多节点的Elasticsearch集群

在之前的文章“Elastic:Elastic Cloud Kubernetes (ECK) 部署”我介绍了如何在minikube中部署ECK。在今天的文章中,我来介绍一下如何使用Elastic Helm Chart来部署一个多节点的Elasticsearch集群。

 

安装

安装VM

在今天的安装中,我选择使用virtualbox来部署我们的ECK。我们也可以选择Docker及其它的容器来进行。关于如何在Mac上按照Virtualbox,在今天的教程中,我不再累述。你可以参考网站https://www.virtualbox.org/来进行安装。你可以使用如下的命令

brew install virtualbox

安装Minikube及kubectl

针对不同版本的MasOS,安装的方法可能不能。对于有些版本的MacOS来说,你需要打入如下的命令:
 

brew cask install minikube

或者:

brew install minikube

一般来说在安装minikube的过程中,它也会同时帮我们安装kubectl。如果kubectl命令不能正常被执行,那么你可以尝试使用如下的命令来进行安装:

brew install kubernetes-cli

当我们把minikube及kubectl完全进行安装后,我们可以通过打入如下的命令来检查安装是否已经完成:

$ minikube version
minikube version: v1.9.0
commit: 48fefd43444d2f8852f527c78f0141b377b1e42a

如果你能看到上面的信息,则表明我们的minikube的安装时正确的。同样:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.5", GitCommit:"20c265fef0741dd71a66480e35bd69f18351daea", GitTreeState:"clean", BuildDate:"2019-10-15T19:16:51Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.0", GitCommit:"2bd9643cee5b3b3a5ecbd3af49d09018f0773c77", GitTreeState:"clean", BuildDate:"2019-09-18T14:27:17Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}

我们可以打入上面的命令来检查kubectl的版本信息。

目前ECK对于kubernetes的要求是:

  • kubectl 1.11+
  • Kubernetes 1.12+ or OpenShift 3.11+
  • Elastic Stack: 6.8+, 7.1+

一旦minikube安装好后,我可以通过如下的命令来检查哪些plugin已经被加载:

minikube addons list

我们可以通过如下的命令来enable一个plugin:

minikube addons enable dashboard

或者使用如下的命令来disable一个plugin:

minikube addons disable dashboard

安装Helm

我们可以使用如下的命令来安装Helm:

brew install helm

针对其它的操作系统,请参照链接https://helm.sh/docs/intro/install/

一旦完成我们们上面的安装后,我们也就可以开始来部署我们的ECK了。

 

使用Elastic Helm Chart安装Elasticsearch集群

首先我们启动minikube。在启动minikube之前,我们需要对minikube的启动参数来进行配置。我是这样来启动我的minikube的:

minikube start --driver=virtualbox --cpus 4 --memory 10240 --kubernetes-version 1.16.0

在上面,我使用virtualbox来作为驱动。你也可以使用docker来启动。在这里我配置了cpu的个数是4,内存是10G。同时由于一个一致的bug,目前minikube不能和最新的kubernetes一起进行安装工作。在上面我特别指出了kubernetes的版本信息为1.16.0。

上面的命令的输出为:

对于中国的开发者来说,由于网路的限制,那么在使用上面的命令时,可能会出现k8s.gcr.io网址不能被访问的情况。那么我们怎么解决这个问题呢?答案是我们可以使用使用阿里云服务器。我们可以尝试使用如下的命令:

$ minikube start --help |grep repo

      --image-repository='': Alternative image repository to pull docker images from. This can be used when you have limited access to gcr.io. Set it to "auto" to let minikube decide one for you. For Chinese mainland users, you may use local gcr.io mirrors such as registry.cn-hangzhou.aliyuncs.com/google_containers

根据上面的提示,我们可以修改我们上面的命令为:

$ minikube start --driver=virtualbox --cpus 4 --memory 10240 --kubernetes-version 1.16.0 --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'

那么根据上面的命令运行后的结果为:

一旦minikube被成功启动起来,我们可以使用如下的命令:

minikube dashboard

当上面的命令执行后,它就会启动一个web的接口让我们来对kubernetes监控和管理:

等我们上面的Minikube已经被启动后,我们使用如下的命令:

helm repo add elastic https://helm.elastic.co

上面的命令返回:

$ helm repo add elastic https://helm.elastic.co
"elastic" has been added to your repositories

接着我们使用如下的命令:

curl -O https://raw.githubusercontent.com/elastic/helm-charts/master/elasticsearch/examples/minikube/values.yaml

$ curl -O https://raw.githubusercontent.com/elastic/helm-charts/master/elasticsearch/examples/minikube/values.yaml
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   478  100   478    0     0    810      0 --:--:-- --:--:-- --:--:--   808

上面的values.yaml的内容如下:

---
# Permit co-located instances for solitary minikube virtual machines.
antiAffinity: "soft"

# Shrink default JVM heap.
esJavaOpts: "-Xmx128m -Xms128m"

# Allocate smaller chunks of memory per pod.
resources:
  requests:
    cpu: "100m"
    memory: "512M"
  limits:
    cpu: "1000m"
    memory: "512M"

# Request smaller persistent volumes.
volumeClaimTemplate:
  accessModes: [ "ReadWriteOnce" ]
  storageClassName: "standard"
  resources:
    requests:
      storage: 100M

我们使用helm来对我们的Elasticsearch进行安装:

 helm install elasticsearch elastic/elasticsearch -f ./values.yaml 

上面的命令的输出为:

$ helm install elasticsearch elastic/elasticsearch -f ./values.yaml 
NAME: elasticsearch
LAST DEPLOYED: Sun Apr  5 19:04:46 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Watch all cluster members come up.
  $ kubectl get pods --namespace=default -l app=elasticsearch-master -w
2. Test cluster health using Helm test.
  $ helm test elasticsearch --namespace=default

我们使用上面显示的命令来进行监控:

kubectl get pods --namespace=default -l app=elasticsearch-master -w
$ kubectl get pods --namespace=default -l app=elasticsearch-master -w
NAME                     READY   STATUS    RESTARTS   AGE
elasticsearch-master-0   0/1     Running   0          98s
elasticsearch-master-1   0/1     Running   0          98s
elasticsearch-master-2   0/1     Running   0          98s
elasticsearch-master-1   1/1     Running   0          106s
elasticsearch-master-2   1/1     Running   0          110s
elasticsearch-master-0   1/1     Running   0          116s

上面显示我们的Elasticseach已经被成功地部署好了。

接下来,我们来部署我们的Kibana:

helm install kibana elastic/kibana

我们可以通过如下的命令来监控Kibana的创建过程:

kubectl get pods -w
$ kubectl get pods -w
NAME                             READY   STATUS              RESTARTS   AGE
elasticsearch-master-0           1/1     Running             0          4m12s
elasticsearch-master-1           1/1     Running             0          4m12s
elasticsearch-master-2           1/1     Running             0          4m12s
kibana-kibana-69f5ddd4bd-ql4s7   0/1     ContainerCreating   0          26s
kibana-kibana-69f5ddd4bd-ql4s7   0/1     Running             0          60s

如果我们看到Kibana的状态已经变为Running,则表明我们的Kibana的创建是成功的。

最后,我们需要把Kibana的5601口进行port forward:

kubectl port-forward deployment/kibana-kibana 5601

上面命令的运行结果为:

$ kubectl port-forward deployment/kibana-kibana 5601
Forwarding from 127.0.0.1:5601 -> 5601
Forwarding from [::1]:5601 -> 5601
Handling connection for 5601

这样我们的Elasticsearch已经被成功部署了。我们启动浏览器,并输入地址localhost:5601

上面显示我们的Elasticsearch已经被成功部署了。

我们使用Dev tools:

从上面我们可以看出来,我们已经成功地部署了3个Elasticsearch节点的集群。

如果你想了解helm更多,你可以使用如下的命令:

helm --help

helm目前有很多的命令:

Available Commands:
  completion  Generate autocompletions script for the specified shell (bash or zsh)
  create      create a new chart with the given name
  dependency  manage a chart's dependencies
  env         Helm client environment information
  get         download extended information of a named release
  help        Help about any command
  history     fetch release history
  install     install a chart
  lint        examines a chart for possible issues
  list        list releases
  package     package a chart directory into a chart archive
  plugin      install, list, or uninstall Helm plugins
  pull        download a chart from a repository and (optionally) unpack it in local directory
  repo        add, list, remove, update, and index chart repositories
  rollback    roll back a release to a previous revision
  search      search for a keyword in charts
  show        show information of a chart
  status      displays the status of the named release
  template    locally render templates
  test        run tests for a release
  uninstall   uninstall a release
  upgrade     upgrade a release
  verify      verify that a chart at the given path has been signed and is valid
  version     print the client version information

我们可以通过命令:

helm list

来显示已经发布了的:

$ helm list
NAME         	NAMESPACE	REVISION	UPDATED                             	STATUS  	CHART              	APP VERSION
elasticsearch	default  	1       	2020-04-05 19:04:46.629021 +0800 CST	deployed	elasticsearch-7.6.2	7.6.2      
kibana       	default  	1       	2020-04-05 19:08:32.566291 +0800 CST	deployed	kibana-7.6.2       	7.6.2      

我们也可以使用如下的命令来卸载已经发布了的:

helm uninstall

比如:

$ helm uninstall kibana
release "kibana" uninstalled
liuxg:kube liuxg$ helm uninstall elasticsearch
release "elasticsearch" uninstalled
liuxg:kube liuxg$ kubectl get pods 
No resources found.

 

展开阅读全文

没有更多推荐了,返回首页

应支付0元
点击重新获取
扫码支付

支付成功即可阅读