#检查密钥是否创建成功
kubectl get secrets -n kube-system

image-20231011094101732

二.搭建Elasticsearch + kibana
1.在可执行kubectl命令的服务器准备安装的yml文件

image-20231011095203812

2.在elasticsearch-kibana目录下创建配置文件elasticsearch.yml

cluster.name: my-es
node.name: “node-1”
path.data: /usr/share/elasticsearch/data
#path.logs: /var/log/elasticsearch
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: [“127.0.0.1”, “[::1]”]
cluster.initial_master_nodes: [“node-1”]
#增加参数,使head插件可以访问es
http.cors.enabled: true
http.cors.allow-origin: “*”
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
xpack.monitoring.collection.enabled: true

3.创建kibana配置文件kibana.yml

server.port: 5601
server.host: “0.0.0.0”
elasticsearch.hosts: “http://es-kibana-0.es-kibana.kube-system:9200”
kibana.index: “.kibana”
i18n.locale: “zh-CN”
monitoring.ui.elasticsearch.hosts: [“http://es-kibana-0.es-kibana.kube-system:9200”]
monitoring.ui.enabled: true

其中elasticsearch.hosts的地址构成为pod名:es-kibana-0,service名:es-kibana,命名空间:kube-system,以及service中配置的端口号9200

4.在k8s中创建elasticsearch和kibana的配置文件configmap

#在编写yml配置文件的目录执行该命令
kubectl create configmap es-config -n kube-system --from-file=elasticsearch.yml
kubectl create configmap kibana-config -n kube-system --from-file=kibana.yml

5.检查是否有StorageClass

kubectl get sc
#如下图所示是有StorageClass的

image-20231011113436713

如果有则跳过第三步,没有则需要按照第三步配置NFS服务器

创建es存储pvc,pv配置文件:es-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: es-pv-claim
namespace: kube-system
labels:
app: es
spec:
accessModes:

  • ReadWriteMany
    storageClassName: “nfs-storage”
    resources:
    requests:
    storage: 20Gi

kubectl apply -f es-pvc.yaml

6.创建es-kibana的yaml配置文件: es-statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: es-kibana
name: es-kibana
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: es-kibana
serviceName: “es-kibana”
template:
metadata:
labels:
app: es-kibana
spec:
containers:

  • image: [ Harbor私库地址 ]/elasticsearch:7.17.2
    imagePullPolicy: IfNotPresent
    name: elasticsearch
    resources:
    requests:
    memory: “800Mi”
    cpu: “800m”
    limits:
    memory: “1Gi”
    cpu: “1000m”
    volumeMounts:
  • name: es-config
    mountPath: /usr/share/elasticsearch/config/elasticsearch.yml
    subPath: elasticsearch.yml
  • name: es-persistent-storage
    mountPath: /usr/share/elasticsearch/data
    env:
  • name: TZ
    value: Asia/Shanghai
  • image: [ Harbor私库地址 ]/kibana:7.17.2
    imagePullPolicy: IfNotPresent
    name: kibana
    env:
  • name: TZ
    value: Asia/Shanghai
    volumeMounts:
  • name: kibana-config
    mountPath: /usr/share/kibana/config/kibana.yml
    subPath: kibana.yml
    volumes:
  • name: es-config
    configMap:
    name: es-config
  • name: kibana-config
    configMap:
    name: kibana-config
  • name: es-persistent-storage
    persistentVolumeClaim:
    claimName: es-pv-claim
    #hostNetwork: true
    #dnsPolicy: ClusterFirstWithHostNet
    nodeSelector:
    kubernetes.io/hostname: k8s-uni-node3

#创建pod
kubectl create -f es-statefulset.yaml

查看

kubectl get pod -o wide -n kube-system|grep es

使用curl命令测试elasticsearch是否正常

kubectl get pod -o wide -n kube-system|grep es

image-20231011120051319

然后在集群内部服务器上测试是否能通信

image-20231011135418126

当然也可以在Rancher上查看pod是否运行成功

image-20231011135532459

这个pod一次运行了两个容器,分别是kibanah和elasticsearch,并且把elasticsearch容器中的/usr/share/elasticsearch/data目录下的内容,挂载到了es-pv-claim下,我们可以在第三步中的NFS服务器共享目录中找到挂载的数据。

image-20231011115625957

7.创建es-kibana cluserip的svc

vi es-cluster-none-svc.yaml

apiVersion: v1
kind: Service
metadata:
labels:
app: es-kibana
name: es-kibana
namespace: kube-system
spec:
ports:

  • name: es9200
    port: 9200
    protocol: TCP
    targetPort: 9200
  • name: es9300
    port: 9300
    protocol: TCP
    targetPort: 9300
    clusterIP: None
    selector:
    app: es-kibana
    type: ClusterIP

kubectl apply -f es-cluster-none-svc.yaml

这个配置文件描述了一个名为 es-kibana 的 Kubernetes Service,该 Service 不分配 Cluster IP(ClusterIP: None),它会将流量路由到具有特定标签 app: es-kibana 的 Pod,这些 Pod 的端口 9200 和 9300 将被公开,并且可以通过相应的 targetPort 进行访问。用于集群内部访问

8.创建es-kibana的nodeport类型的svc

vi es-nodeport-svc.yaml

apiVersion: v1
kind: Service
metadata:
labels:
app: es-kibana
name: es-kibana-nodeport-svc
namespace: kube-system
spec:
ports:

  • name: 9200-9200
    port: 9200
    protocol: TCP
    targetPort: 9200
    #nodePort: 9200
  • name: 5601-5601
    port: 5601
    protocol: TCP
    targetPort: 5601
    #nodePort: 5601
    selector:
    app: es-kibana
    type: NodePort

kubectl apply -f es-nodeport-svc.yaml

这个配置文件创建了一个名为 “es-kibana-nodeport-svc” 的 Kubernetes Service。该 Service 使用 NodePort 类型,允许从集群外部访问服务。Service 公开了两个端口,9200 和 5601,分别将流量路由到具有相应标签的 Pod 的对应端口。Pod 的选择基于标签 app: es-kibana。用于暴露端口,从集群外部访问es和kibana

外网暴露的端口是k8s随机分配的,有两种办法可以查看

#在服务器使用命令查看
kubectl get svc -n kube-system|grep es-kibana

image-20231011141800714

Rancher上查看

image-20231011141916201

可以看到Kibana的端口为31200,然后就能使用nodeip+port访问

image-20231011142531139

检查es是否注册上Kibana,点击侧边栏找到堆栈检测,然后点Nodes

image-20231011142819072

image-20231011142914922

至此,Elasticsearch + kibana已经搭建完成,可以进行第四步。


三.配置NFS服务器
1).安装NFS服务

Ubuntu:

sudo apt update
sudo apt install nfs-kernel-server

Centos:

yum update
yum -y install nfs-utils

创建或使用用已有的文件夹作为nfs文件存储点

mkdir -p /home/data/nfs/share
vi /etc/exports

写入如下内容

/home/data/nfs/share *(rw,no_root_squash,sync,no_subtree_check)

image-20230913174358481

配置生效并查看是否生效

exportfs -r
exportfs

image-20230913174639129

启动rpcbind、nfs服务

#Centos
systemctl restart rpcbind && systemctl enable rpcbind
systemctl restart nfs && systemctl enable nfs
#Ubuntu
systemctl restart rpcbind && systemctl enable rpcbind
systemctl start nfs-kernel-server && systemctl enable nfs-kernel-server

查看 RPC 服务的注册状况

rpcinfo -p localhost

image-20230913175507036

showmount测试

showmount -e localhost

image-20230913175649184

以上都没有问题则说明安装成功

2).k8s注册nfs服务

新建storageclass-nfs.yaml文件,粘贴如下内容:

创建了一个存储类

apiVersion: storage.k8s.io/v1
kind: StorageClass #存储类的资源名称
metadata:
name: nfs-storage #存储类的名称,自定义
annotations:
storageclass.kubernetes.io/is-default-class: “true” #注解,是否是默认的存储,注意:KubeSphere默认就需要个默认存储,因此这里注解要设置为“默认”的存储系统,表示为"true",代表默认。
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner #存储分配器的名字,自定义
parameters:
archiveOnDelete: “true” ## 删除pv的时候,pv的内容是否要备份


apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-client-provisioner
labels:
app: nfs-client-provisioner

replace with namespace where provisioner is deployed

namespace: default
spec:
replicas: 1 #只运行一个副本应用
strategy: #描述了如何用新的POD替换现有的POD
type: Recreate #Recreate表示重新创建Pod
selector: #选择后端Pod
matchLabels:
app: nfs-client-provisioner
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccountName: nfs-client-provisioner #创建账户
containers:

  • name: nfs-client-provisioner
    image: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/nfs-subdir-external-provisioner:v4.0.2 #使用NFS存储分配器的镜像
    volumeMounts:
  • name: nfs-client-root #定义个存储卷,
    mountPath: /persistentvolumes #表示挂载容器内部的路径
    env:
  • name: PROVISIONER_NAME #定义存储分配器的名称
    value: k8s-sigs.io/nfs-subdir-external-provisioner #需要和上面定义的保持名称一致
  • name: NFS_SERVER #指定NFS服务器的地址,你需要改成你的NFS服务器的IP地址
    value: 192.168.0.0 ## 指定自己nfs服务器地址
  • name: NFS_PATH
    value: /home/data/nfs/share ## nfs服务器共享的目录 #指定NFS服务器共享的目录
    volumes:
  • name: nfs-client-root #存储卷的名称,和前面定义的保持一致
    nfs:
    server: 192.168.0.0 #NFS服务器的地址,和上面保持一致,这里需要改为你的IP地址
    path: /home/data/nfs/share #NFS共享的存储目录,和上面保持一致

apiVersion: v1
kind: ServiceAccount #创建个SA账号
metadata:
name: nfs-client-provisioner #和上面的SA账号保持一致

replace with namespace where provisioner is deployed

namespace: default

#以下就是ClusterRole,ClusterRoleBinding,Role,RoleBinding都是权限绑定配置,不在解释。直接复制即可。
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nfs-client-provisioner-runner
rules:

  • apiGroups: [ “” ]
    resources: [ “nodes” ]
    verbs: [ “get”, “list”, “watch” ]
  • 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” ]

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: run-nfs-client-provisioner
subjects:

  • kind: ServiceAccount
    name: nfs-client-provisioner

replace with namespace where provisioner is deployed

namespace: default
roleRef:
kind: ClusterRole
name: nfs-client-provisioner-runner
apiGroup: rbac.authorization.k8s.io

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-nfs-client-provisioner

replace with namespace where provisioner is deployed

namespace: default
rules:

  • apiGroups: [ “” ]
    resources: [ “endpoints” ]
    verbs: [ “get”, “list”, “watch”, “create”, “update”, “patch” ]

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-nfs-client-provisioner

replace with namespace where provisioner is deployed

namespace: default
subjects:

  • kind: ServiceAccount
    name: nfs-client-provisioner

replace with namespace where provisioner is deployed

namespace: default
roleRef:

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

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

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

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

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

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

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

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
[外链图片转存中…(img-85DYVG1M-1712525973197)]
[外链图片转存中…(img-QZlB5HAG-1712525973197)]
[外链图片转存中…(img-GmnArL2R-1712525973197)]
[外链图片转存中…(img-0VxOToBD-1712525973198)]
[外链图片转存中…(img-sDZ0SLTR-1712525973198)]

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

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

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

Logo

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

更多推荐