1、新建maven项目k8stest,pom.xml如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.k8s.test</groupId>
<artifactId>k8stest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>K8stest</name> <dependencies>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
<version>1.4.14</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.4</version>
</dependency>
</dependencies>
</project>

2、新建测试类pvTest.java

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonParser; import io.fabric8.kubernetes.api.model.LabelSelector;
import io.fabric8.kubernetes.api.model.NFSVolumeSource;
import io.fabric8.kubernetes.api.model.ObjectMeta;
import io.fabric8.kubernetes.api.model.PersistentVolume;
import io.fabric8.kubernetes.api.model.PersistentVolumeClaim;
import io.fabric8.kubernetes.api.model.PersistentVolumeClaimList;
import io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec;
import io.fabric8.kubernetes.api.model.PersistentVolumeList;
import io.fabric8.kubernetes.api.model.PersistentVolumeSpec;
import io.fabric8.kubernetes.api.model.Quantity;
import io.fabric8.kubernetes.api.model.RBDVolumeSource;
import io.fabric8.kubernetes.api.model.ResourceRequirements;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.ConfigBuilder;
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClient; public class pvTest {
private static final Logger logger = LoggerFactory.getLogger(pvTest.class); public static void main(String[] args){
KubernetesClient kubernetesClient= connectK8s();
//创建pv
//testCreatePv_Nfs(kubernetesClient);
//testCreatePv_Rbd(kubernetesClient);
//删除指定的pv //删除指定的pv
//testDeletePv(kubernetesClient, "hzbtestpv");
//获取pv列表
//testPvList(kubernetesClient);
//更新pv
//testUpdatePv(kubernetesClient,"hzbtestpv");
//创建pvc
testCreatePvc(kubernetesClient);
//删除指定的pvc
// testDeletePvc(kubernetesClient, "hzbtestpvc");
//获取pvc列表
// testPvcList(kubernetesClient);
//更新指定的PVC
//testUpdatePvc(kubernetesClient,"hzbtestpvc");
//System.out.println(System.nanoTime());
//扩容
//expanseStorage(kubernetesClient,"hzbtestpv","15Gi");
} /**
* 获取pv列表
* @param kubernetesClient
*/
public static void testPvList(KubernetesClient kubernetesClient){
if(kubernetesClient!=null){
PersistentVolumeList pVolumeList=kubernetesClient.persistentVolumes().list();
List<PersistentVolume> pvList=pVolumeList.getItems();
for( PersistentVolume pv:pvList){
System.out.println("显示一个pv信息===============================================");
System.out.println("========="+jsonFormatter(pv));
}
}
} /**
* 创建pv信息,挂载nfs存储
* @param kubernetesClient
*/
public static void testCreatePv_Nfs(KubernetesClient kubernetesClient){
PersistentVolume pv=new PersistentVolume();
pv.setApiVersion("v1");
pv.setKind("PersistentVolume"); ObjectMeta meta=new ObjectMeta();
meta.setName("hzbtestpv");
Map<String, String> labelsMap=new HashMap<String, String>();
labelsMap.put("app", "hzbtestpv-lb");
meta.setLabels(labelsMap);
//设置pv的metadata
pv.setMetadata(meta); PersistentVolumeSpec pvs=new PersistentVolumeSpec();
Map<String, Quantity> capacityMap=new HashMap<String, Quantity>();
Quantity quantity=new Quantity();
quantity.setAmount("5Gi");
capacityMap.put("storage", quantity);
//设置Spec的capacity
pvs.setCapacity(capacityMap); List<String> accessModes=new ArrayList<String>();
accessModes.add("ReadWriteOnce");
//设置Spec的accessModes
pvs.setAccessModes(accessModes);
//设置Spec的回收pvc的回收策略。
pvs.setPersistentVolumeReclaimPolicy("Recycle");
NFSVolumeSource nfsVolumeSource=new NFSVolumeSource();
nfsVolumeSource.setServer("172.16.101.189");
nfsVolumeSource.setPath("/srv/nfs/hzb/test");
//设置Spec的nfs
pvs.setNfs(nfsVolumeSource);
//设置pv的Spec
pv.setSpec(pvs);
try {
//将pv信息存储到服务端
kubernetesClient.persistentVolumes().create(pv);
System.out.println("创建pv成功");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} /**
* 创建pv信息,挂载Rbd存储
* @param kubernetesClient
*/
public static void testCreatePv_Rbd(KubernetesClient kubernetesClient){
PersistentVolume pv=new PersistentVolume();
pv.setApiVersion("v1");
pv.setKind("PersistentVolume"); ObjectMeta meta=new ObjectMeta();
meta.setName("mysql-hzb-pv");
//设置pv的metadata
pv.setMetadata(meta); PersistentVolumeSpec pvs=new PersistentVolumeSpec();
Map<String, Quantity> capacityMap=new HashMap<String, Quantity>();
Quantity quantity=new Quantity();
quantity.setAmount("2Gi");
capacityMap.put("storage", quantity);
//设置Spec的capacity
pvs.setCapacity(capacityMap); List<String> accessModes=new ArrayList<String>();
accessModes.add("ReadWriteOnce");
//设置Spec的accessModes
pvs.setAccessModes(accessModes);
//设置Spec的回收pvc的回收策略。
pvs.setPersistentVolumeReclaimPolicy("Recycle"); RBDVolumeSource rbdVolumeSource=new RBDVolumeSource();
//设置ceph的monitors
rbdVolumeSource.setMonitors(Arrays.asList("172.16.60.41:6789", "172.16.60.42:6789", "172.16.60.43:6789"));
//设置ceph使用的存储池,ceph中默认是rbd
rbdVolumeSource.setPool("rbd");
//设置该pv要用的ceph的image
rbdVolumeSource.setImage("hzb-mysql");
//设置连接ceph的用户
rbdVolumeSource.setUser("admin");
//设置admin用户的认证信息
rbdVolumeSource.setKeyring("/etc/ceph/ceph.client.admin.keyring");
//设置要以哪种格式来格式化image
rbdVolumeSource.setFsType("xfs");
//设置image的读写权限
rbdVolumeSource.setReadOnly(false);
pvs.setRbd(rbdVolumeSource); //设置pv的Spec
pv.setSpec(pvs);
try {
//将pv信息存储到服务端
kubernetesClient.persistentVolumes().create(pv);
System.out.println("创建挂载rbd的pv成功");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} /**
* 删除指定的pv信息
* @param kubernetesClient
* @param pvName
*/
public static void testDeletePv(KubernetesClient kubernetesClient,String pvName){
try {
kubernetesClient.persistentVolumes().withName(pvName).delete();
System.out.println("成功删除pv========"+pvName);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} /**
* 更新指定的pv信息
* @param kubernetesClient
* @param pvName
*/
public static void testUpdatePv(KubernetesClient kubernetesClient,String pvName){
try {
PersistentVolume pv=kubernetesClient.persistentVolumes().withName(pvName).get();
System.out.println("更新前的pv信息===============================================");
System.out.println("========="+jsonFormatter(pv)); pv.getMetadata().getLabels().put("app", "hzbtestpv-new2");
pv.getStatus().setPhase("Available");
kubernetesClient.persistentVolumes().withName(pvName).update(pv); PersistentVolume pvnew=kubernetesClient.persistentVolumes().withName(pvName).get();
System.out.println("更新后的pv信息===============================================");
System.out.println("========="+jsonFormatter(pvnew));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} /**
* 扩容pv
* @param kubernetesClient
* @param pvName 要扩容的pv名字。
* @param quantityAmount 扩容的规格
*/
public static void expanseStorage(KubernetesClient kubernetesClient,String pvName,String quantityAmount){
PersistentVolume pv=kubernetesClient.persistentVolumes().withName(pvName).get();
System.out.println("扩容前的pv信息===============================================");
System.out.println("========="+jsonFormatter(pv));
Quantity newquantity=new Quantity();
newquantity.setAmount(quantityAmount);
pv.getSpec().getCapacity().put("storage", newquantity);
kubernetesClient.persistentVolumes().withName(pvName).update(pv);
PersistentVolume pvnew=kubernetesClient.persistentVolumes().withName(pvName).get();
System.out.println("扩容后的pv信息===============================================");
System.out.println("========="+jsonFormatter(pvnew));
} /**
* 获取pvc列表
* @param kubernetesClient
*/
public static void testPvcList(KubernetesClient kubernetesClient){
if(kubernetesClient!=null){
PersistentVolumeClaimList pVolumeClaimList=kubernetesClient.persistentVolumeClaims().list();
List<PersistentVolumeClaim> pvcList=pVolumeClaimList.getItems();
for( PersistentVolumeClaim pvc:pvcList){
System.out.println("显示一个pvc信息===============================================");
System.out.println("========="+jsonFormatter(pvc));
}
}
} /**
* 创建pvc信息
* @param kubernetesClient
*/
public static void testCreatePvc(KubernetesClient kubernetesClient){
PersistentVolumeClaim pvc=new PersistentVolumeClaim();
pvc.setApiVersion("v1");
pvc.setKind("PersistentVolumeClaim"); ObjectMeta meta=new ObjectMeta();
meta.setName("mysql-hzb-pvc");
//设置pvc的metadata
pvc.setMetadata(meta); PersistentVolumeClaimSpec pvcs=new PersistentVolumeClaimSpec(); List<String> accessModes=new ArrayList<String>();
accessModes.add("ReadWriteOnce");
//设置Spec的accessModes
pvcs.setAccessModes(accessModes);
//设置Spec绑定的pv
pvcs.setVolumeName("mysql-hzb-pv"); ResourceRequirements resources=new ResourceRequirements();
Map<String, Quantity> requests=new HashMap<String, Quantity>();
Quantity quantity=new Quantity();
quantity.setAmount("2Gi");
requests.put("storage", quantity);
resources.setRequests(requests);
//设置Spec的Resources
pvcs.setResources(resources); LabelSelector labelSelector=new LabelSelector();
Map<String,String> matchLabels=new HashMap<String, String>();
matchLabels.put("app", "mysql-hzb-pvc-lbl");
labelSelector.setMatchLabels(matchLabels);
//设置Spec的Selector
pvcs.setSelector(labelSelector); //设置pvc的Spec
pvc.setSpec(pvcs);
try {
//将pvc信息存储到服务端
kubernetesClient.persistentVolumeClaims().create(pvc);
System.out.println("创建pvc成功");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} /**
* 删除指定的pvc信息
* @param kubernetesClient
* @param pvcName
*/
public static void testDeletePvc(KubernetesClient kubernetesClient,String pvcName){
try {
kubernetesClient.persistentVolumeClaims().withName(pvcName).delete();
System.out.println("成功删除pvc========"+pvcName);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} /**
* 更新指定的pvc信息
* @param kubernetesClient
* @param pvcName
*/
public static void testUpdatePvc(KubernetesClient kubernetesClient,String pvcName){
try {
PersistentVolumeClaim pvc=kubernetesClient.persistentVolumeClaims().withName(pvcName).get();
System.out.println("更新前的pvc信息===============================================");
System.out.println("========="+jsonFormatter(pvc)); //pvc.getSpec().getAdditionalProperties().put("appName", "宠物商店");
pvc.getSpec().getSelector().getMatchLabels().put("appName", "pet-shop");
kubernetesClient.persistentVolumeClaims().withName(pvcName).update(pvc); PersistentVolumeClaim pvcnew=kubernetesClient.persistentVolumeClaims().withName(pvcName).get();
System.out.println("更新后的pvc信息===============================================");
System.out.println("========="+jsonFormatter(pvcnew));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} /**
* 连接k8s master服务器
* @return
*/
public static KubernetesClient connectK8s(){
String namespace = "default";
String master = "http://172.16.70.73:8080/";
KubernetesClient client=null;
Config config = new ConfigBuilder().withMasterUrl(master)
.withTrustCerts(true)
.withNamespace(namespace).build();
try {
client = new DefaultKubernetesClient(config); }catch (Exception e) {
logger.error(e.getMessage(), e);
}
return client;
} /**
* 格式化json
* @param uglyJSONString
* @return
*/
public static String jsonFormatter(Object uglyJSON){
if(uglyJSON == null ){
return "";
}
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser jp = new JsonParser();
String prettyJsonString = gson.toJson(uglyJSON);
return prettyJsonString;
} }

io.fabric8.kubernetes对pv和pvc的增删查改的更多相关文章

  1. 09 . Kubernetes之pv、pvc及使用nfs网络存储应用

    PV,PVC概述 PV的全称是: PersistentVolume (持久化卷),是对底层的共享存储的一种抽象,PV由管理员进行创建和配置,它和具体的底层的共享存储技术的实现方式有关,比如Ceph.G ...

  2. kubernetes 使用 PV 和 PVC 管理数据存储

    文章链接 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题.首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失--容器以干净的状态(镜像最初的状态)重 ...

  3. 13.kubernetes之pv,pvc,configmap(带补充实例)

    管理存储是管理计算的一个明显问题.该PersistentVolume子系统为用户和管理员提供了一个API,用于抽象如何根据消费方式提供存储的详细信息.为此,我们引入了两个新的API资源:Persist ...

  4. Kubernetes中的PV和PVC是啥

    K8S引入了一组叫作Persistent Volume Claim(PVC)和Persistent Volume(PV)的API对象,大大降低了用户声明和使用持久化Volume的门槛. 在Pod的Vo ...

  5. Kubernetes中的PV和PVC

    K8S引入了一组叫作Persistent Volume Claim(PVC)和Persistent Volume(PV)的API对象,大大降低了用户声明和使用持久化Volume的门槛.在Pod的Vol ...

  6. Kubernetes集群PV和PVC详解

    Kubernetes集群高级存储资源PV及PVC 文章目录 Kubernetes集群高级存储资源PV及PVC 1.高级存储PV和PVC概念部分 2.PV和PVC资源的生命周期 3.PV资源介绍与案例配 ...

  7. kubernetes系列11—PV和PVC详解

    本文收录在容器技术学习系列文章总目录 1.认识PV/PVC/StorageClass 1.1 介绍 管理存储是管理计算的一个明显问题.该PersistentVolume子系统为用户和管理员提供了一个A ...

  8. Kubernetes 中的pv和pvc

    原文地址:http://www.cnblogs.com/leidaxia/p/6485646.html 持久卷 PersistentVolumes 本文描述了 Kubernetes 中的 Persis ...

  9. Kubernetes 系列(六):持久化存储 PV与PVC

    在使用容器之后,我们需要考虑的另外一个问题就是持久化存储,怎么保证容器内的数据存储到我们的服务器硬盘上.这样容器在重建后,依然可以使用之前的数据.但是显然存储资源和 CPU 资源以及内存资源有很大不同 ...

随机推荐

  1. docker 数据卷 ---- 基础篇

    用户在使用 Docker 的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这必然涉及容器的数据管理操作.容器中管理数据主要有两种方式:数据 ...

  2. 虚拟化环境下的CentOS7网络环境存在的问题

    http://dgd2010.blog.51cto.com/1539422/1592821/ 为什么要进行一次测试? 在使用CentOS7的过程中发现网络部分有很多与CentOS6所不同的地方. 1. ...

  3. 黄聪:wordpress如何防止发布文章时候自动清除<P>、<br>换行标签

    1.安装[TinyMCE Advanced]插件 2.进入[后台]--[设置]--[TinyMCE Advanced]把这个选项勾上保存即可.

  4. Python的设计哲学

    Beautiful is better than ugly. 优美胜于丑陋 Explicit is better than implicit. 明了胜于晦涩 Simple is better than ...

  5. Linux安装Python虚拟环境virtualenv

    1.安装virtulenv.virtulenvwrapper包 pip install virtualenv virtualenvwrapper 2.virtualenvwrapper是virtual ...

  6. linux编程vim设置

    linux环境下c网络编程vim编辑工具设置,包括自动缩进,tab键对齐等.

  7. rhel6.3-64 yum问题

    问题如下:

  8. ES6系列_4之扩展运算符和rest运算符

    运算符可以很好的为我们解决参数和对象数组未知情况下的编程,让我们的代码更健壮和简洁. 运算符有两种:对象扩展运算符与rest运算符. 1.对象扩展( spread)运算符(...) (1)解决参数个数 ...

  9. NSString 与C++ string字符串的互转(转)

    . string 转换为 NSString std::string str("hello"); NSString *str=[NSString stringWithString:s ...

  10. linux下实时查看log

    1.先切换到:cd usr/local/tomcat5/logs2.tail -f catalina.out3.这样运行时就可以实时查看运行日志了 Ctrl+c 是退出tail命令. 顺便讲一下lin ...