欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

k8s使用rbd作為存儲(chǔ)的操作方法

 更新時(shí)間:2024年06月19日 15:37:02   作者:FuShudi  
這篇文章主要介紹了k8s使用rbd作為存儲(chǔ)的操作方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

k8s使用rbd作為存儲(chǔ)

如果需要使用rbd作為后端存儲(chǔ)的話(huà),需要先安裝ceph-common

1. ceph集群創(chuàng)建rbd

需要提前在ceph集群上創(chuàng)建pool,然后創(chuàng)建image

[root@ceph01 ~]# ceph osd pool create pool01
[root@ceph01 ~]# ceph osd pool application enable pool01 rbd
[root@ceph01 ~]# rbd pool init pool01
[root@ceph01 ~]# rbd create pool01/test --size 10G --image-format 2 --image-feature layerin
[root@ceph01 ~]# rbd info pool01/test

2. k8s編寫(xiě)yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: rbd
  name: rbd
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rbd
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: rbd
    spec:
      volumes:
      - name: test
        rbd:
          fsType: xfs
          keyring: /root/admin.keyring
          monitors:
          - 192.168.200.230:6789
          pool: pool01
          image: test 
          user: admin
          readOnly: false
      containers:
      - image: nginx
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - mountPath: /usr/share/nginx/html
          name: test
        name: nginx
        resources: {}
status: {}
[root@master ~]# kubectl get pods
NAME                         READY   STATUS              RESTARTS        AGE
rbd-888b8b747-n56wr          1/1     Running   0               26m

這個(gè)時(shí)候k8s就使用了rbd作為存儲(chǔ)

如果這個(gè)地方一直顯示ContainerCreating的話(huà),可能是沒(méi)有安裝ceph-common,也可能是你的keyring或者ceph.conf沒(méi)有發(fā)放到node節(jié)點(diǎn),具體可以使用describe來(lái)看

2.1 進(jìn)入容器查看掛載

[root@master euler]# kubectl exec -it rbd-5db4759c-nj2b4 -- bash
root@rbd-5db4759c-nj2b4:/# df -hT |grep /dev/rbd0
/dev/rbd0      xfs       10G  105M  9.9G   2% /usr/share/nginx/html

可以看到,/dev/rbd0已經(jīng)被格式化成xfs并且掛載到了/usr/share/nginx/html

2.2 進(jìn)入容器修改內(nèi)容

root@rbd-5db4759c-nj2b4:/usr/share/nginx# cd html/
root@rbd-5db4759c-nj2b4:/usr/share/nginx/html# ls
root@rbd-5db4759c-nj2b4:/usr/share/nginx/html# echo 123 > index.html
root@rbd-5db4759c-nj2b4:/usr/share/nginx/html# chmod 644 index.html
root@rbd-5db4759c-nj2b4:/usr/share/nginx/html# exit
[root@master euler]# kubectl get pods -o wide
NAME                 READY   STATUS    RESTARTS   AGE    IP                NODE    NOMINATED NODE   READINESS GATES
rbd-5db4759c-nj2b4   1/1     Running   0          8m5s   192.168.166.131   node1   <none>           <none>

訪(fǎng)問(wèn)容器查看內(nèi)容

[root@master euler]# curl 192.168.166.131
123

內(nèi)容可以正常被訪(fǎng)問(wèn)到,我們將容器刪除,然后讓他自己重新啟動(dòng)一個(gè)來(lái)看看文件是否還存在

[root@master euler]# kubectl delete pods rbd-5db4759c-nj2b4 
pod "rbd-5db4759c-nj2b4" deleted
[root@master euler]# kubectl get pods
NAME                 READY   STATUS              RESTARTS   AGE
rbd-5db4759c-v9cgm   0/1     ContainerCreating   0          2s
[root@master euler]# kubectl get pods -owide
NAME                 READY   STATUS    RESTARTS   AGE   IP                NODE    NOMINATED NODE   READINESS GATES
rbd-5db4759c-v9cgm   1/1     Running   0          40s   192.168.166.132   node1   <none>           <none>
[root@master euler]# curl 192.168.166.132
123

可以看到,也是沒(méi)有問(wèn)題的,這樣k8s就正常的使用了rbd存儲(chǔ)

有一個(gè)問(wèn)題,那就是開(kāi)發(fā)人員他們并不是很了解yaml文件里面改怎么去寫(xiě)掛載,每種類(lèi)型的存儲(chǔ)都是不同的寫(xiě)法,那有沒(méi)有一種方式屏蔽底層的寫(xiě)法,直接告訴k8s集群我想要一個(gè)什么樣的存儲(chǔ)呢?

有的,那就是pv

3. pv使用rbd

[root@master euler]# vim pvc.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Block
  resources:
    requests:
      storage: 8Gi

這里的pvc使用的是塊設(shè)備,8個(gè)G,目前還沒(méi)有這個(gè)pv可以給到他

具體的這里不細(xì)說(shuō),CKA里面有寫(xiě)

注意,這里是pvc,并不是pv,pvc就是開(kāi)發(fā)人員定義想要的存儲(chǔ)類(lèi)型,大小,然后我可以根據(jù)你的pvc去給你創(chuàng)建pv,或者提前創(chuàng)建好pv你直接申領(lǐng)

[root@master euler]# vim pv.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: rbdpv
spec:
  capacity:
    storage: 8Gi
  volumeMode: Block
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  mountOptions:
    - hard
    - nfsvers=4.1
  rbd:
    fsType: xfs
    image: test
    keyring: /etc/ceph/ceph.client.admin.keyring
    monitors:
    - 172.16.1.33
    pool: rbd
    readOnly: false
    user: admin

3.1 查看pvc狀態(tài)

[root@master euler]# kubectl get pvc
NAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
myclaim   Bound    rbdpv    8Gi        RWO                           11s

這個(gè)時(shí)候pv和就和pvc綁定上了,一個(gè)pv只能綁定一個(gè)pvc,同樣,一個(gè)pvc也只能綁定一個(gè)pv

3.2 使用pvc

[root@master euler]# vim pod-pvc.yaml 
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: pvc-pod
  name: pvc-pod
spec:
  volumes:
  - name: rbd
    persistentVolumeClaim:
      claimName: myclaim
      readOnly: false
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: pvc-pod
    volumeDevices:             # 因?yàn)槭鞘褂玫膲K設(shè)備,所以這里是volumeDevices
    - devicePath: /dev/rbd0
      name: rbd
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
~          
[root@master euler]# kubectl get pods
NAME                 READY   STATUS    RESTARTS   AGE
pvc-pod              1/1     Running   0          2m5s
rbd-5db4759c-v9cgm   1/1     Running   0          39m

3.3 進(jìn)入容器查看塊設(shè)備

root@pvc-pod:/# ls /dev/rbd0
/dev/rbd0

可以看到,現(xiàn)在rbd0已經(jīng)存在于容器內(nèi)部了

這樣做我們每次創(chuàng)建pvc都需要?jiǎng)?chuàng)建對(duì)應(yīng)的pv,我們可以使用動(dòng)態(tài)制備

4. 動(dòng)態(tài)制備

使用storageClass,但是目前歐拉使用的k8s太老了,所以需要下載歐拉fork的一個(gè)storageClass

[root@master ~]# git clone https://gitee.com/yftyxa/ceph-csi.git
[root@master ~]# cd ceph-csi/deploy/
[root@master deploy]# ls
ceph-conf.yaml  csi-config-map-sample.yaml  rbd
cephcsi         Makefile                    scc.yaml
cephfs          nfs                         service-monitor.yaml

4.1 動(dòng)態(tài)制備rbd

我們需要修改/root/ceph-csi/deploy/rbd/kubernetes/csi-config-map.yaml

# 先創(chuàng)建一個(gè)csi命名空間
[root@master ~]# kubectl create ns csi

修改文件內(nèi)容

[root@master kubernetes]# vim csi-rbdplugin-provisioner.yaml
# 將第63行的內(nèi)容改為false
63             - "--extra-create-metadata=false"
# 修改第二個(gè)文件
[root@master kubernetes]# vim csi-config-map.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: "ceph-csi-config"
data:
  config.json: |-
    [
    {
      "clusterID": "c1f213ae-2de3-11ef-ae15-00163e179ce3",
      "monitors": ["172.16.1.33","172.16.1.32","172.16.1.31"]
    }
]
  • 這里面的clusterID可以通過(guò)ceph -s去查看

修改第三個(gè)文件

[root@master kubernetes]# vim csidriver.yaml 
---
apiVersion: storage.k8s.io/v1
kind: CSIDriver
metadata:
  name: "rbd.csi.ceph.com"
spec:
  attachRequired: true
  podInfoOnMount: false
  # seLinuxMount: true       # 將這一行注釋
  fsGroupPolicy: File

自行編寫(xiě)一個(gè)文件

[root@master kubernetes]# vim csi-kms-config-map.yaml 
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: ceph-csi-encryption-kms-config
data:
  config-json: |-
    {}

4.2 獲取admin的key

[root@ceph001 ~]# cat /etc/ceph/ceph.client.admin.keyring 
[client.admin]
	key = AQC4QnJmng4HIhAA42s27yOflqOBNtEWDgEmkg==
	caps mds = "allow *"
	caps mgr = "allow *"
	caps mon = "allow *"
	caps osd = "allow *"
  • AQC4QnJmng4HIhAA42s27yOflqOBNtEWDgEmkg== 只要這部分

然后自行編寫(xiě)一個(gè)csi-secret.yaml的文件

[root@master kubernetes]# vim csi-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: csi-secret
stringData:
  userID: admin
  userKey: AQC4QnJmng4HIhAA42s27yOflqOBNtEWDgEmkg==
  adminID: admin
  adminKey: AQC4QnJmng4HIhAA42s27yOflqOBNtEWDgEmkg==                     
[root@master kubernetes]# kubectl apply -f csi-secret.yaml -n csi
secret/csi-secret created
[root@master kubernetes]# cd ../../
[root@master deploy]# kubectl apply -f ceph-conf.yaml -n csi
configmap/ceph-config created
[root@master deploy]# cd -
/root/ceph-csi/deploy/rbd/kubernetes

4.3替換所有的namespace

[root@master kubernetes]# sed -i "s/namespace: default/namespace: csi/g" 
*.yaml

4.4 部署

[root@master kubernetes]# [root@master kubernetes]# kubectl apply -f . -n csi

注意:如果你的worker節(jié)點(diǎn)數(shù)量少于3個(gè)的話(huà),是需要將 csi-rbdplugin-provisioner.yaml這個(gè)文件里面的replicas改小一點(diǎn)的。

[root@master kubernetes]# kubectl get pods -n csi
NAME                                         READY   STATUS    RESTARTS        AGE
csi-rbdplugin-cv455                          3/3     Running   1 (2m14s ago)   2m46s
csi-rbdplugin-pf5ld                          3/3     Running   0               4m36s
csi-rbdplugin-provisioner-6846c4df5f-dvqqk   7/7     Running   0               4m36s
csi-rbdplugin-provisioner-6846c4df5f-nmcxf   7/7     Running   1 (2m11s ago)   4m36s

5.使用動(dòng)態(tài)制備

5.1 創(chuàng)建storageClass

[root@master rbd]# /root/ceph-csi/examples/rbd
[root@master rbd]# grep -Ev "\s*#|^$" storageclass.yaml 
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: csi-rbd-sc
provisioner: rbd.csi.ceph.com
parameters:
   clusterID: <cluster-id>
   pool: <rbd-pool-name>
   imageFeatures: "layering"
   csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
   csi.storage.k8s.io/provisioner-secret-namespace: default
   csi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secret
   csi.storage.k8s.io/controller-expand-secret-namespace: default
   csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
   csi.storage.k8s.io/node-stage-secret-namespace: default
   csi.storage.k8s.io/fstype: ext4
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
   - discard

將這里的內(nèi)容復(fù)制出來(lái)

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: csi-rbd-sc
provisioner: rbd.csi.ceph.com
parameters:
   clusterID: c1f213ae-2de3-11ef-ae15-00163e179ce3
   pool: rbd
   imageFeatures: "layering"
   csi.storage.k8s.io/provisioner-secret-name: csi-secret
   csi.storage.k8s.io/provisioner-secret-namespace: csi
   csi.storage.k8s.io/controller-expand-secret-name: csi-secret
   csi.storage.k8s.io/controller-expand-secret-namespace: csi
   csi.storage.k8s.io/node-stage-secret-name: csi-secret
   csi.storage.k8s.io/node-stage-secret-namespace: csi
   csi.storage.k8s.io/fstype: ext4
reclaimPolicy: Retain
allowVolumeExpansion: true
mountOptions:
   - discard

修改成這個(gè)樣子,這里面的clusterID改成自己的,secret-name自己查一下

5.2 創(chuàng)建pvc

[root@master euler]# cp pvc.yaml sc-pvc.yaml
[root@master euler]# vim sc-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sc-pvc
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Block
  storageClassName: "csi-rbd-sc"
  resources:
    requests:
      storage: 15Gi
 
  • storageClassName 可以使用 kubectl get sc查看

現(xiàn)在我們只需要?jiǎng)?chuàng)建pvc,他就自己可以創(chuàng)建pv了

[root@master euler]# kubectl apply -f sc-pvc.yaml 
persistentvolumeclaim/sc-pvc created
[root@master euler]# kubectl get pvc
NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
myclaim   Bound    rbdpv                                      8Gi        RWO                           111m
sc-pvc    Bound    pvc-dfe3497f-9ed7-4961-9265-9e7242073c28   15Gi       RWO            csi-rbd-sc     2s

回到ceph集群查看rbd

[root@ceph001 ~]# rbd ls
csi-vol-56e37046-b9d7-4ef1-a534-970a766744f3
test
[root@ceph001 ~]# rbd info csi-vol-56e37046-b9d7-4ef1-a534-970a766744f3
rbd image 'csi-vol-56e37046-b9d7-4ef1-a534-970a766744f3':
	size 15 GiB in 3840 objects
	order 22 (4 MiB objects)
	snapshot_count: 0
	id: 38019ee708da
	block_name_prefix: rbd_data.38019ee708da
	format: 2
	features: layering
	op_features: 
	flags: 
	create_timestamp: Wed Jun 19 04:55:35 2024
	access_timestamp: Wed Jun 19 04:55:35 2024
	modify_timestamp: Wed Jun 19 04:55:35 2024

5.3 將sc設(shè)為默認(rèn)

如果不設(shè)置為默認(rèn)的話(huà),每次寫(xiě)yaml文件都需要指定sc,將sc設(shè)為默認(rèn)的話(huà)就不用每次都指定了

[root@master euler]# kubectl edit sc csi-rbd-sc
# 在注釋里面寫(xiě)入這一行
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"

5.4 測(cè)試默認(rèn)pvc

[root@master euler]# kubectl get sc
NAME                   PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
csi-rbd-sc (default)   rbd.csi.ceph.com   Retain          Immediate           true                   29m

再去查看sc就會(huì)有一個(gè)default的顯示

[root@master euler]# cp sc-pvc.yaml sc-pvc1.yaml 
[root@master euler]# cat sc-pvc1.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sc-pvc1
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Block
  resources:
    requests:
      storage: 20Gi

這個(gè)文件里面是沒(méi)有指定storageClassName的

[root@master euler]# kubectl apply -f sc-pvc1.yaml 
persistentvolumeclaim/sc-pvc1 created
[root@master euler]# kubectl get pvc
NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
myclaim   Bound    rbdpv                                      8Gi        RWO                           138m
sc-pvc    Bound    pvc-dfe3497f-9ed7-4961-9265-9e7242073c28   15Gi       RWO            csi-rbd-sc     27m
sc-pvc1   Bound    pvc-167cf73b-4983-4c28-aa98-bb65bb966649   20Gi       RWO            csi-rbd-sc     6s

這樣就好了

到此這篇關(guān)于k8s使用rbd作為存儲(chǔ)的文章就介紹到這了,更多相關(guān)k8s使用rbd內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Kubernetes k8s configmap 容器技術(shù)解析

    Kubernetes k8s configmap 容器技術(shù)解析

    這篇文章主要為大家介紹了k8s configmap 容器技術(shù)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • K8s學(xué)習(xí)之Pod的定義及詳細(xì)資源調(diào)用案例

    K8s學(xué)習(xí)之Pod的定義及詳細(xì)資源調(diào)用案例

    Kubernetes將所有內(nèi)容抽象為資源,通過(guò)操作資源管理集群,核心單元是Pod,通過(guò)控制器管理Pod,資源管理分為命令式對(duì)象管理、命令式對(duì)象配置和聲明式對(duì)象配置,各有適用場(chǎng)景,需要的朋友可以參考下
    2024-09-09
  • k8s安裝CICD?devtron過(guò)程詳解

    k8s安裝CICD?devtron過(guò)程詳解

    這篇文章主要為大家介紹了k8s安裝CICD?devtron過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 解決k8s namespace 一直處于 Terminating 狀態(tài)的問(wèn)題

    解決k8s namespace 一直處于 Terminating 狀態(tài)的問(wèn)題

    這篇文章主要介紹了k8s namespace 一直處于 Terminating 狀態(tài)的解決方法,以下的 tool 為 Terminating 狀態(tài)的 namespace,下面相關(guān)的一些操作記得將 tool 修改成自己的 namespace 名稱(chēng),需要的朋友可以參考下
    2022-10-10
  • k8s整合istio配置gateway入口、配置集群內(nèi)部服務(wù)調(diào)用管理(最新推薦)

    k8s整合istio配置gateway入口、配置集群內(nèi)部服務(wù)調(diào)用管理(最新推薦)

    這篇文章主要介紹了k8s整合istio配置gateway入口、配置集群內(nèi)部服務(wù)調(diào)用管理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • 云原生技術(shù)持久化存儲(chǔ)PV與PVC

    云原生技術(shù)持久化存儲(chǔ)PV與PVC

    這篇文章主要介紹了云原生技術(shù)持久化存儲(chǔ)PV與PVC
    2022-03-03
  • K8S之StatefulSet有狀態(tài)服務(wù)詳解

    K8S之StatefulSet有狀態(tài)服務(wù)詳解

    本文主要介紹了K8S之StatefulSet有狀態(tài)服務(wù)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • k8s的架構(gòu)組成操作代碼

    k8s的架構(gòu)組成操作代碼

    k8s是一個(gè)輕便的和可擴(kuò)展的開(kāi)源平臺(tái),用于管理容器化應(yīng)用和服務(wù),通過(guò)k8s能夠進(jìn)行應(yīng)用的自動(dòng)化部署和擴(kuò)縮容,這篇文章主要介紹了k8s的架構(gòu)組成,需要的朋友可以參考下
    2024-05-05
  • 一文搞懂K8S中的NodeSelector

    一文搞懂K8S中的NodeSelector

    NodeSelector是Kubernetes用于指定Pod運(yùn)行節(jié)點(diǎn)的機(jī)制,通過(guò)節(jié)點(diǎn)上的標(biāo)簽(label)來(lái)選擇性地調(diào)度Pod,增加調(diào)度的靈活性和精確性,首先需要給節(jié)點(diǎn)打上標(biāo)簽,本文給大家介紹K8S中的NodeSelector,感興趣的朋友一起看看吧
    2024-10-10
  • Kubernetes(K8S)基礎(chǔ)知識(shí)

    Kubernetes(K8S)基礎(chǔ)知識(shí)

    本文詳細(xì)講解了Kubernetes(K8S)的基礎(chǔ)知識(shí),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評(píng)論