k8s搭建rook-ceph


一、介紹

  • Rook官網:https://rook.io
  • Rook是雲原生計算基金會(CNCF)的孵化級項目.
  • Rook是Kubernetes的開源雲本地存儲協調器,為各種存儲解決方案提供平台,框架和支持,以便與雲原生環境本地集成。
  • 至於CEPH,官網在這:https://ceph.com/

二、環境

docker1.13.1

k8s:1.13.4

kubeadm安裝

  集群成員:

    master單機

 

三、安裝

3.1 環境准備

所有節點開啟ip_forward
cat <<EOF >  /etc/sysctl.d/ceph.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

3.2部署Rook Operator

#無另外說明,全部操作都在master操作

cd $HOME
git clone https://github.com/rook/rook.git

cd rook
cd cluster/examples/kubernetes/ceph
kubectl apply -f operator.yaml
#執行apply之后稍等一會。 #operator會在集群內的每個主機創建兩個pod:rook-discover,rook-ceph-agent

3.3給節點打標簽

運行ceph-mon的節點打上:ceph-mon=enabled
  kubectl label nodes {kube-node1,kube-node2,kube-node3} ceph-mon=enabled
運行ceph-osd的節點,也就是存儲節點,打上:ceph-osd=enabled
  kubectl label nodes {kube-node1,kube-node2,kube-node3} ceph-osd=enabled
運行ceph-mgr的節點,打上:ceph-mgr=enabled
  #mgr只能支持一個節點運行,這是ceph跑k8s里的局限
  kubectl label nodes kube-node1 ceph-mgr=enabled

3.3配置cluster.yaml文件

  • 官方配置文件詳解:https://rook.io/docs/rook/v0.8/ceph-cluster-crd.html

  • 文件中有幾個地方要注意:

    • dataDirHostPath: 這個路徑是會在宿主機上生成的,保存的是ceph的相關的配置文件,再重新生成集群的時候要確保這個目錄為空,否則mon會無法啟動
    • useAllDevices: 使用所有的設備,建議為false,否則會把宿主機所有可用的磁盤都干掉
    • useAllNodes:使用所有的node節點,建議為false,肯定不會用k8s集群內的所有node來搭建ceph的
    • databaseSizeMB和journalSizeMB:當磁盤大於100G的時候,就注釋這倆項就行了
    • 參考https://blog.51cto.com/bigboss/2320016

3.4部署cluster

kubectl apply -f cluster.yaml

四、配置ceph dashboard

  • 創建個nodeport類型的service以便集群外部訪問
    kubectl apply -f dashboard-external-https.yaml

    執行后,會隨機使用nodeport端口

  • # 查看一下nodeport在哪個端口 kubectl -n rook-ceph get service
  • 查看登錄密碼
    #查看dashboard密碼,用戶為admin
    kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
  • 打開瀏覽器輸入任意一個Node的IP+nodeport端口

五、配置ceph為storageclass

  5.1 修改storageclass.yaml

apiVersion: ceph.rook.io/v1beta1
kind: Pool
metadata:
  #這個name就是創建成ceph pool之后的pool名字
  name: replicapool
  namespace: rook-ceph
spec:
  replicated:
    size: 1
  # size 池中數據的副本數,1就是不保存任何副本
  failureDomain: osd
  #  failureDomain:數據塊的故障域,
  #  值為host時,每個數據塊將放置在不同的主機上
  #  值為osd時,每個數據塊將放置在不同的osd上
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: ceph
   # StorageClass的名字,pvc調用時填的名字
provisioner: ceph.rook.io/block
parameters:
  pool: replicapool
  fstype: xfs
# 設置回收策略默認為:Retain
reclaimPolicy: Retain
#添加動態擴容
allowVolumeExpansion: true
kubectl apply -f storageclass.yaml

創建個nginx pod嘗試掛載

cat << EOF > nginx.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  storageClassName: ceph

---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports: 
  - port: 80
    name: nginx-port
    targetPort: 80
    protocol: TCP

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /html
          name: http-file
      volumes:
      - name: http-file
        persistentVolumeClaim:
          claimName: nginx-pvc
EOF

kubectl apply -f nginx.yaml

 

六、已經創建的pvc,如何擴容

 6.1首先storageclass開啟

  allowVolumeExpansion: true

6.2修改pvc的容量,(ps:不能比之前小)

6.3重啟pod

 

如何在線文件系統擴展?,無需重啟呢:

Kubernetes v1.11 還引入了一個 Alpha 功能,叫做在線文件系統擴展。這個功能可以對一個正在被 Pod 使用的卷進行文件系統的擴展。這個功能還處於 Alpha 階段,
因此需要通過 Feature gate 啟用 ExpandInUsePersistentVolumes。
目前支持的有 GCE-PD、AWS-EBS、Cinder 以及 Ceph RBD。當激活這個功能后,引用被擴展的卷的 Pod 無需重啟。文件系統會隨着卷擴展的步驟進行擴展。
文件系統的擴展只有在 Pod 引用被擴展的卷的時候才會發生,所以如果沒有 Pod 引用這個卷,那么就不會進行文件系統擴展。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM