Example
Copy $container = K8s::container()
->setName('mysql')
->setImage('mysql', '5.7')
->setPorts([
['name' => 'mysql', 'protocol' => 'TCP', 'containerPort' => 3306],
])
->addPort(3307, 'TCP', 'mysql-alt')
->setCommand(['mysqld'])
->setArgs(['--test']);
Setting environment variables
To set the environment variable, simply call ->setEnv()
:
Copy $container->setEnv([
'MYSQL_ROOT_PASSWORD' => 'test',
]);
$container->addEnv('MYSQL_DATABASE', 'my_db') // this will append an env
Adding variables from references
In the below examples, the ref_key
refers to the key on which the data is stored within a ConfigMap or a secret.
Copy $container->addSecretKeyRef('MYSQL_ROOT_PASSWORD', 'secret-name', 'ref_key');
$container->addSecretKeyRefs([
'MYSQL_ROOT_PASSWORD' => ['secret-name', 'ref_key'],
'MYSQL_DATABASE' => ['secret-name', 'ref_key'],
]);
Copy $container->addConfigMapRef('MYSQL_ROOT_PASSWORD', 'configmap-name', 'ref_key');
$container->addConfigMapRefs([
'MYSQL_ROOT_PASSWORD' => ['cm-name', 'ref_key'],
'MYSQL_DATABASE' => ['cm-name', 'ref_key'],
]);
Copy $container->addFieldRef('NODE_NAME', 'spec.nodeName');
$container->addFieldRefs([
'NODE_NAME' => ['spec.nodeName'],
'POD_NAME' => ['metadata.name'],
]);
Attaching probes
You might attach the probes to the container:
Copy $container->setLivenessProbe(
K8s::probe()
->command(['sh', 'test.sh'])
->setInitialDelaySeconds(10)
->setPeriodSeconds(60)
->setTimeoutSeconds(10)
->setFailureThreshold(3)
->setSuccessThreshold(2)
);
$container->setStartupProbe(
K8s::probe()
->http('/health', 80, ['X-CSRF-TOKEN' => 'some-token'])
->setInitialDelaySeconds(10)
->setPeriodSeconds(60)
->setTimeoutSeconds(10)
->setFailureThreshold(3)
->setSuccessThreshold(2)
);
$container->setReadinessProbe(
K8s::probe()
->tcp(3306, '10.0.0.0')
->setInitialDelaySeconds(10)
->setPeriodSeconds(60)
->setTimeoutSeconds(10)
->setFailureThreshold(3)
->setSuccessThreshold(2)
);
Attaching volumes
Volumes are a tricky concept that helps you mount volumes with a pod and container. Mainly, you are given the choice to create a new Volume
instance that will be attached to the pod, and you can convert that instance to a MountedVolume
instance where you can attach the containers you need, just specifying the mounting path and subpath.
Copy $awsEbsVolume = K8s::volume()->awsEbs('vol-1234', 'ext4');
$mysql = K8s::container()
->setName('mysql')
->setImage('mysql', '5.7')
->addMountedVolumes([
$awsEbsVolume->mountTo('/path/in/container/to/mount/on'),
]);
$pod = K8s::pod()
->setName('mysql')
->setContainers([$mysql])
->addVolumes([$awsEbVolume]);
Limits & Requests
Copy $container->minMemory(512, 'Mi')->maxMemory(2, 'Gi');
$container->minCpu('500m')->maxCpu(1);