Kubernetes-REST
view release on metacpan or search on metacpan
lib/Kubernetes/REST/Example.pm view on Meta::CPAN
},
}],
volumes => [{
name => 'config-volume',
configMap => {
name => 'app-config',
items => [{
key => 'nginx.conf',
path => 'default.conf',
}],
},
}, {
name => 'data-volume',
persistentVolumeClaim => {
claimName => 'my-storage',
},
}],
},
},
},
));
=head2 Service (NodePort)
my $svc = $api->create($api->new_object(Service =>
metadata => {
name => 'my-app',
namespace => 'perl-test',
},
spec => {
type => 'NodePort',
selector => { app => 'my-app' },
ports => [{
port => 80,
targetPort => 80,
protocol => 'TCP',
}],
},
));
my $node_port = $svc->spec->ports->[0]->nodePort;
say "NodePort: $node_port";
# Minikube: minikube service my-app -n perl-test
# K3s: curl http://localhost:$node_port
=head2 Job
my $job = $api->create($api->new_object(Job =>
metadata => {
name => 'batch-job',
namespace => 'perl-test',
},
spec => {
backoffLimit => 2,
template => {
spec => {
restartPolicy => 'Never',
containers => [{
name => 'worker',
image => 'busybox:latest',
command => ['sh', '-c', 'echo "done"; exit 0'],
}],
},
},
},
));
=head2 CronJob
my $cron = $api->create($api->new_object(CronJob =>
metadata => {
name => 'scheduled-job',
namespace => 'perl-test',
},
spec => {
schedule => '*/5 * * * *',
jobTemplate => {
spec => {
template => {
spec => {
restartPolicy => 'OnFailure',
containers => [{
name => 'worker',
image => 'busybox:latest',
command => ['sh', '-c', 'date'],
}],
},
},
},
},
},
));
=head2 RBAC (Role + RoleBinding)
my $role = $api->create($api->new_object(Role =>
metadata => {
name => 'pod-reader',
namespace => 'perl-test',
},
rules => [{
apiGroups => [''],
resources => ['pods'],
verbs => ['get', 'list', 'watch'],
}],
));
my $binding = $api->create($api->new_object(RoleBinding =>
metadata => {
name => 'read-pods',
namespace => 'perl-test',
},
roleRef => {
apiGroup => 'rbac.authorization.k8s.io',
kind => 'Role',
name => 'pod-reader',
},
subjects => [{
kind => 'ServiceAccount',
name => 'default',
namespace => 'perl-test',
}],
));
=head2 PersistentVolumeClaim
Works out of the box on Minikube (hostpath provisioner) and K3s (local-path
provisioner).
my $pvc = $api->create($api->new_object(PersistentVolumeClaim =>
metadata => {
name => 'my-storage',
namespace => 'perl-test',
},
spec => {
accessModes => ['ReadWriteOnce'],
resources => {
requests => { storage => '100Mi' },
},
},
));
=head2 ResourceQuota
( run in 2.903 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )