kubernetes中將hostpath卷安裝到POD
讓我們做一個MVC控制器,它會在POD的/mnt/share目錄建立一個日誌檔案,並記錄訪問日誌:
@RestController public class VolumeController { @GetMapping( path = "/logUrlHit") public String logUrlHit() { final String fileNameRandom = UUID.randomUUID().toString(); try (PrintWriter p = new PrintWriter(new FileOutputStream("/mnt/share/"+fileNameRandom+".txt", true))) { p.println("Datetime: "+new Date()); } catch (FileNotFoundException e1) { e1.printStackTrace(); } return "Url hit logged as "+fileNameRandom; } } |
現在我們想要讓POD中的/mnt/share目錄內容能夠在minikube主機中訪問,下面是準備helm chart部署模板的配置:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: {{ .Chart.Name }} spec: replicas: {{ .Values.replicaCount }} template: metadata: labels: app: {{ .Chart.Name }} spec: containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - containerPort: {{ .Values.service.internalPort }} volumeMounts: - name: {{ .Values.volumes.volumeName }} mountPath: {{ .Values.volumes.containerPath }} volumes: - name: {{ .Values.volumes.volumeName }} hostpath: path: {{ .Values.volumes.hostPath }} type: DirectoryOrCreate |
瞭解更多hstpath是如何設定工作的,可看看模板的Vaules.yaml:
replicaCount: 1 image: repository: volume-test tag: 0.0.1-SNAPSHOT pullPolicy: IfNotPresent service: name: volume-service type: NodePort externalPort: 8080 internalPort: 8080 volumes: containerPath: /mnt/share/ hostPath: /home/docker/pod_share volumeName: myvolume ingress: enabled: false # Used to create an Ingress record. hosts: - chart-example.local annotations: # kubernetes.io/ingress.class: nginx # kubernetes.io/tls-acme: "true" tls: # Secrets must be manually created in the namespace. # - secretName: chart-example-tls # hosts: # - chart-example.local resources: {} |
換句話說,我們安裝POD的/mnt/share目錄到minikube的主機/home/docker/pod_share下。
下面開始測試一下,在minikube中切換docker:
eval $(minikube docker-env)
構建專案:
mvn clean install
如果chart模板改變,需要構建helm chart:
helm package --debug ./volume-chart/volume-chart
構建chart以後,安裝到kuberbetes:
helm install -n volume-chart volume-chart-0.1.0.tgz
測試:
mnk service volume-chart --url http://192.168.99.100:30789 curl http://192.168.99.100:30789/logUrlHit Url hit logged as 7f4bb181-04a1-4165-93bf-2103171fe542 |
現在檔案產生與/mnt/share目錄中,檢查一下:
kubectl get pods NAME READY STATUS RESTARTS AGE volume-chart-774f8947b7-dqlpt 1/1 Running 1 1h |
kubectl exec -it volume-chart-774f8947b7-dqlpt /bin/sh # cd /mnt/share # ls -l total 16 -rw-r--r-- 1 root root 39 Mar 3 20:46 289f2248-5f0c-4c07-b4c8-a8dd5539d511.txt -rw-r--r-- 1 root root 39 Mar 3 20:46 39da5e0c-59b9-42e7-9fd5-9fe5202e5980.txt -rw-r--r-- 1 root root 39 Mar 3 20:46 5b335a4e-b47f-43fe-82a4-cf4e4d7be0c0.txt -rw-r--r-- 1 root root 39 Mar 3 20:46 7f4bb181-04a1-4165-93bf-2103171fe542.txt |
檔案確實產生了,現在這些檔案應該可以從POD外面訪問。為了驗證,登入進入minikube節點檢查:
mnk ssh _ _ _ _ ( ) ( ) ___ ___ (_) ___ (_)| |/') _ _ | |_ __ /' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\ | ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/ (_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____) $ cd /home/docker/pod_share $ ls -l total 16 -rw-r--r-- 1 root root 39 Mar 3 20:46 289f2248-5f0c-4c07-b4c8-a8dd5539d511.txt -rw-r--r-- 1 root root 39 Mar 3 20:46 39da5e0c-59b9-42e7-9fd5-9fe5202e5980.txt -rw-r--r-- 1 root root 39 Mar 3 20:46 5b335a4e-b47f-43fe-82a4-cf4e4d7be0c0.txt -rw-r--r-- 1 root root 39 Mar 3 20:46 7f4bb181-04a1-4165-93bf-2103171fe542.txt |
如果你重啟minikuber,將丟失這些檔案,需要持久使用,使用下面任何一個預定義目錄:
- /data
- /var/lib/minikube
- /var/lib/docker
- /tmp/hostpath_pv
- /tmp/hostpath-provisioner
只需要在values.yaml改變:
hostPath: /home/docker/pod_share
到:
hostPath: /data/pod_share
重啟可見效,點選標題檢視測試原始碼和配置。
相關文章
- kubernetes之pod中斷
- 傲視Kubernetes(三):Kubernetes中的Pod
- 安裝maven,並將其配置到idea中MavenIdea
- kubernetes 安裝
- 安裝 kubernetes
- rancher中國區加速安裝Kubernetes
- 安裝local-path-provisioner基於HostPath動態製備PV
- Kubernetes中Pod間共享記憶體方案記憶體
- 重定向Kubernetes pod中的tcpdump輸出TCP
- 從0到1使用Kubernetes系列(三)——使用Ansible安裝Kubernetes叢集
- Mac環境下安裝PodMac
- k8s將deployment中的pod固定到指定節點K8S
- Kubernetes Pod配置:從基礎到高階實戰技巧
- [kubernetes]helm安裝
- Kubernetes的安裝
- Ubuntu安裝KubernetesUbuntu
- openEuler安裝Kubernetes
- Kubernetes - 安裝方法
- Kubernetes Dashboard 安裝
- Kubernetes之Pod排程
- Kubernetes Pod驅逐策略
- Kubernetes:Pod總結(二)
- Kubernetes Pod 全面知識
- Kubernetes部署單元-Pod
- Kubernetes Pod排程:從基礎到高階實戰技巧
- 利用 Helm 在各類 Kubernetes 中安裝 RainbondAI
- kubernetes單機安裝
- kubernetes的安裝方法
- 使用kubeadm安裝kubernetes
- 在 Mac 上通過 VirtualBox 將 Windows 10 安裝到可移動裝置中MacWindows
- 從0到1使用Kubernetes系列(二)——安裝工具介紹
- Kubernetes之Pod工作負載負載
- Kubernetes Pod OOM 排查日記OOM
- Kubernetes的Pod進階(十一)
- Kubernetes:Pod 升級、回滾
- Kubernetes:28---pod託管(Job:任務型pod)
- 將 .NET Aspire 部署到 Kubernetes 叢集
- 貝寶如何將Kubernetes擴充套件到超過4k個節點和200k個Pod?套件