
創作人:劉曉國
如何使用 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
我們可以通過如下的指令來 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.