上一篇博客讲的是client-java方式来调用k8s客户端接口进行操作https://blog.csdn.net/dfBeautifulLive/article/details/103084362
这一篇就用io.fabric8方式来调用k8s客户端接口进行操作把!
1.初始化连接
public KubernetesClient fabric8Connection() {
Config config = new ConfigBuilder().withMasterUrl("http://192.168.7.115:8008")
.build();
KubernetesClient client = new DefaultKubernetesClient(config);
return client;
}
2. 删除命名空间
public Map<String, String> deleteNamespace(String namespace) {
Map<String, String> message = new HashMap<>();
//ApiClient client = k8sInit.getConnection();
//CoreV1Api apiInstance = new CoreV1Api(client);
// 由于client-java方式删除报错,所以采用io.fabric8
V1DeleteOptions body = new V1DeleteOptions();
KubernetesClient k8sClient = k8sInit.fabric8Connection();
try {
Boolean isOk = k8sClient.namespaces().withName(namespace).delete();
if (isOk) {
message.put("success", "应用命名空间删除成功!");
} else {
message.put("error", "应用命名空间删除失败!");
}
} catch (Exception e) {
e.printStackTrace();
message.put("error", "应用命名空间删除失败!");
}
return message;
}
参数是String类型的命名空间的名称,返回值删除成功
3.创建pod容器接口
public Map<String, String> createDeployments(DeploymentDTO bodyDto) {
String nameStr = bodyDto.getLabels_workLayer() + "-" + bodyDto.getMetadata_name();
Map<String, String> messages = new HashMap<>();
// 赋值操作
V1Deployment body = new V1Deployment();
body.setApiVersion("apps/v1");
body.kind("Deployment");
// 赋值metadata
V1ObjectMeta objectMeta = new V1ObjectMeta();
if (bodyDto.getLabels_workLayer() != null &&
!bodyDto.getLabels_workLayer().equals("")) {
objectMeta.setName(nameStr);
}else{
objectMeta.setName(bodyDto.getMetadata_name());
}
objectMeta.setNamespace(bodyDto.getMetadata_namespace());
Map<String, String> annotation = new HashMap<>();
annotation.put("k8s.eip.work/displayName", bodyDto.getRemark());
annotation.put("k8s.eip.work/ingress", "false");
annotation.put("k8s.eip.work/service", "ClusterIP");
annotation.put("k8s.eip.work/workload", nameStr);
// 默认不分层
if (bodyDto.getLabels_workLayer() != null &&
!bodyDto.getLabels_workLayer().equals("")) {
objectMeta.setAnnotations(annotation);
}
// 赋值spec
V1DeploymentSpec deploymentSpec = new V1DeploymentSpec();
deploymentSpec.setReplicas(bodyDto.getSpec_replicas());
// templete
Map Labels = new HashMap();
//Labels.put("app", "test-bs");
if (bodyDto.getLabels_workLayer() != null &&
!bodyDto.getLabels_workLayer().equals("")) {
Labels.put("k8s.eip.work/layer", bodyDto.getLabels_workLayer());
Labels.put("k8s.eip.work/name", nameStr);
} else {
Labels.put("app", bodyDto.getMetadata_name());
}
objectMeta.setLabels(Labels);
V1PodTemplateSpec templateSpec = new V1PodTemplateSpec();
templateSpec.setMetadata(objectMeta);
// spec-Template下的Spec
V1PodSpec podSpec = new V1PodSpec();
// spec-Template-spec-container
List<V1Container> listContainer = new ArrayList<>();
V1Container container = new V1Container();
container.setName(bodyDto.getContainers_name());
container.setImage(bodyDto.getContainers_image());
container.setImagePullPolicy(bodyDto.getContainers_imagePullPolicy());
listContainer.add(container);
podSpec.setContainers(listContainer);
templateSpec.setSpec(podSpec);
// spec-selector
Map<String, String> matchLabels = new HashMap<>();
if (bodyDto.getLabels_workLayer() != null &&
!bodyDto.getLabels_workLayer().equals("")) {
matchLabels.put("k8s.eip.work/layer", bodyDto.getLabels_workLayer());
matchLabels.put("k8s.eip.work/name", bodyDto.getLabels_workLayer() + "-" + bodyDto.getMetadata_name());
} else {
matchLabels.put("app", bodyDto.getMetadata_name());
}
V1LabelSelector selector = new V1LabelSelector();
selector.setMatchLabels(matchLabels);
deploymentSpec.setTemplate(templateSpec);
deploymentSpec.setSelector(selector);
body.setMetadata(objectMeta);
body.setSpec(deploymentSpec);
//body.getSpec().getTemplate().getMetadata().setAnnotations(null);
ApiClient client = k8sInit.getConnection();
AppsV1Api apiInstance = new AppsV1Api(client);
try {
V1Deployment result = apiInstance.createNamespacedDeployment(objectMeta.getNamespace(), body, null, null, null);
messages.put("success", "工作负载创建成功!");
} catch (ApiException e) {
if (e.getCode() == 409) {
messages.put("error", "工作负载创建已重复!");
} else if (e.getCode() == 200) {
messages.put("success", "工作负载创建成功!");
} else if (e.getCode() == 201) {
messages.put("error", "工作负载创建已重复!");
} else if (e.getCode() == 401) {
messages.put("error", "无权限操作!");
} else {
messages.put("error", "工作负载创建失败!");
}
log.error("Exception when calling AppsV1Api#createNamespacedDeployment");
log.error("Status code: {}", e.getCode());
log.error("Reason: {}", e.getResponseBody());
log.error("Response headers: {}", e.getResponseHeaders());
}
return messages;
}
参数
{
"kind":"Pod",
"namespace":"test",
"podName":"test-demo",
"containerName":"test-demo",
"containerPort":8990,
"hostPort":8990,
"image":"gsa-service-registration:v1.3"
}
返回值