k8s集群部署elk

  nodePort: 30017
- port: 9300
  name: inter
  nodePort: 30018

创建pv的yaml配置文件(这里使用nfs共享存储方式)


vi es-pv.yaml



apiVersion: v1
kind: PersistentVolume
metadata:
name: es-pv1
spec:
storageClassName: es-pv #定义了存储类型
capacity:
storage: 30Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: /volume2/k8s-data/es/es-pv1
server: 10.1.13.99

apiVersion: v1
kind: PersistentVolume
metadata:
name: es-pv2
spec:
storageClassName: es-pv #定义了存储类型
capacity:
storage: 30Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: /volume2/k8s-data/es/es-pv2
server: 10.1.13.99

apiVersion: v1
kind: PersistentVolume
metadata:
name: es-pv3
spec:
storageClassName: es-pv #定义了存储类型
capacity:
storage: 30Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: /volume2/k8s-data/es/es-pv3
server: 10.1.13.99


创建setafulset的yaml配置文件


vi es-setafulset.yaml



apiVersion: apps/v1
kind: StatefulSet
metadata:
name: elasticsearch
namespace: elk
labels:
app: elasticsearch
spec:
podManagementPolicy: Parallel
serviceName: elasticsearch
replicas: 3
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
tolerations: #此配置是容忍污点可以使pod部署到master节点,可以去掉
- key: “node-role.kubernetes.io/control-plane”
operator: “Exists”
effect: NoSchedule
containers:
- image: elasticsearch:7.17.10
name: elasticsearch
resources:
limits:
cpu: 1
memory: 2Gi
requests:
cpu: 0.5
memory: 500Mi
env:
- name: network.host
value: “site
- name: node.name
value: “${HOSTNAME}”
- name: discovery.zen.minimum_master_nodes
value: “2”
- name: discovery.seed_hosts #该参数用于告诉新加入集群的节点去哪里发现其他节点,它应该包含集群中已经在运行的一部分节点的主机名或IP地址,这里我使用无头服务的地址
value: “elasticsearch-0.elasticsearch.elk.svc.cluster.local,elasticsearch-1.elasticsearch.elk.svc.cluster.local,elasticsearch-2.elasticsearch.elk.svc.cluster.local”
- name: cluster.initial_master_nodes #这个参数用于指定初始主节点。当一个新的集群启动时,它会从这个列表中选择一个节点作为初始主节点,然后根据集群的情况选举其他的主节点
value: “elasticsearch-0,elasticsearch-1,elasticsearch-2”
- name: cluster.name
value: “es-cluster”
- name: ES_JAVA_OPTS
value: “-Xms512m -Xmx512m”
ports:
- containerPort: 9200
name: db
protocol: TCP
- name: inter
containerPort: 9300
volumeMounts:
- name: elasticsearch-data
mountPath: /usr/share/elasticsearch/data
volumeClaimTemplates:

  • metadata:
    name: elasticsearch-data
    spec:
    storageClassName: “es-pv”
    accessModes: [ “ReadWriteMany” ]
    resources:
    requests:
    storage: 30Gi

创建elk服务的命名空间



kubectl create namespace elk


创建yaml文件的服务



kubectl create -f es-pv.yaml
kubectl create -f es-service-nodeport.yaml
kubectl create -f es-service.yaml
kubectl create -f es-setafulset.yaml


查看es服务是否正常启动



kubectl get pod -n elk


![](https://img-blog.csdnimg.cn/direct/2246c8a62ecb4fe3a822af8f14d2b4ab.png)


检查elasticsearch集群是否正常 



http://10.1.60.119:30017/_cluster/state/master_node,nodes?pretty


可以看到集群中能正确识别到三个es节点 


![](https://img-blog.csdnimg.cn/direct/dfe8b47c8b61427486fa352947016ae9.png)


elasticsearch集群部署完成


**部署kibana服务**


这里使用deployment控制器部署kibana服务,使用service服务对外提供访问


创建deployment的yaml配置文件


vi kibana-deployment.yaml



apiVersion: apps/v1
kind: Deployment
metadata:
name: kibana
namespace: elk
labels:
app: kibana
spec:
replicas: 1
selector:
matchLabels:
app: kibana
template:
metadata:
labels:
app: kibana
spec:
tolerations:
- key: “node-role.kubernetes.io/control-plane”
operator: “Exists”
effect: NoSchedule
containers:
- name: kibana
image: kibana:7.17.10
resources:
limits:
cpu: 1
memory: 1G
requests:
cpu: 0.5
memory: 500Mi
env:
- name: ELASTICSEARCH_HOSTS
value: http://elasticsearch:9200
ports:
- containerPort: 5601
protocol: TCP


创建service的yaml配置文件


vi kibana-service.yaml



apiVersion: v1
kind: Service
metadata:
name: kibana
namespace: elk
spec:
ports:

  • port: 5601
    protocol: TCP
    targetPort: 5601
    nodePort: 30019
    type: NodePort
    selector:
    app: kibana

创建yaml文件的服务



kubectl create -f kibana-service.yaml
kubectl create -f kibana-deployment.yaml


查看kibana是否正常



kubectl get pod -n elk


![](https://img-blog.csdnimg.cn/direct/bf12360e58d64bd98958b4d6c2142105.png)


**部署logstash服务**


logstash服务也是通过deployment控制器部署,需要使用到configmap存储logstash配置,还有service提供对外访问服务


编辑configmap的yaml配置文件


vi logstash-configmap.yaml 



apiVersion: v1
kind: ConfigMap
metadata:
name: logstash-configmap
namespace: elk
labels:
app: logstash
data:
logstash.conf: |
input {
beats {
port => 5044 #设置日志收集端口
# codec => “json”
}
}
filter {
}
output {
# stdout{ 该被注释的配置项用于将收集的日志输出到logstash的日志中,主要用于测试看收集的日志中包含哪些内容
# codec => rubydebug
# }
elasticsearch {
hosts => “elasticsearch:9200”
index => “nginx-%{+YYYY.MM.dd}”
}
}


编辑deployment的yaml配置文件


vi logstash-deployment.yaml



apiVersion: apps/v1
kind: Deployment
metadata:
name: logstash
namespace: elk
spec:
replicas: 1
selector:
matchLabels:
app: logstash
template:
metadata:
labels:
app: logstash
spec:
containers:
- name: logstash
image: logstash:7.17.10
imagePullPolicy: IfNotPresent
ports:
- containerPort: 5044
volumeMounts:
- name: config-volume
mountPath: /usr/share/logstash/pipeline/
volumes:
- name: config-volume
configMap:
name: logstash-configmap
items:
- key: logstash.conf
path: logstash.conf


编辑service的yaml配置文件(我这里是收集k8s内部署的服务日志,所以没开放对外访问)


vi logstash-service.yaml



apiVersion: v1
kind: Service
metadata:
name: logstash
namespace: elk
spec:
ports:

  • port: 5044
    targetPort: 5044
    protocol: TCP
    selector:
    app: logstash
    type: ClusterIP

创建yaml文件的服务



kubectl create -f logstash-configmap.yaml
kubectl create -f logstash-service.yaml
kubectl create -f logstash-deployment.yaml


查看logstash服务是否正常启动



kubectl get pod -n elk


![](https://img-blog.csdnimg.cn/direct/06e688c3da1648d7b2db7714217c6879.png)


**部署filebeat服务**


filebeat服务使用daemonset方式部署到k8s的所有工作节点上,用于收集容器日志,也需要使用configmap存储配置文件,还需要配置rbac赋权,因为用到了filebeat的自动收集模块,自动收集k8s集群的日志,需要对k8s集群进行访问,所以需要赋权


编辑rabc的yaml配置文件


vi filebeat-rbac.yaml 



apiVersion: v1
kind: ServiceAccount
metadata:
name: filebeat
namespace: elk
labels:
app: filebeat

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: filebeat
labels:
app: filebeat
rules:

  • apiGroups: [“”]
    resources: [“namespaces”, “pods”, “nodes”] #赋权可以访问的服务
    verbs: [“get”, “list”, “watch”] #可以使用以下命令

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: filebeat
subjects:

  • kind: ServiceAccount
    name: filebeat
    namespace: elk
    roleRef:
    kind: ClusterRole
    name: filebeat
    apiGroup: rbac.authorization.k8s.io

编辑configmap的yaml配置文件


vi filebeat-configmap.yaml



apiVersion: v1
kind: ConfigMap
metadata:
name: filebeat-config
namespace: elk

data:
filebeat.yml: |
filebeat.autodiscover: #使用filebeat的自动发现模块
providers:
- type: kubernetes #类型选择k8s类型
templates: #配置需要收集的模板
- condition:
and:
- or:
- equals:
kubernetes.labels: #通过标签筛选需要收集的pod日志
app: foundation
- equals:
kubernetes.labels:
app: api-gateway
- equals: #通过命名空间筛选需要收集的pod日志
kubernetes.namespace: java-service

         config:                 #配置日志路径,使用k8s的日志路径
            - type: container
              symlinks: true    

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
img

理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
[外链图片转存中…(img-yYwMmyvs-1712849141625)]
[外链图片转存中…(img-2dDP9bCl-1712849141626)]
[外链图片转存中…(img-m1GvkMGM-1712849141626)]
[外链图片转存中…(img-EfDCNaEL-1712849141626)]
[外链图片转存中…(img-SlsWjSuE-1712849141626)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
[外链图片转存中…(img-hhgxfTUk-1712849141627)]

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k8s一键部署ELK是指使用Kubernetes进行一键部署Elasticsearch、Logstash和Kibana的组合。ELK是一套日志分析和可视化平台,用于收集、解析和展示大量的日志数据。它可以帮助用户对日志数据进行搜索、分析和监控,以便更好地理解应用程序的性能和故障情况。通过k8s一键部署ELK,用户可以方便地在Kubernetes集群部署和管理ELK组件。 具体步骤如下: 1. 在Kubernetes集群中创建一个命名空间(namespace)用于部署ELK组件。 2. 创建持久卷(PersistentVolume)和持久卷声明(PersistentVolumeClaim),用于存储Elasticsearch的数据。 3. 创建ConfigMap,将ELK组件的配置文件存储为Kubernetes资源。 4. 使用Kubernetes的Deployment或StatefulSet来创建Elasticsearch实例,并将其配置为使用持久卷进行数据存储。 5. 创建Logstash的Deployment或StatefulSet,配置它与Elasticsearch进行数据交互。 6. 创建Kibana的Deployment或StatefulSet,配置它与Elasticsearch进行数据展示和查询。 通过以上步骤,用户就可以在Kubernetes集群中一键部署ELK,并开始使用它来对日志数据进行收集、解析和展示。这样可以方便地监控应用程序的运行情况,及时发现和解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [分配任务调度XXL-JOB,使用ELK + Kafka + Filebeat日志收集,文件上传使用七牛云,数据加密AES,每](https://download.csdn.net/download/weixin_42140625/16073929)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [k8s一键安装mysql8单机版](https://blog.csdn.net/wangxin_wangxin/article/details/128723587)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值