将永久存储添加到Red Hat CDK Kit 3.0
注意:本文介绍了在Red Hat容器开发工具包3.0测试版中使用的方法。在将来的版本中可能会有所变更。
红帽容器开发工具包(CDK)提供了一个一体化的环境,不仅可以构建和测试Docker容器,还可以在Red Hat OpenShift容器全平台上使用它们,只需要来自一台开发用机器。自从出现,CDK就使用Vagrant作为服务平台。从版本3.0开始,CDK使用Minishift作为底层服务。基于Minishift的CDK 3.0减少了需要安装和配置的依赖的数量。现在只需要VirtualBox或KVM等虚拟机管理程序就可以实现管理。
CDK最大的好处之一就是它提供了一个开发人员可以使用的功能齐全的环境。但是,向CDK 3.0过渡过程中确实忽略了以前版本中的一个关键特性:预先配置的永久性存储。在CDK 2.0中,OpenShift使用的三个永久卷被预先配置为向应用程序提供长期存储,通过在主机上配置了一个网络文件系统(NFS)服务器来提供这样的功能。 Minishift主机没有配置NFS服务器。但是,可以使用OpenShift提供的其中一种替代存储类型:HostPath。 HostPath卷工具使用容器底层主机上的存储,而无需安装任何其他软件。
要为主机路径存储配置CDK,应创建多个代表PersistentVolume的索引以支持需要长期存储的应用程序。由于Minishift引导到tempfs,大多数索引在机器重启不会保持。只有放置在以下目录中的文件才会被保留:
- /var/lib/docke
- /var/lib/minishift
应该在目录/var/lib/minishift/pv中创建三个新的永久卷分别代表pv01 pv02和pv03。
在CDK已经启动的情况下,执行以下命令通过shell方式访问Minishift:
minishift ssh
默认情况下,当使用SSH命令访问Minishift机器时,您将以一个名为docker的用户身份登录。由于这个目录是由root用户授权和保护的,所以需要权限提升。
sudo su -
为PersistentVolumes创建三个目录:
mkdir -p /var/lib/minishift/pv/pv0{1..3}
为了简化CDK等开发环境中的权限管理,放宽目录权限和所有权:
chmod -R 777 / var / lib / minishift / pv / pv *
chmod -R a + w / var / lib / minishift / pv / pv *
CDK的一个主要优点是它建立在红帽企业Linux(RHEL)基础之上。 RHEL固有的安全功能之一SELinux,不仅为主机提供了额外的保护,还提供了为其他任何容器提供底层支持的功能。默认情况下,容器会被限制直接向底层文件系统写入。要允许容器为永久卷创建的目录,必须设置SELinux标签svirt_sandbox_file_t。
执行以下命令重新设置目录:
chcon -R -t svirt_sandbox_file_t / var / lib / minishift / pv / *
restorecon -R / var / lib / minishift / pv /
正确配置目录之后,可以创建使用HostPath存储插件的永久卷。确保使用OpenShift命令行工具并以管理员身份登录到OpenShift环境中:
oc登录-u系统:admin
现在创建新的永久卷:
for i in $(seq 1 3); do
oc create -f - <<PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv0$i
spec:
accessModes:
- ReadWriteOnce
- ReadWriteMany
- ReadOnlyMany
capacity:
storage: 2Gi
hostPath:
path: /var/lib/minishift/pv/pv0$i
persistentVolumeReclaimPolicy: Recycle
PV
done
现在可以验证新创建的永久卷:
oc get pv
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
pv01 2Gi RWO,ROX,RWX Recycle Available 1m
pv02 2Gi RWO,ROX,RWX Recycle Available 1m
pv03 2Gi RWO,ROX,RWX Recycle Available 1m
永久存储的使用,在创建集装箱化应用程序时提供了额外的功能特别是在开发阶段。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Redis入坟(八)内存管理与优化,面试必考
- 逐行阅读Spring5.X源码(十二)AOP源码分析,难!面试官都不一定懂!
- 逐行阅读Spring5.X源码(十三)spring事务源码分析
- 线程池ThreadPoolExecutor 源码分析,面试官也就那么回事,他怎么敢!
- Spug - 轻量级自动化运维平台
- Callable/Future 使用及原理分析,Future .get()为啥能等待呢?
- 优雅的drop掉mysql库中1TB大表
- 《剑指offer》第19天:股票交易(校对)
- SwiftyUserDefaults-封装系统本地化的框架推荐
- “使用多target来构建大量相似App”,唐巧大神理论验证(附工程代码地址)
- 小结:Swift、OC语言中多target在代码中如何区分
- 点击按钮每次都能实现图片的旋转和切换(swift)
- 多线程之NSOperation小结
- 判断一个坐标点是否在封闭曲线内的方法(swift)
- OC循环方法推荐-块循环遍历(比for循环好用)