第25关 利用operator部署生产级别的Elasticserach集群和kibana

------> 课程视频同步分享在今日头条B站

大家好,我是博哥爱运维。

什么是kubernetes operator

Kubernetes Operator 是一种用于扩展 Kubernetes 功能的软件。它的主要功能包括:

  1. 自动化操作 - Operator 可以自动执行诸如部署、扩缩容、升级、备份等常见操作。用户不需要手动一个个 Pod 去执行这些任务。
  2. 无状态应用管理 - Operator 很适合管理那些无状态的应用,比如数据库、缓存等。它通过控制器模式让应用始终处于预期的状态。
  3. 减少重复工作 - Operator 让用户从重复的日常工作中解脱出来,这些工作可以交给 Operator 来自动完成。
  4. 基于 CRD 扩展 - Operator 通过自定义资源定义(CRD)扩展 Kubernetes 的 API,并基于这些 CRD 来实现自定义控制循环。
  5. 结合服务目录 - Operator 可以与服务目录(如 Service Catalog)集成,来启用基于权限的资源控制和分发。

总的来说,Kubernetes Operator 的核心思想是通过程序化和自动化的方式来管理和扩展 Kubernetes 集群。它极大地简化了在 Kubernetes 上安装和运行复杂应用的过程。

Operator 的工作原理基于 Kubernetes 的控制器模式。它会不断地监测 Kubernetes 集群的状态,一旦发现自定义资源(CR)的实际状态与预期状态不符,Operator 就会执行相应的操作以使其达到预期状态。这种模式使得 Operator 可以实现自我修复和自动恢复的功能。

常见的 Kubernetes Operator 包括 Rook 提供存储解决方案的 Operator,Prometheus Operator 用于监控集群的 Operator,Istio Operator 用于服务网格的 Operator 等。这些 Operator 为 Kubernetes 生态带来了很大的便利。

部署eck operator
kubectl create -f https://download.elastic.co/downloads/eck/2.10.0/crds.yaml
kubectl apply -f https://download.elastic.co/downloads/eck/2.10.0/operator.yaml
kubectl -n elastic-system get pod
kubectl -n elastic-system logs -f statefulset.apps/elastic-operator
kubectl create ns es
部署 elasticsearch 集群
# 测试的话记得把下面相关参数值调低

cat <<EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
  namespace: es
spec:
  version: 8.11.3
  nodeSets:
  - name: default
    count: 1
    config:
      node.store.allow_mmap: false
    podTemplate:
      spec:
        containers:
        - name: elasticsearch
          env:
          - name: ES_JAVA_OPTS
            value: -Xms1g -Xmx1g
          resources:
            requests:
              memory: 2Gi
              cpu: 0.5
            limits:
              memory: 2Gi
              cpu: 0.5
        initContainers:
        - name: sysctl
          securityContext:
            privileged: true
          command: ['sh', '-c', 'sysctl -w vm.max_map_count=262144']
    volumeClaimTemplates:
    - metadata:
        name: elasticsearch-data
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 50Gi
        storageClassName: nfs-boge
  http:
    tls:
      selfSignedCertificate:
        disabled: true
EOF
测试ES集群
PASSWORD=$(kubectl -n es get secret quickstart-es-elastic-user -o go-template='{{.data.elastic | base64decode}}')
curl -u "elastic:$PASSWORD"  http://$(kubectl -n es get svc|grep es-http|awk '{print $3}'):9200
echo "elastic:$PASSWORD"

# 检查ES创建结果(可以通过edit来修改、用delete来删除)
kubectl -n es get es quickstar

NAME         HEALTH   NODES   VERSION   PHASE   AGE
quickstart   green    1       8.11.3    Ready   8m5s


# 查看索引列表
curl -s --basic -u "elastic:$PASSWORD"  http://$(kubectl -n es get svc|grep es-http|awk '{print $3}'):9200/_cat/indices?v
# 查看具体索引数据
curl -s --basic -u "elastic:$PASSWORD"  http://$(kubectl -n es get svc|grep es-http|awk '{print $3}'):9200/test-es-2021-02-02/_search?pretty
# 删除具体索引数据
curl -s --basic -u "elastic:$PASSWORD"  -XDELETE http://$(kubectl -n es get svc|grep es-http|awk '{print $3}'):9200/test-es-2021-02-02

部署 kibana
cat <<EOF | kubectl apply -f -
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: quickstart
  namespace: es
spec:
  version: 8.11.3
  count: 1
  elasticsearchRef:
    name: quickstart
  http:
    tls:
      selfSignedCertificate:
        disabled: true
EOF

生成tls证书
# 这里我先自签一个https的证书

#1. 先生成私钥key
# openssl genrsa -out boge.key 2048
Generating RSA private key, 2048 bit long modulus
..............................................................................................+++
.....+++
e is 65537 (0x10001)

#2.再基于key生成tls证书(注意:这里我用的*.boge.com,这是生成泛域名的证书,后面所有新增加的三级域名都是可以用这个证书的)
# openssl req -new -x509 -key boge.key -out boge.csr -days 360 -subj /CN=*.boge.com

# 看下创建结果
# ll
total 8
-rw-r--r-- 1 root root 1099 Nov 27 11:44 boge.csr
-rw-r--r-- 1 root root 1679 Nov 27 11:43 boge.key

#3. 创建k8s上的tls secret
kubectl -n es create secret tls boge-com-tls --key boge.key --cert boge.csr
配置kibana的ingress
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kibana
  namespace: es
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    kubernetes.io/ingress.class: nginx
spec:
  tls:
  - hosts:
    - kibana.boge.com
    secretName: boge-com-tls
  rules:
  - host: kibana.boge.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: quickstart-kb-http
            port:
              number: 5601
EOF
  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Prometheus 是一个开源监控系统,可以用于生产环境。下面是一些在生产环境中部署 Prometheus 的步骤: 1. 安装 Prometheus 服务器,并配置好监控目标和规则。 2. 部署多个 Prometheus 实例,并在它们之间进行数据同步。这样可以保证监控数据的可用性和容错性。 3. 使用 Alertmanager 进行告警管理,并配置好告警规则。 4. 使用 Grafana 或其他可视化工具来查看和分析监控数据。 5. 定期进行系统健康检查和性能优化。 6. 使用基于 Kubernetes 的 Prometheus 部署方案,例如 Prometheus Operator,来简化部署和管理。 7. 可以使用 remote_write 和 remote_read 将监控数据写入其他存储并与其他工具集成,如 Elasticsearch, InfluxDB 等。 ### 回答2: 要部署生产级别的Prometheus,可以按照以下步骤进行操作: 1. 确定需求:首先,我们需要明确我们的需求,例如监控的目标、数据的存储和处理需求等。 2. 部署Prometheus服务器:在生产环境中,我们通常会部署多个Prometheus服务器,以实现高可用性和容错性。可以使用Docker、Kubernetes容器化工具,或者直接在物理服务器上安装Prometheus。 3. 配置Prometheus:在部署Prometheus之前,我们需要创建一个Prometheus配置文件,其中包括要监控的目标、数据存储的方式、告警规则等。可以使用Prometheus的官方文档来指导配置文件的编写。 4. 监控目标配置:将要监控的目标的指标配置到Prometheus中。可以使用Prometheus提供的各种监控目标配置方式,例如通过Prometheus的API或通过服务发现机制。 5. 数据存储配置:选择适当的数据存储方式,以存储Prometheus收集到的指标数据。Prometheus支持多种存储方式,例如本地磁盘、远程存储器等。根据需求选择合适的存储方式,并进行相应的配置。 6. 告警配置:Prometheus还具有强大的告警功能,可以定义各种告警规则。要启用告警功能,需要创建并配置告警规则,并设置接收告警的方式,例如电子邮件、短信等。 7. 监控数据可视化:Prometheus提供了一些基本的监控数据可视化工具,例如Prometheus自带的Web界面和Grafana等。可以选择适合自己需求的工具,将监控数据以图表等形式展示出来。 8. 监控数据存储和备份:为了防止数据丢失,我们还需要考虑数据存储的备份和恢复策略。可以定期备份Prometheus的数据存储,并设置合适的备份周期和保留策略。 最后,为了确保Prometheus在生产环境中的稳定性和可靠性,我们需要根据实际情况进行性能优化、安全加固等。 这些步骤仅是一个整体的指导,具体的部署过程还需要根据实际情况进行调整和扩展。 ### 回答3: 将Prometheus部署生产级别需要考虑以下几个步骤: 1. 硬件规划:根据监控需求和数据规模,选择适当的硬件来部署Prometheus。确保具备足够的存储空间和CPU能力来处理大量的数据和高频率的指标采集。 2. 高可用性设计:Prometheus本身是一个单节点的时间序列数据库,但在生产环境中,通常需要部署多个Prometheus实例来实现高可用性。可以使用Prometheus的远程存储和聚合功能,将多个Prometheus实例中的数据进行持久化存储和聚合分析。 3. 部署方式选择:可以选择在物理机上、虚拟机上或使用容器技术(如Docker)中部署Prometheus实例。使用容器可以简化部署和管理,并提供高度可移植性。 4. 配置管理:通过Prometheus的配置文件,定义需要监控的目标和指标,配置指标采集频率和存储策略。建议使用版本控制系统(如Git)来管理配置文件,以便于追踪变更和回滚操作。 5. 安全性设置:确保Prometheus与其他系统的安全接口之间建立安全连接,例如使用HTTPS协议。授权和认证机制的配置也是必要的,以确保只有授权用户才能访问和管理Prometheus。 6. 监控告警设置:通过Prometheus的查询语言PromQL,定义监控规则和告警条件。将告警集成到现有的监控工具(如Alertmanager)中,以便及时通知到相负责人员。 7. 性能优化:根据实际监控需求和数据规模,调整Prometheus的配置参数,例如增大采样间隔、调整数据存储周期等。定期进行性能评估,并根据评估结果进行优化调整。 总而言之,生产级别的Prometheus部署需要综合考虑硬件规划、高可用性设计、部署方式选择、配置管理、安全性设置、监控告警设置和性能优化等方面,在实践中根据具体需求和环境进行灵活调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值