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 )