<dependency> <groupId>io.fabric8</groupId> <artifactId>kubernetes-client</artifactId> <version>4.9.0</version> </dependency> 下列展現代碼中可能包含演示須要的依賴包,須要手動導入。全文手動原創,非其餘博客及官方轉載。
Kubernetes 的資源默認是對內部是可見並能夠訪問的,咱們能夠經過如下方式去訪問Kubernetes 獲取咱們想要的資源。java
1.1 經過安全證書訪問node
須要安全證書文件:apiserver-kubelet-client.crt、apiserver-kubelet-client.key、ca.crtjson
//建立 Config 用於建立 Client Config config = new ConfigBuilder() .withMasterUrl("ip") .withCaCertData("ca.crt內容") .withClientCertData("apiserver-kubelet-client.crt內容") .withClientKeyData("apiserver-kubelet-client.key內容") .build(); // 建立Client KubernetesClient kubernetesClient = new DefaultKubernetesClient(config);
1.2 經過配置文件訪問api
須要配置文件:admin.conf瀏覽器
config = Config.fromKubeconfig("admin.conf內容"); KubernetesClient kubernetesClient = new DefaultKubernetesClient(config);
1.3 kube-proxy 配置後經過 HTTP 直接訪問安全
首先在服務器中開啓kube-proxy代理暴露8080端口:nohup kubectl proxy --port=8080 &服務器
config = new ConfigBuilder().withMasterUrl("http://127.0.0.1:8080").build(); KubernetesClient kubernetesClient = new DefaultKubernetesClient(config); //經過http訪問k8s中的路徑資源 HttpClient httpClient = HttpClientBuilder.create().build(); HttpGet httpGet = new HttpGet("http://127.0.0.1:8080/apis/devices.kubeedge.io/v1alpha1/devices"); HttpResponse response = null; response = httpClient.execute(httpGet); HttpEntity responseEntity = response.getEntity(); StatusLine statusLine = response.getStatusLine(); int code = statusLine.getStatusCode(); String result = EntityUtils.toString(responseEntity);
1.4 http瀏覽器直接訪問K8S資源的,這裏暫不講解。app
//查看Pod MixedOperation<Pod, PodList, DoneablePod, PodResource<Pod, DoneablePod>> operation = client.pods(); //建立Pod,獲取資源處理類,在傳入組裝號的Pod類 NonNamespaceOperation pods =client.pods().inNamespace("default"); //配置Pod,還能夠經過 pod 類組裝,想要運行 這裏的參數是不夠的,僅做演示 Pod pod1 =new PodBuilder().withNewMetadata().withName("pod1").withNamespace("default").and().build(); pods.create(pod1); //刪除同上 pods.delete(pod1);
import io.fabric8.kubernetes.api.model.*; import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.api.model.apps.DeploymentSpec; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author wanchen.chen * @ClassName K8sDeploymentConf * @Despriction: 用於組合 Deployment * @date 2020/5/17 23:40 * @Version 1.0 **/ public class K8sDeploymentConf { /** * * @param appName * @param image * @param nodeName * @return */ public static Deployment getDepandDeployment(String appName,String image,String nodeName){ //參數傳遞 String appGroup = "appGroup"; //參數 Map<String,String> labels = new HashMap<String,String>(); labels.put("app",appGroup); Map<String,String> nodeSelector = new HashMap<String,String>(); nodeSelector.put("name",nodeName); //mataData 數據組裝 ObjectMeta mataData = new ObjectMeta(); mataData.setName(appName); mataData.setLabels(labels); //鏡像設置 Container container = new Container(); container.setName(appName); container.setImage(image); container.setImagePullPolicy("IfNotPresent"); SecurityContext sc = new SecurityContext(); sc.setPrivileged(true); container.setSecurityContext(sc); List<Container> containers = new ArrayList<>(); containers.add(container); //Spec 數據組裝 //1.selector LabelSelector ls =new LabelSelector(); ls.setMatchLabels(labels); //2.template ObjectMeta empMataData = new ObjectMeta(); empMataData.setLabels(labels); PodSpec pods = new PodSpec(); pods.setHostNetwork(true); pods.setNodeSelector(nodeSelector); pods.setContainers(containers); //2.2 組裝 PodTemplateSpec pt = new PodTemplateSpec(); pt.setMetadata(empMataData); pt.setSpec(pods); //3.spec 組合 DeploymentSpec ds = new DeploymentSpec(); ds.setReplicas(1); ds.setSelector(ls); ds.setTemplate(pt); //Deployment 設置 Deployment deployment =new Deployment(); deployment.setApiVersion("apps/v1"); deployment.setKind("Deployment"); deployment.setMetadata(mataData); deployment.setSpec(ds); return deployment; } }
Deployment操做:ui
//將基礎Client轉換爲AppsAPIGroupClient,用於操做deployment AppsAPIGroupClient oclient =client.adapt(AppsAPIGroupClient.class); MixedOperation<Deployment, DeploymentList, DoneableDeployment, RollableScalableResource<Deployment, DoneableDeployment>> operation1 =oclient.deployments(); //將資源轉換爲JSON 查看 DeploymentList deploymentList =operation1.list(); List<Deployment> deployments = deploymentList.getItems(); JSONArray jsonArray=JSON.parseArray(JSON.toJSONString(deployments)); //建立Deployment,返回建立好的Deployment文件 oclient.deployments().create(K8sDeploymentConf.getDepandDeployment("appName","image","nodeName")); //刪除同上,返回結果爲boolean類型數據 oclient.deployments().delete(K8sDeploymentConf.getDepandDeployment("appName","image","nodeName"));
感謝如下博客做業的辛苦創做,參考博客:spa