Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Kubernetes e2e tests using kind #3449

Closed
wants to merge 146 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
146 commits
Select commit Hold shift + click to select a range
e39a18f
Build basic setup for k8s kind e2e tests.
busma13 Oct 12, 2023
7754984
update buildDevDockerImage to take node version.
busma13 Oct 13, 2023
1804317
test that elasticsearch and teraslice are running.
busma13 Oct 13, 2023
a143ecb
update testReaderFile & testJob for k8s e2e
sotojn Oct 13, 2023
b273a9c
add setAlias and registerElasticsearch method to k8e2e tests. Update …
sotojn Oct 16, 2023
abb0c13
Rework waitForElasticsearch and waitForTeraslice
busma13 Oct 16, 2023
51f4ac8
Fix merge error in setAlias function. Use shell.
busma13 Oct 16, 2023
18914ba
Remove k8se2e directory and all its files
busma13 Oct 17, 2023
5ab754e
Add k8se2e to top level package.json's workspaces
busma13 Oct 17, 2023
d370c69
Add k8s directory and kind files to e2e
busma13 Oct 17, 2023
d618b14
revert changes to root dockerfile
busma13 Oct 17, 2023
ae9383a
modify k8s yaml file ports
busma13 Oct 17, 2023
9e39381
update port in masterDeployment yaml file
busma13 Oct 17, 2023
1b01319
Add checks for k8s test environment
busma13 Oct 17, 2023
1ddf937
Add deployKafka, and kindLoadServiceImage functions.
busma13 Oct 17, 2023
0fbf4b7
remove unneeded K8S E2E variable
busma13 Oct 17, 2023
6703b79
rename function that gets e2e directory
busma13 Oct 17, 2023
82f01f1
Check test platform to call service in proper env
busma13 Oct 17, 2023
70aef33
check test platform before starting docker or kind
busma13 Oct 17, 2023
70702ca
create script to run k8s e2e tests
busma13 Oct 17, 2023
d7187cb
Add kafka to teraslice.yaml files
busma13 Oct 18, 2023
a7ac896
Add kafkaDeployment.yaml file
busma13 Oct 18, 2023
c849388
finally get ports forwarded correctly
busma13 Oct 18, 2023
689b9cf
remove unneeeded dockerfile
busma13 Oct 18, 2023
535c531
wip: update global.setup to be k8s aware
busma13 Oct 18, 2023
9785571
update ES port, rename variables
busma13 Oct 18, 2023
4612a4a
Bump fs-extra and @types/fs-extra
dependabot[bot] Oct 12, 2023
994daa3
Merge branch 'master' into k8s-e2e
busma13 Oct 18, 2023
4117a26
Update images for kafka and master deployments
busma13 Oct 18, 2023
67d70e8
fix kubernetes image tag
busma13 Oct 19, 2023
3672386
add env variables and change image used
busma13 Oct 19, 2023
edd611d
change cluster name to k8se2e
busma13 Oct 19, 2023
36c2b42
changes to test setup just to get things running
busma13 Oct 19, 2023
81b5813
new functions: kindStopService, takeDownTeraslice
busma13 Oct 19, 2023
cb0e1ab
temp change to get k8s tests running
busma13 Oct 19, 2023
fd402ab
deploy kafka assets
busma13 Oct 19, 2023
4fe3bfe
Merge branch 'master' into k8s-e2e
busma13 Oct 19, 2023
ce71c3b
Merge pull request #3442 from terascope/master
busma13 Oct 20, 2023
2e1216c
update kafka connections for k8s
sotojn Oct 20, 2023
ba51407
Add ignore pattern for testing in k8s
busma13 Oct 20, 2023
83f9915
Add version variables for kafka and elasticsearch
busma13 Oct 20, 2023
a1c09e7
Refactoring and cleanup.
busma13 Oct 21, 2023
02639ef
update docker compose yaml to use cp-kafka and cp-zookeeper images
sotojn Oct 24, 2023
7d04252
update k8s tests to use cp-kafka and cp-zkeeper
sotojn Oct 24, 2023
d81451d
Refactoring, add error handling, add comments.
busma13 Oct 23, 2023
cb0a430
update to latest esm module for streaming redirects in teraslice
jsnoble Oct 20, 2023
0a45731
remove node 14 from build and test as we migrate away from it
jsnoble Oct 20, 2023
212ca01
release: (minor) [email protected]
jsnoble Oct 20, 2023
31483f3
change node engine version to drop supoprt for node 14
jsnoble Oct 20, 2023
bee9136
update eslint to use latest parser
jsnoble Oct 20, 2023
918032a
bump: (minor) @terascope/[email protected]
jsnoble Oct 20, 2023
b05e1f5
fix test
jsnoble Oct 20, 2023
85e0ac6
change default node version
jsnoble Oct 23, 2023
93421d6
bump: (minor) @terascope/[email protected]
jsnoble Oct 23, 2023
7509d0b
Bump @babel/traverse from 7.22.5 to 7.23.2
dependabot[bot] Oct 16, 2023
b54e702
Build basic setup for k8s kind e2e tests.
busma13 Oct 12, 2023
7e7617d
update buildDevDockerImage to take node version.
busma13 Oct 13, 2023
869caf9
test that elasticsearch and teraslice are running.
busma13 Oct 13, 2023
4f811f4
update testReaderFile & testJob for k8s e2e
sotojn Oct 13, 2023
e3673a9
add setAlias and registerElasticsearch method to k8e2e tests. Update …
sotojn Oct 16, 2023
5431ddc
Rework waitForElasticsearch and waitForTeraslice
busma13 Oct 16, 2023
41c3754
Fix merge error in setAlias function. Use shell.
busma13 Oct 16, 2023
5de2808
Remove k8se2e directory and all its files
busma13 Oct 17, 2023
eb92ecc
Add k8se2e to top level package.json's workspaces
busma13 Oct 17, 2023
c76a180
Add k8s directory and kind files to e2e
busma13 Oct 17, 2023
382bb68
revert changes to root dockerfile
busma13 Oct 17, 2023
db45254
modify k8s yaml file ports
busma13 Oct 17, 2023
dc2f19c
update port in masterDeployment yaml file
busma13 Oct 17, 2023
d063cca
Add checks for k8s test environment
busma13 Oct 17, 2023
a0a6bd1
Add deployKafka, and kindLoadServiceImage functions.
busma13 Oct 17, 2023
678f1d5
remove unneeded K8S E2E variable
busma13 Oct 17, 2023
ce1e719
rename function that gets e2e directory
busma13 Oct 17, 2023
ca9727e
Check test platform to call service in proper env
busma13 Oct 17, 2023
5b2cd0f
check test platform before starting docker or kind
busma13 Oct 17, 2023
55f3b1c
create script to run k8s e2e tests
busma13 Oct 17, 2023
209c458
Add kafka to teraslice.yaml files
busma13 Oct 18, 2023
370008c
Add kafkaDeployment.yaml file
busma13 Oct 18, 2023
6896607
finally get ports forwarded correctly
busma13 Oct 18, 2023
ca71869
remove unneeeded dockerfile
busma13 Oct 18, 2023
0b5f67d
wip: update global.setup to be k8s aware
busma13 Oct 18, 2023
4012f10
update ES port, rename variables
busma13 Oct 18, 2023
02ff69e
Update images for kafka and master deployments
busma13 Oct 18, 2023
1d63144
fix kubernetes image tag
busma13 Oct 19, 2023
276cec8
add env variables and change image used
busma13 Oct 19, 2023
6acf34b
change cluster name to k8se2e
busma13 Oct 19, 2023
48dbf71
changes to test setup just to get things running
busma13 Oct 19, 2023
8193f92
new functions: kindStopService, takeDownTeraslice
busma13 Oct 19, 2023
d94b60c
temp change to get k8s tests running
busma13 Oct 19, 2023
60fcc3d
deploy kafka assets
busma13 Oct 19, 2023
c632b3d
update kafka connections for k8s
sotojn Oct 20, 2023
0c72f9d
Add ignore pattern for testing in k8s
busma13 Oct 20, 2023
af23eea
Add version variables for kafka and elasticsearch
busma13 Oct 20, 2023
5a3b680
Refactoring and cleanup.
busma13 Oct 21, 2023
e9ca68d
update docker compose yaml to use cp-kafka and cp-zookeeper images
sotojn Oct 24, 2023
b18d8d4
update k8s tests to use cp-kafka and cp-zkeeper
sotojn Oct 24, 2023
cd96a20
Refactoring, add error handling, add comments.
busma13 Oct 23, 2023
fb37658
Refactoring, typo fixes, remove logs.
busma13 Oct 24, 2023
392ed6d
Refactor kindLoadServiceImage
busma13 Oct 24, 2023
5553042
Add testPlatform to options and config. Refactor
busma13 Oct 26, 2023
573cdac
Update yaml files with proper labels and hostnames
busma13 Oct 26, 2023
7c5ba7d
Fix label used to test kafka
busma13 Oct 26, 2023
9ed219e
Refactor so teraslice only starts once
busma13 Oct 26, 2023
8de6358
rename function that starts services
busma13 Oct 26, 2023
4bcec6c
implement kindLoadServiceImage function
busma13 Oct 27, 2023
547a60a
Add keep open variable to e2e config
busma13 Oct 27, 2023
c4865af
add cp kafka & zkeeper images to e2e tests
sotojn Oct 27, 2023
ebe5351
Merge branch 'k8s-e2e' of github.com:terascope/teraslice into k8s-e2e…
sotojn Oct 27, 2023
63ce8c3
fix bug that duplicates e2e logs
sotojn Oct 27, 2023
5a8b2a8
merge error fix, don't load zookeeper separately
busma13 Oct 27, 2023
162638c
Use cpkafka images that match with kafka 3.1
busma13 Oct 27, 2023
ee11c1c
Hard code kafka and ES versions for k8s e2e
busma13 Oct 27, 2023
2758c41
Remove unneeded namespace file
busma13 Oct 27, 2023
3eeffda
Add comments, delete logs.
busma13 Oct 27, 2023
2915835
Add comments.
busma13 Oct 30, 2023
86e789f
Add e2e-k8s-tests to github workflows test.yml
busma13 Oct 31, 2023
21a915f
Update test to destroy kind cluster after tests
busma13 Oct 31, 2023
ea42b23
Fix e2e k8s test wirkflow to install kind first.
busma13 Oct 31, 2023
204c40d
Trying an older version of kind-action
busma13 Oct 31, 2023
cf682b8
Remove console logs
busma13 Oct 31, 2023
97510fd
Fix typo causing error in github action
busma13 Oct 31, 2023
3263a55
Change expected ES cluster_name.
busma13 Oct 31, 2023
182b8f3
Add CI check to kind and kubectl install tests.
busma13 Oct 31, 2023
f8645aa
sync e2e package.json file
busma13 Oct 31, 2023
85e9d2c
Get keep-open variable from options.
busma13 Oct 31, 2023
7ef0ac3
Adding debug of HOST_IP
busma13 Oct 31, 2023
8b74f59
Add delays
busma13 Oct 31, 2023
05a2893
Remove keep-open from test script
busma13 Oct 31, 2023
6b54826
Add more debugs
busma13 Oct 31, 2023
82e39b7
Add host ip to setAlias function.
busma13 Oct 31, 2023
91b9404
Add extra logging and debugging
busma13 Nov 1, 2023
06d5c0b
Add more logs
busma13 Nov 1, 2023
bbd2724
More log fixes
busma13 Nov 1, 2023
bcb2f4f
more logging
busma13 Nov 1, 2023
32e82d8
more logs
busma13 Nov 1, 2023
aa5155b
log es data
busma13 Nov 1, 2023
f3df257
show master logs
busma13 Nov 1, 2023
05b3be5
Add worker and ex logs
busma13 Nov 1, 2023
131ca88
fix typo
busma13 Nov 1, 2023
ecf3cbe
change log length to 1000
busma13 Nov 1, 2023
fdbbf9f
Print out kubectl describe for worker
busma13 Nov 1, 2023
ceafc80
typo in command
busma13 Nov 1, 2023
74103aa
more logs
busma13 Nov 1, 2023
07b44ef
Update resource requests and limits for e2e jobs
busma13 Nov 2, 2023
2da4fa4
update resource requests for data generator jobs
busma13 Nov 2, 2023
afb04f9
Add logging functions
busma13 Nov 2, 2023
8ce6270
Remove all logs and testing env changes.
busma13 Nov 2, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -245,3 +245,41 @@ jobs:
- name: Test ${{ matrix.search-version }}
run: yarn --silent test:${{ matrix.search-version }} --node-version ${{ matrix.node-version }}
working-directory: ./e2e

e2e-k8s-tests:
runs-on: ubuntu-latest
strategy:
# opensearch is finiky, keep testing others if it fails
fail-fast: false
matrix:
node-version: [16.19.1, 18.16.0]
steps:
- name: Check out code
uses: actions/checkout@v3

- name: Setup Node ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'yarn'

# we login to docker to avoid docker pull limit rates
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Install and build packages
run: yarn setup
env:
YARN_SETUP_ARGS: "--prod=false --silent"

- name: Install Kind and Kubectl
uses: helm/[email protected]
with:
install_only: "true"

- name: Test k8s elasticsearch7
run: yarn --silent test:k8s --node-version ${{ matrix.node-version }}
working-directory: ./e2e
26 changes: 21 additions & 5 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,16 +73,32 @@ services:
cap_add:
- IPC_LOCK
kafka:
image: terascope/kafka-zookeeper:v1.1.0
platform: linux/amd64 # platform specified to force amd64 on arm MacOS docker
image: confluentinc/cp-kafka:7.2.0 # Has kafka 3.2.0
ports:
- "9094:9094"
restart: unless-stopped
depends_on:
- zookeeper
networks:
- cluster
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENERS: INTERNAL://kafka:9092,OUTSIDE://0.0.0.0:9094
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,OUTSIDE://localhost:9094
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
zookeeper:
image: confluentinc/cp-zookeeper:7.2.0
ports:
- "2181:2181"
- "9092:9092"
restart: unless-stopped
networks:
- cluster
volumes:
- kafka-data:/kafka
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
minio:
image: minio/minio:RELEASE.2023-09-30T07-02-29Z
ports:
Expand Down
4 changes: 4 additions & 0 deletions e2e/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

const config = require('../jest.config.base')(__dirname);

// TODO: update arrays to run tests specific to platform.
// First array is for tests skipped in kubernetes.
// Second array is for tests skipped in native.
config.testPathIgnorePatterns = process.env.TEST_PLATFORM === 'kubernetes' ? ['data/recovery-spec', 'cluster/worker-allocation-spec', 'cluster/state-spec'] : [];
config.collectCoverage = false;
delete config.transform;
module.exports = config;
45 changes: 45 additions & 0 deletions e2e/k8s/elasticsearchDeployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: elasticsearch
labels:
app.kubernetes.io/name: elasticsearch
app.kubernetes.io/component: master
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: elasticsearch
app.kubernetes.io/component: master
template:
metadata:
labels:
app.kubernetes.io/name: elasticsearch
app.kubernetes.io/component: master
spec:
containers:
- name: elasticsearch
image: elasticsearch:7.9.3
ports:
- containerPort: 9200
env:
- name: ES_JAVA_OPTS
value: "-Xms512m -Xmx512m"
- name: discovery.type
value: single-node
---
kind: Service
apiVersion: v1
metadata:
name: elasticsearch
labels:
app.kubernetes.io/name: elasticsearch
spec:
selector:
app.kubernetes.io/name: elasticsearch
app.kubernetes.io/component: master
ports:
- port: 9200
targetPort: 9200
nodePort: 30200 # the external port teraslice can be accessed on
type: NodePort
54 changes: 54 additions & 0 deletions e2e/k8s/kafkaDeployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: cpkafka
labels:
app.kubernetes.io/name: cpkafka
app.kubernetes.io/component: master
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: cpkafka
app.kubernetes.io/component: master
template:
metadata:
labels:
app.kubernetes.io/name: cpkafka
app.kubernetes.io/component: master
spec:
containers:
- name: cpkafka
image: confluentinc/cp-kafka:7.1.9
env:
- name: KAFKA_BROKER_ID
value: "1"
- name: KAFKA_ZOOKEEPER_CONNECT
value: zookeeper:2181
- name: KAFKA_ADVERTISED_LISTENERS
value: INTERNAL://cpkafka.services-dev1:9092
- name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
value: INTERNAL:PLAINTEXT
- name: KAFKA_INTER_BROKER_LISTENER_NAME
value: INTERNAL
- name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
value: "1"
ports:
- containerPort: 9092
---
kind: Service
apiVersion: v1
metadata:
name: cpkafka
labels:
app.kubernetes.io/name: cpkafka
spec:
type: NodePort
selector:
app.kubernetes.io/name: cpkafka
app.kubernetes.io/component: master
ports:
- port: 9092
name: cpkafka
targetPort: 9092
nodePort: 30092
12 changes: 12 additions & 0 deletions e2e/k8s/kindConfig.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
kind: Cluster
name: k8se2e
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30200
hostPort: 49200
- containerPort: 30678
hostPort: 45678
- containerPort: 30092
hostPort: 49092
35 changes: 35 additions & 0 deletions e2e/k8s/masterConfig/teraslice.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
terafoundation:
environment: 'development'
log_level: debug
connectors:
elasticsearch:
default:
apiVersion: "5.6"
host:
- "elasticsearch.services-dev1:9200"
elasticsearch-next:
default:
node:
- "http://elasticsearch.services-dev1:9200"
kafka:
default:
brokers:
- "cpkafka.services-dev1:9092"
teraslice:
worker_disconnect_timeout: 60000
node_disconnect_timeout: 60000
slicer_timeout: 60000
shutdown_timeout: 30000
assets_directory: '/app/assets/'
cluster_manager_type: "kubernetes"
master: true
master_hostname: "127.0.0.1"
kubernetes_image: "teraslice-workspace:e2e"
kubernetes_image_pull_secrets:
- "docker-tera1-secret"
kubernetes_namespace: "ts-dev1"
kubernetes_overrides_enabled: true
kubernetes_priority_class_name: 'high-priority'
name: "ts-dev1"
cpu: 1
memory: 536870912
53 changes: 53 additions & 0 deletions e2e/k8s/masterDeployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: teraslice-master
labels:
app.kubernetes.io/name: teraslice
app.kubernetes.io/component: master
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: teraslice
app.kubernetes.io/component: master
template:
metadata:
labels:
app.kubernetes.io/name: teraslice
app.kubernetes.io/component: master
app.kubernetes.io/instance: k8se2e
spec:
containers:
- name: teraslice-master
image: teraslice-workspace:e2e
ports:
- containerPort: 5678
volumeMounts:
- mountPath: /app/config # defines the directory
name: config
volumes:
- name: config
configMap:
name: teraslice-master
items:
- key: teraslice.yaml
path: teraslice.yaml # the filename that the configMap gets written to, inside the matching mountPath
imagePullSecrets:
- name: docker-tera1-secret
---
kind: Service
apiVersion: v1
metadata:
name: teraslice-master
labels:
app.kubernetes.io/name: teraslice
spec:
selector:
app.kubernetes.io/name: teraslice
app.kubernetes.io/component: master
ports:
- port: 5678
targetPort: 5678
nodePort: 30678 # the external port teraslice can be accessed on
type: NodePort
7 changes: 7 additions & 0 deletions e2e/k8s/priorityClass.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000
globalDefault: false
description: "This priority class is for Teraslice pods."
9 changes: 9 additions & 0 deletions e2e/k8s/role.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: teraslice-all-ts-dev1
namespace: ts-dev1
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
13 changes: 13 additions & 0 deletions e2e/k8s/roleBinding.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: teraslice-all-ts-dev1
namespace: ts-dev1
subjects:
- kind: ServiceAccount
name: default
namespace: ts-dev1
roleRef:
kind: Role
name: teraslice-all-ts-dev1
apiGroup: "rbac.authorization.k8s.io"
4 changes: 4 additions & 0 deletions e2e/k8s/services-ns.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
kind: Namespace
apiVersion: v1
metadata:
name: services-dev1
4 changes: 4 additions & 0 deletions e2e/k8s/ts-ns.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
kind: Namespace
apiVersion: v1
metadata:
name: ts-dev1
33 changes: 33 additions & 0 deletions e2e/k8s/workerConfig/teraslice.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
terafoundation:
environment: 'development'
log_level: debug
connectors:
elasticsearch:
default:
apiVersion: "5.6"
host:
- "elasticsearch.services-dev1:9200"
elasticsearch-next:
default:
node:
- "http://elasticsearch.services-dev1:9200"
kafka:
default:
brokers:
- "cpkafka.services-dev1:9092"
teraslice:
worker_disconnect_timeout: 60000
node_disconnect_timeout: 60000
slicer_timeout: 60000
shutdown_timeout: 30000
assets_directory: '/app/assets/'
cluster_manager_type: "kubernetes"
master: false
master_hostname: "teraslice-master"
kubernetes_image: "teraslice-workspace:e2e"
kubernetes_namespace: "ts-dev1"
kubernetes_overrides_enabled: true
kubernetes_priority_class_name: 'high-priority'
name: "ts-dev1"
cpu: 1
memory: 536870912
Loading