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. C#模板引擎 DotLiquid

    DotLiquid 是一个简单.快速和安全的模板引擎,移植自 Ruby 的 Liquid 标签. 示例模板: <p>{{ user.name }} has to do:</p> ...

  2. UVA之1121 - Subsequence

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/SunnyYoona/article/details/25840365 [题目] A sequence ...

  3. zookeeper命名服务

    zookeeper概念 zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,底层组成单元是znode,对于zookeeper来说,所有的功能都是基于znode来实现的,因此有万物皆节点 ...

  4. POJ3070 矩阵快速幂模板

    题目:http://poj.org/problem?id=3070 矩阵快速幂模板.mod写到乘法的定义部分就行了. 别忘了 I ( ) 和 i n i t ( ) 要传引用! #include< ...

  5. ASP/ASP.NET/VB6文件上传

    1. asp asp 上传文件真的蛋疼,很麻烦,有时候就用第三方组件,或者比较复杂的写法来实现无组件上传. 测试OK的一个叫风声无组件上传类 V2.1 [Fonshen UpLoadClass Ver ...

  6. php常量的实现

    1.php的常量 就是一个简单的标识符,脚本执行期间不会改变,大小写敏感,默认大写. 常量的存储结构 typedef struct _zend_constant { zval value; //常量值 ...

  7. 黄聪:国内com域名转移到Godaddy详细教程(转)

    原文:http://www.cnblogs.com/hsapphire/archive/2010/01/16/1649743.html 最近CCTV进行大量报道色情新闻,还举报CNNIC监管CN域名不 ...

  8. cuDNN下载地址和指南

    我出现了报错 Could not find 'cudnn64_7.dll'. TensorFlow requires that this DLL be installed in a directory ...

  9. 学习笔记之SQL / MySQL

    SQL Fiddle(在线执行SQL语句的网站) http://www.sqlfiddle.com/ MySQL https://www.mysql.com/ MySQL :: MySQL 5.7 R ...

  10. Linux gdb调试器用法全面解析

    GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序. 让被调试的程序在工程师指定的断 ...