努力挣扎的生活 努力挣扎的生活
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 运维基础
  • 监控
  • 日志系统
  • gitlab安装
  • jenkins安装和管理
  • Jenkins工具集成
  • pipeline流水线
  • Docker
  • Kubernetes
  • Nexus
  • Rancher
  • Prometheus
  • ELK(EFK)
  • 虚拟化
  • Mysql
  • PostgreSQL
  • Redis
  • MongoDB
  • clickhouse
关于
  • 分类
  • 标签
  • 归档
  • 收藏
  • 更多
GitHub (opens new window)

yangfk

瑟瑟发抖的小运维
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 运维基础
  • 监控
  • 日志系统
  • gitlab安装
  • jenkins安装和管理
  • Jenkins工具集成
  • pipeline流水线
  • Docker
  • Kubernetes
  • Nexus
  • Rancher
  • Prometheus
  • ELK(EFK)
  • 虚拟化
  • Mysql
  • PostgreSQL
  • Redis
  • MongoDB
  • clickhouse
关于
  • 分类
  • 标签
  • 归档
  • 收藏
  • 更多
GitHub (opens new window)
  • Docker

  • Kubernetes

    • K8S常见组件记录
    • 安装DNS服务(bind-9)
    • 私有仓库harbor部署
    • 证书签发环境CFSSL
    • 一步步部署k8s组件(上)
    • 一步步部署k8s组件(中)
    • 一步步部署k8s组件(下)
    • kubelet常用命令
    • K8s的GUI资源管理之仪表板
    • k8s部署jenkins
    • k8s持久存储StorageClass
    • k8s之Volume类型emptyDir和hostPath
      • k8s常见Volume类型
        • emptyDir类型
        • hostPath类型
        • 创建一个hostpath容器
        • nfs类型
    • 深入了解Deployment
    • k8s之meric-server(HPA环境)
    • k8s-deployment常见参数说明
    • rke部署k8s高可用集群
    • K8S之安全机制
    • k8s网络策略
    • kubeadm安装k8s(版本1.26.4)
    • kubeadm安装k8s-自签证书
    • kubeadm证书替换
    • Pod探针
  • Nexus

  • Rancher

  • Prometheus

  • ELK

  • 虚拟化

//
  • 云计算虚拟化
  • Kubernetes
yangfk
2022-04-26

k8s之Volume类型emptyDir和hostPath

//

Kubernetes存储官方文档 (opens new window)

在docker里面,需要把文件持久化就需要把需要持久化的目录挂载到宿主机,在默认情况下,删除容器同时也会把容器里面的文件删除,有时候需要将容器文件做持久化,或把宿主机的文件挂载到容器

# k8s常见Volume类型

一般有四种:emptyDir,hostPath,NFS以及云存储(ceph, glasterfs...)等。

# emptyDir类型

emptydir官网 (opens new window)

  • emptyDir知识积累

      当 Pod 分派到某个 Node 上时,emptyDir 卷会被创建,并且在 Pod 在该节点上运行期间,卷一直存在。 就像其名称表示的那样,卷最初是空的。 
      尽管 Pod 中的容器挂载 emptyDir 卷的路径可能相同也可能不同,这些容器都可以读写 emptyDir 卷中相同的文件。 
      当 Pod 因为某些原因被从节点上删除时,emptyDir 卷中的数据也会被永久删除。
      Pod 启动时为空,存储空间来自本地的 kubelet 根目录(通常是根磁盘)或内存,默认目录:/var/lib/kubelet/pods/容器id
      Note: 容器崩溃并不会导致 Pod 被从节点上移除,因此容器崩溃期间 emptyDir 卷中的数据是安全的。
    
  • 创建一个emptyDir容器

vi nginx-test-emptyDir.yml

apiVersion: v1
kind: Pod
metadata:
  name: nginx-test01
spec:
  containers:
  - image: nginx:1.21.1
    name: nginx-test01
    volumeMounts:
    - name: nginx-test01
      mountPath: /usr/share/nginx/html
  volumes:
  - name: nginx-test01
    emptyDir: {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

k8s_storage_nfs1

# hostPath类型

HostPath卷存在许多安全风险,尽可能避免使用HostPath是一种最佳实践。当必须使用HostPath卷时,应该将其限定为只需要的文件或目录,并将其挂载为只读。
如果通过AdmissionPolicy限制HostPath对特定目录的访问,volumeMounts必须使用readOnly挂载才能使策略生效。

hostPath 的一些用法有:

运行一个需要访问 Docker 内部机制的容器;可使用 hostPath 挂载 /var/lib/docker 路径。
在容器中运行 cAdvisor 时,以 hostPath 方式挂载 /sys。
允许 Pod 指定给定的 hostPath 在运行 Pod 之前是否应该存在,是否应该创建以及应该以什么方式存在。
type值 行为
空字符串(默认)用于向后兼容,这意味着在安装 hostPath 卷之前不会执行任何检查。
DirectoryOrCreate 如果在给定路径上什么都不存在,那么将根据需要创建空目录,权限设置为 0755,具有与 kubelet 相同的组和属主信息。
Directory 在给定路径上必须存在的目录。
FileOrCreate 如果在给定路径上什么都不存在,那么将在那里根据需要创建空文件,权限设置为 0644,具有与 kubelet 相同的组和所有权。
File 在给定路径上必须存在的文件。
Socket 在给定路径上必须存在的 UNIX 套接字。
CharDevice 在给定路径上必须存在的字符设备。
BlockDevice 在给定路径上必须存在的块设备。

# 创建一个hostpath容器

  • 将Pod分配给节点
#查看标签
kubectl get nodes --show-labels

#择其中一个节点,添加标签
kubectl label nodes hdss-22 nginx=web

#删除标签,删除标签只需要加 key名 -
kubectl label nodes hdss-22 nginx-
1
2
3
4
5
6
7
8

一般情况下,使用hostpath会和nodeSelector结合起来使用,Kubernetes只会将 Pod 调度到拥有你所指定的每个标签的节点上。

nodeSelector:是节点选择约束的最简单推荐形式。你可以将 nodeSelector 字段添加到 Pod 的规约中设置你希望目标节点所具有的节点标签。

K8s文档 将pod指派到节点 (opens new window)

  • 创建yml

vi nginx-hostpath.yml

apiVersion: v1
kind: Pod
metadata:
  name: nginx-test01
spec:
  containers:
  - image: nginx:1.21.1
    name: nginx-test01
    volumeMounts:
    - name: nginx-test01
      mountPath: /usr/share/nginx/html
  volumes:
  - name: nginx-test01
    hostPath:
      path: /data/nginx-test
      type: DirectoryOrCreate  #当目录不存在就创建
  nodeSelector:
    nginx: web #指定分配给打了这个标签的node
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# nfs类型

持久存储StorageClass

//
如果此文章对您有帮助,点击 -->> 请博主喝咖啡 (opens new window)
上次更新: 2022/12/29, 16:26:13
k8s持久存储StorageClass
深入了解Deployment

← k8s持久存储StorageClass 深入了解Deployment→

最近更新
01
Linux Polkit 权限提升漏洞(CVE-2021-4034)
03-28
02
postgreSQL维护
03-17
03
trivy系统漏洞扫描
02-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 yangfk | 湘ICP备2021014415号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×
//