一次 Kubernetes 集群部署 EFK 实践

2,079 阅读4分钟

部署步骤

step 1 资源下载介绍

image.png

  • 资源介绍 | class.yaml | 用于创建 StorageClass | | --- | --- | | deployment.yaml | 用于创建 nfs-provisioner | | elasticsaerch-statefulset.yaml | 用于创建 ES deployment | | elasticsearch_svc.yaml | 用于创建 ES svc | | fluentd.yaml | 用于创建 fluentd 组件 | | kibana.yaml | 创建 kibana组件使用 | | kube-logging.yaml | 创建 kube-logging 命名空间使用 | | pod.yaml | 测试使用-可忽略 | | rbac.yaml | 对 serviceaccount.yaml 创建的 sa 账户进行授权 | | serviceaccount.yaml | 用于创建 nfs-provisioner 的 sa 账户 |

step 2 创建namespace

kubect create ns kube-logging

step 3 创建 NFS 服务

  1. 选择一台kubernetes集群的node节点,拿到其 IP 地址
  2. 在该节点上安装 nfs
    1. yum install nfs-util -y
    2. systemctl start nfs
    3. chkconfig nfs on
  3. 在该节点上创建共享目录
    1. mkdir /data/v1 -p 共享目录为 /data/v1 该目录可自定义,后续会使用到
    2. 配置:cat /etc/exports
      1. 如果当前节点IP地址为 192.168.0.6
      2. 可配置如下内容/data/v1 *(rw,no_root_squash)
      3. 配置内容规则意义可自行搜索
    3. 使配置生效 systemctl restart nfs
    4. 查看 NFS 服务状态

image.png

step 4 实现NFS动态供给

  1. 创建 service account kubectl apply -f serviceaccount.yaml
    1. 查看已经创建的 sa
    2. kubectl get sa
    3. image.png
  2. 对 sa 账号做 rbac 授权 kubectl apply -f rbac.yaml
    1. 查看创建的ClusterRole ClusterRoleBinding RoleBinding
    2. 查看ClusterRole
      1. kubectl get ClusterRole
      2. image.png
    3. 查看ClusterRoleBinding
      1. kubectl get ClusterRoleBinding
      2. image.png
    4. 查看RoleBinding
      1. kubectl get RoleBinding
      2. image.png
  3. 创建 nfs-provisioner
    1. yaml 修改
    2. image.png
    3. kubectl apply -f deployment.yaml
    4. 查看 nfs-provisioner kubectl get pod -n default
      1. image.png

step 5 创建 StorgeClass

  1. kubectl apply class.yaml
  2. 注意事项
  3. image.png
  4. 查看 sc kubectl get sc
  5. image.png

step 6 创建 ES

  1. 修改动态存储卷大小,对应文件 elasticsaerch-statefulset.yaml
    1. image.png
  2. 部署 elasticsearch
    1. kubectl apply -f **elasticsaerch-statefulset.yaml**
    2. 查看部署情况
    3. image.png
  3. 部署 svc
    1. kubectl apply -f **elasticsearch_svc.yaml**
    2. 查看 kubectl get svc -n kubelogging
    3. image.png
  4. 测试 ES
    1. 本地端口转发 kubectl port-forward es-cluster-0 9200:9200 --namespace=kube-logging
    2. 在另一个终端窗口中——测试访问 curl http://localhost:9200/_cluster/state?pretty
    3. 显示如下则部署成功
      1. image.png

step 7 安装 kibana 组件

  1. kubectl apply -f **kibana.yaml**
  2. 修改 svc 类型为 NodePort kubectl edit svc kibana -n kube-logging
    1. 找到 type: ClusterIp 修改为 type: NodePort
  3. 测试 kibana,浏览器访问 http://nodeIp:nodePort透出的端口,如下则部署成功
    1. image.png

step 8 安装 fluentd 组件

  1. kubectl apply -f fluentd.yaml

部署步骤

step 1 资源下载介绍

  • 资源下载 (公网下载)
    • 私有化通过平台下载
  • 解压如下

image.png

  - 镜像资源在   efk-master-image.zip 中
  • 资源介绍 | class.yaml | 用于创建 StorageClass | | --- | --- | | deployment.yaml | 用于创建 nfs-provisioner | | elasticsaerch-statefulset.yaml | 用于创建 ES deployment | | elasticsearch_svc.yaml | 用于创建 ES svc | | fluentd.yaml | 用于创建 fluentd 组件 | | kibana.yaml | 创建 kibana组件使用 | | kube-logging.yaml | 创建 kube-logging 命名空间使用 | | pod.yaml | 测试使用-可忽略 | | rbac.yaml | 对 serviceaccount.yaml 创建的 sa 账户进行授权 | | serviceaccount.yaml | 用于创建 nfs-provisioner 的 sa 账户 |

step 2 创建namespace

kubect create ns kube-logging

step 3 创建 NFS 服务

  1. 选择一台kubernetes集群的node节点,拿到其 IP 地址
  2. 在该节点上安装 nfs
    1. yum install nfs-util -y
    2. systemctl start nfs
    3. chkconfig nfs on
  3. 在该节点上创建共享目录
    1. mkdir /data/v1 -p 共享目录为 /data/v1 该目录可自定义,后续会使用到
    2. 配置:cat /etc/exports
      1. 如果当前节点IP地址为 192.168.0.6
      2. 可配置如下内容/data/v1 *(rw,no_root_squash)
      3. 配置内容规则意义可自行搜索
    3. 使配置生效 systemctl restart nfs
    4. 查看 NFS 服务状态

image.png

step 4 实现NFS动态供给

  1. 创建 service account kubectl apply -f serviceaccount.yaml
    1. 查看已经创建的 sa
    2. kubectl get sa
    3. image.png
  2. 对 sa 账号做 rbac 授权 kubectl apply -f rbac.yaml
    1. 查看创建的ClusterRole ClusterRoleBinding RoleBinding
    2. 查看ClusterRole
      1. kubectl get ClusterRole
      2. image.png
    3. 查看ClusterRoleBinding
      1. kubectl get ClusterRoleBinding
      2. image.png
    4. 查看RoleBinding
      1. kubectl get RoleBinding
      2. image.png
  3. 创建 nfs-provisioner
    1. yaml 修改
    2. image.png
    3. kubectl apply -f deployment.yaml
    4. 查看 nfs-provisioner kubectl get pod -n default
      1. image.png

step 5 创建 StorgeClass

  1. kubectl apply class.yaml
  2. 注意事项
  3. image.png
  4. 查看 sc kubectl get sc
  5. image.png

step 6 创建 ES

  1. 修改动态存储卷大小,对应文件 elasticsaerch-statefulset.yaml
    1. image.png
  2. 部署 elasticsearch
    1. kubectl apply -f **elasticsaerch-statefulset.yaml**
    2. 查看部署情况
    3. image.png
  3. 部署 svc
    1. kubectl apply -f **elasticsearch_svc.yaml**
    2. 查看 kubectl get svc -n kubelogging
    3. image.png
  4. 测试 ES
    1. 本地端口转发 kubectl port-forward es-cluster-0 9200:9200 --namespace=kube-logging
    2. 在另一个终端窗口中——测试访问 curl http://localhost:9200/_cluster/state?pretty
    3. 显示如下则部署成功
      1. image.png

step 7 安装 kibana 组件

  1. kubectl apply -f **kibana.yaml**
  2. 修改 svc 类型为 NodePort kubectl edit svc kibana -n kube-logging
    1. 找到 type: ClusterIp 修改为 type: NodePort
  3. 测试 kibana,浏览器访问 http://nodeIp:nodePort透出的端口,如下则部署成功
    1. image.png

step 8 安装 fluentd 组件

  1. kubectl apply -f fluentd.yaml
  2. 查看安装 kubectl get pod -n kube-logging
    1. image.png

step 9 配置kibana

  1. image.png
  2. image.png
  3. image.png
  4. 然后点击 “Create Index Prttern”

step 10 创建索引报错解决

  1. 进入Elasticsearch所在的容器中
    1. kubectl exec -it -p es-cluster-0 -n kube-logging /bin/bash
      1. es-cluster-0是pod name
    2. 进入容器之后执行如下命令
      1. curl -XPUT -H "Content-Type: application/json" http://127.0.0.1:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'
      2. 执行完成后重新操作 step 9

参考

  1. blog.51cto.com/u_14848702/…
  2. zskjohn.blog.csdn.net/article/det…
  3. zhuanlan.zhihu.com/p/302774003
  4. 报错解决参考