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服务端
- 在master1上操作,但是生产上应该有个单独的nfs服务
2.1、安装
- 因为我们已经安装过了,这里只给安装资料
- 参考资料
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)
说明
- /nfs/efk 允许192.168.187.0/24的客户端访问。
- rw:表示允许读写,ro表示为只读;
- 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