k8sp/k8s-tensorflow

ceph 开启cephx认证

Closed this issue · 4 comments

我们的ceph集群并没有开启权限认证,在/etc/ceph/ceph.conf中:

[global]
  fsid = c85fcc38-e6b7-464b-9968-eaa38eff3660

  auth cluster required = none
  auth service required = none
  auth client required = none
  auth supported = none

所以,我们执行下面这个命令:

sudo mkdir /mnt/mycephfs
sudo mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs

和下面的这个命令:

sudo mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs -o name=admin,secret=AQATSKdNGBnwLhAAnNDKnH65FmVKpXZJVasUeQ==

都可以吧cephfs 挂在到我们的任意一台机器上,这是不安全的。所以我们需要把cephx授权打开。

参考这篇文章,我们需要把前面提到的那几个配置由none改成cephx

尝试1:直接修改/etc/ceph/ceph.conf
现象是这样的:每次改完ceph.conf之后,执行 docker restart ceph_mon重启 ceph mon,这个配置文件就会被“重置”。
由于我们的ceph使用etcd来管理配置信息,所以,我们在本地修改的配置文件在ceph mon重启的时候,都会被etcd里面的配置覆盖。
结论:我们修改mon所在机器的/etc/ceph/ceph.conf 文件是不会生效的。

尝试2:直接修改ETCD里面的内容:
既然etcd里面的内容会覆盖ceph.conf,我想到的是直接在etcd里面改:

etcdctl --endpoint http://10.10.10.201:2379 mk /ceph-config/ceph/global/auth\ cluster\ required cephx

但是,没有用:
ceph.conf:

[global]
  fsid = c85fcc38-e6b7-464b-9968-eaa38eff3660

  auth cluster required = none
  auth service required = none
  auth client required = none
  auth supported = none


  auth client required = cephx
  auth cluster required = cephx
  auth service required = cephx
  auth support = cephx

尝试3
在这篇文章中介绍到了 ceph.defaults 文件:

To supply your own defaults, make sure to mount the /etc/ceph/ volume and place your ceph.defaults file there.

/etc/ceph/ceph.defaults 文件里面加入了下面的内容:

/global/auth_cluster_required cephx
/global/auth_service_required cephx
/global/auth_client_required cephx
/global/auth_supported cephx

执行 docker restart ceph_mon之后,发现 /etc/ceph/ceph.conf 并没有改变!
ETCD:

etcdctl --endpoint http://10.10.10.201:2379 ls /ceph-config/ceph/global

里面也找不到我添加的内容。

采用尝试3的方法,提供 ceph.defaults 写入 etcd, 需要执行 populate_kvstore 操作,将 ceph.defaults 的内容填入 etcd, 之前尝试之所以没生效,是没有执行 populate_kvstore 操作。
参考这篇文章

$ sudo docker run -it --net=host -e KV_TYPE=etcd -v /etc/ceph:/etc/ceph ceph/daemon populate_kvstore

Ceph开启cephx认证

参考文档:
github上的ceph-docker
Ceph 官方文档 这里有翻译的中文版

机群基本情况

本次操作在10.10.10.207~209上全新安装ceph机群。机器角色的规划如下:

  • 207~209安装 mon 和 osd
  • 207上安装mds
  • 在207~209的机器上都有etcd的proxy

207~209机器上有两块硬盘,分别是sda和sdb,coreos安装在了sda上,ceph能用的硬盘只有sdb。

注意:

  • 之前在201212上安装过一次ceph,所以207209上的sdb都是被分过区的;
  • 在局域网中存在不止一个ceph集群:201203(ceph);204206(cepf_fs);93~95(ceph_gpu)
  • 本次创建的ceph集群名字为 ceph-2;ceph-2、ceph、ceph_fs的配置信息都存储在201205的etcd集群里;ceph_gpu的信息存储在9395的etcd集群里。

安装ceph,并开启cephx

1. 添加一个配置文件ceph.defaults:

在207~209的任意一台机器上都可以(本次操作在207上)

sudo touch /etc/ceph/ceph.defaults

ceph.defaults的内容如下:

# auth
/auth/cephx true

2. 将ceph.defaults数据导入到etcd集群中:

参考文档

docker run -d --net=host -v /etc/ceph/:/etc/ceph/ -v /var/lib/ceph/:/var/lib/ceph -e CLUSTER=ceph-2 -e KV_TYPE=etcd -e KV_IP=127.0.0.1 -e KV_PORT=4001 ceph/daemon populate_kvstore

注意:

  • 一定要使用-e CLUSTER=ceph-2 参数,指定ceph集群的名字,要不然会导入到默认的ceph集群(ceph)里面去。
  • 一定要加-v /etc/ceph/:/etc/ceph/参数,要不然docker里面读不到我们写的ceph.defaults文件(使用的是docker image里面默认的ceph.defaults文件)

3. 硬盘状态检查

可以使用下面的命令来查看硬盘的分区情况:

core@00-25-90-c0-f7-7a ~ $ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 931.5G  0 disk 
|-sda1   8:1    0   128M  0 part /boot
|-sda2   8:2    0     2M  0 part 
|-sda3   8:3    0     1G  0 part /usr
|-sda4   8:4    0     1G  0 part 
|-sda6   8:6    0   128M  0 part /usr/share/oem
|-sda7   8:7    0    64M  0 part 
`-sda9   8:9    0 929.2G  0 part /
sdb      8:16   0 931.5G  0 disk 
|-sdb1   8:17   0 926.5G  0 part 
`-sdb2   8:18   0     5G  0 part 

注意查看sdb,下面如果有sdb1和sdb2,表明这个硬盘之前已经被分过区。如果只有sdb2,这种情况下,建议删除分区。(很有可能安装ceph osd的时候,分区会失败。如果分区失败,请参考下面的操作来删除原来的分区)。
sdb1 : 存储数据的分区
sdb2 : journal日志存放的分区(我的理解)

删除分区(如果有需要)

参考文档

docker run -d --privileged=true -v /dev/:/dev/ -e OSD_DEVICE=/dev/sdb ceph/daemon zap_device;

注意参数:** -e OSD_DEVICE=/dev/sdb ** 一定要写对了要操作的那个硬盘!

4. 分别在207~209上运行ceph mon

docker run -d --net=host --name ceph_mon -v /etc/ceph/:/etc/ceph/ -v /var/lib/ceph/:/var/lib/ceph -e KV_TYPE=etcd -e CLUSTER=ceph-2 -e MON_IP=10.10.10.207 -e CEPH_PUBLIC_NETWORK=10.10.10.207/24 ceph/daemon mon;

注意:

  • IP需要根据所在的机器IP进行更改
  • 参数-e CLUSTER=ceph-2 指定集群的名字是ceph-2,不指定,默认是ceph

5. 在207~209上运行ceph osd

docker run -d --pid=host --net=host --privileged=true --name ceph_osd_sdb -v /etc/ceph:/etc/ceph -v /var/lib/ceph:/var/lib/ceph -v /dev:/dev -e CLUSTER=ceph-2 -e KV_TYPE=etcd -e OSD_DEVICE=/dev/sdb ceph/daemon osd

注意:

  • 参数-e CLUSTER=ceph-2 指定集群的名字是ceph-2,不指定,默认是ceph
  • 前面已经删除过分区了,在这里不需要添加这个参数-e OSD_FORCE_ZAP=1。另外:添加这个参数有一个副作用:每次start osd container的时候,都会format一次磁盘。来源: ceph/ceph-container@e83dabd

6. 在207上运行ceph mds

mds必须在osd之后启动,要不然启动不起来。

docker run -d --net=host --name ceph_mds -e CLUSTER=ceph-2 -e CEPHFS_CREATE=1 -e KV_TYPE=etcd ceph/daemon mds

注意:

  • 参数-e CLUSTER=ceph-2 指定集群的名字是ceph-2,不指定,默认是ceph

检查ceph的状态

查看docker是否正常运行:

docker ps -a | grep ceph

** 查看docker 运行的日志: **

docker logs ceph_mon

如果日志太长的话,可以在logs后面添加参数--tail="100" ;前面的脚本中docker的名字:ceph_mon, ceph_mds, ceph_osd_sdb ,使用docker logs 都可以查查看ceph 在docker运行的状态。
对于docker出错直接退出,来不及执行docker logs 的操作的时候,可以这样做:

docker restart ceph_osd_sdb; docker logs ceph_osd_sdb;

** 查看ceph集群的状态 **
查看状态:

core@00-25-90-c0-f7-c8 ~ $ docker exec -it ceph_mon ceph -s --cluster=ceph-2
    cluster cfb78f7e-da0c-4424-ba08-ba4a6870bb51
     health HEALTH_OK
     monmap e3: 3 mons at {00-25-90-c0-f7-68=10.10.10.207:6789/0,00-25-90-c0-f7-7a=10.10.10.208:6789/0,00-25-90-c0-f7-c8=10.10.10.209:6789/0}
            election epoch 18, quorum 0,1,2 00-25-90-c0-f7-68,00-25-90-c0-f7-7a,00-25-90-c0-f7-c8
      fsmap e5: 1/1/1 up {0=mds-00-25-90-c0-f7-68=up:active}
     osdmap e38: 3 osds: 3 up, 3 in
            flags sortbitwise
      pgmap v219: 80 pgs, 3 pools, 9003 bytes data, 20 objects
            105 MB used, 2778 GB / 2778 GB avail
                  80 active+clean

监视:

core@00-25-90-c0-f7-c8 ~ $ docker exec -it ceph_mon ceph -w --cluster=ceph-2
    cluster cfb78f7e-da0c-4424-ba08-ba4a6870bb51
     health HEALTH_OK
     monmap e3: 3 mons at {00-25-90-c0-f7-68=10.10.10.207:6789/0,00-25-90-c0-f7-7a=10.10.10.208:6789/0,00-25-90-c0-f7-c8=10.10.10.209:6789/0}
            election epoch 18, quorum 0,1,2 00-25-90-c0-f7-68,00-25-90-c0-f7-7a,00-25-90-c0-f7-c8
      fsmap e5: 1/1/1 up {0=mds-00-25-90-c0-f7-68=up:active}
     osdmap e38: 3 osds: 3 up, 3 in
            flags sortbitwise
      pgmap v219: 80 pgs, 3 pools, 9003 bytes data, 20 objects
            105 MB used, 2778 GB / 2778 GB avail
                  80 active+clean

2016-08-18 09:00:00.000199 mon.0 [INF] HEALTH_OK

查看osd:

core@00-25-90-c0-f7-c8 ~ $ docker exec -it ceph_mon ceph osd tree --cluster=ceph-2
ID WEIGHT  TYPE NAME                  UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 2.69998 root default                                                 
-2 0.89999     host 00-25-90-c0-f7-7a                                   
 0 0.89999         osd.0                   up  1.00000          1.00000 
-3 0.89999     host 00-25-90-c0-f7-c8                                   
 1 0.89999         osd.1                   up  1.00000          1.00000 
-4 0.89999     host 00-25-90-c0-f7-68                                   
 2 0.89999         osd.2                   up  1.00000          1.00000 

常见问题:

  1. OSD:No cluster conf found in /etc/ceph with fsid 00000000-0000-0000-0000-000000000000 #6
  2. OSD日志中错误:activate: Cluster uuid is 7536fc05-c63b-493b-9a0d-5262ee7418c7 与实际的cluster id不一致。解决方案参考第1条;
  3. OSD tree 查看到有的osd处于down的状态,将其从集群里面删除:
    参考文档
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd tree
ID WEIGHT  TYPE NAME                  UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 3.63995 root default                                                 
-2 0.90999     host 00-25-90-c0-f6-d6                                   
 2 0.90999         osd.2                   up  1.00000          1.00000 
-3 1.81998     host 00-25-90-c0-f6-ee                                   
 0 0.90999         osd.0                 down        0          1.00000 
 3 0.90999         osd.3                   up  1.00000          1.00000 
-4 0.90999     host 00-25-90-c0-f7-80                                   
 1 0.90999         osd.1                   up  1.00000          1.00000 
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph -s
    cluster be36d18f-e727-4ed1-9840-73c959124a9d
     health HEALTH_WARN
            38 pgs degraded
            38 pgs stale
            38 pgs stuck unclean
            38 pgs undersized
            4 requests are blocked > 32 sec
            recovery 20/60 objects degraded (33.333%)
            mds cluster is degraded
     monmap e3: 3 mons at {00-25-90-c0-f6-d6=10.10.10.203:6789/0,00-25-90-c0-f6-ee=10.10.10.202:6789/0,00-25-90-c0-f7-80=10.10.10.201:6789/0}
            election epoch 54, quorum 0,1,2 00-25-90-c0-f7-80,00-25-90-c0-f6-ee,00-25-90-c0-f6-d6
      fsmap e23: 1/1/1 up {0=mds-00-25-90-c0-f7-80=up:replay}
     osdmap e199: 4 osds: 3 up, 3 in; 38 remapped pgs
            flags sortbitwise
      pgmap v763: 80 pgs, 3 pools, 11312 bytes data, 20 objects
            118 MB used, 2792 GB / 2792 GB avail
            20/60 objects degraded (33.333%)
                  42 active+clean
                  37 stale+active+undersized+degraded
                   1 stale+active+undersized+degraded+remapped
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd out osd.0
osd.0 is already out. 
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd tree
ID WEIGHT  TYPE NAME                  UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 3.63995 root default                                                 
-2 0.90999     host 00-25-90-c0-f6-d6                                   
 2 0.90999         osd.2                   up  1.00000          1.00000 
-3 1.81998     host 00-25-90-c0-f6-ee                                   
 0 0.90999         osd.0                 down        0          1.00000 
 3 0.90999         osd.3                   up  1.00000          1.00000 
-4 0.90999     host 00-25-90-c0-f7-80                                   
 1 0.90999         osd.1                   up  1.00000          1.00000 
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd crush remove osd.0
removed item id 0 name 'osd.0' from crush map
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd tree
ID WEIGHT  TYPE NAME                  UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 2.72997 root default                                                 
-2 0.90999     host 00-25-90-c0-f6-d6                                   
 2 0.90999         osd.2                   up  1.00000          1.00000 
-3 0.90999     host 00-25-90-c0-f6-ee                                   
 3 0.90999         osd.3                   up  1.00000          1.00000 
-4 0.90999     host 00-25-90-c0-f7-80                                   
 1 0.90999         osd.1                   up  1.00000          1.00000 
 0       0 osd.0                         down        0          1.00000 
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph auth del osd.0
updated
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd tree
ID WEIGHT  TYPE NAME                  UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 2.72997 root default                                                 
-2 0.90999     host 00-25-90-c0-f6-d6                                   
 2 0.90999         osd.2                   up  1.00000          1.00000 
-3 0.90999     host 00-25-90-c0-f6-ee                                   
 3 0.90999         osd.3                   up  1.00000          1.00000 
-4 0.90999     host 00-25-90-c0-f7-80                                   
 1 0.90999         osd.1                   up  1.00000          1.00000 
 0       0 osd.0                         down        0          1.00000 
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd rm 0
removed osd.0
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph osd tree
ID WEIGHT  TYPE NAME                  UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 2.72997 root default                                                 
-2 0.90999     host 00-25-90-c0-f6-d6                                   
 2 0.90999         osd.2                   up  1.00000          1.00000 
-3 0.90999     host 00-25-90-c0-f6-ee                                   
 3 0.90999         osd.3                   up  1.00000          1.00000 
-4 0.90999     host 00-25-90-c0-f7-80                                   
 1 0.90999         osd.1                   up  1.00000          1.00000 
core@00-25-90-c0-f6-d6 ~ $ docker exec -it ceph_mon ceph -s
    cluster be36d18f-e727-4ed1-9840-73c959124a9d
     health HEALTH_WARN
            38 pgs degraded
            38 pgs stale
            38 pgs stuck unclean
            38 pgs undersized
            4 requests are blocked > 32 sec
            recovery 20/60 objects degraded (33.333%)
            mds cluster is degraded
     monmap e3: 3 mons at {00-25-90-c0-f6-d6=10.10.10.203:6789/0,00-25-90-c0-f6-ee=10.10.10.202:6789/0,00-25-90-c0-f7-80=10.10.10.201:6789/0}
            election epoch 54, quorum 0,1,2 00-25-90-c0-f7-80,00-25-90-c0-f6-ee,00-25-90-c0-f6-d6
      fsmap e23: 1/1/1 up {0=mds-00-25-90-c0-f7-80=up:replay}
     osdmap e203: 3 osds: 3 up, 3 in; 38 remapped pgs
            flags sortbitwise
      pgmap v781: 80 pgs, 3 pools, 11312 bytes data, 20 objects
            118 MB used, 2792 GB / 2792 GB avail
            20/60 objects degraded (33.333%)
                  42 active+clean
                  37 stale+active+undersized+degraded
                   1 stale+active+undersized+degraded+remapped

@jiamliang 赞,写的很详细

  1. -e OSD_FORCE_ZAP=1 这个参数,如你所说,确实需要慎重,默认是 =0,在创建osd是不要加这个参数,可以使用单独的zap命令替代
  2. 查看 log 可以到/var/lib/docker/container/xxxx/xxxx.log,其中xxxx是 container的 ID
  3. 常见问题第3点
    pgmap v781: 80 pgs, 3 pools, 11312 bytes data, 20 objects
    118 MB used, 2792 GB / 2792 GB avail
    20/60 objects degraded (33.333%)
    42 active+clean
    37 stale+active+undersized+degraded
    1 stale+active+undersized+degraded+remapped
    显示有pgs degraded

简短总结一下:

1. 写一个配置文件ceph.defaults,放在/etc/ceph/ceph.defaults :

# auth
/auth/cephx true

2. 使用populate_kvstore导入Etcd:(挂载/etc/ceph等目录;指定cluster名字;指定etcd存储)

docker run -d --net=host -v /etc/ceph/:/etc/ceph/ -v /var/lib/ceph/:/var/lib/ceph -e CLUSTER=ceph-2 -e KV_TYPE=etcd -e KV_IP=127.0.0.1 -e KV_PORT=4001 ceph/daemon populate_kvstore

3. 分别启动mon、osd、mds
注意:

  • mon 一定要挂载 -v /etc/ceph/:/etc/ceph/ -v /var/lib/ceph/:/var/lib/ceph
  • osd 一定要挂载 -v /etc/ceph:/etc/ceph -v /var/lib/ceph:/var/lib/ceph -v /dev:/dev
  • 所有的都要制定cluster 名字(有多个机群的话)
  • osd 一定要注意不要使用 -e OSD_FORCE_ZAP=1
  • mds 如果在osd之前启动,会启动不起来:至少启动一个osd之后,mds就可以正常启动了