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 引用这个卷,那么就不会进行文件系统扩展。

 

运维虐我千万遍,我对运维如初恋。
posted @ 2019-04-04 16:45  凯文队长  阅读(6561)  评论(0编辑  收藏  举报