Elastic:Elastic Cloud Kubernetes (ECK) 部署

借助Kubernetes上的Elastic Cloud(ECK),您可以扩展基本的Kubernetes编排功能,以轻松地部署,保护,升级Elasticsearch集群等。在今天的文章中,我们简单地介绍如何在我们自己的电脑上部署你的ECK。如果有条件的开发者,你可以到AWS,GCP等云端去部署你自己的ECK。

在我今天的练习中,我使用我的MacOS Catalina来部署。

Elastic Cloud Kubernetes.mp4

准备工作

安装VM

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

brew cask 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

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

 

安装ECK

首先我们启动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'

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

 

对高级Kuberenetes版本的支持

如果你想使用最新版本的Kubernetes的话,也就是在安装的时候,不指定Kubernetes的版本,那么在安装下面的Elastic Stack时候,它会出现错误信息。当我们在使用kubectl get pods时,它会显示“pending”状态,表明创建不成功:

如果我们使用命令:

kubectl describe pods/quickstart-es-default-0

它将会显示:

这个时候,我们需要建立另外一个pvc.yaml的文件:

pvc.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: data-pv0
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 3Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  claimRef:
    namespace: default
    name: elasticsearch-data-quickstart-es-default-0
  hostPath:
    path: "/mnt/data"

然后再使用如下的命令即可:

kubectl apply -f pvc.yaml

Dashboard

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

minikube dashboard

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

我们可以通过如下的指令来获得minikube的IP:

minikube ip
$ minikube ip
192.168.99.112

也可以通过如下的指令来获得minikube的状态:

minikube status
$ minikube status
m01
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured


接下来,我们参照Elastic的官方文档“Quick Start”。我们首先运行如下的命令来启动ECK的operator:

kubectl apply -f https://download.elastic.co/downloads/eck/1.0.1/all-in-one.yaml

我们可以通过如下的命令来启动对operator的命令的监控,尽管我们不太必要:

kubectl -n elastic-system logs -f statefulset.apps/elastic-operator

安装Elasticsearch集群

在今天的练习中,我们来创建一个单节点的Elasticsearch集群。我们在terminal中打入如下的命令:

cat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 7.6.2
  nodeSets:
  - name: default
    count: 1
    config:
      node.master: true
      node.data: true
      node.ingest: true
      node.store.allow_mmap: false
EOF

一旦打入上面的命令,带一会儿,我们可以使用如下的命令来查看已经被创建的pod:

kubectl get pods

它将显示信息如下:

$ kubectl get pods
NAME                      READY   STATUS     RESTARTS   AGE
quickstart-es-default-0   0/1     Init:0/1   0          10s

从上面我们可以看到我们的集群已经被成功地创建了。它显示的状态是Init。我们可以打入如下的命令:

$ kubectl get pods -w

这样我们可以看到这个集群的创建的情况,而不用一直重复上面的命令。

我们也可以使用如下的命令来查看这个集群的创建进度:

$ kubectl describe pod quickstart-es-default-0

在上面,quickstart-es-default-0是我们的pod的名称。在上面的kubectl get pods命令中可以得到。上名的命令显示:

从上面我们可以看出来正在下载docker的image。

等现在完后,我们重新运行上面的命令,我们可以看到:

上面显示我们的集群已经被成功地运行起来了。我们再次使用如下的命令:

kubectl get pods
$ kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGE
quickstart-es-default-0   1/1     Running   0          16m

上面显示我们的pod正在运行中。

监控集群的监控及创建过程

我们可以通过如下的命令来查看一下我们的Elasticsearch的运行状态,包括健康,版本信息及多少个节点:

kubectl get elasticsearch
$ kubectl get elasticsearch
NAME         HEALTH   NODES   VERSION   PHASE   AGE
quickstart   green    1       7.6.2     Ready   18m

上面显示我们的quickstart状态良好。健康状态为绿色,版本信息为目前最新的7.6.2。

如果你想得到某个具体的cluster名称的信息,你可以通过如下的指令:

kubectl get pods --selector='elasticsearch.k8s.elastic.co/cluster-name=quickstart'

在上面,我们通过selector来指定cluster-name为quickstart:

$ kubectl get pods --selector='elasticsearch.k8s.elastic.co/cluster-name=quickstart'
NAME                      READY   STATUS    RESTARTS   AGE
quickstart-es-default-0   1/1     Running   0          19m

我们可以通过如下的方式来检查quickstart的log:

kubectl logs -f quickstart-es-default-0

请求Elasticsearch访问权限

在上面的创建过程中,它将自动为您的集群创建一个ClusterIP服务:

kubectl get service quickstart-es-http
$ kubectl get service quickstart-es-http
NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
quickstart-es-http   ClusterIP   10.110.117.195   <none>        9200/TCP   23m

我们可以通过如下的方式来得到密码。在创建集群的过程中,它自动创建一个名为elastic的默认用户:

PASSWORD=$(kubectl get secret quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode)
$ PASSWORD=$(kubectl get secret quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode)
liuxg:kube liuxg$ echo $PASSWORD
qzn5w2c5q9s7sx5lx62ssxzc

在上面的命令中,它把我们的集群的密码存储到一个叫做PASSWORD的变量中。

我们可以通过如下的方式来访问我们的集群:

  • 在Kubernetes集群里,我们可以直接通过如下的方式来进行访问:
curl -u "elastic:$PASSWORD" -k "https://quickstart-es-http:9200"
  • 在我们的本机里,我们想访问集群的话,我们必须通过port-forward的方法把端口地址映射出来。在另外一个terminal中打入如下的命令:
kubectl port-forward service/quickstart-es-http 9200

然后,在上面的命令运行的情况下,在刚才取密码的那个terminal中打入命令:

curl -u "elastic:$PASSWORD" -k "https://localhost:9200"
$ curl -u "elastic:$PASSWORD" -k "https://localhost:9200"
{
  "name" : "quickstart-es-default-0",
  "cluster_name" : "quickstart",
  "cluster_uuid" : "1_0m0hLYTCWqSCLX9qBzgA",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

上面显示我们的Elasticsearch是正常运行的。我们也可以在我们的Chrome浏览器中,打入地址https://localhost:9200/。我们可以看到如下的画面:

我们可以在键盘上输入thisisunsafe,然后我们可以看到如下的画面:

 

我们可以把刚才我们得到的密码输入上面的对话框中:

从上面的信息中,我们可以看到Elasticsearch运行正常。

安装Kibana

安装Kibaba的过程和Elasticsearch的几乎是一样的。我们在terminal中打入如下的命令:

cat <<EOF | kubectl apply -f -
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: quickstart
spec:
  version: 7.6.2
  count: 1
  elasticsearchRef:
    name: quickstart
EOF

在上面我们指定我们的Elasticsearch是quickstart,这样它将自动连接到我们的quickstart集群。同样地,我们可以根据如下的命令:

$ kubectl get pods

来查看我们的pods:

$ kubectl get pods
NAME                             READY   STATUS              RESTARTS   AGE
quickstart-es-default-0          1/1     Running             0          40m
quickstart-kb-686d668b44-bwz8c   0/1     ContainerCreating   0          12s

我们查看进度:

kubectl describe pod quickstart-kb-686d668b44-bwz8c

上面现在正在下载image。等下载完image后,我们再次查看:

$ kubectl get pods
NAME                             READY   STATUS    RESTARTS   AGE
quickstart-es-default-0          1/1     Running   0          43m
quickstart-kb-686d668b44-bwz8c   1/1     Running   0          3m33s

上面显示我们的Kibana pod已经在成功运行了。

我们可以通过如下的命令来检查Kibana的健康情况:

kubectl get kibana
$ kubectl get kibana
NAME         HEALTH   NODES   VERSION   AGE
quickstart   green    1       7.6.2     5m10s

通过selector的方式,可以查看到相应的pod的情况:

kubectl get pod --selector='kibana.k8s.elastic.co/name=quickstart'
$ kubectl get pod --selector='kibana.k8s.elastic.co/name=quickstart'
NAME                             READY   STATUS    RESTARTS   AGE
quickstart-kb-686d668b44-bwz8c   1/1     Running   0          6m44s

访问Kibana

上面的创建过程自动为Kibana创建一个ClusterIP服务:

kubectl get service quickstart-kb-http
$ kubectl get service quickstart-kb-http
NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
quickstart-kb-http   ClusterIP   10.110.231.16   <none>        5601/TCP   8m59s

使用kubectl port-forward从本地工作站访问Kibana:

kubectl port-forward service/quickstart-kb-http 5601
$ kubectl port-forward service/quickstart-kb-http 5601
Forwarding from 127.0.0.1:5601 -> 5601
Forwarding from [::1]:5601 -> 5601

在一个terminal中打入上面的命令。然后我们在我们的浏览器中输入地址https://localhost:5601。和上面Elasticsearch一样的方法,记得输入上面的用户名elastic及获得的密码:

点击Login。这样我们就可以进入到Kibana界面了:

 

至此,我们已经完成了ECK的部署。

如果你想删除你这个部署,你可以使用如下的命令来删除elasticsearch:

kubectl delete elasticsearch quickstart

 

参考:

【1】https://www.youtube.com/watch?v=t4WyD4AE0q4

【2】https://minikube.sigs.k8s.io/docs/start/macos/

【3】https://chekkan.com/setting-up-elasticsearch-cluster-on-kubernetes-part-1/

【4】https://www.cnblogs.com/pack27/p/12202687.html

【5】https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-managing-compute-resources.html#k8s-compute-resources-elasticsearch

【6】https://jimmysong.io/kubernetes-handbook/develop/using-vagrant-and-virtualbox-for-development.html

【7】https://www.elastic.co/blog/getting-started-with-elastic-cloud-on-kubernetes-deployment

【8】https://github.com/cloudnativelabs/kube-shell

 

展开阅读全文

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

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

支付成功即可阅读