k8s–基础–24.2–efk–安装前准备


1、上次镜像和配置文件

1.1、上传efk组件需要的镜像到 k8s集群的各个节点

在这里插入图片描述
在这里插入图片描述

1.2、实验之前需要把镜像上传到k8s集群的各个节点,并解压

cd /root/efk

docker load -i busybox.tar.gz
docker load -i elasticsearch_7_2_0.tar.gz
docker load -i fluentd.tar.gz
docker load -i kibana_7_2_0.tar.gz
docker load -i nfs-client-provisioner.tar.gz
docker load -i nginx.tar.gz

# 删除镜像文件
rm -rf *

1.3、上传yaml到master机器上

在这里插入图片描述

在这里插入图片描述

2、搭建NFS服务端

  1. 在master1上操作,但是生产上应该有个单独的nfs服务

2.1、安装

  1. 因为我们已经安装过了,这里只给安装资料
  2. 参考资料
https://blog.csdn.net/zhou920786312/article/details/124919461

2.2、设置共享目录

2.2.1、创建共享目录

# 创建目录
mkdir /nfs/efk -p

# 给与权限
chmod 777 /nfs/efk
 

2.2.2、编辑配置文件

# vim /etc/exports	
/nfs/efk 192.168.187.0/24(rw,no_root_squash)
说明
  1. /nfs/efk 允许192.168.187.0/24的客户端访问。
  2. rw:表示允许读写,ro表示为只读;
  3. no_root_squash:表示当客户机以root身份访问时赋予本地root权限

2.3、重启NFS服务程序

# 宣告共享目录
exportfs -arv
# 重启NFS服务程序
systemctl restart nfs

3、实现nfs做存储类的动态供给

具体参考

k8s--基础--22.16--storageclass--实践--实现nfs做存储类的动态供给

3.1、创建运行nfs-provisioner的sa账号

3.1.1、脚本

vi /root/efk/serviceaccount.yaml

内容

apiVersion: v1
kind: ServiceAccount
metadata:
  # sa账号名称
  name: nfs-provisioner

3.1.2、执行

kubectl apply -f /root/efk/serviceaccount.yaml

# 查看
kubectl get sa

在这里插入图片描述

3.2、对sa账号做rbac授权

3.2.1、脚本

vi /root/efk/rbac.yaml

内容


kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["create", "update", "patch"]
  - apiGroups: [""]
    resources: ["services", "endpoints"]
    verbs: ["get"]
  - apiGroups: ["extensions"]
    resources: ["podsecuritypolicies"]
    resourceNames: ["nfs-provisioner"]
    verbs: ["use"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-provisioner
    namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-provisioner
rules:
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-provisioner
    namespace: default
roleRef:
  kind: Role
  name: leader-locking-nfs-provisioner
  apiGroup: rbac.authorization.k8s.io

3.2.2、执行

kubectl apply -f /root/efk/rbac.yaml


# 查看
kubectl get ClusterRole

kubectl get ClusterRoleBinding

kubectl get Role

kubectl get RoleBinding
 

在这里插入图片描述

3.3、通过deployment创建pod用来运行nfs-provisioner程序(用来划分pv的程序)

就是创建provisioner的提供者

3.3.1、脚本

vi /root/efk/deployment.yaml

内容

kind: Deployment
apiVersion: apps/v1
metadata:
  # provisioner的名称是nfs-provisioner
  name: nfs-provisioner
spec:
  selector:
    matchLabels:
       # 使用那个标签的pod
       app: nfs-provisioner
  replicas: 1
  strategy:
    # 定义回收策略
    type: Recreate
  #  定义模板
  template:
    metadata:
      labels:
        app: nfs-provisioner
    spec:
      # sa账号
      serviceAccount: nfs-provisioner
      containers:
        # 容器名称
        - name: nfs-provisioner
          # 镜像
          image: registry.cn-hangzhou.aliyuncs.com/open-ali/nfs-client-provisioner:latest
          imagePullPolicy: IfNotPresent
          # 使用的挂载卷
          volumeMounts:
            # 使用的挂载卷名称
            - name: nfs-client-root
            # 挂载路径
              mountPath: /persistentvolumes
          # 定义环境变量
          env: 
            # 定义供应商名称,StorageClass会使用这个名称
            - name: PROVISIONER_NAME
              value: example.com/nfs
            # NFS 服务地址
            - name: NFS_SERVER
              value: 192.168.187.154
            # NFS 共享目录
            - name: NFS_PATH
              value: /nfs/efk
      # 定义挂载卷
      volumes:
        # 挂载卷名称
        - name: nfs-client-root
          nfs:
            # NFS 服务地址
            server: 192.168.187.154
            # NFS 共享目录
            path: /nfs/efk

3.3.2、执行

kubectl apply -f  /root/efk/deployment.yaml

# 查看
kubectl  get Deployment

kubectl  get pods

注:3.1、3.2、3.3这三个步骤是用来创建nfs外部供应商程序的,我们storageclass要想使用nfs作为外部供应者,必须执行这三个步骤。

在这里插入图片描述

3.4、创建storageclass

创建存储类

3.4.1、脚本

vi /root/efk/class.yaml

内容


kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  # 定义存储类名称
  name: do-block-storage
# 使用名称为example.com/nfs的供应商
# 该值需要和nfs provisioner配置的PROVISIONER_NAME处的value值保持一致
provisioner: example.com/nfs

3.4.2、执行

kubectl apply -f /root/efk/class.yaml
# 查看
kubectl get StorageClass 

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐