前言:
kubernetes1.16 版本的时候装置了 elastic on kubernetes(ECK)1.0 版本。存储用了 local disk 文档跑了一年多了。elasticsearch 对应版本是 7.6.2。当初已实现了 kubernetes 1.20.5 containerd cilium hubble 环境的搭建(https://blog.csdn.net/saynaihe/article/details/115187298)并且集成了 cbs 腾讯云块存储(https://blog.csdn.net/saynaihe/article/details/115212770)。eck 也更新到了 1.5 版本 (我能说我前天装置的时候还是 1.4.0 吗 ….. 还好我只是简略利用没有太简单的变动无非版本变了 …. 那就再来一遍吧)
最早部署的 kubernetes1.16 版本的 eck 装置形式 https://duiniwukenaihe.github.io/2019/10/21/k8s-efk/ 多年前搭建的 eck1.0 版本。
对于 eck
elastic cloud on kubernetes 是一种 operator 的装置形式,很大水平上简化了利用的部署。同样的还有 promtheus-operator。
可参照 https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-deploy-eck.html 官网文档的部署形式。
1. 在 kubernete 集群中部署 ECK
1. 装置自定义资源定义和操作员及其 RBAC 规定:
kubectl apply -f https://download.elastic.co/d…
2. 监督操作日志:
kubectl -n elastic-system logs -f statefulset.apps/elastic-operator
**
———————– 分隔符 —————–
我是间接把 yaml 下载到本地了。
### 至于 all-in-one.yaml.1 前面的 1 能够疏忽了哈哈,第二次加载文件加后缀了。kubectl apply -f all-in-one.yaml
kubectl -n elastic-system logs -f statefulset.apps/elastic-operator
2. 部署 elasticsearch 集群
1. 定制化 elasticsearch 镜像
减少 s3 插件,批改时区东八区,并增加腾讯云 cos 的秘钥,并从新打包 elasticsearch 镜像.
1. DockerFile 如下
FROM docker.elastic.co/elasticsearch/elasticsearch:7.12.0
ARG ACCESS_KEY=XXXXXXXXX
ARG SECRET_KEY=XXXXXXX
ARG ENDPOINT=cos.ap-shanghai.myqcloud.com
ARG ES_VERSION=7.12.0
ARG PACKAGES="net-tools lsof"
ENV allow_insecure_settings 'true'
RUN rm -rf /etc/localtime && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' > /etc/timezone
RUN if [-n "${PACKAGES}" ]; then yum install -y $PACKAGES && yum clean all && rm -rf /var/cache/yum; fi
RUN \
/usr/share/elasticsearch/bin/elasticsearch-plugin install --batch repository-s3 && \
/usr/share/elasticsearch/bin/elasticsearch-keystore create && \
echo "XXXXXX" | /usr/share/elasticsearch/bin/elasticsearch-keystore add --stdin s3.client.default.access_key && \
echo "XXXXXX" | /usr/share/elasticsearch/bin/elasticsearch-keystore add --stdin s3.client.default.secret_key
2. 打包镜像并上传到腾讯云镜像仓库,也能够是其余公有仓库
docker build -t ccr.ccs.tencentyun.com/xxxx/elasticsearch:7.12.0 .
docker push ccr.ccs.tencentyun.com/xxxx/elasticsearch:7.12.0
2. 创立 elasticsearch 部署 yaml 文件,部署 elasticsearch 集群
批改了本人打包 image tag,应用了腾讯云 cbs csi 块存储。并定义了部署的 namespace,创立了 namespace logging.
1. 创立部署 elasticsearch 利用的命名空间
kubectl create ns logging
cat <<EOF > elastic.yaml
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
name: elastic
namespace: logging
spec:
version: 7.12.0
image: ccr.ccs.tencentyun.com/XXXX/elasticsearch:7.12.0
http:
tls:
selfSignedCertificate:
disabled: true
nodeSets:
- name: laya
count: 3
podTemplate:
spec:
containers:
- name: elasticsearch
env:
- name: ES_JAVA_OPTS
value: -Xms2g -Xmx2g
resources:
requests:
memory: 4Gi
cpu: 0.5
limits:
memory: 4Gi
cpu: 2
config:
node.master: true
node.data: true
node.ingest: true
node.store.allow_mmap: false
volumeClaimTemplates:
- metadata:
name: elasticsearch-data
spec:
accessModes:
- ReadWriteOnce
storageClassName: cbs-csi
resources:
requests:
storage: 200Gi
EOF
2. 部署 yaml 文件并查看利用部署状态
kubectl apply -f elastic.yaml
kubectl get elasticsearch -n logging
kubectl get elasticsearch -n logging
kubectl -n logging get pods --selector='elasticsearch.k8s.elastic.co/cluster-name=elastic'
3. 获取 elasticsearch 凭据
kubectl -n logging get secret elastic-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode; echo
4. 间接装置 kibana 了
批改了时区,和 elasticsearch 镜像一样都批改到了东八区,并将语言设置成了中文,对于 selfSignedCertificate 起因参照 https://www.elastic.co/guide/en/cloud-on-k8s/1.4/k8s-kibana-http-configuration.html。
cat <<EOF > kibana.yaml
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
name: elastic
namespace: logging
spec:
version: 7.12.0
image: docker.elastic.co/kibana/kibana:7.12.0
count: 1
elasticsearchRef:
name: elastic
http:
tls:
selfSignedCertificate:
disabled: true
podTemplate:
spec:
containers:
- name: kibana
env:
- name: I18N_LOCALE
value: zh-CN
resources:
requests:
memory: 1Gi
limits:
memory: 2Gi
volumeMounts:
- name: timezone-volume
mountPath: /etc/localtime
readOnly: true
volumes:
- name: timezone-volume
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
EOF
kubectl apply kibana.yaml
5. 对外映射 kibana 服务
对外裸露都是用 traefik https 代理,命名空间增加 tls secret。绑定外部 kibana service. 而后内部 slb udp 代理 443 端口。然而当初腾讯云 slb 能够挂载多个证书了,就把这层剥离了,间接 http 形式到 80 端口。而后 https 证书 都在 slb 负载平衡代理了。这样省心了证书的治理,还有一点是能够在 slb 层间接收集接入层日志到 cos。并可应用腾讯云自有的日志服务。
cat <<EOF > ingress.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: kibana-kb-http
namespace: logging
spec:
entryPoints:
- web
routes:
- match: Host(`kibana.XXXXX.com`)
kind: Rule
services:
- name: elastic-kb-http
port: 5601
EOF
kubectl apply -f ingress.yaml
输出 用户名 elastic 明码为下面获取的 elasticsearch 的凭据,进入治理页面。新界面很是酷炫
6. now 要增加快照仓库了
创立快照仓库跟 S3 形式是一样的,具体的能够参考 https://blog.csdn.net/ypc123ypc/article/details/87860583 这篇博文
PUT _snapshot/esbackup
{
"type": "s3",
"settings": {
"endpoint":"cos.ap-shanghai.myqcloud.com",
"region": "ap-shanghai",
"compress" : "true",
"bucket": "elastic-XXXXXXX"
}
}
OK 进行验证快照仓库是否增加胜利
还原一个试试?
可还行?期待变绿
根本实现。失常能够应用了。应用过程中还有很多留神的。要害还是集群的设计规划。数据的预估增长还有报警。下次有工夫列一下 Elastalert 在 kubernetes 中的部署利用。