Ceph (3) - 安装Ceph集群方法3:使用 ceph-ansible 离线安装 Red Hat Ceph Storage 4.1 集群
List itemmvn quarkus:add-extension -Dextensions="health" -f $CHE_PROJECTS_ROOT/quarkus-workshop-labs<dependency><groupId>io.quarkus</groupId><artifactId>quarkus-smallrye-health
安装前说明
- 本文安装的是基于 Red Hat Ceph Storage(RHCS)4.1 的集群环境。RHCS 4.1支持的操作系统为RHEL 7.8 和 RHEL 8.2,本文使用的是RHEL 7.8。
- 本文将使用离线方式安装RHCS集群。如果没有RHCS的离线安装包,则需要有该产品的试用或正式订阅,同时需要有一个节点能访问外网下载离线安装介质。
- 在安装过程中会使用到以下2类角色的节点:
1)support节点:作为安装RHCS集群的控制节点,在上面可以使用ceph-ansible或Cockpit完成RHCS集群安装过程(本文使用是ceph-ansible)。另外,还利用这个节点下载离线安装介质和运行离线Image Registry。
2)ceph-node节点:所有运行RHCS集群相关服务的节点,这些节点会运行mon、osd、mgr、rdsgw等服务。 - 根据本文说明准备4个节点部署RHCS集群,其中1个作为support节点用来提供离线YUM Repo和离线Image Registry服务、同时还用来执行Ansible Playbook;另外3个节点作为RHCS集群节点运行mon、osd、mgr等RHCS集群所需服务。
- 在使用ceph-ansible安装过程中,可以选择将mon、osd等RHCS核心服务运行在裸机上或是将它们运行在容器中,两者的配置差别主要体现在Ansible Playbook使用到的参数文件“ceph-ansible/group_vars/all.yml”。不过,无论是哪种运行RHCS核心服务的方式,运行RHCS监控用到的Prometheus/Grafana组件都是运行在容器中,因此本文将全部采用容器的方式运行RHCS的所有组件。
- 注意:本文中如未明确说明,都是用root用户在support节点操作。
- 本文参照了RHCS 4.1的官方安装文档,在部分地方对原有内容进行了简化处理,例如直接使用的是root用户执行Ansible安装脚本。
准备主机环境
创建虚拟主机并配置网络
本文使用基于VirtualBox VM虚机模拟物理服务。请准备4个虚机分别作为1个support节点和3个RHCS集群节点,其中需要为运行RHCS集群节点的虚机额外创建2个存储磁盘(如下图的sdb和sdc盘),可以为每个磁盘分配50GB存储空间。
为每个VM分配2个网卡,其中一个配置成Bridge类型、一个配置成Host-Only类型,分别配置负责RHCS集群外部通讯的public地址段(本文使用的是“192.168.1.0”)和集群内部通讯用的private地址段(本文使用的是“192.168.99.0”)。
在创建完VM后,请为以上4个节点最小化安装RHEL 7.8。在安装RHEL过程中按照以下列表为每个节点分配主机名和固定IP地址。
- support:192.168.1.203/24、192.168.99.203/24
- ceph-node1:192.168.1.201/24、192.168.99.201/24
- ceph-node2:192.168.1.202/24、192.168.99.202/24
- ceph-node3:192.168.1.203/24、192.168.99.203/24
由于在VirtualBox的VM中安装RHEL的2个网卡缺省名为“enp0s3”和“enp0s8”(如果用的是其他类型虚拟化软件,请用对应的网卡名替换以下的命令),因此也可以在安装完RHEL后使用以下命令设置每个VM的2个IP地址。
$ nmcli con modify enp0s3 ipv4.addresses 192.168.1.XXX/24
$ nmcli con modify enp0s8 ipv4.addresses 192.168.99.XXX/24
$ systemctl restart network
配置主机名和域名
设置环境变量
$ cat >> ~/.bashrc << EOF
SUPPORT_NODE=support
CEPH_NODE1=ceph-node1
CEPH_NODE2=ceph-node2
CEPH_NODE3=ceph-node3
CEPH_NODE_LIST="ceph-node1 ceph-node2 ceph-node3"
YUM_PATH=/data/yum
REGISTRY_PATH=/data/registry
EOF
$ source ~/.bashrc
设置主机hosts
为了简化,本文使用hosts解析主机域名(建议在生产环境中使用DNS服务解析主机域名)。最后将设好的hosts文件同步到所有节点。
$ cat > /etc/hosts << EOF
192.168.99.200 $SUPPORT_NODE
192.168.99.201 $CEPH_NODE1
192.168.99.202 $CEPH_NODE2
192.168.99.203 $CEPH_NODE3
EOF
$ for i in $CEPH_NODE_LIST; do scp /etc/hosts root@${i}:/etc/hosts; done
配置免密登录
执行命令生成密钥对,并将公钥复制到RHCS集群所有节点。
$ ssh-keygen -t rsa -b 2048 -P '' -f ~/.ssh/id_rsa
$ for i in $CEPH_NODE_LIST; do ssh-copy-id root@${i} -f; done
设置节点主机名
如果还没有设置主机域名,可执行以下命令设置4个节点的主机名。在执行完后需要退出所有节点,然后重新登录。
$ for i in $SUPPORT_NODE $CEPH_NODE_LIST; do ssh root@${i} hostnamectl set-hostname ${i}; ssh root@${i} hostname; done
关闭防火墙并禁用SELinux
为了省去网络访问限制麻烦(例如访问Apache HTTP服务提供Yum源),执行以下命令关闭所有节点的防火墙并禁用SELinux。
$ for i in $SUPPORT_NODE $CEPH_NODE_LIST; do ssh root@${i} systemctl stop firewalld; ssh root@${i} systemctl disable firewalld; done
$ for i in $SUPPORT_NODE $CEPH_NODE_LIST; do ssh root@${i} sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config; ssh root@${i} setenforce 0; done
配置离线Yum源
下载安装用到的Repo到本地
- 用RedHat正式或试用订阅用户登录订阅网站。
$ subscription-manager register --username=<USERNAME> --password=<PASSWORD>
Registering to: subscription.rhsm.redhat.com:443/subscription
The system has been registered with ID: 28625db9-ac30-4119-b5aa-355c37778dc5
The registered system name is: support
- 列出所有和RHCS的OSD服务相关的订阅。确认这个订阅中包含“Red Hat Ceph Storage”、“Red Hat Ceph Storage OSD”、“Red Hat Ceph Storage MON”核心服务组件。
$ subscription-manager list --available --all --matches="*OSD*"
- 指定使用一个包含 Red Hat Ceph Storage 的订阅POOL。
$ subscription-manager attach --pool=<POOL_ID>
- 开启以下YUM Repo。
$ subscription-manager repos --disable=*
$ subscription-manager repos \
--enable=rhel-7-server-rpms \
--enable=rhel-7-server-extras-rpms \
--enable=rhel-7-server-ansible-2.8-rpms \
--enable=rhel-7-server-rhceph-4-tools-rpms \
--enable=rhel-7-server-rhceph-4-mon-rpms \
--enable=rhel-7-server-rhceph-4-osd-rpms
- 然后确认有以下配置好的6个YUM Repo。
$ yum repolist
repo id repo name status
rhel-7-server-ansible-2.8-rpms/x86_64 Red Hat Ansible Engine 2.8 RPMs for Red Hat Enterprise Linux 7 Server 19
rhel-7-server-extras-rpms/x86_64 Red Hat Enterprise Linux 7 Server - Extras (RPMs) 1,329
rhel-7-server-rhceph-4-mon-rpms/x86_64 Red Hat Ceph Storage MON 4 for Red Hat Enterprise Linux 7 Server (RPMs) 183
rhel-7-server-rhceph-4-osd-rpms/x86_64 Red Hat Ceph Storage OSD 4 for Red Hat Enterprise Linux 7 Server (RPMs) 129
rhel-7-server-rhceph-4-tools-rpms/x86_64 Red Hat Ceph Storage Tools 4 for Red Hat Enterprise Linux 7 Server (RPMs) 196
rhel-7-server-rpms/7Server/x86_64 Red Hat Enterprise Linux 7 Server (RPMs) 30,637
repolist: 32,493
- 执行命令,下载repo到本地
$ mkdir -p ${YUM_PATH}
$ yum -y install yum-utils createrepo
$ for repo in $(subscription-manager repos --list-enabled |grep "Repo ID" |awk '{print $3}'); do \
reposync --gpgcheck -lmn --repoid=${repo} --download_path=${YUM_PATH};
createrepo -v ${YUM_PATH}/${repo} -o ${YUM_PATH}/${repo};
done
- 将当前节点退出订阅。
$ subscription-manager unregister
配置Yum
配置Support节点的Yum
由于上一步下载的Repo就在Support节点本地,因此我们把Support节点的Yum配到自己的本地目录。
- 执行命令,生成rhcs.repo文件。
$ cat > /etc/yum.repos.d/rhcs.repo << EOF
[rhel-7-server]
name=rhel-7-server
baseurl=file://${YUM_PATH}/rhel-7-server-rpms/
gpgcheck=0
[rhel-7-server-extras]
name=rhel-7-server-extras
baseurl=file://${YUM_PATH}/rhel-7-server-extras-rpms/
gpgcheck=0
[rhel-7-server-rhceph-4-mon]
name=rhel-7-server-rhceph-4-mon
baseurl=file://${YUM_PATH}/rhel-7-server-rhceph-4-mon-rpms/
gpgcheck=0
[rhel-7-server-rhceph-4-osd]
name=rhel-7-server-rhceph-4-osd
baseurl=file://${YUM_PATH}/rhel-7-server-rhceph-4-osd-rpms/
gpgcheck=0
[rhel-7-server-rhceph-4-tools]
name=rhel-7-server-rhceph-4-tools
baseurl=file://${YUM_PATH}/rhel-7-server-rhceph-4-tools-rpms/
gpgcheck=0
[rhel-7-server-ansible-2.8]
name=rhel-7-server-ansible-2.8
baseurl=file://${YUM_PATH}/rhel-7-server-ansible-2.8-rpms/
gpgcheck=0
EOF
- 执行命令,确认包括以下repo。
$ yum repolist
repo id repo name status
rhel-7-server rhel-7-server 5,476
rhel-7-server-ansible-2.8 rhel-7-server-ansible-2.8 4
rhel-7-server-extras rhel-7-server-extras 157
rhel-7-server-rhceph-4-mon rhel-7-server-rhceph-4-mon 53
rhel-7-server-rhceph-4-osd rhel-7-server-rhceph-4-osd 29
rhel-7-server-rhceph-4-tools rhel-7-server-rhceph-4-tools 55
repolist: 5,774
配置RHCS集群节点的Yum
以下为RHCS集群节点配置指向Support节点的远程Yum。
- 首先在Support节点安装httpd服务。
$ yum -y install httpd
- 创建httpd服务的配置文件。
$ cat << EOF > /etc/httpd/conf.d/yum.conf
Alias /rhcs "${YUM_PATH}"
<Directory "${YUM_PATH}">
Options +Indexes +FollowSymLinks
Require all granted
</Directory>
<Location /repo>
SetHandler None
</Location>
EOF
- 先设置目录权限,然后重启httpd服务,最后确认可以从所有RHCS节点上访问到http的Repo。
$ chmod -R 705 ${YUM_PATH}/..
$ systemctl restart httpd
$ for i in $CEPH_NODE_LIST; do ssh root@${i} curl http://${SUPPORT_NODE}/rhcs/ | grep rhel-7-server; done
- 执行命令,生成RHCS节点节点使用的repo文件。
$ cat > ~/rhcs.repo << EOF
[rhel-7-server]
name=rhel-7-server
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-rpms/
gpgcheck=0
[rhel-7-server-extras]
name=rhel-7-server-extras
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-extras-rpms/
gpgcheck=0
[rhel-7-server-rhceph-4-mon]
name=rhel-7-server-rhceph-4-mon
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-rhceph-4-mon-rpms/
gpgcheck=0
[rhel-7-server-rhceph-4-osd]
name=rhel-7-server-rhceph-4-osd
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-rhceph-4-osd-rpms/
gpgcheck=0
[rhel-7-server-rhceph-4-tools]
name=rhel-7-server-rhceph-4-tools
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-rhceph-4-tools-rpms/
gpgcheck=0
[rhel-7-server-ansible-2.8]
name=rhel-7-server-ansible-2.8
baseurl=http://${SUPPORT_NODE}/rhcs/rhel-7-server-ansible-2.8-rpms/
gpgcheck=0
EOF
- 将rhcs.repo文件传到所有RHCS节点,然后检查可以从这些节点中访问到远程Yum源。
$ for i in $CEPH_NODE_LIST; do scp ~/rhcs.repo root@${i}:/etc/yum.repos.d/; done
$ for i in $CEPH_NODE_LIST; do ssh root@${i} yum repolist; done
准备离线Container Image Registry
在离线环境中,由于RHCS集群节点无法直接访问互联网,因此可以在support节点上搭建Container Image Registry并导入相关容器镜像,这样RHCS安装过程就可通过support节点获取到相关容器镜像了。
创建SSL证书和用户认证文件
- 设置环境变量(REGISTRY_PATH定义了Docker Registry软件使用的存储目录),然后创建对应的子目录(auth是用来存放校验用户名/密码的文件目录、certs是用来存放TLS所需证书/秘钥的目录、data是用来存放容器镜像的目录)。
$ REGISTRY_PATH=/data/registry
$ mkdir -p ${REGISTRY_PATH}/{auth,certs,data}
- 执行命令创建证书(包括公钥和私钥文件),以支持Registry运行在https上。远程的Docker客户端需要使用该公钥访问Registry。
$ openssl req -newkey rsa:4096 -nodes -sha256 -keyout ${REGISTRY_PATH}/certs/registry.key -x509 -days 365 \
-out ${REGISTRY_PATH}/certs/registry.crt \
-subj "/C=CN/ST=BEIJING/L=BJ/O=REDHAT/OU=IT/CN=${SUPPORT_NODE}/emailAddress=admin@${SUPPORT_NODE}"
- 查看生成的证书。
$ openssl x509 -in ${REGISTRY_PATH}/certs/registry.crt -text | head -n 14
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
bd:8e:d7:1b:08:aa:10:49
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=BEIJING, L=BJ, O=REDHAT, OU=IT, CN=support/emailAddress=admin@support
Validity
Not Before: Oct 30 03:40:25 2020 GMT
Not After : Oct 30 03:40:25 2021 GMT
Subject: C=CN, ST=BEIJING, L=BJ, O=REDHAT, OU=IT, CN=support/emailAddress=admin@support
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
- 将上述公钥复制到RHCS集群节点上。
$ for i in $CEPH_NODE_LIST; do \
scp ${REGISTRY_PATH}/certs/registry.crt root@${i}:/etc/pki/ca-trust/source/anchors/; \
ssh root@${i} update-ca-trust; \
done
- 创建基于httppasswd的用户认证文件,其中的user1/password1是登录用户和密码。Docker Registry将使用该文件对登录用户进行认证。
$ yum -y install httpd-tools
$ htpasswd -bBc ${REGISTRY_PATH}/auth/htpasswd user1 password1
$ cat ${REGISTRY_PATH}/auth/htpasswd
user1:$2y$05$fgURP9RJ1KFAKnC0obM5GugmAyOGGilE7nkFPZzh7nn5Yub.JZ36W
安装Docker Registry
- 先安装Docker。
$ yum -y install docker
- 修改“/etc/containers/registries.conf”文件的“[registries.search]”部分,确认“[registries.search]”部分必须有以下内容:
[registries.search]
registries = ['registry.redhat.io']
- 修改“/etc/containers/registries.conf”文件的“[registries.insecure]”部分,确认“[registries.insecure]”部分必须有在SUPPORT_NODE节点上运行的Docker Registry地址,例如下面试用了本文环境中的“support”节点名。
[registries.insecure]
registries = ['support:5000']
- 重启Docker,让配置生效。
$ systemctl restart docker
- 安装运行Docker Registry,然后查看其中的镜像。
$ docker run --name registry -p 5000:5000 \
-v ${REGISTRY_PATH}/data:/var/lib/registry:z \
-v ${REGISTRY_PATH}/auth:/auth:z \
-v ${REGISTRY_PATH}/certs:/certs:z \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \
-d docker.io/library/registry:2
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
64b6c0a1c5f6 docker.io/library/registry:2 "/entrypoint.sh /e..." 8 seconds ago Up 7 seconds 0.0.0.0:5000->5000/tcp registry
$ curl -u user1:password1 https://${SUPPORT_NODE}:5000/v2/_catalog
{"repositories":[]}
配置离线Docker Registry
- 执行命令,使用试用或正式的RedHat订阅账号登录registry.redhat.io。
$ docker login registry.redhat.io --username=<USERNAME> --password=<PASSWORD>
Login Succeeded
- 下载RHCS所需容器镜像到本地缓存。
$ docker pull registry.redhat.io/rhceph/rhceph-4-rhel8
$ docker pull registry.redhat.io/openshift4/ose-prometheus-node-exporter:v4.1
$ docker pull registry.redhat.io/rhceph/rhceph-4-dashboard-rhel8
$ docker pull registry.redhat.io/openshift4/ose-prometheus:4.1
$ docker pull registry.redhat.io/openshift4/ose-prometheus-alertmanager:4.1
- 修改上述容器的地址和标签。(注意:此处RHCS 4.1官方安装文档有个错误,就是需要为rhceph-4-rhel8镜像打上名为latest-nautilus的标签,而不能用缺省标签)。
$ docker tag registry.redhat.io/rhceph/rhceph-4-rhel8 ${SUPPORT_NODE}:5000/rhceph/rhceph-4-rhel8:latest-nautilus
$ docker tag registry.redhat.io/openshift4/ose-prometheus-node-exporter:v4.1 ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-node-exporter:v4.1
$ docker tag registry.redhat.io/rhceph/rhceph-4-dashboard-rhel8 ${SUPPORT_NODE}:5000/rhceph/rhceph-4-dashboard-rhel8
$ docker tag registry.redhat.io/openshift4/ose-prometheus-alertmanager:4.1 ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-alertmanager:4.1
$ docker tag registry.redhat.io/openshift4/ose-prometheus:4.1 ${SUPPORT_NODE}:5000/openshift4/ose-prometheus:4.1
- 先登录本地Docker Registry,再将上述本地容器镜像推送到support节点的Docker Registry中。
$ docker login ${SUPPORT_NODE}:5000 -u user1 -p password1
Login Succeeded
$ docker push ${SUPPORT_NODE}:5000/rhceph/rhceph-4-rhel8:latest-nautilus
The push refers to a repository [support:5000/rhceph/rhceph-4-rhel8:latest-nautilus]
d7280273a3d0: Layer already exists
b7b591e3443f: Layer already exists
ccf04fbd6e19: Layer already exists
latest: digest: sha256:375da5e6abc8871c26cdd0d35862a6b45cd56e1169a75f8acded4580952d8aaa size: 950
$ docker push ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-node-exporter:v4.1
The push refers to a repository [support:5000/openshift4/ose-prometheus-node-exporter]
9f69b4a665ad: Layer already exists
5cb0fa1ad156: Layer already exists
eddcd8d2986d: Layer already exists
35b7a5c4e1b4: Layer already exists
v4.1: digest: sha256:572476640cb0ef898278fded4bb47a789bc1ba98c5931b76d1c11a6a6da0a057 size: 1159
$ docker push ${SUPPORT_NODE}:5000/rhceph/rhceph-4-dashboard-rhel8
The push refers to a repository [support:5000/rhceph/rhceph-4-dashboard-rhel8]
cfedec6e53bf: Layer already exists
b7b591e3443f: Layer already exists
ccf04fbd6e19: Layer already exists
latest: digest: sha256:fdc543b91c567c38a87b2a796b8394b285317c8112ed05d028b46734de8e9260 size: 949
$ docker push ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-alertmanager:4.1
The push refers to a repository [support:5000/openshift4/ose-prometheus-alertmanager]
4eac54049ec8: Layer already exists
8002d8fc84eb: Layer already exists
c7fbe90ae90e: Layer already exists
35817540a17b: Layer already exists
4.1: digest: sha256:0467c38142fc5df2836f3c0d9ff7be07c1c47f415d57cc6a092af8437e8c604a size: 1160
$ docker push ${SUPPORT_NODE}:5000/openshift4/ose-prometheus:4.1
The push refers to a repository [support:5000/openshift4/ose-prometheus]
2391a9d71a96: Layer already exists
8002d8fc84eb: Layer already exists
c7fbe90ae90e: Layer already exists
35817540a17b: Layer already exists
4.1: digest: sha256:70158e447587bc13f4e9eee45f1056c6a6f79b4f097d9bcae02d5155845d2c4b size: 1160
- 查看Docker Registry中的镜像
$ curl -u user1:password1 https://${SUPPORT_NODE}:5000/v2/_catalog
配置Chrony时间服务
RHCS集群节点之间必须做时间同步,这样mon服务才能进行正常的仲裁。为此,我们可以将本文的4个节点的时间服务统一设置到support节点上。
- 在support节点上安装chrony服务,然后修改配置文件,最后重启chrony服务。
$ yum -y install chrony
$ cat > /etc/chrony.conf << EOF
server ${SUPPORT_NODE} iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow all
local stratum 10
logdir /var/log/chrony
EOF
$ systemctl restart chronyd
$ chronyc tracking
- 在所有RHCS集群节点安装chrony服务,并和support节点进行时间同步。
$ for i in $CEPH_NODE_LIST; do \
scp /etc/chrony.conf root@${i}:/etc/chrony.conf; \
ssh root@${i} systemctl restart chronyd; \
ssh root@${i} chronyc tracking
done
安装配置ceph-ansible
安装ceph-ansible程序
- 在support节点上执行命令,安装ceph-ansible程序。
$ yum install ceph-ansible -y
- 查看ansible版本,确认是2.8.x。说明:RHCS 4.1对应的是nautilus版的社区Ceph,因此需用anbile 2.8版本进行安装。
$ ansible --version
ansible 2.8.16
config file = /usr/share/ceph-ansible/ansible.cfg
configured module search path = ['/usr/share/ceph-ansible/library']
ansible python module location = /usr/local/lib/python3.6/site-packages/ansible
executable location = /usr/local/bin/ansible
python version = 3.6.8 (default, Apr 2 2020, 13:34:55) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
定制Ansible使用的文件
创建Ansible Inventory文件
- 在support节点上创建hosts文件作为Ansible的Inventory。在hosts文件中定义了RHCS服务和4个节点的对应部署关系。
$ cat >> /usr/share/ceph-ansible/hosts << EOF
[grafana-server]
${CEPH_NODE1}
[mons]
${CEPH_NODE1}
${CEPH_NODE2}
${CEPH_NODE3}
[osds]
${CEPH_NODE1}
${CEPH_NODE2}
${CEPH_NODE3}
[mgrs]
${CEPH_NODE2}
${CEPH_NODE3}
EOF
- 执行命令,测试节点连通性。
$ ansible all -m ping -i /usr/share/ceph-ansible/hosts
ceph-node2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
ceph-node3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
ceph-node1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
创建Ansible Playbook文件
Ansible将使用Playbook来执行所有RHCS集群节点的安装部署操作。
- 由于本文选择了将RHCS集群所有组件运行在容器中,可以从site-container.yml.sample模板复制一份基于容器部署RHCS集群的Ansible Playbook文件。
$ cp /usr/share/ceph-ansible/site-container.yml.sample /usr/share/ceph-ansible/site-container.yml
配置Ansible Playbool使用的参数文件
该文件定义在RHCS集群上部署的各种服务的参数,Ansile会在运行Playbook的时候使用这些参数。
- 设置环境变量,包括mon服务使用的网卡名、public网段地址、登录support节点的docker registry的用户和密码、RHCS的Dashboard和Grafana管理员账号。
$ cat >> ~/.bashrc << EOF
MONITOR_INTERFACE=enp0s3
PUBLIC_NETWORK=192.168.1.0/24
REGISTRY_USERNAME=user1
REGISTRY_PASSWORD=password1
DASHBORAD_ADMIN_USERNAME=admin
DASHBORAD_ADMIN_PASSWORD=password
GRAFANA_ADMIN_USERNAME=admin
GRAFANA_ADMIN_PASSWORD=password
EOF
[root@admin ~]$ source ~/.bashrc
- 根据以上变量创建名为all.yml的Playbook参数文件。说明:参照的官方安装文档应该在此步配置ceph_repository_type参数,该参数只有cdn和iso选项,分别适合在线安装(如果是在线安装,Ansible会连到红帽网站验证是否有足够的产品订阅)和离线安装。但是本安装过程使用的并非是基于ISO文件的离线安装方式,而采用了基于本地Yum Repo的离线安装方式。因此无论该参数设为哪种选项都和本文的安装场景有差异,会导致安装失败。不过在实际过程中发现如果不设置ceph_repository_type参数可以正常完成安装。
[ansible@admin ~]$ cat << EOF > /usr/share/ceph-ansible/group_vars/all.yml
fetch_directory: ~/ceph-ansible-keys
ceph_origin: repository
ceph_repository: rhcs
ceph_rhcs_version: 4
bootstrap_dirs_owner: "167"
bootstrap_dirs_group: "167"
monitor_interface: ${MONITOR_INTERFACE}
public_network: ${PUBLIC_NETWORK}
containerized_deployment: true
ceph_docker_image: rhceph/rhceph-4-rhel8
ceph_docker_registry: ${SUPPORT_NODE}:5000
ceph_docker_registry_auth: true
ceph_docker_registry_username: ${REGISTRY_USERNAME}
ceph_docker_registry_password: ${REGISTRY_PASSWORD}
dashboard_admin_user: ${DASHBORAD_ADMIN_USERNAME}
dashboard_admin_password: ${DASHBORAD_ADMIN_PASSWORD}
node_exporter_container_image: ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-node-exporter:v4.1
grafana_admin_user: ${GRAFANA_ADMIN_USERNAME}
grafana_admin_password: ${GRAFANA_ADMIN_PASSWORD}
grafana_container_image: ${SUPPORT_NODE}:5000/rhceph/rhceph-4-dashboard-rhel8
prometheus_container_image: ${SUPPORT_NODE}:5000/openshift4/ose-prometheus:4.1
alertmanager_container_image: ${SUPPORT_NODE}:5000/openshift4/ose-prometheus-alertmanager:4.1
EOF
配置RHCS集群osd服务的参数文件
该文件指定了运行osd服务的节点使用的磁盘存储。
- 本文将RHCS集群的osd服运行在“CEPH_NODE_LIST”指定的3个节点上。执行以下命令查看分别查看3个节点的存储,确认它们都配置了sdb和sdc两个磁盘(由于返回结果都一样,所以以下只显示了其中一个节点的结果)。
$ for i in $CEPH_NODE_LIST; do ssh root@${i} lsblk; done
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─rhel-root 253:0 0 97G 0 lvm /
└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 50G 0 disk
sdc 8:32 0 50G 0 disk
sr0 11:0 1 1024M 0 rom
- 配置osds.yml文件,在其中指定RHCS的osd服务使用的sdb和sdc两个磁盘。
$ cat > /usr/share/ceph-ansible/group_vars/osds.yml << EOF
devices:
- /dev/sdb
- /dev/sdc
EOF
执行安装RHCS集群的Ansible脚本
- 进入ceph-ansible目录中,执行ansible的playbook部署RHCS集群。注意:一定要在ceph-ansible目录中运行playbook,否则执行中途会出错。
$ cd /usr/share/ceph-ansible
$ ansible-playbook site-container.yml -i hosts
- 如果RHCS集群安装成功,则会显示如下提示:
。。。
TASK [show ceph status for cluster ceph] *************************************************************************************************************************************
Friday 30 October 2020 00:55:17 -0400 (0:00:01.158) 0:06:21.492 ********
ok: [ceph-node1 -> ceph-node1] =>
msg:
- ' cluster:'
- ' id: 80eed3c7-8a0a-4c77-b378-ebd9e456fca0'
- ' health: HEALTH_OK'
- ' '
- ' services:'
- ' mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 55m)'
- ' mgr: ceph-node3(active, since 14s), standbys: ceph-node2'
- ' osd: 6 osds: 6 up (since 52m), 6 in (since 52m)'
- ' '
- ' data:'
- ' pools: 0 pools, 0 pgs'
- ' objects: 0 objects, 0 B'
- ' usage: 6.0 GiB used, 294 GiB / 300 GiB avail'
- ' pgs: '
- ' '
PLAY RECAP *******************************************************************************************************************************************************************
ceph-node1 : ok=347 changed=18 unreachable=0 failed=0 skipped=390 rescued=0 ignored=0
ceph-node2 : ok=379 changed=14 unreachable=0 failed=0 skipped=436 rescued=0 ignored=0
ceph-node3 : ok=352 changed=11 unreachable=0 failed=0 skipped=401 rescued=0 ignored=0
INSTALLER STATUS *************************************************************************************************************************************************************
Install Ceph Monitor : Complete (0:00:50)
Install Ceph Manager : Complete (0:00:40)
Install Ceph OSD : Complete (0:00:59)
Install Ceph Dashboard : Complete (0:01:03)
Install Ceph Grafana : Complete (0:00:35)
Install Ceph Node Exporter : Complete (0:00:40)
。。。
访问RHCS集群
安装Ceph客户端并访问RHCS集群
- 安装Ceph客户端,并将RHCS集群的配置和访问秘钥复制到客户端本地。说明:由于任一mon节点都有RHCS集群的配置和访问秘钥,以下使用的是ceph-node1节点的文件。
$ yum -y install ceph-common
$ scp root@ceph-node1:/etc/ceph/ceph.conf /etc/ceph/
$ scp root@ceph-node1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
- 查看RHCS集群状态和各节点运行的服务情况。其中可以看到mon服务运行在3个节点上;mgr服务运行在2个节点上,并且ceph-node3为主节点;整个RHCS集群移动运行了6个osd个服务。
$ ceph -s
cluster:
id: 80eed3c7-8a0a-4c77-b378-ebd9e456fca0
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3 (age 84m)
mgr: ceph-node3(active, since 29m), standbys: ceph-node2
osd: 6 osds: 6 up (since 82m), 6 in (since 82m)
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 6.0 GiB used, 294 GiB / 300 GiB avail
pgs:
通过Web控制台访问RHCS集群
- 根据上一步查看RHCS集群的返回,可以看出当前运行mgr服务的主节点是ceph-node3上。用浏览器访问http://ceph-node3:8443,在以下界面中用安装中指定的admin/password登录RHCS管理控制台。
- 然后就可以在RHCS的管理控制台进行操作了。
参考
https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/4/html-single/installation_guide/index#configuring-a-firewall-for-red-hat-ceph-storage-install
https://docs.ceph.com/projects/ceph-ansible/en/latest/
更多推荐
所有评论(0)