容器技术---(三)kubernetes存储

本文详细介绍了Kubernetes中的存储管理,包括ConfigMap用于配置数据注入,Secret处理敏感信息,以及Volumes的各种类型如emptyDir、hostPath和NFS的使用。此外,还探讨了StatefulSet控制器、存储类(StorageClass)、亲和与反亲和策略,以及节点的Taints和Tolerations。文章强调了配置管理在容器化环境中的重要性,以及如何通过Kubernetes实现灵活和安全的数据管理。
摘要由CSDN通过智能技术生成

Configmap配置管理

Configmap用于保存配置数据,以键值对形式存储;ConfigMap资源提供了向Pod注入配置数据的方法,旨在让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性;典型的使用场景有:填充环境变量的值、设置容器内的命令行参数、填充卷的配置文件

创建ConfigMap的方式有4种:使用字面值创建、使用文件创建、使用目录创建、编写configmap的yaml文件创建

##使用字面值创建,键值对的方式

##使用文件创建,文件名为key,文件内容为值

##使用目录创建,文件名为key,文件内容为值

##使用yml文件创建

如何使用ConfigMap:通过环境变量的方式直接传递给pod、通过在pod的命令行下运行的方式、作为volume的方式挂载到pod内

##使用configmap设置环境变量

##直接传递configmap中的变量,不在yml文件中指定键值

##使用conigmap设置命令行参数

##kubectl describe pod pod4

##通过数据卷使用configmap

configmap的热更新

##创建nginxconf的configmap并将其挂载到nginx的默认include目录下

##此时只能通过nginxconf这个configmap中定义的端口访问

##编辑nginxconf这个configmap将其端口修改为8080

##此时虽然容器内的文件内容会更新(有一定延迟),但是更新的设定并没有生效;需要手动触发Pod滚动更新, 这样才能再次加载nginx.conf配置文件

##configmap热更新后,并不会触发相关Pod的滚动更新,需要手动触发;通过修改“version/config”来手动触发Pod滚动更新,更新后的pod也会获取到新的IP;此种方式下使用configmap挂载的env环境变量是不会更新的

##也可以在更改了configmap配置内容后通过删除控制下的pod以达到pod的热更新(此种更新方式延迟最低)

Secret配置管理

Secret对象类型用来保存敏感信息,例如密码、OAuth令牌和ssh key;敏感信息放在secret中比放在Pod的定义或者容器镜像中来说更加安全和灵活

Pod可以用两种方式使用secret:作为volume中的文件被挂载到pod中的一个或者多个容器里;当 kubelet为pod拉取镜像时使用

Secret的类型:

Service Account:Kubernetes自动创建包含访问API凭据的secret,并自动修改pod以使用此类型的secret

Opaque:使用base64编码存储信息,可以通过base64 --decode解码获得原始数据,因此安全性弱,Opaque类型的Secret其value为base64编码后的值

kubernetes.io/dockerconfigjson:用于存储docker registry的认证信息

##serviceaccout创建时Kubernetes会默认创建对应的secret,对应的secret会自动挂载到Pod的 /var/run/secrets/kubernetes.io/serviceaccount目录中

##每个namespace下有一个名为default的默认的ServiceAccount对象

##ServiceAccount里有一个名为Tokens的可以作为Volume一样被Mount到Pod里的Secret,当Pod启动时这个Secret会被自动Mount到Pod的指定目录下,用来协助完成Pod中的进程访问API Server时的身份鉴权过程

##从文件中创建secret

##从字面值创建secret,密码具有特殊字符时需要使用 \ 字符对其进行转义

##从yaml文件创建secret

##默认情况下kubectl describe secret为了安全不会显示密码的内容

##可以通过以上方式查看

##将secrect通过volume挂载到pod中

##向指定路径映射secret的键值

##将Secret设置为环境变量

##环境变量读取Secret很方便,但无法支撑Secret动态更新

##kubernetes.io/dockerconfigjson用于存储docker registry的认证信息

##在集群节点都成功登陆镜像仓库并拥有认证时,在yml文件中的pod未指定镜像拉取secret,此pod依然显示镜像拉取失败

##在集群节点都登出镜像仓库并移除认证时,在yml文件中的pod指定镜像拉取secret,此pod则能成功运行

Volumes配置管理

容器中的文件在磁盘上是临时存放的,这给容器中运行的特殊应用程序带来一些问题,首先,当容器崩溃时,kubelet将重新启动容器,容器中的文件将会丢失,因为容器会以干净的状态重建;其次,当在一个Pod中同时运行多个容器时,常常需要在这些容器之间共享文件;Kubernetes抽象出 Volume对象来解决这两个问题

Kubernetes卷具有明确的生命周期,与包裹它的Pod相同;因此,卷比Pod中运行的任何容器的存活期都长,在容器重新启动时数据也会得到保留;当一个Pod不再存在时,卷也将不再存在;也许更重要的是,Kubernetes可以支持许多类型的卷,Pod也能同时使用任意数量的卷

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值