一、subpaths
subpaths是kubernetes中一個比較常用的資源,用來指定一個容器內的文件或目錄掛載到一個pvc上,是容器和pvc之間的一個橋樑。可以通過yaml文件或者kubectl命令行方式來定義subpath。
在yaml文件中一個subpaths的定義示例如下:
spec: containers: - image: nginx name: nginx volumeMounts: - name: datavolume mountPath: /usr/share/nginx/html subPath: share/nginx/html volumes: - name: datavolume persistentVolumeClaim: claimName: datavolume-claim
以上yaml文件中定義了一個container nginx,其中使用了一個subpaths並將其掛載到名為datavolume-claim的pvc上。
二、subpath.nodes(i).delete
subpath.nodes(i).delete是指定一個文件或目錄路徑及其下的所有內容刪除(注意:不是刪除整個subpath資源或pvc上的內容),需要注意的是,只有當整個subpath當中文件或目錄的個數不大於2000個時,才能使用該方法進行刪除。示例代碼如下:
import os dir_path = '/path/to/subpath/nodes(i)' for filename in os.listdir(dir_path): file_path = os.path.join(dir_path, filename) try: if os.path.isfile(file_path) or os.path.islink(file_path): os.unlink(file_path) elif os.path.isdir(file_path): shutil.rmtree(file_path) except Exception as e: print('Failed to delete %s. Reason: %s' % (file_path, e))
三、subpath原理
subpath是通過Kubernetes自帶的volume插件實現的,可以通過volumeMounts屬性將一個volume掛載到一個container的某個指定路徑下。subpath主要由以下三個部分組成:
- 數據卷(volume):提供原始數據資源,可以是emptyDir(創建空目錄)或者persistentVolumeClaim(使用現有的pvc)。
- 容器卷掛載(volumeMounts):將volume掛載到一個容器內已有的路徑指定上。
- subpath:通過指定掛載路徑下的子路徑指定哪些文件或者目錄需要被掛載到volume中。
四、subpathway
subpathway實現了在Pod之間共享同樣的subpath和數據的方法。通過在Pod A中共享一個subpath和volume,Pod B可以分別讀寫與Pod A相同的subpath。這樣就可以使各個Pod之間共享同樣的數據。示例代碼如下:
apiVersion: v1 kind: Pod metadata: name: nginx-pod-b labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - name: data mountPath: /var/www/html volumes: - name: data persistentVolumeClaim: claimName: nginx-subpath readOnly: true
五、subpath k8s
subpath k8s,可以通過kubectl命令行方式對subpath進行創建,修改等操作。具體可以參考Kubernetes官方文檔。創建一個subpath的示例命令如下:
kubectl apply -f subpath.yaml
六、subpath掛載卸載
subpath可以通過kubectl命令行或者yaml文件的方式掛載到container內。具體操作可以參考Kubernetes官方文檔。掛載示例yaml文件如下:
spec: containers: - image: nginx name: nginx volumeMounts: - name: datavolume mountPath: /usr/share/nginx/html subPath: share/nginx/html volumes: - name: datavolume persistentVolumeClaim: claimName: datavolume-claim
subpath的卸載可通過刪除Pod實例來實現。
原創文章,作者:TFTXC,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/316876.html