Bil*_*ill 3 local-storage docker kubernetes kind
我想设置一个持久卷(pv 和 pvc),由Kind 集群中的 pod 共享。但是我还需要将数据保留在我的笔记本电脑(主机服务器)中,因此卷的路径应该是我的笔记本电脑中的某些内容,我可以直接访问它。
如果我删除 kind 集群,该卷应该被持久化,而不是被破坏。
我希望可以轻松地添加或更新该卷,或者从我的主机笔记本电脑中复制文件。
如何让 Pod 在 KIND 集群中知道它?
粘贴我的kind.yaml供您参考
$ kind
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
- role: worker
Run Code Online (Sandbox Code Playgroud)
小智 24
我想补充一点,为了最大限度地减少具体配置,Kind您应该使用pv / pvc这种方式,真实集群上的配置只会在 pv 的定义上有所不同。
因此,如果您在 Kind 集群上配置 extraMounts:
apiVersion: kind.x-k8s.io/v1alpha4
kind: Cluster
nodes:
- role: control-plane
extraMounts:
- hostPath: /home/bill/work/www
containerPath: /www
Run Code Online (Sandbox Code Playgroud)
然后在该集群上创建 PV 和 PVC:
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-www
spec:
storageClassName: standard
accessModes:
- ReadWriteOnce
capacity:
storage: 2Gi
hostPath:
path: /www/
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-www
spec:
volumeName: pv-www
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
Run Code Online (Sandbox Code Playgroud)
之后,您可以在部署中使用它,如下所示:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
volumes:
- name: www
persistentVolumeClaim:
claimName: pvc-www
containers:
- name: nginx
image: nginx:1.14.2
volumeMounts:
- name: www
mountPath: /var/www
Run Code Online (Sandbox Code Playgroud)
因此,您的本地文件/home/bill/work/www将被安装到/var/www内部容器中。
创建同类集群时,您可以指定要安装在虚拟节点上的主机目录。如果这样做,则可以使用hostPath存储配置卷,它们将引用节点上的安装路径。
所以你会创建一个种类的配置文件:
apiVersion: kind.x-k8s.io/v1alpha4
kind: Cluster
nodes:
- role: control-plane
extraMounts:
- hostPath: /home/bill/work/foo
containerPath: /foo
Run Code Online (Sandbox Code Playgroud)
然后运行
kind create cluster --config kind-config.yaml
Run Code Online (Sandbox Code Playgroud)
创建集群。
在您的 Kubernetes YAML 文件中,您需要将其containerPath作为“主机路径”挂载到节点上。Pod 规范可能部分包含:
volumes:
- name: foo
hostPath:
path: /foo # matches kind containerPath:
containers:
- name: foo
volumeMounts:
- name: foo
mountPath: /data # in the container filesystem
Run Code Online (Sandbox Code Playgroud)
请注意,此设置非常特定于种类。主机路径通常不是可靠的存储:您无法控制 pod 被安排在哪个节点上,并且 pod 和节点都可以在现实世界的集群中被删除。在某些托管设置(AWS EKS、Google GKE)中,您可能根本无法控制主机内容。
您可能会重新审视您的应用程序设计,以尽量减少对“文件”作为一流对象的需求。与其“更新卷”,不如考虑使用更新的内容部署新的 Docker 镜像;而不是“复制文件”考虑可以通过入口控制器公开的 HTTP 服务。
| 归档时间: |
|
| 查看次数: |
2811 次 |
| 最近记录: |