kubernetes 的volume 配置

kubernetes 的volume 配置

标签(空格分隔):kubernetes系列


  • 一:kuberentes 的volume 配置

一:kuberentes 的volume 配置

1.1 背景

说明:

容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃
时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。其次,在
Pod 中同时运行多个容器时,这些容器之间通常需要共享文件。Kubernetes 中的  Volume 抽象就很好的解决了
这些问题

Kubernetes 中的卷有明确的寿命 —— 与封装它的 Pod 相同。所f以,卷的生命比 Pod 中的所有容器都长,当这
个容器重启时数据仍然得以保存。当然,当 Pod 不再存在时,卷也将不复存在。也许更重要的是,Kubernetes
支持多种类型的卷,Pod 可以同时使用任意数量的卷


1.2 卷的类型

Kubernetes 支持以下类型的卷:

1. awsElasticBlockStore azureDisk azureFile cephfs csi downwardAPI emptyDir
2. fc flocker gcePersistentDisk gitRepo glusterfs hostPath iscsi local nfs
3. persistentVolumeClaim projected portworxVolume quobyte rbd scaleIO secret
4. storageos vsphereVolume

1.3 emptyDir

当 Pod 被分配给节点时,首先创建  emptyDir 卷,并且只要该 Pod 在该节点上运行,该卷就会存在。正如卷的名
字所述,它最初是空的。Pod 中的容器可以读取和写入  emptyDir 卷中的相同文件,尽管该卷可以挂载到每个容
器中的相同或不同路径上。当出于任何原因从节点中删除 Pod 时, emptyDir 中的数据将被永久删除

emptyDir 的用法有:

暂存空间,例如用于基于磁盘的合并排序

用作长时间计算崩溃恢复时的检查点

Web服务器容器提供数据时,保存内容管理器容器提取的文件


vim emp.yaml

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: wangyanglinux/myapp:v1
    name: test-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir: {}

----

kubectl apply -f emp.yaml


vim emp1.yaml

---
apiVersion: v1
kind: Pod
metadata:
  name: test-pd1
spec:
  containers:
  - image: wangyanglinux/myapp:v1
    name: test-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  - name: liveness-exec-container
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c", "sleep 6000s"]
    volumeMounts:
    - mountPath: /test
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir: {}
----

kubectl apply -f emp1.yml


1.4 hostpath

hostPath 卷将主机节点的文件系统中的文件或目录挂载到集群中

hostPath 的用途如下:

1.1 运行需要访问 Docker 内部的容器;使用  /var/lib/docker 的  hostPath
1.2 在容器中运行 cAdvisor;使用  /dev/cgroups 的  hostPath
1.3 允许 pod 指定给定的 hostPath 是否应该在 pod   运行之前存在,是否应该创建,以及它应该以什么形式存在
1.4 除了所需的  path 属性之外,用户还可以为  hostPath 卷指定  type



使用这种卷类型是请注意,因为:

1.1 由于每个节点上的文件都不同,具有相同配置(例如从 podTemplate 创建的)的 pod 在不同节点上的行为可能会有所不同

1.2 当 Kubernetes 按照计划添加资源感知调度时,将无法考虑  hostPath 使用的资源

1.3 在底层主机上创建的文件或目录只能由 root 写入。您需要在特权容器中以 root 身份运行进程,或修改主机上的文件权限以便写入

vim host.yaml
---
apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: wangyanglinux/myapp:v1
    name: test-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      path: /data
      type: Directory
---
kubectl apply -f host.yaml

原文地址:https://blog.51cto.com/flyfish225/2481174

时间: 2024-11-01 15:54:50

kubernetes 的volume 配置的相关文章

Kubernetes 1.5 配置dns

Kubernetes 1.5 配置dns 在kubernetes1.2的时候,采用了skydns + kube2dns +etcd的方式来部署dns.而从1.3开始,则部署方式有了一点儿变化,将skydns和kube2dns封装到了一个容器镜像中,放弃了etcd,而将dns解析直接放入到了内存之中,同时引入了dnsmasq,进一步利用其缓存,具体的原理,请查阅相关文档.本篇文档,主要阐述新版的dns在kubernetes中的具体部署. 在Kubernetes的源码目录中,有个cluster/ad

Kubernetes的安装配置

1.环境准备: 三台服务器: 192.168.42.128 master+node 192.168.42.129 node1 192.168.42.130 node2 2.准备yum源 vi virt7-docker-common-release.repo [virt7-docker-common-release] name=virt7-docker-common-release baseurl=http://cbs.centos.org/repos/virt7-docker-common-re

Kubernetes 1.5 配置dashboard

配置kubernetes的dashboard相对简单.同样的,只需要从源码中获取到dashboard-controller.yaml及dashboard-service.yaml文件,稍加修改即可: wget https://rawgit.com/kubernetes/kubernetes/master/cluster/addons/dashboard/dashboard-controller.yamlwget https://rawgit.com/kubernetes/kubernetes/m

Kubernetes: 集群网络配置 - flannel

参考: [ Kubernetes 权威指南 ] Kubernetes 集群搭建可以参考 [ Kubernetes : 多节点 k8s 集群搭建实践 ] 在多个 Node 组成的 Kubernetes 集群内, Kubernetes 本身不会对跨主机容器网络进行设置. flannel 就是解决跨主机容器间网络互通的需求. Kubernetes 集群架构 Server List 节点名称 节点 IP k8s-master 10.10.10.10 k8s-node1 10.10.10.11 k8s-n

Kubernetes 使用 ingress 配置 https 集群(十五)

目录 一.背景 1.1 需求 1.2 Ingress 1.3 环境介绍 二.安装部署 2.1.创建后端 Pod 应用 2.2 创建后端 Pod Service 2.3.创建 ingress 资源 2.4.为 Nginx Pod 创建 Service 三.升级为 https 3.1 首先我们要制作证书 3.2.创建 secret 资源 3.3 更改 ingress 资源 3.4 浏览器访问验证 四.ingress 资源介绍 4.1.通过访问路径过滤 4.2.基于名称解析的虚拟主机 4.3.http

kubernetes集群网络配置方案——flannel部署

部署环境: CentOS Linux release 7.2 64位 10.10.0.103 node01 10.10.0.49 node02 安装过程: # yum install flannel # tar zxf flannel-v0.8.0-linux-amd64_.tar.gz # cp flanneld /usr/bin/ # cp mk-docker-opts.sh /usr/bin/ 编辑服务配置文件: #cat /usr/lib/systemd/system/flanneld.

Kubernetes 1.5配置Daemon Sets

在后续我们会说如何收集kubernetes中的pod日志,在收集日志的时候,需要在每个k8s node节点上运行一个收集日志的进程 ,如fluentd.我们知道在通常情况下,kubernetes基于它内部的调度算法来自动分配pod运行在哪个节点上,没有办法保证在每个node上运行一个fluentd pod.这个时候,Daemon Sets就派上了用场.简单来说,Daemon Sets就是让一个pod在所有的k8s集群节点上都运行一个. 我们直接看下面的示例,在所有节点上都启动一个busybox:

Kubernetes 1.5配置Job

我们知道使用kubernetes的rc或者rs创建的pod,kubernetes会实时监控其健康状态,如果发现pod挂掉以后,会自动启动一个新的,让pod的数量始终保持在指定的replicas上.那么问题就来了,在有些场景下,我们就是想要运行一些容器执行某种特定的任务,任务一旦执行完成,容器也就没有存在的必要了.在这种场景下,我们使用rc来创建pod就显得不那么合适.于是就是了Job,在这里,Job指的就是那些一次性任务.我们通过Job运行一个容器,当其任务执行完以后,就自动退出,集群也不再重新

Kubernetes集群配置dashboard服务

本文将在前文的基础上介绍kube-ui(也叫dashboard)的创建和使用.这个东西本质上就是webui连接master的api接口,通过api获取k8s集群的相关信息,然后在web上展示出来,对用户来说比较友好一些,实际用处并不是很大. 一.下载镜像文件并纳入本地仓库统一管理 # docker pull docker.io/mritd/kubernetes-dashboard-amd64 # docker tag docker.io/mritd/kubernetes-dashboard-am