Kubernetes PV/PVC使用實踐


轉載於https://www.cnblogs.com/ericnie/p/7733281.html

 

pv,pvc的概念不解釋了,之前在registry中已經使用過PV和PVC,現在想把WebLogic Server中的日志給放到外部的存儲中來,過程如下:

首先在需要放日志的目標節點上建立一個文件夾,比如/k8s/weblogic

在/etc/exports中加入一個nfs的mount點

[root@k8s-node-1 weblogic]# cat /etc/exports
/k8s/test *(insecure,rw,async,no_root_squash)
/k8s/weblogic  *(insecure,rw,async,no_root_squash)

重新啟動nfs

service nfs restart

nfs是否成功,可以通過下面命令來進行驗證。

mount -t nfs -o rw 192.168.0.103:/k8s/weblogic  /mnt/nfs

 

建立一個pv

復制代碼
[root@k8s-master pv]# cat pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv0003
spec:
    capacity:
      storage: 5Gi
    accessModes:
      - ReadWriteOnce
    persistentVolumeReclaimPolicy: Recycle
    nfs:
      path: /k8s/weblogic
      server: 192.168.0.103
復制代碼

再建立一個pvc

復制代碼
[root@k8s-master pv]# cat pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: weblogiclogs
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
復制代碼

通過get pv查看是否關聯上

復制代碼
[root@k8s-master pv]# kubectl get pv
NAME      CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS    CLAIM                  REASON    AGE
pv0003    5Gi        RWO           Recycle         Bound     default/weblogiclogs             41m
pv01      20Gi       RWX           Recycle         Bound     default/myclaim2                 36d
復制代碼

這里遇到一個問題,開始建立的pv死活claim為空,查看pv以及pvc的配置發現並沒有任何名稱上的關聯,繼續研究,發現純粹是通過storage大小進行匹配的,之前因為照抄書本,一個是5G,一個是8G所以就無法匹配了,修改后成功。

最后是weblogic的rc的配置。

復制代碼
[root@k8s-master pv]# cat rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: helloworld-service
spec:
  replicas: 1
  template:
    metadata:
      labels:
        weblogic-app: "helloworld"
        version: "0.1"
    spec:
      containers:
      - name: weblogichelloworld
        image: 1213-helloworld:v1
        volumeMounts:
        - mountPath: "/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/logs"
          name: mypd
        ports:
        - containerPort: 7001
      volumes:
      - name: mypd
        persistentVolumeClaim:
          claimName: weblogiclogs
---
apiVersion: v1
kind: Service
metadata:
  name: helloworldsvc
  labels:
    weblogic-app: helloworld
spec:
  type: NodePort
  ports:
  - port: 7001
    protocol: TCP
    targetPort: 7001
    name: http
    nodePort: 30005
  selector:
    weblogic-app: helloworld
復制代碼

這里又遇到一個問題,之前想法是把Servers/AdminServer下面所有的都放在pv中,后來發現pod死活不啟動。修改成最后log的路徑后,啟動成功。

隨后我們也在pv中看到滿屏的日志了。

 

==========================================================================

值得探討的是,這種PV/PVC模式並不是存放WebLogic日志的好的方式,因為如果RC擴展為多個WebLogic Pod,意味着多個AdminServer都需要去訪問和讀寫同一個目錄和同一個文件,因為他們都是AdminServer,所以必然造成文件的損壞,所以以上只是做一個驗證,日志的收集還是通過官方推薦的EFK方式比較合適,一方面能夠記錄應用日志,另一方面也可以記錄Pod name, 但PV/PVC最適合什么場景,還需要繼續探討。


免責聲明!

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



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