1. 集羣規劃
準備4臺機器,操作系統爲centos 7.5.1804,其中192.168.1.71、192.168.1.28各有一塊未使用的磁盤/dev/sdb
類型 | 主機ip | 備註 |
---|---|---|
deploy | 192.168.1.27 | 部署ceph集羣 |
admin | 192.168.1.27 | 密鑰管理等 |
osd | 192.168.1.71 、192.168.1.28 | 數據存儲節點,默認3副本 |
mon | 192.168.1.28 、192.168.1.71、192.168.1.72 | 維護集羣狀態,至少3個節點保證高可用 |
mgr | 192.168.1.71 、192.168.1.28 | 集羣狀態、darshbord、restapi等,至少兩個節點 |
rgw | 192.168.1.72、192.168.1.27 | 對象存儲使用 |
mds | 192.168.1.72、192.168.1.27 | 文件存儲使用 |
grafana | 192.168.1.27 | 圖表,暴露3000端口 |
prometheus | 192.168.1.27 | 監控數據,暴露9283端口 |
2. 準備工作
2.1. 修改主機名
ssh到相應主機修改,可以執行hostnamectl查看修改是否生效
hostnamectl set-hostname node-192-168-1-28
hostnamectl set-hostname node-192-168-1-71
hostnamectl set-hostname monitor-192-168-1-72
hostnamectl set-hostname admin-192-168-1-27
2.2. 添加主機名(域名)解析
將下面的配置項添加到每臺主機/etc/hosts文件中,能通過主機名通信,配置後可以通過ping主機名檢查配置是否生效
192.168.1.28 node-192-168-1-28
192.168.1.71 node-192-168-1-71
192.168.1.72 monitor-192-168-1-72
192.168.1.27 admin-192-168-1-27
2.3. 添加用戶
以下步驟每個節點都需要執行
- 添加用戶
useradd -d /home/ceph -m ceph
passwd ceph
輸入密碼
- 添加sudo權限(免輸密碼)
echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
sudo chmod 0440 /etc/sudoers.d/ceph
2.4. 配置免登錄
- 使用ceph用戶ssh到deploy節點
ssh ceph@admin-192-168-1-27
- 生成密鑰 ,需要按幾次會車
ssh-keygen
- 將公鑰拷貝到其他機器(會追加到節點的~/.ssh/authorized_keys文件後),期間需要輸入yes和遠程主機密碼
ssh-copy-id ceph@monitor-192-168-1-72
ssh-copy-id ceph@node-192-168-1-28
ssh-copy-id ceph@node-192-168-1-71
ssh-copy-id ceph@admin-192-168-1-27
- 測試免登錄,如果需要輸入密碼則配置有問題
ssh node-192-168-1-28
...
2.5. 時間同步
本示例使用chrony作爲時間同步服務,當然也可以使用ntp,centos7.4後自帶chrony。
這裏將admin-192-168-1-27作爲服務端,其他的節點爲客戶端
- 安裝
yum install -y chrony
- 服務端配置 /etc/chrony.conf
# 上游時間同步服務器地址
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
# 允許哪些客戶端網絡連接
allow 192.168.0.0/16
- 客戶端配置 /etc/chrony.conf
server admin-192-168-1-27
- 開機自動啓動,重啓並查看狀態
systemctl enable chronyd.service
systemctl restart chronyd.service
systemctl status chronyd.service
2.6. 關閉防火牆或設定iptables規則
關閉防火牆是非生產環境最簡單省事的辦法
#關閉防火牆
systemctl stop firewalld && systemctl disable firewalld
iptables規則可以根據此文檔設置:
http://docs.ceph.org.cn/start/quick-start-preflight/#id7
2.7. 關閉selinux
- 禁用 SELINUX:修改配置文件(重啓生效)+ 手動設定(立即生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
#啓用
sed -i 's/SELINUX=disabled/SELINUX=enforcing/g' /etc/selinux/config
setenforce 1
- 確認配置修改的是否生效:
grep SELINUX= /etc/selinux/config
getenforce
2.8. 升級內核
最新cenos版本爲7.5.1804
yum update
2.9. 配置epel及ceph yum源
- epel
sudo yum install -y yum-utils&& sudo yum -y install yum-plugin-priorities && \
sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && \
sudo yum install --nogpgcheck -y epel-release && \
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && \
sudo rm /etc/yum.repos.d/dl.fedoraproject.org*
- ceph
使用ceph-deploy安裝會自動安裝官方相同版本的ceph源
3. 安裝ceph-deploy
ssh到admin(deploy)節點
- 安裝ansible
yum install -y ansible
- /etc/ansible/hosts文件最後添加以下配置,這樣可以使用ansilbe cephhost -m shell -a 'shell command’執行相關命令,而不必登錄到每臺主機去執行
[cephhost]
node-192-168-1-28
node-192-168-1-71
monitor-192-168-1-72
admin-192-168-1-27
- 安裝mimic版ceph-deploy,後續其他節點的ceph安裝都是通過ceph-deploy
sudo yum install -y http://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ceph-deploy-2.0.1-0.noarch.rpm
- 如果人工安裝ceph 可以修改將官方的地址替換成阿里的地址(否則可能失敗,國內網絡環境不好)
sudo yum install -y http://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ceph-release-1-1.el7.noarch.rpm
sudo sed -i "s/download.ceph.com/mirrors.aliyun.com\/ceph/g" /etc/yum.repos.d/ceph.repo
4. 安裝ceph
4.1. 初始化一個新的集羣
使用ceph用戶ssh到admin(deploy)節點,執行ceph-deploy會在當前目錄下生成相關配置文件,需要指定一個或多個主機作爲初始monitor,這裏我們先指定monitor-192-168-1-72,後續再通過添加指定添加,默認創建的集羣名稱爲ceph
mkdir /home/ceph/my-cluster && cd /etc/my-cluster
ceph-deploy new monitor-192-168-1-72
4.2. 修改集羣配置(ceph.conf )
由於我們只有兩個空閒磁盤需要將副本數osd pool default size修改爲2
public network和cluster network在有兩種網卡或兩個網絡時非常有用,一個網絡用於集羣內部通訊,一個用於對外通訊
[ceph@admin-192-168-1-27 my-cluster]$ vi ceph.conf
[global]
fsid = 1868beef-958f-4d1e-9e72-55742b0ebb68
mon_initial_members = monitor-192-168-1-72
mon_host = 192.168.1.72
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
filestore_xattr_use_omap = true
osd pool default size=2
public network = 192.168.1.0/16
cluster network = 192.168.1.0/16
4.3.安裝ceph相關包
- 每個節點安裝 ceph 相關包,指定阿里的源可以提高安裝速度
ceph-deploy install admin-192-168-1-27 monitor-192-168-1-72 node-192-168-1-71 node-192-168-1-28 \ --repo-url=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/ \
--gpg-url=https://mirrors.aliyun.com/ceph/keys/release.asc
4.4.集羣組件部署
- 配置初始 monitor、並收集所有密鑰
ceph-deploy mon create-initial
- 把配置文件和 admin 密鑰拷貝到管理節點和 Ceph 節點,這樣你每次執行 Ceph 命令行時就無需指定 monitor 地址和 ceph.client.admin.keyring 了
ceph-deploy admin admin-192-168-1-27 monitor-192-168-1-72 node-192-168-1-71 node-192-168-1-28
- 部署管理組件
ceph-deploy mgr create node-192-168-1-71
ceph-deploy mgr create node-192-168-1-28
- 部署mds組件
ceph-deploy mds create admin-192-168-1-27
ceph-deploy mds create monitor-192-168-1-72
- 添加其他mon,已將在72上安裝,要高可用需要至少3個以上的奇數節點
ceph-deploy mon create node-192-168-1-28
ceph-deploy mon create node-192-168-1-71
- 部署rgw組件
ceph-deploy rgw create monitor-192-168-1-72
ceph-deploy rgw create admin-192-168-1-27
- 部署osd組件,需要指定磁盤位置,使用create代替prepare 和 activate 兩步操作
ceph-deploy osd create --data /dev/sdb node-192-168-1-71
ceph-deploy osd create --data /dev/sdb node-192-168-1-28
4.5.創建資源池
- 創rbd 建pool
ceph osd pool create rbd 8
- 創建mds pool,fs
ceph osd pool create cephfs_data 8
ceph osd pool create cephfs_metadata 8
#創建filesystem,並查看狀態
ceph fs new cephfs cephfs_metadata cephfs_data
ceph fs ls
ceph mds stat
4.6.其他問題
- 檢查集羣是否健康
sudo ceph health
- 如果提示未認證,可以給admin.keyring授權
sudo chmod 755 /etc/ceph/ceph.client.admin.keyring
- 如果ceph配置修改(ceph.conf) 需推送配置
ceph-deploy --overwrite-conf config push admin-192-168-1-27 monitor-192-168-1-72 node-192-168-1-71 node-192-168-1-28
- 如果安裝有問題,可以通過以下命令卸載
# 要清理掉 /var/lib/ceph 下的所有數據、並卸載 Ceph 軟件包
ceph-deploy purge admin-192-168-1-27 monitor-192-168-1-72 node-192-168-1-71 node-192-168-1-28
# 如果只想清除 /var/lib/ceph 下的數據、並保留 Ceph 安裝包:
ceph-deploy purgedata admin-192-168-1-27 monitor-192-168-1-72 node-192-168-1-71 node-192-168-1-28
5. 啓用管理控制檯(儀表盤)
5.1. 啓用模塊
ceph mgr module enable dashboard
5.2. 創建證書(使用https訪問)
ceph dashboard create-self-signed-cert
5.3. 創建控制檯訪問用戶名密碼
ceph dashboard set-login-credentials admin admin
5.4. 查看訪問入口
ceph mgr services
5.5.啓用對象存儲網關
執行命令後會輸出json數據記下 access_key 和 secret_key。也可使用radosgw-admin user info --uid=admin再次查看
radosgw-admin user create --uid=admin --display-name=admin --system
ceph dashboard set-rgw-api-access-key H3GKVU6HB3N2GABK7ZE8
ceph dashboard set-rgw-api-secret-key u1h6QEsIcCsj3MYMBj5RQkUKyvR0Qq7x9aKfPjLH
6. rbd對接openshift
6.1. 所有openshift節點安裝ceph-common
yum install -y ceph-common
6.2. 從ceph-deploy上獲取key的值
- 方式一:
$ cat ceph.client.admin.keyring
[client.admin]
key = AQB3Cp1bstIGDBAAM/zwI3xzSVk8yVUXKKXt4Q==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
- 方式二:
ceph auth get-key client.admin
6.3. 創建ceph-secret
from-literal=key爲上一步獲取的值,需要使用的命名空間都需要創建
ps:如果不想每個項目都去創建一次可以修改項目模板
oc create secret generic ceph-secret --type="kubernetes.io/rbd" --from-literal=key='AQB3Cp1bstIGDBAAM/zwI3xzSVk8yVUXKKXt4Q==' --namespace=kube-system
6.4. 創建StorageClass
下面爲ceph-rbd-sc.yaml文件內容,
monitors爲mon主機列表,用逗號分割
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ceph-rbd
provisioner: kubernetes.io/rbd
parameters:
monitors: 192.168.1.72:6789
adminId: admin
adminSecretName: ceph-secret
adminSecretNamespace: kube-system
pool: rbd
userId: admin
userSecretName: ceph-secret
fsType: ext4
imageFormat: "1"
imageFeatures: "layering"
- 執行創建腳本
oc create -f ceph-storageclass.yaml
- 將此StorageClass設置爲默認(可選)
oc patch storageclass ceph-rbd -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
6.5. 創建pvc測試
ceph-rbd-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-ceph
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
storageClassName: ceph-rbd
6.6. 檢查pvc是否創建成功
oc get pvc
oc describle pvc pvc test-ceph
7. 監控安裝
7.1. grafana
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.4-1.x86_64.rpm
sudo yum localinstall grafana-5.2.4-1.x86_64.rpm
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
7.2. prometheus
- 安裝
wget https://github.com/prometheus/prometheus/releases/download/v2.0.0/prometheus-2.0.0.linux-amd64.tar.gz
tar zxvf prometheus-2.0.0.linux-amd64.tar.gz
cd prometheus-2.0.0.linux-amd64/
- 修改配置prometheus.yml
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'ceph-exporter'
static_configs:
- targets: ['192.168.1.28:9128']
labels:
alias: ceph-exporter
- 運行
nohup ./prometheus &
7.3. 在grafana圖表上配置ceph cluster
dashboard id爲917