首页 > Web开发 > 详细

5.glusterfs实现kubernetes数据持久化

时间:2020-05-07 22:47:25      阅读:73      评论:0      收藏:0      [点我收藏+]

什么是glusterfs
Glusterfs是一个开源分布式文件系统,具有强大的横向扩展能力,可支持数PB存储容量和数千客户端,通过网络互联成一个并行的网络文件系统。具有可扩展性、高性能、高可用性等特点。

相对于nfs
nfs痛点:单点故障 不支持扩容 并且高可用都有一定时间的中断 只能说是伪高可用

总的来说 glusterfs的分布式复制卷模式 相当于raid10

 

 

技术分享图片

 

下面做3副本的存储 单存储为20g
所有节点:

yum install  centos-release-gluster6.noarch	 -y
yum install  install glusterfs-server -y
systemctl start glusterd.service
systemctl enable glusterd.service

所有节点添加3块硬盘 扫描 挂载

echo ‘- - -‘ > /sys/class/scsi_host/host0/scan 
echo ‘- - -‘ > /sys/class/scsi_host/host1/scan 
echo ‘- - -‘ > /sys/class/scsi_host/host2/scan 
mkfs.xfs /dev/sdb
mkfs.xfs /dev/sdc
mkfs.xfs /dev/sdd
mkdir -p /gfs/test1
mkdir -p /gfs/test2
mkdir -p /gfs/test3
mount /dev/sdb /gfs/test1
mount /dev/sdc /gfs/test2
mount /dev/sdd /gfs/test3

添加存储资源池

[root@k8s-master ~]# gluster pool list
UUID                                    Hostname        State
aa3993e8-9ef4-4449-b88c-c465e71f674e    localhost       Connected 
[root@k8s-master ~]# gluster peer probe k8s-node1
peer probe: success. 
[root@k8s-master ~]# gluster peer probe k8s-node2
peer probe: success. 
[root@k8s-master ~]# gluster pool list
UUID                                    Hostname        State
63138673-89a5-4000-ae61-3a9649b696ab    192.168.100.15  Connected 
6b86967b-a68e-40c8-aeaf-e93ab032de4b    192.168.100.16  Connected 
aa3993e8-9ef4-4449-b88c-c465e71f674e    localhost       Connected 

创建分布式卷

gluster volume create goose replica 3 192.168.100.14:/gfs/test1 192.168.100.15:/gfs/test1 192.168.100.16:/gfs/test1  192.168.100.14:/gfs/test2 192.168.100.15:/gfs/test2 192.168.100.16:/gfs/test2  192.168.100.14:/gfs/test3 192.168.100.15:/gfs/test3 192.168.100.16:/gfs/test3   force

说明 glusterfs支持多种类型 默认情况下为分布式型 force:强制 为了方便区分 所以使用的是挂载的名字 需要使用这个参数才可以
第一行 这三个是一个相互复制的节点 其他同

 

启动卷

gluster volume start goose

查看卷

gluster volume info goose 

[root@k8s-master ~]# gluster volume info goose 
 
Volume Name: goose
Type: Distributed-eplicate
Volume ID: acb3f994-b024-4420-8028-f1c41d15b3b5
Status: Started
Snapshot Count: 0
Number of Bricks: 3 x 3 = 9
Transport-type: tcp
Bricks:
Brick1: 192.168.100.14:/gfs/test1
Brick2: 192.168.100.15:/gfs/test1
Brick3: 192.168.100.16:/gfs/test1
Brick4: 192.168.100.14:/gfs/test2
Brick5: 192.168.100.15:/gfs/test2
Brick6: 192.168.100.16:/gfs/test2
Brick7: 192.168.100.14:/gfs/test3
Brick8: 192.168.100.15:/gfs/test3
Brick9: 192.168.100.16:/gfs/test3
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

挂载卷

glusterfs是一个cs架构   客户端只要装 如下包即可   为了方便我直接装了服务端也是一样的
这里写任何一个节点都可以
mount -t glusterfs 192.168.100.14:goose /mnt

测试:

[root@k8s-node2 gfs]#  find /etc -maxdepth 1 -type f |xargs -i cp {} /mnt
[root@k8s-node2 gfs]# tree /gfs/
/gfs/
├── test1
│   ├── adjtime
│   ├── aliases.db
│   ├── anacrontab
│   ├── bashrc
│   ├── centos-release
│   ├── DIR_COLORS.256color
│   ├── dnsmasq.conf
│   ├── dracut.conf
│   ├── environment
│   ├── group
│   ├── hostname
│   ├── hosts.allow
│   ├── hosts.deny
│   ├── inittab
│   ├── inputrc
│   ├── issue.net
│   ├── kdump.conf
│   ├── krb5.conf
│   ├── ld.so.cache
│   ├── ld.so.conf
│   ├── libaudit.conf
│   ├── logrotate.conf
│   ├── magic
│   ├── makedumpfile.conf.sample
│   ├── mke2fs.conf
│   ├── networks
│   ├── nfs.conf
│   ├── nsswitch.conf
│   ├── oci-register-machine.conf
│   ├── passwd-
│   ├── printcap
│   ├── protocols
│   ├── rsyslog.conf
│   ├── securetty
│   ├── sestatus.conf
│   ├── shells
│   ├── sudo-ldap.conf
│   ├── sysctl.conf
│   └── yum.conf
├── test2
│   ├── aliases
│   ├── cron.deny
│   ├── crontab
│   ├── DIR_COLORS
│   ├── ethertypes
│   ├── exports
│   ├── fstab
│   ├── group-
│   ├── gshadow
│   ├── host.conf
│   ├── idmapd.conf
│   ├── issue
│   ├── libuser.conf
│   ├── login.defs
│   ├── machine-id
│   ├── nfsmount.conf
│   ├── nsswitch.conf.bak
│   ├── oci-umount.conf
│   ├── os-release
│   ├── passwd
│   ├── request-key.conf
│   ├── resolv.conf
│   ├── services
│   ├── shadow
│   ├── shadow-
│   ├── statetab
│   ├── sudo.conf
│   └── virc
└── test3
    ├── asound.conf
    ├── centos-release-upstream
    ├── crypttab
    ├── csh.cshrc
    ├── csh.login
    ├── DIR_COLORS.lightbgcolor
    ├── e2fsck.conf
    ├── filesystems
    ├── GREP_COLORS
    ├── gshadow-
    ├── hosts
    ├── locale.conf
    ├── man_db.conf
    ├── motd
    ├── my.cnf
    ├── netconfig
    ├── profile
    ├── rpc
    ├── rwtab
    ├── sudoers
    ├── system-release-cpe
    ├── tcsd.conf
    └── vconsole.conf

3 directories, 90 files
[root@k8s-node1 ~]# tree /gfs/
/gfs/
├── test1
│   ├── adjtime
│   ├── aliases.db
│   ├── anacrontab
│   ├── bashrc
│   ├── centos-release
│   ├── DIR_COLORS.256color
│   ├── dnsmasq.conf
│   ├── dracut.conf
│   ├── environment
│   ├── group
│   ├── hostname
│   ├── hosts.allow
│   ├── hosts.deny
│   ├── inittab
│   ├── inputrc
│   ├── issue.net
│   ├── kdump.conf
│   ├── krb5.conf
│   ├── ld.so.cache
│   ├── ld.so.conf
│   ├── libaudit.conf
│   ├── logrotate.conf
│   ├── magic
│   ├── makedumpfile.conf.sample
│   ├── mke2fs.conf
│   ├── networks
│   ├── nfs.conf
│   ├── nsswitch.conf
│   ├── oci-register-machine.conf
│   ├── passwd-
│   ├── printcap
│   ├── protocols
│   ├── rsyslog.conf
│   ├── securetty
│   ├── sestatus.conf
│   ├── shells
│   ├── sudo-ldap.conf
│   ├── sysctl.conf
│   └── yum.conf
├── test2
│   ├── aliases
│   ├── cron.deny
│   ├── crontab
│   ├── DIR_COLORS
│   ├── ethertypes
│   ├── exports
│   ├── fstab
│   ├── group-
│   ├── gshadow
│   ├── host.conf
│   ├── idmapd.conf
│   ├── issue
│   ├── libuser.conf
│   ├── login.defs
│   ├── machine-id
│   ├── nfsmount.conf
│   ├── nsswitch.conf.bak
│   ├── oci-umount.conf
│   ├── os-release
│   ├── passwd
│   ├── request-key.conf
│   ├── resolv.conf
│   ├── services
│   ├── shadow
│   ├── shadow-
│   ├── statetab
│   ├── sudo.conf
│   └── virc
└── test3
    ├── asound.conf
    ├── centos-release-upstream
    ├── crypttab
    ├── csh.cshrc
    ├── csh.login
    ├── DIR_COLORS.lightbgcolor
    ├── e2fsck.conf
    ├── filesystems
    ├── GREP_COLORS
    ├── gshadow-
    ├── hosts
    ├── locale.conf
    ├── man_db.conf
    ├── motd
    ├── my.cnf
    ├── netconfig
    ├── profile
    ├── rpc
    ├── rwtab
    ├── sudoers
    ├── system-release-cpe
    ├── tcsd.conf
    └── vconsole.conf

3 directories, 90 files

会发现所有节点的test1都相同 test2都相同.....

 

扩容
glusterfs支持热扩容 因为副本为3 扩容需要3个盘

glusterfs支持热扩容 因为副本为3  扩容需要3个盘
gluster volume add-brick goose k8s-node2:/gfs/test4 k8s-node2:/gfs/test4 k8s-master:/gfs/test4 force

命令总结

[root@k8s-master ~]# gluster 
help        
peer       节点操作    
pool       资源池查看    
volume     卷操作

[root@k8s-master ~]# gluster peer 
detach     移除节点
probe      添加节点
status     状态

[root@k8s-master ~]# gluster pool
list        查看节点

[root@k8s-master ~]#gluster volume
add-brick   添加
delete      删除

 .....

  

 

glusterfs对接k8s

endpoint资源:
svc在创建的时候 会自动创建一个同名的endpoint 指向pod

[root@k8s-master ~]# kubectl get pod -o wide --show-labels 
NAME          READY     STATUS    RESTARTS   AGE       IP            NODE        LABELS
mysql-3x84m   1/1       Running   1          1d        172.18.28.3   k8s-node2   app=mysql
myweb-d68gv   1/1       Running   1          1d        172.18.28.2   k8s-node2   app=myweb
test          2/2       Running   30         1d        172.18.14.2   k8s-node1   app=web

[root@k8s-master ~]# kubectl get endpoints 
NAME         ENDPOINTS             AGE
kubernetes   192.168.200.14:6443   1d
mysql        172.18.28.3:3306      1d
myweb        172.18.28.2:8080      1d

[root@k8s-master ~]# kubectl get svc
NAME         CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes   10.254.0.1      <none>        443/TCP          1d
mysql        10.254.45.227   <none>        3306/TCP         1d
myweb        10.254.217.83   <nodes>       8080:30008/TCP   1d

让k8s内部直接访问k8s外部服务   为外部服务手动创建endpoint和svc    又叫k8s映射

 

不能单独使用单个glusterfs  这样单个节点挂了就用不了了   所以需要用svc的负载均衡功能    通过endpoint指向3个节点(创建的时候卷类型为glusterfs  会自动挂载的)

技术分享图片

下面创建连接    pv与pvc的就不做了...

1.创建goose命名空间(default有这些服务了,为了方便创建一个)

[root@k8s-master ~]# kubectl create namespace goose

2.创建endpoint   注意名字要和后面的svc一样   千万不要有标签选择器

vi  glusterfs-ep.yaml
apiVersion: v1
kind: Endpoints
metadata:
  name: glusterfs
  namespace: goose
subsets:
- addresses:
  - ip: 192.168.100.14
  - ip: 192.168.100.15
  - ip: 192.168.100.16
  ports:
  - port: 49152
    protocol: TCP


[root@k8s-master pvc]# kubectl get endpoints -n goose
NAME        ENDPOINTS                                                        AGE
glusterfs   192.168.100.14:49152,192.168.100.15:49152,192.168.100.16:49152   27m
mysql       172.18.14.3:3306                                                 20m
myweb       172.18.28.4:8080                                                 15m

3.创建svc   通过名字和endpoint相连

vi  glusterfs-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: glusterfs
  namespace: goose
spec:
  ports:
  - port: 49152
    protocol: TCP
    targetPort: 49152
  type: ClusterIP

4.创建rc资源 其他资源就加一个namespace就行,不在列举,参考前面实验 mysql需要更改卷类型

apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql
  namespace: goose
spec:
  replicas: 1
  selector:
    app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: 192.168.100.14:5000/mysql:5.7
          ports:
          - containerPort: 3306
          env:
          - name: MYSQL_ROOT_PASSWORD
            value: ‘123456‘
          volumeMounts:
          - name: data
            mountPath: /var/lib/mysql
      volumes:
      - name: data
        glusterfs:
          path: goose
          endpoints: glusterfs


任意节点挂载即可看到数据   并且在pod所在节点上也自动挂载了
[root@k8s-node1 test2]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   36G  2.3G   34G   7% /
devtmpfs                 1.3G     0  1.3G   0% /dev
tmpfs                    1.3G     0  1.3G   0% /dev/shm
tmpfs                    1.3G  9.2M  1.3G   1% /run
tmpfs                    1.3G     0  1.3G   0% /sys/fs/cgroup
/dev/sda1                497M  114M  384M  23% /boot
overlay                   36G  2.3G   34G   7% /var/lib/docker/overlay2/2eadc0c7b519ce60956ac109f5f1c22171b55c9775b0806bc88fb905f795167b/merged
shm                       64M     0   64M   0% /var/lib/docker/containers/1109669df90924295ca2e1ed8f83020a897c4af2219aab337eb20669e9a5db31/shm
overlay                   36G  2.3G   34G   7% /var/lib/docker/overlay2/db5fa43b3ff0eaf59b7d3634eae51af1d32515875f38ce9c2d08f228588261f6/merged
tmpfs                    266M     0  266M   0% /run/user/0
/dev/sdb                  20G   95M   20G   1% /gfs/test1
192.168.100.14:goose(这)56G  2.9G   53G   6% /var/lib/kubelet/pods/37604daa-782f-11ea-8f95-000c290a1e33/volumes/kubernetes.io~glusterfs/data
overlay                   36G  2.3G   34G   7% /var/lib/docker/overlay2/41c92f70d356ffff554e84b71c8afa5e848d5d8b29c247c3009aeeab556ef8d2/merged
shm                       64M     0   64M   0% /var/lib/docker/containers/9bda30c9ade750532e5a1b2325d44c68f377d6813e84da7c8d4b27160958074d/shm
overlay                   36G  2.3G   34G   7% /var/lib/docker/overlay2/70c5cfbd9e483f00b2edba2b66aab6c2a2426f11ad86d140678436e329332989/merged
overlay                   36G  2.3G   34G   7% /var/lib/docker/overlay2/f59c23528b64d7047ce001458dbd0873aaff06c79cf15bfc821da75ca816f83c/merged



[root@k8s-node2 mnt]# ls
auto.cnf    ca.pem           client-key.pem  ibdata1      ib_logfile1  mysql               private_key.pem  server-cert.pem  sys
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ibtmp1       performance_schema  public_key.pem   server-key.pem


[root@k8s-master pvc]# tree /gfs/
/gfs/
├── test1
│   ├── client-key.pem
│   ├── ib_buffer_pool
│   ├── ib_logfile1
│   ├── mysql
│   │   ├── columns_priv.frm
│   │   ├── columns_priv.MYI
│   │   ├── db.MYD
│   │   ├── func.MYD
│   │   ├── general_log.frm
│   │   ├── gtid_executed.frm
│   │   ├── innodb_index_stats.frm
│   │   ├── proc.frm
│   │   ├── procs_priv.frm
.......

  

 

5.glusterfs实现kubernetes数据持久化

原文:https://www.cnblogs.com/hsgoose/p/12845514.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!