基于centos7的ceph安裝,并做為kubernetes后端storageClass存儲(chǔ)來源

ceph是一個(gè)分布式文件存儲(chǔ)服務(wù)贴膘,類似的還有g(shù)ulster卖子,minio等等,至于各種云服務(wù)商的對象存儲(chǔ)服務(wù)就不說了刑峡,這里只聊自建敛瓷。為了配合kubernetes的底層pvc存儲(chǔ)僚匆,利用storageClass的自動(dòng)claim咏连,因此在測試環(huán)境部署了一套cephfs笛辟,cephfs依賴ceph服務(wù),因此先安裝ceph宫患。準(zhǔn)備3臺(tái)服務(wù)器刊懈,每臺(tái)掛載一塊數(shù)據(jù)盤,而且是raw的娃闲,也就是裸盤虚汛,不需要格式化。


ceph


首先去官網(wǎng):http://docs.ceph.org.cn/start/畜吊,快速查看了解ceph的部署過程泽疆,官方?jīng)]有做到事無巨細(xì),你也只能結(jié)合ecs的環(huán)境做個(gè)大致的了解玲献,至少瀏覽一遍殉疼,以便在出問題的時(shí)候,回到文檔中查看原因捌年。

其次開始安裝:只要沒有明確標(biāo)識(shí)在管理節(jié)點(diǎn)瓢娜,那就是所有節(jié)點(diǎn)都需要安裝

1、配置主機(jī)名和IP的映射:/etc/hosts礼预,這里必須和主機(jī)名對應(yīng)眠砾,否則后面執(zhí)行mon初始化的時(shí)候報(bào)錯(cuò)

2、添加yum源:yum install -y yum-utils && 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*

3托酸、添加ceph的yum倉庫:

vim /etc/yum.repos.d/ceph.repo? ? 注意:luminous是ceph的版本褒颈,el7是你Linux的發(fā)行版柒巫;具體的版本信息這里查看https://docs.ceph.com/docs/mimic/releases/

[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://download.ceph.com/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://download.ceph.com/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://download.ceph.com/keys/release.asc

4、安裝ceph-deploy:管理節(jié)點(diǎn)

yum install -y ceph-deploy

5谷丸、使用root用戶安裝堡掏,如果需要普通用戶,請參照官方文檔中添加用戶部分

6刨疼、開始安裝:管理節(jié)點(diǎn)

mkdir my-cluster

cd my-cluster

ceph-deploy new admin? //生成ceph.conf

ceph-deploy install admin node1 node2 //各節(jié)點(diǎn)安裝ceph

ceph-deploy mon create-initial //初始化監(jiān)控節(jié)點(diǎn)泉唁,這一步肯定會(huì)出錯(cuò),查看出錯(cuò)日志揩慕,然后根據(jù)日志來修改ceph.conf或者其他操作

如果告訴你public_network或者public_addr都不存在亭畜,那么需要在ceph中添加對應(yīng)的網(wǎng)段

如果告訴你provided hostname must match remote hostname,那說明你的hosts里配置的主機(jī)名和ceph.conf中的不一致迎卤,需要你調(diào)整

每次修改ceph.conf需要重新把這個(gè)配置文件推送到所有的節(jié)點(diǎn):ceph-deploy --overwrite-conf config push admin node1 node2

如果還是不行拴鸵,就去各個(gè)節(jié)點(diǎn)執(zhí)行 pkill ceph殺掉進(jìn)程,重新初始化

最后還是不行蜗搔,你就purge所有的東西宝踪,重新從頭開始準(zhǔn)備安裝:

ceph-deploy purge admin node1 node2

ceph-deploy purgedata admin node1 node2

ceph-deploy forgetkeys

7、拷貝所有keyring結(jié)尾的密鑰文件到各個(gè)節(jié)點(diǎn)的/etc/ceph

8碍扔、檢查ceph的health狀態(tài)

ceph health //如果告訴你HEALTH_WARN no active mgr,那就需要添加mgr:ceph-deploy mgr create node1 node2

9秕重、添加osd

ceph-deploy osd create --data /dev/vdb admin

ceph-deploy osd create --data /dev/vdb node1

ceph-deploy osd create --data /dev/vdb node2? //注意磁盤的位置不同,這個(gè)版本的ceph-deploy無法使用prepare來添加osd了

10、查看ceph的狀態(tài)

ceph -s

? cluster:

? ? id:? ? 355a1118-c856-42e9-81bd-d5bec3c5464f

? ? health: HEALTH_OK

? services:

? ? mon: 1 daemons, quorum ecs-f80d-0001

? ? mgr: ecs-f80d-0002(active), standbys: ecs-f80d-0003

? ? osd: 3 osds: 3 up, 3 in

? data:

? ? pools:? 0 pools, 0 pgs

? ? objects: 0? objects, 0 B

? ? usage:? 3.0 GiB used, 597 GiB / 600 GiB avail

? ? pgs:

11溶耘、開啟dashboard

一般情況下二拐,都沒有什么問題,但是不保證啟用dashboard成功凳兵,因此百新,出現(xiàn)問題的時(shí)候就去查看mgr角色機(jī)器的mgr日志,路徑在/var/log/ceph/ceph-mgr.${nodename}.log

啟用步驟:

ceph mgr module enable dashboard //如果沒有設(shè)置dashboard綁定port和IP庐扫,那就是mgr節(jié)點(diǎn)的8080饭望,8443 for ssl

如果需要自定義地址和端口

ceph config set mgr mgr/dashboard/server_addr 0.0.0.0

ceph config set mgr mgr/dashboard/server_port 7000

ceph mgr module disable dashboard

ceph mgr module enable dashboard? //重啟一下dashboard

ceph dashboard set-login-credentials admin admin? //設(shè)置登錄用戶名和密碼

如果日志報(bào)錯(cuò)urllib3之類的,就通過pip重裝

pip uninstall urllib3

pip install urllib3 //可能會(huì)讓你--upgrade

ssl自簽證書形庭,看情況铅辞,如果不使用的話,需要這樣做:

ceph config set mgr mgr/dashboard/ssl false

dashboard有非常多的設(shè)置萨醒,具體操作斟珊,請參看官方文檔:https://docs.ceph.com/docs/master/mgr/dashboard/

12、安裝mds元數(shù)據(jù)組件

ceph-deploy mds create nodename //在ceph.conf同級目錄執(zhí)行

13富纸、安裝object gateway組件

ceph-deploy rgw create nodename

14囤踩、添加monitor旨椒,以便高可用

ceph-deploy mon add nodename

ceph quorum_status --format json-pretty //查看法定人數(shù)狀態(tài)

15、使用ceph

ceph osd pool create data 128 128 //創(chuàng)建存儲(chǔ)池子堵漱,pg和pgp均為128综慎,如果不寫將使用默認(rèn)的8,你可以在ceph.conf設(shè)置默認(rèn)的pg和pgp

ceph osd pool set-quota data max_objects 10000 //設(shè)置池子的對象個(gè)數(shù)配額

ceph osd pool set-quota data max_bytes 2G //設(shè)置池子的大小配額怔锌,取消配額寥粹,設(shè)置為0

16、測試推送數(shù)據(jù)到存儲(chǔ)池

rados put test-object-1 testfile.txt --pool=data //推送數(shù)據(jù)

rados -p data ls //驗(yàn)證數(shù)據(jù)對象是否存在

ceph osd map data test-object-1 //定位數(shù)據(jù)對象

rados rm test-object-1 --pool=data //刪除此對象

17埃元、新增節(jié)點(diǎn)和osd涝涤,以及mon

在deploy節(jié)點(diǎn)的hosts中添加新增的節(jié)點(diǎn)主機(jī)/etc/hosts

ceph-deploy install node3 node4 //批量安裝ceph到新增節(jié)點(diǎn)

如果出錯(cuò)就purge和purgedata,再重新安裝岛杀,可能還會(huì)有urllib3的報(bào)錯(cuò)阔拳,就還是按照之前介紹的方式重新pip安裝之

節(jié)點(diǎn)增加也需要增加對應(yīng)的monitor

ceph-deploy mon add node3

將monitor的列表在ceph.conf中配置完整,再push到各個(gè)節(jié)點(diǎn)中去

ceph-deploy --overwrite-conf config push admin node1 node2 node3 node4

新增osd:

ceph-deploy osd create --data /dev/vdb node3

ceph-deploy osd create --data /dev/vdb node4

ceph -s 或者 ceph osd tree 查看是否添加成功

18类嗤、添加客戶端用戶和設(shè)置權(quán)限

ceph auth get-or-create client.k8s mon 'allow rwx' osd 'allow rwx pool=k8s' mds 'allow rwp' -o ceph.client.k8s.keyring

更新權(quán)限

ceph auth caps client.k8s mon 'allow rwx' osd 'allow rwx pool=k8s, allow rw pool=cephfs_data' mds 'allow rwp'

還可以通過對cephfs文件系統(tǒng)授權(quán)的同時(shí)添加一個(gè)賬戶

ceph fs authorize cephfs client.k8s / r /data rw? ? //表示k8s用戶對/目錄有讀權(quán)限糊肠,對/data有讀寫權(quán)限,這里的data不是pool遗锣,而是文件系統(tǒng)的路徑

注意:不管是塊block存儲(chǔ)還是fs文件系統(tǒng)货裹,其都是基于pool來的,因此首先得創(chuàng)建pool


kubernetes

測試ceph的塊存儲(chǔ):

1精偿、先創(chuàng)建一個(gè)image

ceph osd pool create k8s 256 256

ceph osd pool set-quota data max_objects 1000000

ceph osd pool set-quota data max_bytes 200G

rbd create cephblocktest -s 1024 -p k8s

rbd create k8s/cephblocktest --size 1024 --image-feature layering //這種方式指定了rbd的feature弧圆,防止Linux kernel不支持其他特色而報(bào)錯(cuò)

2、創(chuàng)建測試pod

apiVersion: v1

kind: Pod

metadata:

? name: rbd

spec:

? containers:

? ? - image: nginx

? ? ? name: rbd-rw

? ? ? volumeMounts:

? ? ? - name: rbdpd

? ? ? ? mountPath: /mnt/rbd

? volumes:

? ? - name: rbdpd

? ? ? rbd:

? ? ? ? monitors:

? ? ? ? - '192.168.1.54:6789'

? ? ? ? - '192.168.1.107:6789'

? ? ? ? - '192.168.1.248:6789'

? ? ? ? pool: k8s

? ? ? ? image: cephblocktest

? ? ? ? fsType: ext4

? ? ? ? readOnly: false

? ? ? ? user: admin

? ? ? ? keyring: /etc/ceph/ceph.client.admin.keyring

3笔咽、apply這個(gè)yaml

查看events會(huì)發(fā)現(xiàn)有這樣的報(bào)錯(cuò):

MountVolume.WaitForAttach failed for volume "rbdpd" : rbd: map failed exit status 6, rbd output: rbd: sysfs write failed

RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable k8s/cephblocktest object-map fast-diff deep-flatten".

In some cases useful info is found in syslog - try "dmesg | tail".

原因是因?yàn)檫@個(gè)image的feature部分有Linux kernel不支持的搔预,所以需要去掉多余的feature

rbd? feature disable k8s/cephblocktest? exclusive-lock object-map fast-diff deep-flatten

刪掉pod,再重新apply

不出意外叶组,就可以看到pod的/mnt/rbd掛載到了之前新建的image的塊設(shè)備了拯田,名字叫做/dev/rbd0

4、至于pv和pvc的方式來使用rbd就不開展了甩十,這都是k8s的知識(shí)了船庇,先有pv,再有pvc侣监,rbd塊設(shè)備先在pv里面綁定溢十,pod再去pvc申請pv

5、重點(diǎn)說一下k8s的storageClass結(jié)合rbd塊設(shè)備

secret的值需要通過base64轉(zhuǎn)換:

ceph auth get-key client.admin | base64

#sc的配置

kind: StorageClass

apiVersion: storage.k8s.io/v1

metadata:

? name: ceph-rbd

? annotations:

? ? storageclass.kubernetes.io/is-default-class: "false"

provisioner: kubernetes.io/rbd

reclaimPolicy: Retain

parameters:

? monitors: 192.168.1.54:6789,192.168.1.107:6789,192.168.1.248:6789

? adminId: admin

? adminSecretName: ceph-client-admin-secret

? adminSecretNamespace: default

? pool: k8s

? userId: admin

? userSecretName: ceph-client-admin-secret

? fsType: ext4

? imageFormat: "2"

? imageFeatures: "layering"

#secret的配置

apiVersion: v1

kind: Secret

metadata:

? name: ceph-client-admin-secret

? namespace: default

data:

? key: QVFBTGVySmVTMWcrSmhBQTUvS0p3TlJqcFVhZWdhYytmQko0NXc9PQ==

type: "kubernetes.io/rbd"

#pvc的配置

kind: PersistentVolumeClaim

apiVersion: v1

metadata:

? name: ceph-pvc

? namespace: default

spec:

? storageClassName: ceph-rbd

? accessModes:

? - ReadWriteOnce

? resources:

? ? requests:

? ? ? storage: 1Gi

6达吞、如果集群是通過kubeadm安裝的张弛,那么kube-controller-manager里面是沒有rbd命令的,會(huì)導(dǎo)致pvc在申請sc創(chuàng)建imgae的時(shí)候,報(bào)錯(cuò)沒有rbd命令吞鸭,兩種方式處理:a寺董、修改/etc/kubernetes/manifest/kube-controller-manager.yaml中的image為帶有rbd命令的鏡像,比如:gcr.io/google_containers/hyperkube:v1.16.2刻剥;b遮咖、創(chuàng)建一個(gè)rbd-provisioner的外部配置器,指定sc里面的provisioner為這個(gè)外部配置器

7造虏、由于rbd塊存儲(chǔ)不支持多節(jié)點(diǎn)掛載讀寫御吞,所以當(dāng)你的deployment是多個(gè)replicas時(shí),你就不能使用上面的pvc模式了漓藕,此時(shí)陶珠,你要么使用cephfs,要么使用statefulset給每個(gè)副本一個(gè)pvc

apiVersion: apps/v1

kind: StatefulSet

metadata:

? name: nginx

spec:

? selector:

? ? matchLabels:

? ? ? app: nginx

? serviceName: "nginx"

? replicas: 3

? template:

? ? metadata:

? ? ? labels:

? ? ? ? app: nginx

? ? spec:

? ? ? terminationGracePeriodSeconds: 10

? ? ? containers:

? ? ? - name: nginx

? ? ? ? image: nginx

? ? ? ? volumeMounts:

? ? ? ? - name: www

? ? ? ? ? mountPath: /usr/share/nginx/html

? volumeClaimTemplates:

? - metadata:

? ? ? name: www

? ? spec:

? ? ? accessModes: [ "ReadWriteOnce" ]

? ? ? storageClassName: "ceph-rbd"

? ? ? resources:

? ? ? ? requests:

? ? ? ? ? storage: 1Gi

8享钞、cephfs使用

ceph osd pool create cephfs_data 64

ceph osd pool create cephfs_metadata 64

ceph fs new cephfs cephfs_metadata cephfs_data? //創(chuàng)建一個(gè)文件系統(tǒng)

如果你在這里就想給storageClass使用cephfs文件系統(tǒng)的話揍诽,那么pod掛載的就是文件的根目錄,因此在這里建議劃分多個(gè)有目的性的目錄出來栗竖,分別賦予不同的應(yīng)用

mount -t ceph 192.168.1.54,192.168.1.107,192.168.1.248:/ /mnt/cephfs -o name=admin,secret=AQALerJeS1g+JhAA5/KJwNRjp...... //密鑰省略了一部分

ceph-fuse -r / /mnt/cephfs/ --name client.admin //mount無法掛載就使用ceph-fuse

掛載文件系統(tǒng)之后暑脆,創(chuàng)建多個(gè)子目錄:

mkdir /mnt/cephfs/k8s_frontend

mkdir /mnt/cephfs/k8s_backend

setfattr -n ceph.quota.max_bytes -v 100000000000 /mnt/cephfs/k8s_frontend //100GB的大小,表示這個(gè)文件系統(tǒng)下的前端目錄最大為100GB

setfattr -n ceph.quota.max_bytes -v 500000000000 /mnt/cephfs/k8s_backend //500GB的大小

因?yàn)閗8s還不支持cephfs作為internal-provisioner狐肢,所以需要使用k8s的external-provisioner來實(shí)現(xiàn)cephfs的storageClass的配置和操作

https://github.com/kubernetes-incubator/external-storage/tree/master/ceph/cephfs

但是添吗,這個(gè)還不是很完美,比如:pod顯示的掛載大小是你cephfs目錄的總大小份名,而不是pvc申明的大懈省(cephfs的目錄quota大小不受影響),這個(gè)有大神給出了解決方案同窘,但是官方還沒有給出支持,所以暫時(shí)不去嘗試了部脚。

總結(jié):以上就是對ceph存儲(chǔ)(塊存儲(chǔ)rbd和文件系統(tǒng)存儲(chǔ)cephfs)作為kubernetes底層storageClass的應(yīng)用部署和實(shí)踐想邦,希望能對大家有所幫助。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末委刘,一起剝皮案震驚了整個(gè)濱河市丧没,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锡移,老刑警劉巖呕童,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異淆珊,居然都是意外死亡夺饲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來往声,“玉大人擂找,你說我怎么就攤上這事『葡” “怎么了贯涎?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長慢洋。 經(jīng)常有香客問我塘雳,道長,這世上最難降的妖魔是什么普筹? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任败明,我火速辦了婚禮,結(jié)果婚禮上斑芜,老公的妹妹穿的比我還像新娘肩刃。我一直安慰自己,他們只是感情好杏头,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布盈包。 她就那樣靜靜地躺著,像睡著了一般醇王。 火紅的嫁衣襯著肌膚如雪呢燥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天寓娩,我揣著相機(jī)與錄音叛氨,去河邊找鬼。 笑死棘伴,一個(gè)胖子當(dāng)著我的面吹牛寞埠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播焊夸,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼仁连,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了阱穗?” 一聲冷哼從身側(cè)響起饭冬,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎揪阶,沒想到半個(gè)月后昌抠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鲁僚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年炊苫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了裁厅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡劝评,死狀恐怖姐直,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蒋畜,我是刑警寧澤声畏,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站姻成,受9級特大地震影響插龄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜科展,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一均牢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧才睹,春花似錦徘跪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坞琴,卻和暖如春哨查,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剧辐。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工寒亥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荧关。 一個(gè)月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓溉奕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親忍啤。 傳聞我的和親對象是個(gè)殘疾皇子加勤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349