摘要:參考官方文檔進行操作本文假設環境正常運行,并且已經安裝。只能以單副本運行部署運行命令來安裝等待一段時間執行完成后,通過如下命令確定集群是否成功運行檢查的狀態檢查集群狀態至此,集群部署完成。
參考 ceph 官方文檔進行操作: http://docs.ceph.com/docs/mas...
本文假設kubernetes 環境正常運行,并且 host 已經安裝 helm client。
通過 helm 來部署 ceph 用到了社區的 ceph-helm 項目( https://github.com/ceph/ceph-... ),這是一個 helm 的 chart,本文使用的master 分支,最新commit id 為743a7441ba4361866a6e017b4f8fa5c15e34e640。
# 克隆 ceph-helm 代碼到本地 git clone https://github.com/ceph/ceph-helm/ # 如果環境中已經存在tiller 服務,則不需要執行下面這條命令 helm init # ceph-helm 默認使用本地 helm-repo 的存儲 charts,要在本地啟動 helm repo 服務器,運行: helm serve & helm repo add my_local http://localhost:8879/charts # 切換到 ceph-helm/ceph 目錄并執行編譯 cd ceps-helm/ceph make
建議提前準備好需要的鏡像:
docker pull docker.io/ceph/daemon:tag-build-master-luminous-ubuntu-16.04 docker pull docker.io/kolla/ubuntu-source-kubernetes-entrypoint:4.0.0 docker pull docker.io/port/ceph-config-helper:v1.7.5 docker pull quay.io/external_storage/rbd-provisioner:v0.1.1 docker pull docker.io/alpine:latest
具體部署步驟如下
1. 創建 ceph-overrides.yaml 文件到此初步準備工作完成,為了執行 helm 安裝,需要提供覆蓋 values.yaml 中默認值的配置項,通常命名為ceph-overrides.yaml,其位置可以任意。
由于我用的是 openstack 上虛擬機,網段為 10.24.0.0/24,并且虛擬機 attach 一塊 cinder 創建的云硬盤,盤名為 /dev/vdb,那么就有了下面的配置文件。
network: public: 10.24.0.0/24 cluster: 10.24.0.0/24 osd_devices: - name: dev-vdb device: /dev/vdb zap: "1" storageclass: name: ceph-rbd pool: rbd user_id: admin
注意,這里的 storageclass中的user_id 如果不是 admin,則需要在 ceph 集群手動創建并在 kubernetes 中創建對應的 secret。
2. 在 kubernetes 環境提供權限和標簽首先,ceph-helm 會把ceph 集群安裝在 ceph 命名空間下,需要創建之。
其次,由于kubernetes >= 1.6使用了 RBAC 的 admission controller,ceph-helm 需要為每個組件提供 RBAC 角色和權限。
最后,由于安裝 ceph 組件的 ceph-mon 與ceph-osd-
# 創建 ceph namespace kubectl create namespace ceph # 創建相關 rbac kubectl create -f ~/ceph-helm/ceph/rbac.yaml # 為節點打標簽 kubectl label node node-1 ceph-mon=enabled kubectl label node node-2 ceph-mon=enabled kubectl label node node-3 ceph-mon=enabled kubectl label node node-1 ceph-mgr=enabled kubectl label node node-1 ceph-osd-device-dev-vdb=enabled ceph-osd=enabled kubectl label node node-2 ceph-osd-device-dev-vdb=enabled ceph-osd=enabled kubectl label node node-3 ceph-osd-device-dev-vdb=enabled ceph-osd=enabled
注意 :
1) 這里的 ceph-osd-dev-vdb 這個label 是根據 ceps-overrides.yaml中的 osd_devices 的名稱創建,如果每個節點多個 osd 盤,那么需要打相應個數的 labels。 2) ceph-mgr 只能以單副本運行3. ceph 部署
運行 helm 命令來安裝 Ceph:
cd ~/ceph-helm helm install --name=ceph ceph/ceph-0.1.0.tgz --namespace=ceph -f ceph-overrides.yaml
等待一段時間執行完成后,通過如下命令確定 ceph 集群是否成功運行:
# 檢查 kubernetes 的 pod 狀態 ~ # kubectl get po -n ceph NAME READY STATUS RESTARTS AGE ceph-mds-5696f9df5d-8fc7l 0/1 Pending 0 3h ceph-mgr-8656b978df-kcb6f 1/1 Running 0 3h ceph-mon-9xqms 3/3 Running 0 3h ceph-mon-check-7d49bd686c-pkk7w 1/1 Running 0 3h ceph-mon-tw5n5 3/3 Running 0 3h ceph-mon-x25rv 3/3 Running 0 3h ceph-osd-dev-vdb-9t8fh 1/1 Running 0 2h ceph-osd-dev-vdb-fgl8w 1/1 Running 0 2h ceph-osd-dev-vdb-sssqq 1/1 Running 0 2h ceph-rbd-provisioner-5544dcbcf5-97nxn 1/1 Running 0 3h ceph-rbd-provisioner-5544dcbcf5-nfkhw 1/1 Running 0 3h ceph-rgw-65b4bd8cc5-ml7gk 0/1 Pending 0 3h # 檢查 ceph 集群狀態 ~ # kubectl exec -it ceph-mon-9xqms -n ceph -c ceph-mon -- ceph -s cluster: id: 726cc770-3daa-4792-8cd9-b100aea87711 health: HEALTH_OK services: mon: 3 daemons, quorum host-10-24-0-14,host-10-24-0-15,host-10-24-0-16 mgr: host-10-24-0-14(active) osd: 3 osds: 3 up, 3 in data: pools: 1 pools, 128 pgs objects: 3 objects, 16 bytes usage: 324 MB used, 104 GB / 104 GB avail pgs: 128 active+clean
至此,ceph 集群部署完成。 但是 創建的 storageclass 中的 secret 為空,需要更新 key:
# 獲取 ceph 集群的 client-admin-keyring kubectl exec -it ceph-mon-9xqms -n ceph -c ceph-mon -- grep key /etc/ceph/ceph.client.admin.keyring |awk "{printf "%s", $NF}’|base64 # 將上面輸出的編碼的 keyring 填入到 storageclass使用的 secret: pvc-ceph-client-key中, 替換 null 為以上值 kubectl edit secret pvc-ceph-client-key -n ceph # 創建并初始化 rbd 池 kubectl exec -it ceph-mon-9xqms -n ceph -c ceph-mon -- ceph osd pool create rbd 128 kubectl exec -it ceph-mon-9xqms -n ceph -c ceph-mon -- rbd pool init rbd 最后, 驗證通過 storageclass 動態分配 rbd image。 ~/template/ceph_connect # cat test-pvc.yaml kind: PersistentVolumeClaim apiVersion: v1 metadata: name: ceph-pvc-2 spec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi storageClassName: ceph-rbd ~/template/ceph_connect # kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ceph-pvc Bound pvc-a56fd3d2-9157-11e8-bd1d-fa163eaae838 2Gi RWO ceph-pool 1h ceph-pvc-2 Bound pvc-b28baac0-9161-11e8-bd1d-fa163eaae838 2Gi RWO ceph-rbd 7s ~/template/ceph_connect # kubectl exec -it ceph-mon-9xqms -n ceph -c ceph-mon -- rbd ls kubernetes-dynamic-pvc-a57200fe-9157-11e8-9008-fa163eaae838 kubernetes-dynamic-pvc-b2931fd1-9161-11e8-9ac7-0a580ae9410b注意事項: 問題1
遇到了一個問題,重新安裝的時候 osd 會init/Error,是因為osd 盤頭部數據沒有被清理,導致osd的 initContainer 中的prepare-old-pod 這個 container 腳本執行錯誤,內容為:
雖然已經在 ceph-overriders.yaml 的 osd-devices 中 設置了 zap=“1”,但可能是代碼邏輯有問題,導致并沒有清理,需要手動清理,步驟為:
# 查看/dev/vdb 設備狀態 ~/template/ceph_connect # lsblk /dev/vdb NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vdb 252:16 0 40G 0 disk |-vdb1 252:17 0 35G 0 part `-vdb2 252:18 0 5G 0 part # 通過 dd 向清空盤頭部的110M覆蓋分區信息 dd if=/dev/zero of=/dev/vdb1 bs=1M count=110 oflag=sync dd if=/dev/zero of=/dev/vdb2 bs=1M count=110 oflag=sync # 通過 parted 刪除分區 parted /dev/vdb rm 1 parted /dev/vdb rm 2問題2
storageclass 方式創建 pod 掛在 volume,總是報錯
timeout expired waiting for volumes to attach/mount for pod : Error syncing pod 096ac42b-919a-11e8-bd1d-fa163eaae838 ("mypod_ceph(096ac42b-919a-11e8-bd1d-fa163eaae838)"), skipping: timeout expired waiting for volumes to attach/mount for pod "ceph"/"mypod". list of unattached/unmounted volumes=[vol1]
具體的創建步驟是:
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: ceph-pvc namespace: ceph spec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi storageClassName: ceph-rbd --- kind: Pod apiVersion: v1 metadata: name: mypod namespace: ceph spec: containers: - name: nginx image: nginx command: - sleep - "3600" volumeMounts: - mountPath: "/mnt/rbd" name: vol1 volumes: - name: vol1 persistentVolumeClaim: claimName: ceph-pvc
這個問題在網上目前沒有解決的明確說法,由于看 log 沒有明顯報錯,pvc 和 pv 正常創建但是掛不上去,考慮可能是 kubernetes 這邊調用 ceph 有問題,就將集群內所有 host 的 ceph-common 包升級到對應的版本,解決了這個問題。如果遇到這個問題,不妨一試。我 host 的 ceph-common是之前對接 j 版 ceph 時安裝, 現在安裝的 l 版。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32684.html
摘要:充當在的業務流程層,將和流程部署為副本集。來自的文件將存儲軟件轉變為自我管理自我擴展和自我修復的存儲服務。由于請求使用文件系統格式化的卷,因此我需要在所有節點上安裝工具。如果沒有指定特定的存儲類,我安裝的任何應用程序都將使用進行數據存儲。 作者:Earl C. Ruby III showImg(https://segmentfault.com/img/bVbljHL?w=300&h=1...
摘要:充當在的業務流程層,將和流程部署為副本集。來自的文件將存儲軟件轉變為自我管理自我擴展和自我修復的存儲服務。由于請求使用文件系統格式化的卷,因此我需要在所有節點上安裝工具。如果沒有指定特定的存儲類,我安裝的任何應用程序都將使用進行數據存儲。 作者:Earl C. Ruby III showImg(https://segmentfault.com/img/bVbljHL?w=300&h=1...
摘要:容器云將支持應用的一鍵式部署交付,提供負載均衡,私有域名綁定,性能監控等應用生命周期管理服務。本容器云平臺,對接持續集成發布系統。 前言 在移動互聯網時代,新的技術需要新技術支持環境、新的軟件交付流程和IT架構,從而實現架構平臺化,交付持續化,業務服務化。容器將成為新一代應用的標準交付件,容器云將幫助企業用戶構建研發流程和云平臺基礎設施。縮短應用向云端交付的周期,降低運營門檻。加速向互...
摘要:容器云將支持應用的一鍵式部署交付,提供負載均衡,私有域名綁定,性能監控等應用生命周期管理服務。本容器云平臺,對接持續集成發布系統。 前言 在移動互聯網時代,新的技術需要新技術支持環境、新的軟件交付流程和IT架構,從而實現架構平臺化,交付持續化,業務服務化。容器將成為新一代應用的標準交付件,容器云將幫助企業用戶構建研發流程和云平臺基礎設施。縮短應用向云端交付的周期,降低運營門檻。加速向互...
閱讀 2947·2023-04-25 22:16
閱讀 2093·2021-10-11 11:11
閱讀 3248·2019-08-29 13:26
閱讀 593·2019-08-29 12:32
閱讀 3410·2019-08-26 11:49
閱讀 2988·2019-08-26 10:30
閱讀 1939·2019-08-23 17:59
閱讀 1507·2019-08-23 17:57