一、介绍
- 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
-
文件中有几个地方要注意:
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 引用这个卷,那么就不会进行文件系统扩展。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。