天天看點

配置多節點叢集- Elastic Stack 實戰手冊

配置多節點叢集- Elastic Stack 實戰手冊
https://developer.aliyun.com/topic/download?id=1295 · 更多精彩内容,請下載下傳閱讀全本《Elastic Stack實戰手冊》 https://developer.aliyun.com/topic/download?id=1295 https://developer.aliyun.com/topic/es100 · 加入創作人行列,一起交流碰撞,參與技術圈年度盛事吧 https://developer.aliyun.com/topic/es100

創作人:劉曉國

如何使用 Elastic Helm Chart 來部署一個多節點的 Elasticsearch 叢集。

Elastic Helm Chart: https://github.com/elastic/helm-charts/

安裝

安裝 VM

在今天的安裝中,我選擇使用 virtualbox 來部署我們的 ECK。我們也可以選擇 Docker 及其它的容器來進行。你可以使用如下的指令

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           
配置多節點叢集- Elastic Stack 實戰手冊

我們可以通過如下的指令來 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。

上面的指令的輸出為:

配置多節點叢集- Elastic Stack 實戰手冊

對于中國的開發者來說,由于網路的限制,那麼在使用上面的指令時,可能會出現 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'           

那麼根據上面的指令運作後的結果為:

配置多節點叢集- Elastic Stack 實戰手冊

一旦 minikube 被成功啟動起來,我們可以使用如下的指令:

minikube dashboard           

當上面的指令執行後,它就會啟動一個 web 的接口讓我們來對 kubernetes 監控和管理:

配置多節點叢集- Elastic Stack 實戰手冊

等我們上面的 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

配置多節點叢集- Elastic Stack 實戰手冊

上面顯示我們的 Elasticsearch 已經被成功部署了。

我們使用 Dev tools:

配置多節點叢集- Elastic Stack 實戰手冊

從上面我們可以看出來,我們已經成功地部署了 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.