Apply k8s files for rook
parent
1814ab4f64
commit
cebe329680
|
|
@ -327,6 +327,7 @@ class BuildParameters {
|
||||||
cachePushOverrideCommand: input_1.default.cachePushOverrideCommand(),
|
cachePushOverrideCommand: input_1.default.cachePushOverrideCommand(),
|
||||||
readInputOverrideCommand: input_1.default.readInputOverrideCommand(),
|
readInputOverrideCommand: input_1.default.readInputOverrideCommand(),
|
||||||
readInputFromOverrideList: input_1.default.readInputFromOverrideList(),
|
readInputFromOverrideList: input_1.default.readInputFromOverrideList(),
|
||||||
|
kubeStorageClass: input_1.default.kubeStorageClass,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -1916,7 +1917,7 @@ const async_wait_until_1 = __importDefault(__nccwpck_require__(41299));
|
||||||
const kubernetes_job_spec_factory_1 = __importDefault(__nccwpck_require__(1739));
|
const kubernetes_job_spec_factory_1 = __importDefault(__nccwpck_require__(1739));
|
||||||
const kubernetes_service_account_1 = __importDefault(__nccwpck_require__(42915));
|
const kubernetes_service_account_1 = __importDefault(__nccwpck_require__(42915));
|
||||||
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
||||||
const cloud_runner_system_1 = __nccwpck_require__(66879);
|
const kubernetes_rook_1 = __importDefault(__nccwpck_require__(20859));
|
||||||
class Kubernetes {
|
class Kubernetes {
|
||||||
constructor(buildParameters) {
|
constructor(buildParameters) {
|
||||||
this.buildGuid = '';
|
this.buildGuid = '';
|
||||||
|
|
@ -1945,14 +1946,7 @@ class Kubernetes {
|
||||||
this.pvcName = `unity-builder-pvc-${buildGuid}`;
|
this.pvcName = `unity-builder-pvc-${buildGuid}`;
|
||||||
this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`;
|
this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`;
|
||||||
this.serviceAccountName = `service-account-${buildGuid}`;
|
this.serviceAccountName = `service-account-${buildGuid}`;
|
||||||
if (yield cloud_runner_system_1.CloudRunnerSystem.Run(`kubectl`)) {
|
yield kubernetes_rook_1.default.InitRook(buildParameters.kubeStorageClass);
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`
|
|
||||||
git clone --single-branch --branch v1.8.6 https://github.com/rook/rook.git
|
|
||||||
cd rook/deploy/examples
|
|
||||||
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
|
|
||||||
kubectl create -f cluster.yaml
|
|
||||||
`);
|
|
||||||
}
|
|
||||||
yield kubernetes_storage_1.default.createPersistentVolumeClaim(buildParameters, this.pvcName, this.kubeClient, this.namespace);
|
yield kubernetes_storage_1.default.createPersistentVolumeClaim(buildParameters, this.pvcName, this.kubeClient, this.namespace);
|
||||||
yield kubernetes_service_account_1.default.createServiceAccount(this.serviceAccountName, this.namespace, this.kubeClient);
|
yield kubernetes_service_account_1.default.createServiceAccount(this.serviceAccountName, this.namespace, this.kubeClient);
|
||||||
}
|
}
|
||||||
|
|
@ -2220,6 +2214,103 @@ class KubernetesJobSpecFactory {
|
||||||
exports["default"] = KubernetesJobSpecFactory;
|
exports["default"] = KubernetesJobSpecFactory;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 20859:
|
||||||
|
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
|
const fs_1 = __importDefault(__nccwpck_require__(57147));
|
||||||
|
const cloud_runner_system_1 = __nccwpck_require__(66879);
|
||||||
|
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
||||||
|
class KubernetesRook {
|
||||||
|
static InitRook(storageName) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
if (storageName === '' && (yield cloud_runner_system_1.CloudRunnerSystem.Run(`kubectl`))) {
|
||||||
|
storageName = KubernetesRook.rookStorageName;
|
||||||
|
cloud_runner_logger_1.default.log('Using rook storage as no kubeStorageClass provided');
|
||||||
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`
|
||||||
|
git clone --single-branch --branch v1.8.6 https://github.com/rook/rook.git
|
||||||
|
cd rook/deploy/examples
|
||||||
|
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
|
||||||
|
kubectl create -f cluster.yaml
|
||||||
|
`);
|
||||||
|
fs_1.default.writeFileSync('filesystem.yaml', `
|
||||||
|
apiVersion: ceph.rook.io/v1
|
||||||
|
kind: CephFilesystem
|
||||||
|
metadata:
|
||||||
|
name: myfs
|
||||||
|
namespace: rook-ceph
|
||||||
|
spec:
|
||||||
|
metadataPool:
|
||||||
|
replicated:
|
||||||
|
size: 3
|
||||||
|
dataPools:
|
||||||
|
- name: replicated
|
||||||
|
replicated:
|
||||||
|
size: 3
|
||||||
|
preserveFilesystemOnDelete: true
|
||||||
|
metadataServer:
|
||||||
|
activeCount: 1
|
||||||
|
activeStandby: true
|
||||||
|
`);
|
||||||
|
fs_1.default.writeFileSync('storageclass.yaml', `
|
||||||
|
apiVersion: storage.k8s.io/v1
|
||||||
|
kind: StorageClass
|
||||||
|
metadata:
|
||||||
|
name: ${storageName}
|
||||||
|
# Change "rook-ceph" provisioner prefix to match the operator namespace if needed
|
||||||
|
provisioner: rook-ceph.cephfs.csi.ceph.com
|
||||||
|
parameters:
|
||||||
|
# clusterID is the namespace where the rook cluster is running
|
||||||
|
# If you change this namespace, also change the namespace below where the secret namespaces are defined
|
||||||
|
clusterID: rook-ceph
|
||||||
|
|
||||||
|
# CephFS filesystem name into which the volume shall be created
|
||||||
|
fsName: myfs
|
||||||
|
|
||||||
|
# Ceph pool into which the volume shall be created
|
||||||
|
# Required for provisionVolume: "true"
|
||||||
|
pool: myfs-replicated
|
||||||
|
|
||||||
|
# The secrets contain Ceph admin credentials. These are generated automatically by the operator
|
||||||
|
# in the same namespace as the cluster.
|
||||||
|
csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner
|
||||||
|
csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
|
||||||
|
csi.storage.k8s.io/controller-expand-secret-name: rook-csi-cephfs-provisioner
|
||||||
|
csi.storage.k8s.io/controller-expand-secret-namespace: rook-ceph
|
||||||
|
csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node
|
||||||
|
csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
|
||||||
|
reclaimPolicy: Delete
|
||||||
|
`);
|
||||||
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`
|
||||||
|
kubectl create -f storageclass.yaml -f filesystem.yaml
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cloud_runner_logger_1.default.log(`Using kubeStorageClass ${storageName}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
KubernetesRook.rookStorageName = 'rook-cephfs-game-ci';
|
||||||
|
exports["default"] = KubernetesRook;
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 71586:
|
/***/ 71586:
|
||||||
|
|
@ -2377,6 +2468,7 @@ const core = __importStar(__nccwpck_require__(42186));
|
||||||
const k8s = __importStar(__nccwpck_require__(89679));
|
const k8s = __importStar(__nccwpck_require__(89679));
|
||||||
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
||||||
const yaml_1 = __importDefault(__nccwpck_require__(44603));
|
const yaml_1 = __importDefault(__nccwpck_require__(44603));
|
||||||
|
const kubernetes_rook_1 = __importDefault(__nccwpck_require__(20859));
|
||||||
class KubernetesStorage {
|
class KubernetesStorage {
|
||||||
static createPersistentVolumeClaim(buildParameters, pvcName, kubeClient, namespace) {
|
static createPersistentVolumeClaim(buildParameters, pvcName, kubeClient, namespace) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
|
@ -2441,7 +2533,7 @@ class KubernetesStorage {
|
||||||
};
|
};
|
||||||
pvc.spec = {
|
pvc.spec = {
|
||||||
accessModes: ['ReadWriteOnce'],
|
accessModes: ['ReadWriteOnce'],
|
||||||
storageClassName: process.env.K8s_STORAGE_CLASS || 'standard',
|
storageClassName: buildParameters.kubeStorageClass === '' ? kubernetes_rook_1.default.rookStorageName : buildParameters.kubeStorageClass,
|
||||||
resources: {
|
resources: {
|
||||||
requests: {
|
requests: {
|
||||||
storage: buildParameters.kubeVolumeSize,
|
storage: buildParameters.kubeVolumeSize,
|
||||||
|
|
@ -4088,6 +4180,9 @@ class Input {
|
||||||
static get kubeVolumeSize() {
|
static get kubeVolumeSize() {
|
||||||
return Input.getInput('kubeVolumeSize') || '5Gi';
|
return Input.getInput('kubeVolumeSize') || '5Gi';
|
||||||
}
|
}
|
||||||
|
static get kubeStorageClass() {
|
||||||
|
return Input.getInput('kubeStorageClass') || '';
|
||||||
|
}
|
||||||
static ToEnvVarFormat(input) {
|
static ToEnvVarFormat(input) {
|
||||||
return input
|
return input
|
||||||
.replace(/([A-Z])/g, ' $1')
|
.replace(/([A-Z])/g, ' $1')
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1 @@
|
||||||
|
sample
|
||||||
|
|
@ -40,6 +40,7 @@ class BuildParameters {
|
||||||
public cloudRunnerCpu!: string;
|
public cloudRunnerCpu!: string;
|
||||||
public kubeVolumeSize!: string;
|
public kubeVolumeSize!: string;
|
||||||
public kubeVolume!: string;
|
public kubeVolume!: string;
|
||||||
|
public kubeStorageClass!: string;
|
||||||
public chownFilesTo!: string;
|
public chownFilesTo!: string;
|
||||||
public customJobHooks!: string;
|
public customJobHooks!: string;
|
||||||
public cachePushOverrideCommand!: string;
|
public cachePushOverrideCommand!: string;
|
||||||
|
|
@ -133,6 +134,7 @@ class BuildParameters {
|
||||||
cachePushOverrideCommand: Input.cachePushOverrideCommand(),
|
cachePushOverrideCommand: Input.cachePushOverrideCommand(),
|
||||||
readInputOverrideCommand: Input.readInputOverrideCommand(),
|
readInputOverrideCommand: Input.readInputOverrideCommand(),
|
||||||
readInputFromOverrideList: Input.readInputFromOverrideList(),
|
readInputFromOverrideList: Input.readInputFromOverrideList(),
|
||||||
|
kubeStorageClass: Input.kubeStorageClass,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ import KubernetesJobSpecFactory from './kubernetes-job-spec-factory';
|
||||||
import KubernetesServiceAccount from './kubernetes-service-account';
|
import KubernetesServiceAccount from './kubernetes-service-account';
|
||||||
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
||||||
import { CoreV1Api } from '@kubernetes/client-node';
|
import { CoreV1Api } from '@kubernetes/client-node';
|
||||||
import { CloudRunnerSystem } from '../../cli/remote-client/remote-client-services/cloud-runner-system';
|
import KubernetesRook from './kubernetes-rook';
|
||||||
|
|
||||||
class Kubernetes implements CloudRunnerProviderInterface {
|
class Kubernetes implements CloudRunnerProviderInterface {
|
||||||
private kubeConfig: k8s.KubeConfig;
|
private kubeConfig: k8s.KubeConfig;
|
||||||
|
|
@ -51,14 +51,7 @@ class Kubernetes implements CloudRunnerProviderInterface {
|
||||||
this.pvcName = `unity-builder-pvc-${buildGuid}`;
|
this.pvcName = `unity-builder-pvc-${buildGuid}`;
|
||||||
this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`;
|
this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`;
|
||||||
this.serviceAccountName = `service-account-${buildGuid}`;
|
this.serviceAccountName = `service-account-${buildGuid}`;
|
||||||
if (await CloudRunnerSystem.Run(`kubectl`)) {
|
await KubernetesRook.InitRook(buildParameters.kubeStorageClass);
|
||||||
await CloudRunnerSystem.Run(`
|
|
||||||
git clone --single-branch --branch v1.8.6 https://github.com/rook/rook.git
|
|
||||||
cd rook/deploy/examples
|
|
||||||
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
|
|
||||||
kubectl create -f cluster.yaml
|
|
||||||
`);
|
|
||||||
}
|
|
||||||
await KubernetesStorage.createPersistentVolumeClaim(
|
await KubernetesStorage.createPersistentVolumeClaim(
|
||||||
buildParameters,
|
buildParameters,
|
||||||
this.pvcName,
|
this.pvcName,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,80 @@
|
||||||
|
import fs from 'fs';
|
||||||
|
import { CloudRunnerSystem } from '../../cli/remote-client/remote-client-services/cloud-runner-system';
|
||||||
|
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
||||||
|
|
||||||
|
class KubernetesRook {
|
||||||
|
public static readonly rookStorageName = 'rook-cephfs-game-ci';
|
||||||
|
public static async InitRook(storageName) {
|
||||||
|
if (storageName === '' && (await CloudRunnerSystem.Run(`kubectl`))) {
|
||||||
|
storageName = KubernetesRook.rookStorageName;
|
||||||
|
CloudRunnerLogger.log('Using rook storage as no kubeStorageClass provided');
|
||||||
|
await CloudRunnerSystem.Run(`
|
||||||
|
git clone --single-branch --branch v1.8.6 https://github.com/rook/rook.git
|
||||||
|
cd rook/deploy/examples
|
||||||
|
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
|
||||||
|
kubectl create -f cluster.yaml
|
||||||
|
`);
|
||||||
|
fs.writeFileSync(
|
||||||
|
'filesystem.yaml',
|
||||||
|
`
|
||||||
|
apiVersion: ceph.rook.io/v1
|
||||||
|
kind: CephFilesystem
|
||||||
|
metadata:
|
||||||
|
name: myfs
|
||||||
|
namespace: rook-ceph
|
||||||
|
spec:
|
||||||
|
metadataPool:
|
||||||
|
replicated:
|
||||||
|
size: 3
|
||||||
|
dataPools:
|
||||||
|
- name: replicated
|
||||||
|
replicated:
|
||||||
|
size: 3
|
||||||
|
preserveFilesystemOnDelete: true
|
||||||
|
metadataServer:
|
||||||
|
activeCount: 1
|
||||||
|
activeStandby: true
|
||||||
|
`,
|
||||||
|
);
|
||||||
|
fs.writeFileSync(
|
||||||
|
'storageclass.yaml',
|
||||||
|
`
|
||||||
|
apiVersion: storage.k8s.io/v1
|
||||||
|
kind: StorageClass
|
||||||
|
metadata:
|
||||||
|
name: ${storageName}
|
||||||
|
# Change "rook-ceph" provisioner prefix to match the operator namespace if needed
|
||||||
|
provisioner: rook-ceph.cephfs.csi.ceph.com
|
||||||
|
parameters:
|
||||||
|
# clusterID is the namespace where the rook cluster is running
|
||||||
|
# If you change this namespace, also change the namespace below where the secret namespaces are defined
|
||||||
|
clusterID: rook-ceph
|
||||||
|
|
||||||
|
# CephFS filesystem name into which the volume shall be created
|
||||||
|
fsName: myfs
|
||||||
|
|
||||||
|
# Ceph pool into which the volume shall be created
|
||||||
|
# Required for provisionVolume: "true"
|
||||||
|
pool: myfs-replicated
|
||||||
|
|
||||||
|
# The secrets contain Ceph admin credentials. These are generated automatically by the operator
|
||||||
|
# in the same namespace as the cluster.
|
||||||
|
csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner
|
||||||
|
csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
|
||||||
|
csi.storage.k8s.io/controller-expand-secret-name: rook-csi-cephfs-provisioner
|
||||||
|
csi.storage.k8s.io/controller-expand-secret-namespace: rook-ceph
|
||||||
|
csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node
|
||||||
|
csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
|
||||||
|
reclaimPolicy: Delete
|
||||||
|
`,
|
||||||
|
);
|
||||||
|
await CloudRunnerSystem.Run(`
|
||||||
|
kubectl create -f storageclass.yaml -f filesystem.yaml
|
||||||
|
`);
|
||||||
|
} else {
|
||||||
|
CloudRunnerLogger.log(`Using kubeStorageClass ${storageName}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default KubernetesRook;
|
||||||
|
|
@ -4,6 +4,7 @@ import * as k8s from '@kubernetes/client-node';
|
||||||
import BuildParameters from '../../build-parameters';
|
import BuildParameters from '../../build-parameters';
|
||||||
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
||||||
import YAML from 'yaml';
|
import YAML from 'yaml';
|
||||||
|
import KubernetesRook from './kubernetes-rook';
|
||||||
|
|
||||||
class KubernetesStorage {
|
class KubernetesStorage {
|
||||||
public static async createPersistentVolumeClaim(
|
public static async createPersistentVolumeClaim(
|
||||||
|
|
@ -83,7 +84,8 @@ class KubernetesStorage {
|
||||||
};
|
};
|
||||||
pvc.spec = {
|
pvc.spec = {
|
||||||
accessModes: ['ReadWriteOnce'],
|
accessModes: ['ReadWriteOnce'],
|
||||||
storageClassName: process.env.K8s_STORAGE_CLASS || 'standard',
|
storageClassName:
|
||||||
|
buildParameters.kubeStorageClass === '' ? KubernetesRook.rookStorageName : buildParameters.kubeStorageClass,
|
||||||
resources: {
|
resources: {
|
||||||
requests: {
|
requests: {
|
||||||
storage: buildParameters.kubeVolumeSize,
|
storage: buildParameters.kubeVolumeSize,
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,7 @@ class Input {
|
||||||
static get region(): string {
|
static get region(): string {
|
||||||
return Input.getInput('region') || 'eu-west-2';
|
return Input.getInput('region') || 'eu-west-2';
|
||||||
}
|
}
|
||||||
|
|
||||||
static async githubRepo() {
|
static async githubRepo() {
|
||||||
return (
|
return (
|
||||||
Input.getInput('GITHUB_REPOSITORY') ||
|
Input.getInput('GITHUB_REPOSITORY') ||
|
||||||
|
|
@ -274,6 +275,10 @@ class Input {
|
||||||
return Input.getInput('kubeVolumeSize') || '5Gi';
|
return Input.getInput('kubeVolumeSize') || '5Gi';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static get kubeStorageClass(): string {
|
||||||
|
return Input.getInput('kubeStorageClass') || '';
|
||||||
|
}
|
||||||
|
|
||||||
public static ToEnvVarFormat(input: string) {
|
public static ToEnvVarFormat(input: string) {
|
||||||
return input
|
return input
|
||||||
.replace(/([A-Z])/g, ' $1')
|
.replace(/([A-Z])/g, ' $1')
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue