TH小破站

  • 首页
  • 容器
    • 认识Docker
    • DockerFile详解
  • k8s
    • 认识Kubernetes
    • Kubernetes部署--(kubeadm方式)
    • kubeasz部署k8s集群
    • Ansible-binary部署k8s集群-1.31.2
  • Ceph
    • 认识分布式存储
    • CPEH部署
  • CI/CD
    • DevOps认识
    • 部署--Gitlab
  • ELK
    • ELK简介
    • Elasticsearch
    • Kibana部署
    • Logstash
    • ELK--收集 tomcat 日志(实战)
  • HD
    • 认识--大数据
    • Hadoop-单机部署
    • Hadoop-伪分布部署
    • Hadoop-完全分布部署
    • Hadoop-(HA)完全分布部署
    • Ambari自动部署--Hadoop
  • Nginx
    • Nginx功能介绍
    • Nginx安全选项
    • Nginx配置文件简单介绍
    • 网站服务器部署
  • 监控
    • ZABBIX-部署(yum)
    • ZABBIX-编译安装
  • 云计算
    • KVM 概述
    • OpenStack企业级部署(T版)
    • OpenStack之dashboard部署
    • OpenStack-controller的高可用
    • openstack(Caracal版_ubuntu版本)部署
  • 数据库
    • mariadb与mysql
    • mysql主从
    • MySQL--冷备(实战)
    • MySQL--热备(dump表)
    • MySQL--热备(dump库)
    • 数据恢复实战案例
    • Xtrabackup实现MySql8.x全量备份
    • MyCat实现数据库读写分离
    • MHA实现数据库高可用
    • Percona XtraDB(PXC)实现数据库集群高可用
    • 数据库压力测试
    • PostgreSQL 基操
    • PostgreSQL备份恢复
    • PostgreSQL高可用
    • MongDB安装配置基础使用
    • MongoDB实现复制集
    • MongoDB备份还原
  • 自动化
    • ssh远程服务原理及配置
    • Ansible剧本文件应用
    • Ansible管理服务介绍
    • Ansible自动化部署node_exporter(包含升级,回滚)
    • Saltstack-部署安装
  • 脚本
    • 一键查看服务器资源利用率
    • 一键生成SSL证书
    • 保存指定数量的文件/目录
    • 初始化服务器
    • 扫描可用IP
    • 批量分发SSH密钥
    • 监控多主机磁盘脚本
    • 一键安装MySQL8.x脚本
    • Python脚本监控ES集群
    • 资源巡检脚本
    • 查看各用户使用的cpu占比
热衷于分享
架构师成长之路 !!!
  1. 首页
  2. Kubernetes
  3. 正文

K8s结合pv/pvc实现Zookeeper集群部署

2024年1月20日 963点热度 0人点赞 0条评论

k8s之zookeeper集群

基于PV和PVC作为后端存储,实现zookeeper集群

1.1)准备NFS服务器

1.1.1)下载并配置NFS

root@harbor:~# apt install nfs-server -y
root@harbor:~# mkdir -p /data/k8sdata/{img,status}
root@harbor:~# vim /etc/exports 
# 最后一行添加
/data/k8sdata *(rw,no_root_squash)
root@harbor:/data/k8sdata# mkdir -p /data/k8sdata/zookeeper/datadir-pv-{1..3}
root@harbor:/data/k8sdata# mkdir -p /data/k8sdata/zookeeper/datalog-pv-{1..3}
root@harbor:~# systemctl restart nfs-server.service 
root@harbor:~# systemctl enable nfs-server.service 

1.1.2)验证NFS

root@k8s-master01:~# apt install nfs-common
root@k8s-master01:~# showmount -e 192.168.139.234
Export list for 192.168.139.234:
/data/k8sdata *

1.2)编写namespace/pv/pvc文件

1.2.1)编写namespace的yaml文件并应用

root@k8s-master01:/stj-soft/yaml/namespaces# vim move-namespaces.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: stj-mv-ns
​
`应用yaml文件`
root@k8s-master01:/stj-soft/yaml/namespaces# kubectl apply -f move-namespaces.yaml 
`验证yaml`
root@k8s-master01:/stj-soft/yaml/namespaces# kubectl get ns | grep stj-mv-ns
stj-mv-ns              Active   19s

1.2.2)编写pv的yaml文件并应用

root@k8s-master01:~# mkdir -p /stj-soft/yaml/pv-pvc/zookeeper/pv
root@k8s-master01:~# cd /stj-soft/yaml/pv-pvc/zookeeper/pv
root@k8s-master01:/stj-soft/yaml/pv-pvc/zookeeper/pv# vim zookeeper-data-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: zookeeper-datadir-pv-1
  namespace: stj-mv-ns  # namespace可以不加 因为pv是属于全局资源的
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    server: 192.168.139.234
    path: /data/k8sdata/zookeeper/datadir-pv-1
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: zookeeper-datadir-pv-2
  namespace: stj-mv-ns  # namespace可以不加 因为pv是属于全局资源的
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    server: 192.168.139.234
    path: /data/k8sdata/zookeeper/datadir-pv-2
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: zookeeper-datadir-pv-3
  namespace: stj-mv-ns  # namespace可以不加 因为pv是属于全局资源的
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    server: 192.168.139.234
    path: /data/k8sdata/zookeeper/datadir-pv-3
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: zookeeper-datalog-pv-1
  namespace: stj-mv-ns  # namespace可以不加 因为pv是属于全局资源的
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    server: 192.168.139.234
    path: /data/k8sdata/zookeeper/datalog-pv-1
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: zookeeper-datalog-pv-2
  namespace: stj-mv-ns  # namespace可以不加 因为pv是属于全局资源的
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    server: 192.168.139.234
    path: /data/k8sdata/zookeeper/datalog-pv-2
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: zookeeper-datalog-pv-3
  namespace: stj-mv-ns  # namespace可以不加 因为pv是属于全局资源的
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    server: 192.168.139.234
    path: /data/k8sdata/zookeeper/datalog-pv-3
​
`应用yaml文件`
root@k8s-master01:/stj-soft/yaml/pv-pvc/zookeeper/pv# kubectl apply -f zookeeper-data-pv.yml 
`验证yaml`
root@k8s-master01:/stj-soft/yaml/pv-pvc/zookeeper/pv# kubectl get pv -n stj-mv-ns
NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
zookeeper-datadir-pv-1   2Gi        RWO            Retain           Available                                   23s
zookeeper-datadir-pv-2   2Gi        RWO            Retain           Available                                   23s
zookeeper-datadir-pv-3   2Gi        RWO            Retain           Available                                   23s
zookeeper-datalog-pv-1   2Gi        RWO            Retain           Available                                   23s
zookeeper-datalog-pv-2   2Gi        RWO            Retain           Available                                   23s
zookeeper-datalog-pv-3   2Gi        RWO            Retain           Available                                   23s

1.2.3)编写pvc的yaml文件并应用

root@k8s-master01:~# mkdir -p /stj-soft/yaml/pv-pvc/zookeeper/pvc
root@k8s-master01:~# cd /stj-soft/yaml/pv-pvc/zookeeper/pvc
root@k8s-master01:/stj-soft/yaml/pv-pvc/zookeeper/pvc# vim zookeeper-data-pvc.yml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: zookeeper-datadir-pvc-1
  namespace: stj-mv-ns
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: zookeeper-datadir-pv-1
  resources:
    requests:
      storage: 2Gi
​
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: zookeeper-datadir-pvc-2
  namespace: stj-mv-ns
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: zookeeper-datadir-pv-2
  resources:
    requests:
      storage: 2Gi
 
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: zookeeper-datadir-pvc-3
  namespace: stj-mv-ns
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: zookeeper-datadir-pv-3
  resources:
    requests:
      storage: 2Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: zookeeper-datalog-pvc-1
  namespace: stj-mv-ns
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: zookeeper-datalog-pv-1
  resources:
    requests:
      storage: 2Gi
​
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: zookeeper-datalog-pvc-2
  namespace: stj-mv-ns
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: zookeeper-datalog-pv-2
  resources:
    requests:
      storage: 2Gi
 
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: zookeeper-datalog-pvc-3
  namespace: stj-mv-ns
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: zookeeper-datalog-pv-3
  resources:
    requests:
      storage: 2Gi
​
`应用yaml文件`
root@k8s-master01:/stj-soft/yaml/pv-pvc/zookeeper/pvc# kubectl apply -f zookeeper-data-pvc.yml 
`验证yaml`
root@k8s-master01:/stj-soft/yaml/pv-pvc/zookeeper/pvc# kubectl get pvc -n stj-mv-ns
NAME                      STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
zookeeper-datadir-pvc-1   Bound    zookeeper-datadir-pv-1   2Gi        RWO                           2m19s
zookeeper-datadir-pvc-2   Bound    zookeeper-datadir-pv-2   2Gi        RWO                           2m19s
zookeeper-datadir-pvc-3   Bound    zookeeper-datadir-pv-3   2Gi        RWO                           2m19s
zookeeper-datalog-pvc-1   Bound    zookeeper-datalog-pv-1   2Gi        RWO                           2m19s
zookeeper-datalog-pvc-2   Bound    zookeeper-datalog-pv-2   2Gi        RWO                           2m19s
zookeeper-datalog-pvc-3   Bound    zookeeper-datalog-pv-3   2Gi        RWO                           2m19s

1.3)准备zookeeper镜像

root@k8s-master01:~# docker pull zookeeper:3.6.4
root@k8s-master01:~# docker tag zookeeper:3.6.4 harbor.stangj.net/baseimages/zookeeper:3.6.4
root@k8s-master01:~# docker push harbor.stangj.net/baseimages/zookeeper:3.6.4

1.4)编写zookeeper集群的yaml文件并应用

1.4.1)编写zookeeper集群的yaml文件

root@k8s-master01:~# mkdir -p /stj-soft/yaml/pv-pvc/zookeeper/application
root@k8s-master01:~# cd /stj-soft/yaml/pv-pvc/zookeeper/application
root@k8s-master01:/stj-soft/yaml/pv-pvc/zookeeper/application# 
root@k8s-master01:/stj-soft/yaml/pv-pvc/zookeeper/application# cat zookeeper-cluster.yml
apiVersion: v1
kind: Service
metadata:
  name: zookeeper
  namespace: stj-mv-ns
spec:
  ports:
    - name: client
      port: 2181
  selector: 
    app: zookeeper
---
​
apiVersion: v1
kind: Service
metadata:
  name: zookeeper1
  namespace: stj-mv-ns
spec:
  type: NodePort
  ports:
    - name: client
      port: 2181
      nodePort: 42181
    - name: followers
      port: 2888
    - name: election
      port: 3888
  selector:
    app: zookeeper
    server-id: "1"
---
apiVersion: v1
kind: Service
metadata:
  name: zookeeper2
  namespace: stj-mv-ns
spec:
  type: NodePort
  ports:
    - name: client
      port: 2181
      nodePort: 42182
    - name: followers
      port: 2888
    - name: election
      port: 3888
  selector:
    app: zookeeper
    server-id: "2"
--- 
apiVersion: v1
kind: Service
metadata:
  name: zookeeper3
  namespace: stj-mv-ns
spec:
  type: NodePort
  ports:
    - name: client
      port: 2181
      nodePort: 42183
    - name: followers
      port: 2888
    - name: election
      port: 3888
  selector:
    app: zookeeper
    server-id: "3"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: zookeeper1
  namespace: stj-mv-ns
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zookeeper
  template:
    metadata:
      labels:
        app: zookeeper
        server-id: "1"
    spec:
      containers:
        - name: server
          image: harbor.stangj.net/baseimages/zookeeper:3.6.4
          imagePullPolicy: Always
          env:
            - name: ZOO_MY_ID
              value: "1"
            - name: SERVERS
              value: "zookeeper1"
            - name: ZOO_SERVERS
              value: server.1=0.0.0.0:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888
          ports:
            - containerPort: 2181
            - containerPort: 2888
            - containerPort: 3888
          volumeMounts:
          - mountPath: "/data"
            name: zookeeper-datadir-pvc-1
          - mountPath: "/datalog"
            name: zookeeper-datalog-pvc-1
      volumes:
        - name: zookeeper-datadir-pvc-1
          persistentVolumeClaim:
            claimName: zookeeper-datadir-pvc-1
        - name: zookeeper-datalog-pvc-1
          persistentVolumeClaim:
            claimName: zookeeper-datalog-pvc-1
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: zookeeper2
  namespace: stj-mv-ns
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zookeeper
  template:
    metadata:
      labels:
        app: zookeeper
        server-id: "2"
    spec:
      containers:
        - name: server
          image: harbor.stangj.net/baseimages/zookeeper:3.6.4
          imagePullPolicy: Always
          env:
            - name: ZOO_MY_ID
              value: "2"
            - name: SERVERS
              value: "zookeeper2"
            - name: ZOO_SERVERS
              value: server.1=zookeeper1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zookeeper3:2888:3888
          ports:
            - containerPort: 2181
            - containerPort: 2888
            - containerPort: 3888
          volumeMounts:
          - mountPath: "/data"
            name: zookeeper-datadir-pvc-2
          - mountPath: "/datalog"
            name: zookeeper-datalog-pvc-2
      volumes:
        - name: zookeeper-datadir-pvc-2
          persistentVolumeClaim:
            claimName: zookeeper-datadir-pvc-2
        - name: zookeeper-datalog-pvc-2
          persistentVolumeClaim:
            claimName: zookeeper-datalog-pvc-2
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: zookeeper3
  namespace: stj-mv-ns
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zookeeper
  template:
    metadata:
      labels:
        app: zookeeper
        server-id: "3"
    spec:
      containers:
        - name: server
          image: harbor.stangj.net/baseimages/zookeeper:3.6.4
          imagePullPolicy: Always
          env:
            - name: ZOO_MY_ID
              value: "3"
            - name: SERVERS
              value: "zookeeper3"
            - name: ZOO_SERVERS
              value: server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=0.0.0.0:2888:3888
          ports:
            - containerPort: 2181
            - containerPort: 2888
            - containerPort: 3888
          volumeMounts:
          - mountPath: "/data"
            name: zookeeper-datadir-pvc-3
          - mountPath: "/datalog"
            name: zookeeper-datalog-pvc-3
      volumes:
        - name: zookeeper-datadir-pvc-3
          persistentVolumeClaim:
            claimName: zookeeper-datadir-pvc-3
        - name: zookeeper-datalog-pvc-3
          persistentVolumeClaim:
            claimName: zookeeper-datalog-pvc-3

1.4.2)应用yaml文件

root@k8s-master01:/stj-soft/yaml/pv-pvc/zookeeper/application# kubectl apply -f zookeeper-cluster.yml 

1.5)验证服务

1.5.1)验证pod

root@k8s-master01:/stj-soft/yaml/pv-pvc/zookeeper/application# kubectl get pod -n stj-mv-ns
NAME                          READY   STATUS    RESTARTS   AGE
zookeeper1-9cd577c78-sjbbk    1/1     Running   0          97s
zookeeper2-57465b45fb-jpwsl   1/1     Running   0          97s
zookeeper3-77676fbf5d-n4pgr   1/1     Running   0          97s

1.5.2)验证service

root@k8s-master01:/stj-soft/yaml/pv-pvc/zookeeper/application# kubectl get svc -n stj-mv-ns
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                        AGE
zookeeper    ClusterIP   10.200.124.97    <none>        2181/TCP                                       2m39s
zookeeper1   NodePort    10.200.238.112   <none>        2181:42181/TCP,2888:40214/TCP,3888:36659/TCP   2m39s
zookeeper2   NodePort    10.200.5.87      <none>        2181:42182/TCP,2888:34991/TCP,3888:32692/TCP   2m39s
zookeeper3   NodePort    10.200.124.67    <none>        2181:42183/TCP,2888:39456/TCP,3888:35392/TCP   2m38s

1.5.3)验证集群状态

1.5.4)验证是否能进行切换主从

  • 手动关闭zookeeper2

zookeeper1已经上位

zookeeper集群搭建成功

1.5.5)验证NodePort

1.5.6)验证NFS数据

root@harbor:~# tree /data/k8sdata/zookeeper
/data/k8sdata/zookeeper
├── datadir-pv-1
│   ├── myid
│   └── version-2
│       ├── acceptedEpoch
│       ├── currentEpoch
│       └── snapshot.300000000
├── datadir-pv-2
│   ├── myid
│   └── version-2
│       ├── acceptedEpoch
│       ├── currentEpoch
│       └── snapshot.300000000
├── datadir-pv-3
│   ├── myid
│   └── version-2
│       ├── acceptedEpoch
│       ├── currentEpoch
│       └── snapshot.300000000
├── datalog-pv-1
│   └── version-2
│       └── log.400000001
├── datalog-pv-2
│   └── version-2
│       └── log.400000001
└── datalog-pv-3
    └── version-2
        └── log.400000001
标签: 暂无
最后更新:2024年1月21日

tanghao946

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • k8s之zookeeper集群
    • 1.1)准备NFS服务器
    • 1.2)编写namespace/pv/pvc文件
    • 1.3)准备zookeeper镜像
    • 1.4)编写zookeeper集群的yaml文件并应用
    • 1.5)验证服务

COPYRIGHT © 2025 TH小破站. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2023013789号

渝公网安备50011702500926号