ceph-deploy源码制作rpm包 <转>

本文详细介绍如何使用ceph-deploy源码制作RPM包的过程,包括环境搭建、用户配置、目录结构建立及编译打包等关键步骤。

ceph-deploy源码制作rpm包

原文:http://www.hl10502.com/2017/06/09/ceph-deploy-rpmbuild/#more

rpm编译打包的步骤:

  • 修改代码中的setup.cfg文件中的版本号
  • 代码setup.cfg同级目录下增加PKG-INFO文件,并修改版本号与setup.cfg中保持一致(PKG-INFO文件可以从项目的.egg-info文件夹获取,或者从centsos的rpm源码参考)
  • 将代码加上版本号重名并打成.tar.gz包
  • 将.tar.gz文件、spec脚本项目下的文件(.spec文件除外)copy到用户的rpmbuild/SOURCES目录
  • 将.spec文件copy到用户的rpmbuild/SPECS
  • 执行 rpmbuild –ba [spec文件] 来打包二进制包和源码包

 

环境准备

  • CentOS Linux release 7.2.1511 (Core)
  • ceph-deploy-1.5.36-0.src.rpm

创建用户

为了安全单独创建一个用户ceph来制作rpm

 

1

 

[root@node ~]# useradd ceph

 

设置用户ceph的密码

 

1

2

3

4

5

6

 

[root@node ~]# passwd ceph

Changing password for user ceph.

New password:

BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic

Retype new password:

passwd: all authentication tokens updated successfully.

 

创建rpmbuild目录

切换帐号

 

1

 

[root@node ~]# su ceph

 

添加一个配置文件,并设置编译的根目录为 ~/rpmbuild

 

1

 

[root@node root]$ vi ~/.rpmmacros

 

添加内容
%_topdir /home/ceph/rpmbuild/
:wq保存退出

在编译根目录下创建我们需要的目录

 

1

2

3

4

5

6

7

8

9

10

 

[root@node root]$ cd ~

[root@node ~]$ mkdir rpmbuild

[root@node ~]$ cd ~/rpmbuild

[root@node rpmbuild]$ mkdir -pv {BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

mkdir: created directory ‘BUILD’

mkdir: created directory ‘BUILDROOT’

mkdir: created directory ‘RPMS’

mkdir: created directory ‘SOURCES’

mkdir: created directory ‘SPECS’

mkdir: created directory ‘SRPMS’

 

rpmbuild目录下的六个文件目录分别为

BUILD 源代码解压后的存放目录
BUILDROOT 编译临时目录
RPMS    制作完成后的RPM包存放目录,里面有与平台相关的子目录
SOURCES 收集的源材料,补丁的存放位置
SPECS   SPEC文件存放目录
SRMPS   存放SRMPS生成的目录

编译rpm包

将修改后的代码目录ceph-deploy-1.5.36打成.tar.bz2文件

 

1

2

 

[root@node ~]# cd /opt

[root@node ~]# tar jcf ceph-deploy-1.5.36.tar.bz2 ceph-deploy-1.5.36

 

将ceph-deploy-1.5.36.tar.bz2复制到/home/ceph/rpmbuild/SOURCES目录

 

1

 

[root@node ~]# cp /opt/ceph-deploy-1.5.36/ceph-deploy-1.5.36.tar.bz2 /home/ceph/rpmbuild/SOURCES

 

将ceph-deploy.spec复制到/home/ceph/rpmbuild/SPECS目录

 

1

 

[root@node ~]# cp /opt/ceph-deploy-1.5.36/ceph-deploy.spec /home/ceph/rpmbuild/SPECS

 

编译打包

 

1

2

3

 

[root@node ~]# su ceph

[root@node root]$ cd /home/ceph/rpmbuild/SPECS

[root@node SPECS]$ rpmbuild -ba ceph-deploy.spec

 

执行完成之后,
在/home/ceph/rpmbuild/SRPMS/ 生成源码包
在/home/ceph/rpmbuild/RPMS/noarch/ 生成二进制包ceph-deploy-1.5.36-0.noarch.rpm

 

 

转载于:https://my.oschina.net/banwh/blog/1519171

<think>嗯,用户现在问的是为什么他的Ceph MGR的Endpoints(EP)丢失了Pod IP。之前他提过关于非活跃MGR节点修改数据的问题,现在可能是在部署或维护Ceph集群时遇到了服务发现的问题。我需要先回忆一下Kubernetes中Endpoints的机制,以及Ceph特别是Rook部署时MGR的相关配置。 首先,Endpoints资源通常由Service对象自动管理,当Service的selector匹配到Pod的标签时,对应的Pod IP和端口会被填入Endpoints。如果用户看到的Endpoints是<none>,说明没有匹配的Pod或者Pod没有正确运行。 可能的原因有几个:首先是MGR Pod本身没有正常运行,比如CrashLoopBackOff状态,或者节点资源不足导致无法调度。这时候需要检查Pod的状态,用kubectl describe pod看看事件日志。其次是Service的selector标签和Pod的标签不匹配,可能配置错误或者版本更新后的标签变更。比如Rook的Service可能期望app=rook-ceph-mgr这样的标签,而Pod实际可能有不同的标签。另外,网络策略或者安全组设置可能阻止了Pod与Kubernetes API通信,导致Endpoints无法更新。还有可能是Rook Operator的问题,比如版本不兼容或者配置错误,导致没有正确创建或更新Service和Endpoints。 用户提供的输出中,rook-ceph-mgr相关的Endpoints都没有IP,而其他服务如nginx和exporter是正常的。这可能意味着MGR Pod没有正确启动或者Service配置有问题。需要指导用户检查MGR Pod的状态,确认是否处于Running状态,并检查相关日志。同时,核对Service的selector是否匹配Pod的标签,可能需要用kubectl describe service rook-ceph-mgr来查看详细信息。另外,如果MGR实例数量不足,比如配置了多个但只有一个处于active状态,其他处于standby,但Kubernetes Service可能需要所有Pod都就绪才会更新Endpoints,这也可能导致问题。 用户可能是在部署或升级Rook/Ceph时遇到了这个问题,或者手动修改了某些配置导致标签不匹配。需要建议用户按照步骤排查:检查Pod状态、检查标签匹配、检查网络策略、查看Operator日志等。同时提醒用户不要手动修改Endpoints,而是通过调整Service或Deployment配置来解决问题,确保Rook Operator正常运行,因为Operator负责管理这些资源。</think>在Ceph集群(尤其是通过Rook部署的场景)中,MGR的Endpoint(`rook-ceph-mgr`)出现`<none>`表示Kubernetes未能正确关联Pod IP到Service。以下是可能原因及排查步骤: --- ### 一、**直接原因** 当`ENDPOINTS`列为`<none>`时,通常表示: 1. 对应的MGR Pod未处于`Running`状态 2. Service的Label Selector与Pod Labels不匹配 3. 网络策略(NetworkPolicy)或安全组阻止了Pod注册 4. Rook Operator未正确配置MGR服务 --- ### 二、**具体排查步骤** #### 1. **检查MGR Pod状态** ```bash kubectl -n rook-ceph get pods -l app=rook-ceph-mgr ``` - **预期输出**:应有至少1个`Running`状态的Pod(例如`rook-ceph-mgr-a-xxxxx`) - **异常情况**: - Pod处于`CrashLoopBackOff`:检查日志 `kubectl logs -f <mgr-pod-name>` - Pod未调度:检查节点资源(`kubectl describe pod <mgr-pod-name>`查看`Events`) #### 2. **验证Service与Pod的标签匹配** ```bash # 查看Service的Selector kubectl -n rook-ceph describe service rook-ceph-mgr # 查看Pod的Labels kubectl -n rook-ceph get pods -l app=rook-ceph-mgr --show-labels ``` - **关键点**:Service的`Selector`(如`app=rook-ceph-mgr,ceph_daemon_type=mgr`)必须与Pod Labels完全匹配 #### 3. **检查网络策略** - 如果集群启用了**NetworkPolicy**,确认允许MGR Pod的流量: ```yaml # 示例:允许MGR流量 apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-ceph-mgr spec: podSelector: matchLabels: app: rook-ceph-mgr ingress: - ports: - protocol: TCP port: 9283 # MGR默认指标端口 ``` #### 4. **检查Rook配置** - 在Rook的`CephCluster` CR中确认MGR配置: ```yaml apiVersion: ceph.rook.io/v1 kind: CephCluster metadata: name: rook-ceph spec: mgr: count: 1 # 确保至少1个MGR实例 modules: # 确保必要模块已启用 - name: dashboard enabled: true ``` --- ### 三、**常见修复方案** #### 场景1:MGR Pod未运行 - **操作**: ```bash # 强制删除Pod触发重建 kubectl -n rook-ceph delete pod -l app=rook-ceph-mgr ``` - **后续观察**:等待30秒后再次检查Pod状态 #### 场景2:标签不匹配 - **操作**:修改Service或Pod的Labels使其匹配 ```bash # 示例:修正Service的Selector kubectl -n rook-ceph edit service rook-ceph-mgr ``` - **注意**:Rook Operator通常会自动管理此配置,手动修改需谨慎 #### 场景3:Raft共识失败(多MGR场景) - **操作**: ```bash # 进入Toolbox检查MGR状态 ceph mgr stat # 若存在多个MGR实例冲突,可减少实例数 kubectl -n rook-ceph edit cephcluster rook-ceph ``` --- ### 四、**补充说明** - **Dashboard相关问题**: `rook-ceph-mgr-dashboard`的Endpoint依赖MGR正常运行。若Dashboard无法访问,需同时检查: ```bash ceph mgr services # 确认dashboard地址和端口 ``` - **外部访问配置**: 若使用`rook-ceph-mgr-dashboard-external-http`,需确认Ingress或NodePort配置正确 --- ### 五、**总结** 当MGR的Endpoint丢失Pod IP时,本质是**Kubernetes服务发现机制异常**。通过上述步骤可定位到具体原因(90%的问题集中在Pod状态或Label匹配)。建议优先检查Rook Operator日志: ```bash kubectl -n rook-ceph logs -l app=rook-ceph-operator ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值