问题:
在使用部署文件进行部署时,发现总是报“the server could not find the requested resource”错误,后来发现原来是部署文件中声明的 apiVersion头的问题,
对于kubernetes 1.8.2 api, 创建部署文件时,使用
apiVersion:apps/v1beta2
或
apiVersion:apps/v1beta1
均会报上述错误。
public void testCreateDeploymentWithFile(){
String sfile = "E:\\deployment.yaml";
File file = new File(sfile);
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
List<HasMetadata> result = client.load(fis).createOrReplace();
System.out.println("result:" + result);
} catch (Exception e) {
e.printStackTrace();
} finally{
if(fis != null){
try {
fis.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}
解决:
将apiVersion值换成
apiVersion: extensions/v1beta1
问题解决。
替换方式可以使用下面代码的简单替换方式:
String fileContent2 = fileContent.replaceFirst("^apiVersion:.*\r\nkind: Deployment",
"apiVersion: extensions/v1beta1\r\nkind: Deployment");
注意:
若部署文件中包含服务(service)部署描述,则服务的apiVersion不能为extensions/v1beta1, 应为v1,即:
apiVersion:v1
参考:
1、Support complete app deployment with multiple pods, services using yaml file #906. https://github.com/fabric8io/kubernetes-client/issues/906
2、how to load yaml file #170. https://github.com/kubernetes-client/java/issues/170