1. 程式人生 > >CentOS7下安裝Ceph供Kubernetes使用

CentOS7下安裝Ceph供Kubernetes使用

each tps 集群搭建 目錄 cto 使用技巧 key ase quorum

CentOS7下安裝Ceph供Kubernetes使用

[TOC]

1. 環境說明

系統:CentOS7,一個非系統分區分配給ceph
docker:1.13.1
kubernetes:1.11.2
ceph:luminous

2. Ceph部署準備

2.1 節點規劃

# k8s 
192.168.105.92 lab1  # master1
192.168.105.93 lab2  # master2
192.168.105.94 lab3  # master3
192.168.105.95 lab4  # node4
192.168.105.96 lab5  # node5
192.168.105.97 lab6  # node6
192.168.105.98 lab7  # node7

監控節點:lab1、lab2、lab3
OSD節點:lab4、lab5、lab6、lab7
MDS節點:lab4

2.2 添加yum源

我們使用阿裏雲yum源:(CeontOS和epel也是阿裏雲yum源)

vim /etc/yum.repos.d/ceph.repo

[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

註意:
ceph集群中節點都需要添加該yum源

2.3 安裝Ceph部署工具

以下操作在lab1上root用戶操作

  • 安裝 ceph-deploy

yum -y install ceph-deploy

2.4 安裝時間同步工具chrony

以下操作在所有ceph節點root用戶操作

yum -y install chrony
systemctl start chronyd
systemctl enable chronyd

修改/etc/chrony.conf前面的server段為如下

server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst

2.5 安裝SSH服務

默認已正常運行,略

2.6 創建部署 CEPH 的用戶

以下操作在所有ceph節點root用戶操作

ceph-deploy 工具必須以普通用戶登錄 Ceph 節點,且此用戶擁有無密碼使用 sudo 的權限,因為它需要在安裝軟件及配置文件的過程中,不必輸入密碼。

較新版的 ceph-deploy 支持用 --username 選項提供可無密碼使用 sudo 的用戶名(包括 root ,雖然不建議這樣做)。使用 ceph-deploy --username {username} 命令時,指定的用戶必須能夠通過無密碼 SSH 連接到 Ceph 節點,因為 ceph-deploy 中途不會提示輸入密碼。

建議在集群內的所有 Ceph 節點上給 ceph-deploy 創建一個特定的用戶,但不要用 “ceph” 這個名字。全集群統一的用戶名可簡化操作(非必需),然而你應該避免使用知名用戶名,因為×××們會用它做暴力破解(如 rootadmin{productname} )。後續步驟描述了如何創建無 sudo 密碼的用戶,你要用自己取的名字替換 {username}

註意
從 Infernalis 版起,用戶名 “ceph” 保留給了 Ceph 守護進程。如果 Ceph 節點上已經有了 “ceph” 用戶,升級前必須先刪掉這個用戶。

我們使用用戶名ceph-admin

username="ceph-admin"
useradd ${username} && echo ‘PASSWORD‘ | passwd ${ceph-admin} --stdinecho "${username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/${username}
chmod 0440 /etc/sudoers.d/${username}
chmod a+x /etc/sudoers.d/

2.7 允許無密碼 SSH 登錄

以下操作在lab1節點ceph-admin用戶操作

正因為 ceph-deploy 不支持輸入密碼,你必須在管理節點上生成 SSH 密鑰並把其公鑰分發到各 Ceph 節點。 ceph-deploy 會嘗試給初始 monitors 生成 SSH 密鑰對。

生成 SSH 密鑰對,但不要用 sudoroot 用戶。提示 “Enter passphrase” 時,直接回車,口令即為空:

su - ceph-admin  # 切換到此用戶,因為ceph-deploy也用此用戶
ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/home/ceph-admin/.ssh/id_rsa): 
/home/ceph-admin/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/ceph-admin/.ssh/id_rsa.
Your public key has been saved in /home/ceph-admin/.ssh/id_rsa.pub.
The key fingerprint is:

把公鑰拷貝到各 Ceph 節點,把下列命令中的 {username} 替換成前面創建部署 Ceph 的用戶裏的用戶名。

username="ceph-admin"
ssh-copy-id ${username}@lab1
ssh-copy-id ${username}@lab2
ssh-copy-id ${username}@lab3

(推薦做法)修改 ceph-deploy 管理節點上的 ~/.ssh/config 文件,這樣 ceph-deploy 就能用你所建的用戶名登錄 Ceph 節點了,而無需每次執行 ceph-deploy 都要指定 --username {username} 。這樣做同時也簡化了 ssh 和 scp 的用法。

Host lab1
   Hostname lab1
   User ceph-admin
Host lab2
   Hostname lab2
   User ceph-admin
Host lab3
   Hostname lab3
   User ceph-admin   
Bad owner or permissions on /home/ceph-admin/.ssh/config

需要用chmod 600 ~/.ssh/config解決。

2.8 開放所需端口

以下操作在所有監視器節點root用戶操作

Ceph Monitors 之間默認使用 6789 端口通信, OSD 之間默認用 6800:7300 這個範圍內的端口通信。

firewall-cmd --zone=public --add-port=6789/tcp --permanent && firewall-cmd --reload

2.9 終端( TTY )

以下操作在所有ceph節點root用戶操作

在 CentOS 和 RHEL 上執行 ceph-deploy 命令時可能會報錯。如果你的 Ceph 節點默認設置了 requiretty ,執行 sudo visudo 禁用它,並找到 Defaults requiretty 選項,把它改為 Defaults:ceph !requiretty 或者直接註釋掉,這樣 ceph-deploy 就可以用之前創建的用戶(創建部署 Ceph 的用戶 )連接了。

sed -i -r ‘s@Defaults(.*)!visiblepw@Defaults:ceph-admin\1!visiblepw@g‘ /etc/sudoers

2.10 SELINUX

以下操作在所有ceph節點root用戶操作

如果原來是開啟的,需要重啟生效。

# 永久關閉 修改/etc/sysconfig/selinux文件設置
sed -i ‘s/SELINUX=.*/SELINUX=disabled/‘ /etc/sysconfig/selinux

2.11 整理以上所有ceph節點操作

yum -y install chrony
systemctl start chronyd
systemctl enable chronyd

username="ceph-admin"
useradd ${username} && echo ‘PASSWORD‘ | passwd ${username} --stdin
echo "${username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/${username}
chmod 0440 /etc/sudoers.d/${username}
chmod a+x /etc/sudoers.d/
sed -i -r ‘s@Defaults(.*)!visiblepw@Defaults:ceph-admin\1!visiblepw@g‘ /etc/sudoers
sed -i ‘s/SELINUX=.*/SELINUX=disabled/‘ /etc/sysconfig/selinux
yum -y install ceph

3. 存儲集群部署

以下操作在lab節點ceph-admin用戶操作

我們創建一個 Ceph 存儲集群,它有一個 Monitor 和兩個 OSD 守護進程。一旦集群達到 active + clean 狀態,再擴展它:增加第三個 OSD 、增加元數據服務器和兩個 Ceph Monitors。

su - ceph-admin
mkdir ceph-cluster

如果在某些地方碰到麻煩,想從頭再來,可以用下列命令清除配置:

ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm -rf /etc/ceph/*
rm -rf /var/lib/ceph/*/*
rm -rf /var/log/ceph/*
rm -rf /var/run/ceph/*

3.1 創建集群並準備配置

cd ceph-cluster
ceph-deploy new lab1
[ceph-admin@lab1 ceph-cluster]$ ls -l
total 24
-rw-rw-r-- 1 ceph-admin ceph-admin   196 Aug 17 14:31 ceph.conf
-rw-rw-r-- 1 ceph-admin ceph-admin 12759 Aug 17 14:31 ceph-deploy-ceph.log
-rw------- 1 ceph-admin ceph-admin    73 Aug 17 14:31 ceph.mon.keyring
[ceph-admin@lab1 ceph-cluster]$ more ceph.mon.keyring 
[mon.]
key = AQC2a3ZbAAAAABAAor15nkYQCXuC681B/Q53og==
caps mon = allow *
[ceph-admin@lab1 ceph-cluster]$ more ceph.conf 
[global]
fsid = fb212173-233c-4c5e-a98e-35be9359f8e2
mon_initial_members = lab1
mon_host = 192.168.105.92
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

把 Ceph 配置文件裏的默認副本數從 3 改成 2 ,這樣只有兩個 OSD 也可以達到 active + clean 狀態。把下面這行加入 [global] 段:

osd pool default size = 2

再把 public network 寫入 Ceph 配置文件的 [global] 段下

public network = 192.168.105.0/24

安裝 Ceph

ceph-deploy install lab1 lab4 lab5 --no-adjust-repos

配置寢monitor(s)、並收集所有密鑰:

ceph-deploy mon create-initial

完成上述操作後,當前目錄裏應該會出現這些密鑰環:

[ceph-admin@lab1 ceph-cluster]$ ceph-deploy mon create-initial
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph-admin/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /bin/ceph-deploy mon create-initial
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  subcommand                    : create-initial
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x1160f38>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : <function mon at 0x115c2a8>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.cli][INFO  ]  keyrings                      : None
[ceph_deploy.mon][DEBUG ] Deploying mon, cluster ceph hosts lab1
[ceph_deploy.mon][DEBUG ] detecting platform for host lab1 ...
[lab1][DEBUG ] connection detected need for sudo
[lab1][DEBUG ] connected to host: lab1 
[lab1][DEBUG ] detect platform information from remote host
[lab1][DEBUG ] detect machine type
[lab1][DEBUG ] find the location of an executable
[ceph_deploy.mon][INFO  ] distro info: CentOS Linux 7.5.1804 Core
[lab1][DEBUG ] determining if provided host has same hostname in remote
[lab1][DEBUG ] get remote short hostname
[lab1][DEBUG ] deploying mon to lab1
[lab1][DEBUG ] get remote short hostname
[lab1][DEBUG ] remote hostname: lab1
[lab1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[lab1][DEBUG ] create the mon path if it does not exist
[lab1][DEBUG ] checking for done path: /var/lib/ceph/mon/ceph-lab1/done
[lab1][DEBUG ] done path does not exist: /var/lib/ceph/mon/ceph-lab1/done
[lab1][INFO  ] creating keyring file: /var/lib/ceph/tmp/ceph-lab1.mon.keyring
[lab1][DEBUG ] create the monitor keyring file
[lab1][INFO  ] Running command: sudo ceph-mon --cluster ceph --mkfs -i lab1 --keyring /var/lib/ceph/tmp/ceph-lab1.mon.keyring --setuser 167 --setgroup 167
[lab1][INFO  ] unlinking keyring file /var/lib/ceph/tmp/ceph-lab1.mon.keyring
[lab1][DEBUG ] create a done file to avoid re-doing the mon deployment
[lab1][DEBUG ] create the init path if it does not exist
[lab1][INFO  ] Running command: sudo systemctl enable ceph.target
[lab1][INFO  ] Running command: sudo systemctl enable ceph-mon@lab1
[lab1][INFO  ] Running command: sudo systemctl start ceph-mon@lab1
[lab1][INFO  ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.lab1.asok mon_status
[lab1][DEBUG ] ********************************************************************************
[lab1][DEBUG ] status for monitor: mon.lab1
[lab1][DEBUG ] {
[lab1][DEBUG ]   "election_epoch": 3, 
[lab1][DEBUG ]   "extra_probe_peers": [], 
[lab1][DEBUG ]   "feature_map": {
[lab1][DEBUG ]     "mon": {
[lab1][DEBUG ]       "group": {
[lab1][DEBUG ]         "features": "0x3ffddff8eea4fffb", 
[lab1][DEBUG ]         "num": 1, 
[lab1][DEBUG ]         "release": "luminous"
[lab1][DEBUG ]       }
[lab1][DEBUG ]     }
[lab1][DEBUG ]   }, 
[lab1][DEBUG ]   "features": {
[lab1][DEBUG ]     "quorum_con": "4611087853745930235", 
[lab1][DEBUG ]     "quorum_mon": [
[lab1][DEBUG ]       "kraken", 
[lab1][DEBUG ]       "luminous"
[lab1][DEBUG ]     ], 
[lab1][DEBUG ]     "required_con": "153140804152475648", 
[lab1][DEBUG ]     "required_mon": [
[lab1][DEBUG ]       "kraken", 
[lab1][DEBUG ]       "luminous"
[lab1][DEBUG ]     ]
[lab1][DEBUG ]   }, 
[lab1][DEBUG ]   "monmap": {
[lab1][DEBUG ]     "created": "2018-08-17 14:46:18.770540", 
[lab1][DEBUG ]     "epoch": 1, 
[lab1][DEBUG ]     "features": {
[lab1][DEBUG ]       "optional": [], 
[lab1][DEBUG ]       "persistent": [
[lab1][DEBUG ]         "kraken", 
[lab1][DEBUG ]         "luminous"
[lab1][DEBUG ]       ]
[lab1][DEBUG ]     }, 
[lab1][DEBUG ]     "fsid": "fb212173-233c-4c5e-a98e-35be9359f8e2", 
[lab1][DEBUG ]     "modified": "2018-08-17 14:46:18.770540", 
[lab1][DEBUG ]     "mons": [
[lab1][DEBUG ]       {
[lab1][DEBUG ]         "addr": "192.168.105.92:6789/0", 
[lab1][DEBUG ]         "name": "lab1", 
[lab1][DEBUG ]         "public_addr": "192.168.105.92:6789/0", 
[lab1][DEBUG ]         "rank": 0
[lab1][DEBUG ]       }
[lab1][DEBUG ]     ]
[lab1][DEBUG ]   }, 
[lab1][DEBUG ]   "name": "lab1", 
[lab1][DEBUG ]   "outside_quorum": [], 
[lab1][DEBUG ]   "quorum": [
[lab1][DEBUG ]     0
[lab1][DEBUG ]   ], 
[lab1][DEBUG ]   "rank": 0, 
[lab1][DEBUG ]   "state": "leader", 
[lab1][DEBUG ]   "sync_provider": []
[lab1][DEBUG ] }
[lab1][DEBUG ] ********************************************************************************
[lab1][INFO  ] monitor: mon.lab1 is running
[lab1][INFO  ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.lab1.asok mon_status
[ceph_deploy.mon][INFO  ] processing monitor mon.lab1
[lab1][DEBUG ] connection detected need for sudo
[lab1][DEBUG ] connected to host: lab1 
[lab1][DEBUG ] detect platform information from remote host
[lab1][DEBUG ] detect machine type
[lab1][DEBUG ] find the location of an executable
[lab1][INFO  ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.lab1.asok mon_status
[ceph_deploy.mon][INFO  ] mon.lab1 monitor has reached quorum!
[ceph_deploy.mon][INFO  ] all initial monitors are running and have formed quorum
[ceph_deploy.mon][INFO  ] Running gatherkeys...
[ceph_deploy.gatherkeys][INFO  ] Storing keys in temp directory /tmp/tmpfUkCWD
[lab1][DEBUG ] connection detected need for sudo
[lab1][DEBUG ] connected to host: lab1 
[lab1][DEBUG ] detect platform information from remote host
[lab1][DEBUG ] detect machine type
[lab1][DEBUG ] get remote short hostname
[lab1][DEBUG ] fetch remote file
[lab1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --admin-daemon=/var/run/ceph/ceph-mon.lab1.asok mon_status
[lab1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-lab1/keyring auth get client.admin
[lab1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-lab1/keyring auth get-or-create client.admin osd allow * mds allow * mon allow * mgr allow *
[lab1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-lab1/keyring auth get client.bootstrap-mds
[lab1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-lab1/keyring auth get-or-create client.bootstrap-mds mon allow profile bootstrap-mds
[lab1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-lab1/keyring auth get client.bootstrap-mgr
[lab1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-lab1/keyring auth get-or-create client.bootstrap-mgr mon allow profile bootstrap-mgr
[lab1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-lab1/keyring auth get client.bootstrap-osd
[lab1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-lab1/keyring auth get-or-create client.bootstrap-osd mon allow profile bootstrap-osd
[lab1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-lab1/keyring auth get client.bootstrap-rgw
[lab1][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-lab1/keyring auth get-or-create client.bootstrap-rgw mon allow profile bootstrap-rgw
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.client.admin.keyring
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.bootstrap-mds.keyring
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.bootstrap-mgr.keyring
[ceph_deploy.gatherkeys][INFO  ] keyring ‘ceph.mon.keyring‘ already exists
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.bootstrap-osd.keyring
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.bootstrap-rgw.keyring
[ceph_deploy.gatherkeys][INFO  ] Destroy temp directory /tmp/tmpfUkCWD

用 ceph-deploy 把配置文件和 admin 密鑰拷貝到管理節點和 Ceph 節點,這樣你每次執行 Ceph 命令行時就無需指定 monitor 地址和 ceph.client.admin.keyring 了。

ceph-deploy admin lab1 lab4 lab5

註意
ceph-deploy 和本地管理主機( admin-node )通信時,必須通過主機名可達。必要時可修改 /etc/hosts ,加入管理主機的名字。

確保你對 ceph.client.admin.keyring 有正確的操作權限。

sudo chmod +r /etc/ceph/ceph.client.admin.keyring

安裝mrg

ceph-deploy mgr create lab1
ceph-deploy mgr create lab2
ceph-deploy mgr create lab3

檢查集群的健康狀況。

[ceph-admin@lab1 ceph-cluster]$ ceph health
HEALTH_OK

3.2 增加OSD

列舉磁盤並擦凈

[ceph-admin@lab1 ceph-cluster]$ ceph-deploy disk list lab4
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph-admin/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /bin/ceph-deploy disk list lab4
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  debug                         : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  subcommand                    : list
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x20d97e8>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  host                          : [‘lab4‘]
[ceph_deploy.cli][INFO  ]  func                          : <function disk at 0x20ca7d0>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[lab4][DEBUG ] connection detected need for sudo
[lab4][DEBUG ] connected to host: lab4 
[lab4][DEBUG ] detect platform information from remote host
[lab4][DEBUG ] detect machine type
[lab4][DEBUG ] find the location of an executable
[lab4][INFO  ] Running command: sudo fdisk -l
[lab4][INFO  ] Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
[lab4][INFO  ] Disk /dev/sdb: 214.7 GB, 214748364800 bytes, 419430400 sectors
[lab4][INFO  ] Disk /dev/mapper/cl-root: 97.8 GB, 97840529408 bytes, 191094784 sectors
[lab4][INFO  ] Disk /dev/mapper/cl-swap: 8455 MB, 8455716864 bytes, 16515072 sectors
[lab4][INFO  ] Disk /dev/mapper/vg_a66945efa6324ffeb209d165cac8ede9-tp_1f4ce4f4bfb224aa385f35516236af43_tmeta: 12 MB, 12582912 bytes, 24576 sectors
[lab4][INFO  ] Disk /dev/mapper/vg_a66945efa6324ffeb209d165cac8ede9-tp_1f4ce4f4bfb224aa385f35516236af43_tdata: 2147 MB, 2147483648 bytes, 4194304 sectors
[lab4][INFO  ] Disk /dev/mapper/vg_a66945efa6324ffeb209d165cac8ede9-tp_1f4ce4f4bfb224aa385f35516236af43-tpool: 2147 MB, 2147483648 bytes, 4194304 sectors
[lab4][INFO  ] Disk /dev/mapper/vg_a66945efa6324ffeb209d165cac8ede9-tp_1f4ce4f4bfb224aa385f35516236af43: 2147 MB, 2147483648 bytes, 4194304 sectors
[lab4][INFO  ] Disk /dev/mapper/vg_a66945efa6324ffeb209d165cac8ede9-brick_1f4ce4f4bfb224aa385f35516236af43: 2147 MB, 2147483648 bytes, 4194304 sectors
[ceph-admin@lab1 ceph-cluster]$ ceph-deploy disk zap lab4 /dev/sdb
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph-admin/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /bin/ceph-deploy disk zap lab4 /dev/sdb
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  debug                         : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  subcommand                    : zap
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0xd447e8>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  host                          : lab4
[ceph_deploy.cli][INFO  ]  func                          : <function disk at 0xd357d0>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.cli][INFO  ]  disk                          : [‘/dev/sdb‘]
[ceph_deploy.osd][DEBUG ] zapping /dev/sdb on lab4
[lab4][DEBUG ] connection detected need for sudo
[lab4][DEBUG ] connected to host: lab4 
[lab4][DEBUG ] detect platform information from remote host
[lab4][DEBUG ] detect machine type
[lab4][DEBUG ] find the location of an executable
[ceph_deploy.osd][INFO  ] Distro info: CentOS Linux 7.5.1804 Core
[lab4][DEBUG ] zeroing last few blocks of device
[lab4][DEBUG ] find the location of an executable
[lab4][INFO  ] Running command: sudo /usr/sbin/ceph-volume lvm zap /dev/sdb
[lab4][DEBUG ] --> Zapping: /dev/sdb
[lab4][DEBUG ] Running command: /usr/sbin/cryptsetup status /dev/mapper/
[lab4][DEBUG ]  stdout: /dev/mapper/ is inactive.
[lab4][DEBUG ] Running command: wipefs --all /dev/sdb
[lab4][DEBUG ] Running command: dd if=/dev/zero of=/dev/sdb bs=1M count=10
[lab4][DEBUG ] --> Zapping successful for: /dev/sdb

同理,lab5sdb也一樣。

創建pv、vg、lv,略。

創建 OSD

[ceph-admin@lab1 ceph-cluster]$ ceph-deploy osd create lab4 --fs-type btrfs --data vg1/lvol0     
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph-admin/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /bin/ceph-deploy osd create lab4 --fs-type btrfs --data vg1/lvol0
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  bluestore                     : None
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x26d4908>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  fs_type                       : btrfs
[ceph_deploy.cli][INFO  ]  block_wal                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  journal                       : None
[ceph_deploy.cli][INFO  ]  subcommand                    : create
[ceph_deploy.cli][INFO  ]  host                          : lab4
[ceph_deploy.cli][INFO  ]  filestore                     : None
[ceph_deploy.cli][INFO  ]  func                          : <function osd at 0x26c4758>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  zap_disk                      : False
[ceph_deploy.cli][INFO  ]  data                          : vg1/lvol0
[ceph_deploy.cli][INFO  ]  block_db                      : None
[ceph_deploy.cli][INFO  ]  dmcrypt                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  dmcrypt_key_dir               : /etc/ceph/dmcrypt-keys
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  debug                         : False
[ceph_deploy.osd][DEBUG ] Creating OSD on cluster ceph with data device vg1/lvol0
[lab4][DEBUG ] connection detected need for sudo
[lab4][DEBUG ] connected to host: lab4 
[lab4][DEBUG ] detect platform information from remote host
[lab4][DEBUG ] detect machine type
[lab4][DEBUG ] find the location of an executable
[ceph_deploy.osd][INFO  ] Distro info: CentOS Linux 7.5.1804 Core
[ceph_deploy.osd][DEBUG ] Deploying osd to lab4
[lab4][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[lab4][DEBUG ] find the location of an executable
[lab4][INFO  ] Running command: sudo /usr/sbin/ceph-volume --cluster ceph lvm create --bluestore --data vg1/lvol0
[lab4][DEBUG ] Running command: /bin/ceph-authtool --gen-print-key
[lab4][DEBUG ] Running command: /bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring -i - osd new 7bb2b8f4-9e9d-4cd2-a2da-802a953a4d62
[lab4][DEBUG ] Running command: /bin/ceph-authtool --gen-print-key
[lab4][DEBUG ] Running command: mount -t tmpfs tmpfs /var/lib/ceph/osd/ceph-1
[lab4][DEBUG ] Running command: chown -h ceph:ceph /dev/vg1/lvol0
[lab4][DEBUG ] Running command: chown -R ceph:ceph /dev/dm-2
[lab4][DEBUG ] Running command: ln -s /dev/vg1/lvol0 /var/lib/ceph/osd/ceph-1/block
[lab4][DEBUG ] Running command: ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring mon getmap -o /var/lib/ceph/osd/ceph-1/activate.monmap
[lab4][DEBUG ]  stderr: got monmap epoch 1
[lab4][DEBUG ] Running command: ceph-authtool /var/lib/ceph/osd/ceph-1/keyring --create-keyring --name osd.1 --add-key AQAmjHZbiiGUChAAVCWdPZqHms99mLgSZ7M+fQ==
[lab4][DEBUG ]  stdout: creating /var/lib/ceph/osd/ceph-1/keyring
[lab4][DEBUG ] added entity osd.1 auth auth(auid = 18446744073709551615 key=AQAmjHZbiiGUChAAVCWdPZqHms99mLgSZ7M+fQ== with 0 caps)
[lab4][DEBUG ] Running command: chown -R ceph:ceph /var/lib/ceph/osd/ceph-1/keyring
[lab4][DEBUG ] Running command: chown -R ceph:ceph /var/lib/ceph/osd/ceph-1/
[lab4][DEBUG ] Running command: /bin/ceph-osd --cluster ceph --osd-objectstore bluestore --mkfs -i 1 --monmap /var/lib/ceph/osd/ceph-1/activate.monmap --keyfile - --osd-data /var/lib/ceph/osd/ceph-1/ --osd-uuid 7bb2b8f4-9e9d-4cd2-a2da-802a953a4d62 --setuser ceph --setgroup ceph
[lab4][DEBUG ] --> ceph-volume lvm prepare successful for: vg1/lvol0
[lab4][DEBUG ] Running command: ceph-bluestore-tool --cluster=ceph prime-osd-dir --dev /dev/vg1/lvol0 --path /var/lib/ceph/osd/ceph-1
[lab4][DEBUG ] Running command: ln -snf /dev/vg1/lvol0 /var/lib/ceph/osd/ceph-1/block
[lab4][DEBUG ] Running command: chown -h ceph:ceph /var/lib/ceph/osd/ceph-1/block
[lab4][DEBUG ] Running command: chown -R ceph:ceph /dev/dm-2
[lab4][DEBUG ] Running command: chown -R ceph:ceph /var/lib/ceph/osd/ceph-1
[lab4][DEBUG ] Running command: systemctl enable ceph-volume@lvm-1-7bb2b8f4-9e9d-4cd2-a2da-802a953a4d62
[lab4][DEBUG ]  stderr: Created symlink from /etc/systemd/system/multi-user.target.wants/[email protected] to /usr/lib/systemd/system/[email protected].
[lab4][DEBUG ] Running command: systemctl start ceph-osd@1
[lab4][DEBUG ] --> ceph-volume lvm activate successful for osd ID: 1
[lab4][DEBUG ] --> ceph-volume lvm create successful for: vg1/lvol0
[lab4][INFO  ] checking OSD status...
[lab4][DEBUG ] find the location of an executable
[lab4][INFO  ] Running command: sudo /bin/ceph --cluster=ceph osd stat --format=json
[lab4][WARNIN] there is 1 OSD down
[lab4][WARNIN] there is 1 OSD out
[ceph_deploy.osd][DEBUG ] Host lab4 is now ready for osd use.

ceph-deploy osd create lab5 --fs-type btrfs --data vg1/lvol0

4. 擴展集群

一個基本的集群啟動並開始運行後,下一步就是擴展集群。在 lab6lab7 各上添加一個 OSD 守護進程和一個元數據服務器。然後分別在 lab2lab3 上添加 Ceph Monitor ,以形成 Monitors 的法定人數。

添加 MONITORS

ceph-deploy mon add lab2
ceph-deploy mon add lab3 

過程:

[ceph-admin@lab1 ceph-cluster]$ ceph-deploy mon add lab3
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph-admin/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /bin/ceph-deploy mon add lab3
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  subcommand                    : add
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x29f0f38>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  mon                           : [‘lab3‘]
[ceph_deploy.cli][INFO  ]  func                          : <function mon at 0x29ec2a8>
[ceph_deploy.cli][INFO  ]  address                       : None
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.mon][INFO  ] ensuring configuration of new mon host: lab3
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to lab3
[lab3][DEBUG ] connection detected need for sudo
[lab3][DEBUG ] connected to host: lab3 
[lab3][DEBUG ] detect platform information from remote host
[lab3][DEBUG ] detect machine type
[lab3][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.mon][DEBUG ] Adding mon to cluster ceph, host lab3
[ceph_deploy.mon][DEBUG ] using mon address by resolving host: 192.168.105.94
[ceph_deploy.mon][DEBUG ] detecting platform for host lab3 ...
[lab3][DEBUG ] connection detected need for sudo
[lab3][DEBUG ] connected to host: lab3 
[lab3][DEBUG ] detect platform information from remote host
[lab3][DEBUG ] detect machine type
[lab3][DEBUG ] find the location of an executable
[ceph_deploy.mon][INFO  ] distro info: CentOS Linux 7.5.1804 Core
[lab3][DEBUG ] determining if provided host has same hostname in remote
[lab3][DEBUG ] get remote short hostname
[lab3][DEBUG ] adding mon to lab3
[lab3][DEBUG ] get remote short hostname
[lab3][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[lab3][DEBUG ] create the mon path if it does not exist
[lab3][DEBUG ] checking for done path: /var/lib/ceph/mon/ceph-lab3/done
[lab3][DEBUG ] done path does not exist: /var/lib/ceph/mon/ceph-lab3/done
[lab3][INFO  ] creating keyring file: /var/lib/ceph/tmp/ceph-lab3.mon.keyring
[lab3][DEBUG ] create the monitor keyring file
[lab3][INFO  ] Running command: sudo ceph --cluster ceph mon getmap -o /var/lib/ceph/tmp/ceph.lab3.monmap
[lab3][WARNIN] got monmap epoch 2
[lab3][INFO  ] Running command: sudo ceph-mon --cluster ceph --mkfs -i lab3 --monmap /var/lib/ceph/tmp/ceph.lab3.monmap --keyring /var/lib/ceph/tmp/ceph-lab3.mon.keyring --setuser 167 --setgroup 167
[lab3][INFO  ] unlinking keyring file /var/lib/ceph/tmp/ceph-lab3.mon.keyring
[lab3][DEBUG ] create a done file to avoid re-doing the mon deployment
[lab3][DEBUG ] create the init path if it does not exist
[lab3][INFO  ] Running command: sudo systemctl enable ceph.target
[lab3][INFO  ] Running command: sudo systemctl enable ceph-mon@lab3
[lab3][WARNIN] Created symlink from /etc/systemd/system/ceph-mon.target.wants/[email protected] to /usr/lib/systemd/system/[email protected].
[lab3][INFO  ] Running command: sudo systemctl start ceph-mon@lab3
[lab3][INFO  ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.lab3.asok mon_status
[lab3][WARNIN] lab3 is not defined in `mon initial members`
[lab3][WARNIN] monitor lab3 does not exist in monmap
[lab3][INFO  ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.lab3.asok mon_status
[lab3][DEBUG ] ********************************************************************************
[lab3][DEBUG ] status for monitor: mon.lab3
[lab3][DEBUG ] {
[lab3][DEBUG ]   "election_epoch": 0, 
[lab3][DEBUG ]   "extra_probe_peers": [
[lab3][DEBUG ]     "192.168.105.93:6789/0"
[lab3][DEBUG ]   ], 
[lab3][DEBUG ]   "feature_map": {
[lab3][DEBUG ]     "mon": {
[lab3][DEBUG ]       "group": {
[lab3][DEBUG ]         "features": "0x3ffddff8eea4fffb", 
[lab3][DEBUG ]         "num": 1, 
[lab3][DEBUG ]         "release": "luminous"
[lab3][DEBUG ]       }
[lab3][DEBUG ]     }
[lab3][DEBUG ]   }, 
[lab3][DEBUG ]   "features": {
[lab3][DEBUG ]     "quorum_con": "0", 
[lab3][DEBUG ]     "quorum_mon": [], 
[lab3][DEBUG ]     "required_con": "144115188077969408", 
[lab3][DEBUG ]     "required_mon": [
[lab3][DEBUG ]       "kraken", 
[lab3][DEBUG ]       "luminous"
[lab3][DEBUG ]     ]
[lab3][DEBUG ]   }, 
[lab3][DEBUG ]   "monmap": {
[lab3][DEBUG ]     "created": "2018-08-17 16:38:21.075805", 
[lab3][DEBUG ]     "epoch": 3, 
[lab3][DEBUG ]     "features": {
[lab3][DEBUG ]       "optional": [], 
[lab3][DEBUG ]       "persistent": [
[lab3][DEBUG ]         "kraken", 
[lab3][DEBUG ]         "luminous"
[lab3][DEBUG ]       ]
[lab3][DEBUG ]     }, 
[lab3][DEBUG ]     "fsid": "4395328d-17fc-4039-96d0-1d3241a4cafa", 
[lab3][DEBUG ]     "modified": "2018-08-17 17:58:23.179585", 
[lab3][DEBUG ]     "mons": [
[lab3][DEBUG ]       {
[lab3][DEBUG ]         "addr": "192.168.105.92:6789/0", 
[lab3][DEBUG ]         "name": "lab1", 
[lab3][DEBUG ]         "public_addr": "192.168.105.92:6789/0", 
[lab3][DEBUG ]         "rank": 0
[lab3][DEBUG ]       }, 
[lab3][DEBUG ]       {
[lab3][DEBUG ]         "addr": "192.168.105.93:6789/0", 
[lab3][DEBUG ]         "name": "lab2", 
[lab3][DEBUG ]         "public_addr": "192.168.105.93:6789/0", 
[lab3][DEBUG ]         "rank": 1
[lab3][DEBUG ]       }, 
[lab3][DEBUG ]       {
[lab3][DEBUG ]         "addr": "192.168.105.94:6789/0", 
[lab3][DEBUG ]         "name": "lab3", 
[lab3][DEBUG ]         "public_addr": "192.168.105.94:6789/0", 
[lab3][DEBUG ]         "rank": 2
[lab3][DEBUG ]       }
[lab3][DEBUG ]     ]
[lab3][DEBUG ]   }, 
[lab3][DEBUG ]   "name": "lab3", 
[lab3][DEBUG ]   "outside_quorum": [
[lab3][DEBUG ]     "lab3"
[lab3][DEBUG ]   ], 
[lab3][DEBUG ]   "quorum": [], 
[lab3][DEBUG ]   "rank": 2, 
[lab3][DEBUG ]   "state": "probing", 
[lab3][DEBUG ]   "sync_provider": []
[lab3][DEBUG ] }
[lab3][DEBUG ] ********************************************************************************
[lab3][INFO  ] monitor: mon.lab3 is running
[ceph-admin@lab1 ceph-cluster]$ ceph quorum_status --format json-pretty

{
    "election_epoch": 12,
    "quorum": [
        0,
        1,
        2
    ],
    "quorum_names": [
        "lab1",
        "lab2",
        "lab3"
    ],
    "quorum_leader_name": "lab1",
    "monmap": {
        "epoch": 3,
        "fsid": "4395328d-17fc-4039-96d0-1d3241a4cafa",
        "modified": "2018-08-17 17:58:23.179585",
        "created": "2018-08-17 16:38:21.075805",
        "features": {
            "persistent": [
                "kraken",
                "luminous"
            ],
            "optional": []
        },
        "mons": [
            {
                "rank": 0,
                "name": "lab1",
                "addr": "192.168.105.92:6789/0",
                "public_addr": "192.168.105.92:6789/0"
            },
            {
                "rank": 1,
                "name": "lab2",
                "addr": "192.168.105.93:6789/0",
                "public_addr": "192.168.105.93:6789/0"
            },
            {
                "rank": 2,
                "name": "lab3",
                "addr": "192.168.105.94:6789/0",
                "public_addr": "192.168.105.94:6789/0"
            }
        ]
    }
}

添加元數據服務器

至少需要一個元數據服務器才能使用 CephFS ,執行下列命令創建元數據服務器:

ceph-deploy mds create lab4

到此,可以創建RBD和cephFS的ceph集群搭建完成。

5. Ceph使用技巧

推送配置文件:

# 只推送配置文件
ceph-deploy --overwrite-conf config push lab1 lab2
# 推送配置文件和client.admin key
ceph-deploy admin lab1 lab2

查看狀態的常用命令

# 集群狀態
ceph -s
## 查看正在操作的動作
ceph -w
# 查看已經創建的磁盤
rbd ls -l 
# 查看ceph集群 
ceph osd tree
# 查看ceph授權信息
ceph auth get client.admin
# 移除monitor節點
ceph-deploy mon destroy lab1
# 詳細列出集群每塊磁盤的使用情況
ceph osd df
# 檢查 MDS 狀態:
ceph mds stat

開啟Dashbord管理界面

#創建管理域密鑰
ceph auth get-or-create mgr.lab1 mon ‘allow profile mgr‘ osd ‘allow *‘ mds ‘allow *‘
#方法2:
ceph auth get-key client.admin | base64

# 開啟 ceph-mgr 管理域
ceph-mgr -i master
# 開啟dashboard
ceph mgr module enable dashboard

# 綁定開啟 dashboard 模塊的 ceph-mgr 節點的 ip 地址
ceph config-key set mgr/dashboard/master/server_addr 192.168.105.92
# dashboard 默認運行在7000端口

RBD常用命令

# 創建pool
# 若少於5個OSD, 設置pg_num為128。
# 5~10個OSD,設置pg_num為512。
# 10~50個OSD,設置pg_num為4096。
# 超過50個OSD,可以參考pgcalc計算。
ceph osd pool create rbd 128 128 
rbd pool init rbd

# 刪除pool
ceph osd pool rm rbd rbd –yes-i-really-really-mean-it 
##ceph.conf 添加 
##mon_allow_pool_delete = true

# 手動創建一個rbd磁盤
rbd create --image-feature layering [rbd-name] -s 10240

OSD常用命令

# 清除磁盤上的邏輯卷
ceph-volume lvm zap --destroy /dev/vdc  # 本機操作
ceph-deploy disk zap lab4 /dev/sdb  # 遠程操作
# 創建osd
ceph-deploy osd create lab4 --fs-type btrfs --data vg1/lvol0

## 刪除osd節點的node4
# 查看節點node4上的所有osd,比如osd.9 osd.10:
ceph osd tree #查看目前cluster狀態
# 把node4上的所欲osd踢出集群:(node1節點上執行)
ceph osd out osd.9
ceph osd out osd.10
# 讓node4上的所有osd停止工作:(node4上執行)
service ceph stop osd.9
service ceph stop osd.10
# 查看node4上osd的狀態是否為down,權重為0
ceph osd tree
# 移除node4上的所有osd:
ceph osd crush remove osd.9
ceph osd crush remove osd.10
# 刪除節點node4:
ceph osd crush remove ceph-node4

## 替換一個失效的磁盤驅動
# 首先ceph osd tree 查看down掉的osd,將因磁盤問題down掉的osd及相關key刪除
ceph osd out osd.0       # 都在node1節點下執行
ceph osd crush rm osd.0
ceph auth del osd.0
ceph osd rm osd.0
#zap新磁盤 清理新磁盤:
ceph-deploy disk zap node1 /dev/sdb
#在磁盤上新建一個osd,ceph會把它添加為osd:0:
ceph-deploy --overwrite-conf osd create node1 /dev/sdb

參考資料:
[1] http://docs.ceph.com/docs/master/start/
[2] http://docs.ceph.org.cn/start/
[3] http://docs.ceph.org.cn/install/manual-deployment/
[4] http://www.cnblogs.com/freedom314/p/9247602.html
[5] http://docs.ceph.org.cn/rados/operations/monitoring/

CentOS7下安裝Ceph供Kubernetes使用