欢迎光临散文网 会员登陆 & 注册

学习日志 211227 k8s上安装elasticsearch

2021-12-27 18:13 作者:mayoiwill  | 我要投稿

安装测试用elastic search

===================


# 211227

# 背景

- 一个网站的基本功能就是信息的匹配

- 信息由发布者发布后, 使用者要能找到这些信息

- 这种匹配可以由多种方式实现

- 基于搜索引擎的信息匹配方式是最常用的

- elastic search是常用的开源解决方案

- 基于k8s的elastic search集群安装是elastic search常用的运维方案


# 目标

- 在我们的测试集群中 搭建elastic search

- 同上, 搭建kibana管理工具

  - kibana是elastic stack推荐的elastic search管理工具

  - 面向开发和运维


# 安装elastic search测试集群


## 创建CRD

- 参考

  - https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-deploy-eck.html

- CRD即custom resource definitions

  - 用户自定义资源

  - 比如之前介绍的pods StatefulSet 都是k8s内置的资源类型

  - 在此之上, 也可以自定义资源类型, 并基于这种资源类型

    - 编写k8s描述文件

    - 执行kubectl指令 如get

  - 自定义资源也是基于已有的资源的

    - 创建自定义资源时, 往往会同时创建pods service等

- 同时, 还可以为自定义的资源类型创建对应的管理角色

  - 细节 略

  - 测试环境我们只有一个管理员 有最高权限

- 具体步骤

  - 见参考文档即可 略


## 创建elastic search测试集群

- 参考

  - https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-deploy-elasticsearch.html

- 具体步骤

  - 如下


### 编写基于自定义资源类型 Elasticsearch 的描述文件

- 描述文件原文


```

apiVersion: elasticsearch.k8s.elastic.co/v1

kind: Elasticsearch

metadata:

  name: quickstart

spec:

  version: 7.16.2

  nodeSets:

  - name: default

    count: 1

    config:

      node.store.allow_mmap: false

```


- 解释 描述文件

  - 资源类型 Elasticsearch

    - 这个资源类型即上一步创建的CRD

    - 注意这里E是大写 但在kubectl命令行中使用时e小写

  - name quickstart

    - 这个name实际上还会作为对应的基本资源如pod和service的前缀使用

    - 见下

  - version 版本

    - 这里用了比较新的7.16.2

    - elastic search的版本更新还是很快的

  - nodeSets

    - Elasticsearch 资源类型是一个集群的概念

    - Elasticsearch 资源和pod资源是1对多的关系

    - 这里暗示了es和nodeSet也是1对多的关系

    - 但是此处只创建了一个nodeSet

    - 该nodeSet里 count是1 表示只需要一个pod

    - 该pod的规格没有指定

    - 但实际上有一系列的默认值 比如有一个1G的pvc见下

  - config allow_mmap: false

    - 这个设置关闭了es的mmap功能

    - 该功能非常消耗内存 但可以提高性能

    

### apply 该描述文件


### 检查结果

- `kubectl get elasticsearch`

  - 注意 HEALTH 字段

  - 该字段的取值 参考

  - https://www.elastic.co/guide/en/elasticsearch/reference/7.16/cluster-health.html

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

  - 注意这里在选取pod时 采用了CRD的自定义选择器cluster-name

- `kubectl get service quickstart-es-http`

  - 这里检查service则使用了基础的按名字查的方式

  - 注意这个命字的格式, 除了前缀, `-es-http` 这个部分是固定的

  - 这是个ClusterIP类型的service 但是没有外部IP

- 获取密码

  - 新版的es都默认开了要密码

  - 用户名默认是 elastic

  - 密码按如下命令

  - `kubectl get secret quickstart-es-elastic-user -o go-template='{{.data.elastic | base64decode}}'`

  - 显然 这个secret也是CRD所属的基础资源之一

  - 拿到我们的es密码 复制一下 下文以`$PASSWORD`表示

- 检查服务

  - k8s集群内 域名使用 svc 名 即

  - `curl -u "elastic:$PASSWORD" -k "https://quickstart-es-http:9200"`

  - 端口为9200

  - `-k` 表示不做证书校验 

  - 显然目前的quickstart集群的是用了自签名证书来支持https协议

  - 集群外需要kubectl的port-forward

  - 我们先略过这块 因为我们的开发机win10没有装好curl工具

  - 下一步装完kibana直接用kibana的界面

- 检查存储

  - 查看 pvc 结果 多了一个

  - elasticsearch-data-quickstart-es-default-0

  - 用了1Gi的硬盘 先这样吧

  - 注意k8s的硬盘容量单位 Gi和M


## 创建kibana管理实例

- 参考

  - https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-deploy-kibana.html


### 编写 kibana 描述文件

- 原文


```

apiVersion: kibana.k8s.elastic.co/v1

kind: Kibana

metadata:

  name: quickstart

spec:

  version: 7.16.2

  count: 1

  elasticsearchRef:

    name: quickstart

```


- 解释

  - kind 这里又是一种新的CRD资源类型 Kibana

  - 和Elasticsearch一样, 该资源类型也可以使用kubectl get

  - version

  - count: 1

    - 可见kibana也可以做成集群

    - 这里和es不同 es是每个nodeSet都有一个count

    - kibana只有一个count

    - 可见kibana是一整个集群

  - elasticsearchRef

    - 需要管理的es集群的名字

    - 可见CRD是环环相套的

    - kibana这种资源类型可以基于elasticsearch资源类型来创建


### apply -f


### 检查

- 检查kibana

  - `kubectl get kibana`

  - HEALTH 是 red 见 Q&A 1

  - 要点通过describe node可以检查资源使用情况

  - 解决完上述问题 再检查 green 了

- 检查pod

  - `kubectl get pod --selector='kibana.k8s.elastic.co/name=quickstart'`

- 检查service

  - `kubectl get service quickstart-kb-http`

  - 这次也是ClusterIP类型 (内部服务)

- 通过http使用

  - 端口代理

  - `kubectl port-forward service/quickstart-kb-http 5601`

  - 访问 `https://localhost:5601/`

  - 接受https证书(忽略告警)

  - 需要登录 之前创建elasticsearch集群时有说

    - 帐号是elastic

    - 密码通过之前说的指令获取 即

    - `kubectl get secret quickstart-es-elastic-user -o go-template='{{.data.elastic | base64decode}}'`

  - 密码本质上是一个k8s secret

  - 跳过引导

  - 左侧三横菜单 滚到下面找到dev tools

  - 执行 `GET /`

  - 结果 与上一篇教程直接 curl 到 elasticsearch集群上的结果是一样的

  - 类似

    ```

    {

      "name" : "quickstart-es-default-0",

      "cluster_name" : "quickstart",

      "cluster_uuid" : "KhQi5J-KR4O8_MWxvhzeTg",

      "version" : {

        "number" : "7.16.2",

        "build_flavor" : "default",

        "build_type" : "docker",

        "build_hash" : "2b937c44140b6559905130a8650c64dbd0879cfb",

        "build_date" : "2021-12-18T19:42:46.604893745Z",

        "build_snapshot" : false,

        "lucene_version" : "8.10.1",

        "minimum_wire_compatibility_version" : "6.8.0",

        "minimum_index_compatibility_version" : "6.0.0-beta1"

      },

      "tagline" : "You Know, for Search"

    }

    ```

  - 明天继续


### Q&A

- Q: kibana集群HEALTH是red

- A: 检查pods 发现对应 quickstart-kb-75dc58678b-lstdz 状态是pending

  - 怀疑集群资源不够

  - 检查node使用情况

  - `kubectl describe node`

  - 发现cpu requests 97% (只有2个cpu, 即2000m, m表示千分之一个cpu)

  - memory还有剩余

  - 检查所有cpu使用者 发现之前两个mysql实例都是500m

  - 发现新创建的elasticsearch才用了100m

  - 把mysql的cpu使用调整为100m

  - 修改描述文件 cpu request和limit都写0.1 重新apply -f

- Q: 执行上一步操作时 mysql对应的pod重建失败

- A: 检查pod

  - `kubectl describe pods mycluster-mysql-1`

  - 注意不是logs指令 现在pod本身没创建出来 看logs没什么东西

  - 发现报错mysql-pass这个secret不存在

  - 列出secret `kubectl get secret`

  - 发现名字变成了 mysql-pass-78h9g286gm 后面多了串东西

  - 不知道什么原因 可能和之前有重新minikube start有关

  - 修改描述文件, 把secretKeyRef部分改为mysql-pass-78h9g286gm

  - 重新apply -f

  - 删除挂掉的pod

  - 系统自动完成了mysql两个节点的重部署

  - 检查数据还在不在

  - `http://192.168.2.15:31000/doc/_list`

  - 还是三条数据

============

由于es官网的网络问题 暂时没有好的解决办法 今天没能直播只是自己装了一下

明天继续直播es的基本使用

学习日志 211227 k8s上安装elasticsearch的评论 (共 条)

分享到微博请遵守国家法律