codecamp

Kubernetes 配置Pod使用投射卷作存储

配置 Pod 使用投射卷作存储

本文介绍怎样通过​projected ​卷将现有的多个卷资源挂载到相同的目录。 当前,​secret​、​configMap​、​downwardAPI ​和 ​serviceAccountToken ​卷可以被投射。

Note: ​serviceAccountToken ​不是一种卷类型

在开始之前

你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 建议在至少有两个节点的集群上运行本教程,且这些节点不作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

要检查版本,请输入 ​kubectl version​。

为 Pod 配置 projected 卷

本练习中,你将从本地文件来创建包含有用户名和密码的 Secret。然后创建运行一个容器的 Pod, 该 Pod 使用​projected ​卷将 Secret 挂载到相同的路径下。

下面是 Pod 的配置文件:

apiVersion: v1
kind: Pod
metadata:
  name: test-projected-volume
spec:
  containers:
  - name: test-projected-volume
    image: busybox:1.28
    args:
    - sleep
    - "86400"
    volumeMounts:
    - name: all-in-one
      mountPath: "/projected-volume"
      readOnly: true
  volumes:
  - name: all-in-one
    projected:
      sources:
      - secret:
          name: user
      - secret:
          name: pass
  1. 创建 Secret:
  2. # 创建包含用户名和密码的文件:
    echo -n "admin" > ./username.txt
    echo -n "1f2d1e2e67df" > ./password.txt
    
    # 将上述文件引用到 Secret:
    kubectl create secret generic user --from-file=./username.txt
    kubectl create secret generic pass --from-file=./password.txt
  3. 创建 Pod:
  4. kubectl create -f https://k8s.io/examples/pods/storage/projected.yaml
    
  5. 确认 Pod 中的容器运行正常,然后监视 Pod 的变化:
  6. kubectl get --watch pod test-projected-volume
    

    输出结果和下面类似:

    NAME                    READY     STATUS    RESTARTS   AGE
    test-projected-volume   1/1       Running   0          14s
  7. 在另外一个终端中,打开容器的 shell:
  8. kubectl exec -it test-projected-volume -- /bin/sh
    
  9. 在 shell 中,确认 ​projected-volume​ 目录包含你的投射源:
  10. ls /projected-volume/
    

清理

删除 Pod 和 Secret:

kubectl delete pod test-projected-volume
kubectl delete secret user pass


Kubernetes 配置Pod以使用PersistentVolume作为存储
Kubernetes 为Pod或容器配置安全上下文
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Kubernetes 管理集群

Kubernetes Service

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }