學習日志 211227 k8s上安裝elasticsearch
安裝測試用elastic search
===================
# 211227
# 背景
- 一個網(wǎng)站的基本功能就是信息的匹配
- 信息由發(fā)布者發(fā)布后, 使用者要能找到這些信息
- 這種匹配可以由多種方式實現(xiàn)
- 基于搜索引擎的信息匹配方式是最常用的
- elastic search是常用的開源解決方案
- 基于k8s的elastic search集群安裝是elastic search常用的運維方案
# 目標
- 在我們的測試集群中 搭建elastic search
- 同上, 搭建kibana管理工具
? - kibana是elastic stack推薦的elastic search管理工具
? - 面向開發(fā)和運維
# 安裝elastic search測試集群
## 創(chuàng)建CRD
- 參考
? - https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-deploy-eck.html
- CRD即custom resource definitions
? - 用戶自定義資源
? - 比如之前介紹的pods StatefulSet 都是k8s內(nèi)置的資源類型
? - 在此之上, 也可以自定義資源類型, 并基于這種資源類型
? ? - 編寫k8s描述文件
? ? - 執(zhí)行kubectl指令 如get
? - 自定義資源也是基于已有的資源的
? ? - 創(chuàng)建自定義資源時, 往往會同時創(chuàng)建pods service等
- 同時, 還可以為自定義的資源類型創(chuàng)建對應(yīng)的管理角色
? - 細節(jié) 略
? - 測試環(huán)境我們只有一個管理員 有最高權(quán)限
- 具體步驟
? - 見參考文檔即可 略
## 創(chuàng)建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
? ? - 這個資源類型即上一步創(chuàng)建的CRD
? ? - 注意這里E是大寫 但在kubectl命令行中使用時e小寫
? - name quickstart
? ? - 這個name實際上還會作為對應(yīng)的基本資源如pod和service的前綴使用
? ? - 見下
? - version 版本
? ? - 這里用了比較新的7.16.2
? ? - elastic search的版本更新還是很快的
? - nodeSets
? ? - Elasticsearch 資源類型是一個集群的概念
? ? - Elasticsearch 資源和pod資源是1對多的關(guān)系
? ? - 這里暗示了es和nodeSet也是1對多的關(guān)系
? ? - 但是此處只創(chuàng)建了一個nodeSet
? ? - 該nodeSet里 count是1 表示只需要一個pod
? ? - 該pod的規(guī)格沒有指定
? ? - 但實際上有一系列的默認值 比如有一個1G的pvc見下
? - config allow_mmap: false
? ? - 這個設(shè)置關(guān)閉了es的mmap功能
? ? - 該功能非常消耗內(nèi)存 但可以提高性能
? ??
### apply 該描述文件
略
### 檢查結(jié)果
- `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則使用了基礎(chǔ)的按名字查的方式
? - 注意這個命字的格式, 除了前綴, `-es-http` 這個部分是固定的
? - 這是個ClusterIP類型的service 但是沒有外部IP
- 獲取密碼
? - 新版的es都默認開了要密碼
? - 用戶名默認是 elastic
? - 密碼按如下命令
? - `kubectl get secret quickstart-es-elastic-user -o go-template='{{.data.elastic | base64decode}}'`
? - 顯然 這個secret也是CRD所屬的基礎(chǔ)資源之一
? - 拿到我們的es密碼 復(fù)制一下 下文以`$PASSWORD`表示
- 檢查服務(wù)
? - k8s集群內(nèi) 域名使用 svc 名 即
? - `curl -u "elastic:$PASSWORD" -k "https://quickstart-es-http:9200"`
? - 端口為9200
? - `-k` 表示不做證書校驗?
? - 顯然目前的quickstart集群的是用了自簽名證書來支持https協(xié)議
? - 集群外需要kubectl的port-forward
? - 我們先略過這塊 因為我們的開發(fā)機win10沒有裝好curl工具
? - 下一步裝完kibana直接用kibana的界面
- 檢查存儲
? - 查看 pvc 結(jié)果 多了一個
? - elasticsearch-data-quickstart-es-default-0
? - 用了1Gi的硬盤 先這樣吧
? - 注意k8s的硬盤容量單位 Gi和M
## 創(chuàng)建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是環(huán)環(huán)相套的
? ? - kibana這種資源類型可以基于elasticsearch資源類型來創(chuàng)建
### 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類型 (內(nèi)部服務(wù))
- 通過http使用
? - 端口代理
? - `kubectl port-forward service/quickstart-kb-http 5601`
? - 訪問 `https://localhost:5601/`
? - 接受https證書(忽略告警)
? - 需要登錄 之前創(chuàng)建elasticsearch集群時有說
? ? - 帳號是elastic
? ? - 密碼通過之前說的指令獲取 即
? ? - `kubectl get secret quickstart-es-elastic-user -o go-template='{{.data.elastic | base64decode}}'`
? - 密碼本質(zhì)上是一個k8s secret
? - 跳過引導(dǎo)
? - 左側(cè)三橫菜單 滾到下面找到dev tools
? - 執(zhí)行 `GET /`
? - 結(jié)果 與上一篇教程直接 curl 到 elasticsearch集群上的結(jié)果是一樣的
? - 類似
? ? ```
? ? {
? ? ? "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"
? ? }
? ? ```
? - 明天繼續(xù)
### Q&A
- Q: kibana集群HEALTH是red
- A: 檢查pods 發(fā)現(xiàn)對應(yīng) quickstart-kb-75dc58678b-lstdz 狀態(tài)是pending
? - 懷疑集群資源不夠
? - 檢查node使用情況
? - `kubectl describe node`
? - 發(fā)現(xiàn)cpu requests 97% (只有2個cpu, 即2000m, m表示千分之一個cpu)
? - memory還有剩余
? - 檢查所有cpu使用者 發(fā)現(xiàn)之前兩個mysql實例都是500m
? - 發(fā)現(xiàn)新創(chuàng)建的elasticsearch才用了100m
? - 把mysql的cpu使用調(diào)整為100m
? - 修改描述文件 cpu request和limit都寫0.1 重新apply -f
- Q: 執(zhí)行上一步操作時 mysql對應(yīng)的pod重建失敗
- A: 檢查pod
? - `kubectl describe pods mycluster-mysql-1`
? - 注意不是logs指令 現(xiàn)在pod本身沒創(chuàng)建出來 看logs沒什么東西
? - 發(fā)現(xiàn)報錯mysql-pass這個secret不存在
? - 列出secret `kubectl get secret`
? - 發(fā)現(xiàn)名字變成了 mysql-pass-78h9g286gm 后面多了串東西
? - 不知道什么原因 可能和之前有重新minikube start有關(guān)
? - 修改描述文件, 把secretKeyRef部分改為mysql-pass-78h9g286gm
? - 重新apply -f
? - 刪除掛掉的pod
? - 系統(tǒng)自動完成了mysql兩個節(jié)點的重部署
? - 檢查數(shù)據(jù)還在不在
? - `http://192.168.2.15:31000/doc/_list`
? - 還是三條數(shù)據(jù)
============
由于es官網(wǎng)的網(wǎng)絡(luò)問題?暫時沒有好的解決辦法?今天沒能直播只是自己裝了一下
明天繼續(xù)直播es的基本使用