Installing License Service Reporter without Operator Lifecycle Manager (OLM)
Learn how to install License Service Reporter without the Operator Lifecycle Manager (OLM).
Installing License Service Reporter without OLM is supported from version 4.2.10.
Complete the following procedure to install License Service on a system that does not have the Operator Lifecycle Manager (OLM) deployed.
Prerequisites
Complete the installation on a host that meets the following criteria:
- Linux or macOS operating system (or Windows with Linux Bash Shell, for example from WSL).
- Docker and Kubernetes CLI installed.
- Access to your cluster with Kubernetes config.
- Access to
*.icr.io:443
for IBM Cloud Container Registry and License Service Reporter catalog source.
See Supported platforms and hardware requirements before you install License Service Reporter to check the installation requirements.
Installation
Complete the following steps to create the required resources.
-
Export the following variable:
export LSR_NAMESPACE=ibm-ls-reporter
Note: The
ibm-ls-reporter
namespace is the default deployment namespace for License Service Reporter. However, you can install License Service Reporter in a custom namespace by replacingibm-ls-reporter
with your custom namespace in the command. -
Create the
install-license-service-reporter.yaml
file with the following content:
apiVersion: v1
kind: Namespace
metadata:
labels:
app.kubernetes.io/component: manager
app.kubernetes.io/created-by: ibm-license-service-reporter-operator
app.kubernetes.io/instance: ibm-licensing
app.kubernetes.io/managed-by: kustomize
app.kubernetes.io/name: namespace
app.kubernetes.io/part-of: ibm-license-service-reporter-operator
control-plane: ibm-license-service-reporter-operator
name: $LSR_NAMESPACE
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.14.0
name: ibmlicenseservicereporters.operator.ibm.com
spec:
group: operator.ibm.com
names:
kind: IBMLicenseServiceReporter
listKind: IBMLicenseServiceReporterList
plural: ibmlicenseservicereporters
singular: ibmlicenseservicereporter
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: |-
IBM License Service Reporter is a singleton which may be used in a single or multi-cluster environment. It aggregates data pushed from IBM License Services, deployed on clusters and from ILMT.
Documentation: https://ibm.biz/lsvc-rprtr.
License: Please refer to the IBM Terms website (ibm.biz/lsvc-lic) to find the license terms for the particular IBM product for which you are deploying this component.
IBM License Service Reporter is a free, optionally installed add-on – one of services of Cloud Pak Foundational Services. Thanks to the IBM License Service Reporter customer can:
- see IBM software deployments on a single dashboard, verify and maintain license compliance and avoid audit infractions,
- see historical data on IBM software deployments to support making informed decisions for future purchases,
- see details of software deployments, including source (ILMT for VMs, License Service for containers), cluster and quantities of licenses deployed,
- identify which software deployments are VMs vs. containers and can use this information to evaluate workloads for modernization.
properties:
apiVersion:
description: |-
APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
kind:
description: |-
Kind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
spec:
description: IBMLicenseServiceReporterSpec defines the desired state of IBMLicenseServiceReporter
properties:
annotations:
additionalProperties:
type: string
description: Annotations to be copied into all relevant resources
type: object
apiSecretToken:
description: Secret name used to store application token, either one that exists, or one that will be created
type: string
authContainer:
description: Authentication Image Settings
properties:
imageName:
description: IBM License Service Reporter docker Image Name, will override default value and disable image env value in operator deployment
type: string
imagePullPolicy:
description: PullPolicy describes a policy for if/when to pull a container image
enum:
- Always
- IfNotPresent
- Never
type: string
imageRegistry:
description: IBM License Service Reporter docker Image Registry, will override default value and disable image env value in operator deployment
type: string
imageTagPostfix:
description: IBM License Service Reporter docker Image Tag or Digest, will override default value and disable image env value in operator deployment
type: string
resources:
description: ResourceRequirements describes the compute resource requirements.
properties:
limits:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
description: |-
Limits describes the maximum amount of compute resources allowed.
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
type: object
requests:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
description: |-
Requests describes the minimum amount of compute resources required.
If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
otherwise to an implementation-defined value.
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
type: object
type: object
type: object
authentication:
description: License Service Reporter oauth2-proxy configuration
properties:
oauth:
properties:
enabled:
type: boolean
parameters:
items:
type: string
type: array
type: object
useradmin:
properties:
enabled:
default: true
type: boolean
type: object
type: object
capacity:
anyOf:
- type: integer
- type: string
description: Persistent Volume Claim Capacity
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
databaseContainer:
description: Database Settings
properties:
imageName:
description: IBM License Service Reporter docker Image Name, will override default value and disable image env value in operator deployment
type: string
imagePullPolicy:
description: PullPolicy describes a policy for if/when to pull a container image
enum:
- Always
- IfNotPresent
- Never
type: string
imageRegistry:
description: IBM License Service Reporter docker Image Registry, will override default value and disable image env value in operator deployment
type: string
imageTagPostfix:
description: IBM License Service Reporter docker Image Tag or Digest, will override default value and disable image env value in operator deployment
type: string
resources:
description: ResourceRequirements describes the compute resource requirements.
properties:
limits:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
description: |-
Limits describes the maximum amount of compute resources allowed.
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
type: object
requests:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
description: |-
Requests describes the minimum amount of compute resources required.
If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
otherwise to an implementation-defined value.
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
type: object
type: object
type: object
enableWorkloadsProcessing:
description: Enable workloads-related processing and reportering in the License Service Reporter
type: boolean
envVariable:
additionalProperties:
type: string
description: Environment variable setting
type: object
httpsCertsSource:
description: 'options: self-signed or custom'
enum:
- self-signed
- custom
- ocp
type: string
imagePullSecrets:
description: Array of pull secrets which should include existing at InstanceNamespace secret to allow pulling IBM License Service Reporter image
items:
type: string
type: array
ingressEnabled:
description: Information whether to create the Ingress automatically by the operator to expose the IBM License Service Reporter Console and API (not needed if Routes creation is enabled, disable if you want to create Ingresses manually)
type: boolean
ingressOptions:
description: If ingress is enabled, you can set its parameters
properties:
apiOptions:
description: Options specific to API Ingress
properties:
annotations:
additionalProperties:
type: string
description: Additional annotations that should include r.g. ingress class if using non-default ingress controller
type: object
path:
description: Endpoint under which the application will be available e.g. if you specify this path as /ibm-license-service-reporter-api then the application will be available under https://<hostname>:<port>/ibm-license-service-reporter-api
type: string
tls:
description: TLS options to enable secure connection
items:
description: IngressTLS describes the transport layer security associated with an Ingress.
properties:
hosts:
description: |-
Hosts are a list of hosts included in the TLS certificate. The values in
this list must match the name/s used in the tlsSecret. Defaults to the
wildcard host setting for the loadbalancer controller fulfilling this
Ingress, if left unspecified.
items:
type: string
type: array
x-kubernetes-list-type: atomic
secretName:
description: |-
SecretName is the name of the secret used to terminate TLS traffic on
port 443. Field is left optional to allow TLS routing based on SNI
hostname alone. If the SNI host in a listener conflicts with the "Host"
header field used by an IngressRule, the SNI host is used for termination
and value of the Host header is used for routing.
type: string
type: object
type: array
type: object
commonOptions:
description: Options common to both API and Console Ingresses
properties:
host:
description: If you use non-default host include it here
type: string
ingressClassName:
description: IngressClassName defines ingress class name option to be passed to the ingress spec field
type: string
type: object
consoleOptions:
description: Options specific to Console Ingress
properties:
annotations:
additionalProperties:
type: string
description: Additional annotations that should include r.g. ingress class if using non-default ingress controller
type: object
path:
description: Endpoint under which the application will be available e.g. if you specify this path as /ibm-license-service-reporter-api then the application will be available under https://<hostname>:<port>/ibm-license-service-reporter-api
type: string
tls:
description: TLS options to enable secure connection
items:
description: IngressTLS describes the transport layer security associated with an Ingress.
properties:
hosts:
description: |-
Hosts are a list of hosts included in the TLS certificate. The values in
this list must match the name/s used in the tlsSecret. Defaults to the
wildcard host setting for the loadbalancer controller fulfilling this
Ingress, if left unspecified.
items:
type: string
type: array
x-kubernetes-list-type: atomic
secretName:
description: |-
SecretName is the name of the secret used to terminate TLS traffic on
port 443. Field is left optional to allow TLS routing based on SNI
hostname alone. If the SNI host in a listener conflicts with the "Host"
header field used by an IngressRule, the SNI host is used for termination
and value of the Host header is used for routing.
type: string
type: object
type: array
type: object
type: object
labels:
additionalProperties:
type: string
description: Labels to be copied into all relevant resources
type: object
license:
description: IBM License Service Reporter license acceptance.
properties:
accept:
description: 'By installing the IBM License Service Reporter, you accept the license terms for the particular IBM product for which you are deploying this component: ibm.biz/lsvc-lic.'
type: boolean
x-kubernetes-validations:
- message: 'Please accept license terms of this component (ibm.biz/lsvc-lic) by setting a field spec.license.accept: true'
rule: self == true
required:
- accept
type: object
logLevel:
description: 'Should application pod show additional information, options: DEBUG, INFO, VERBOSE'
enum:
- DEBUG
- INFO
- VERBOSE
type: string
receiverContainer:
description: Receiver Settings
properties:
imageName:
description: IBM License Service Reporter docker Image Name, will override default value and disable image env value in operator deployment
type: string
imagePullPolicy:
description: PullPolicy describes a policy for if/when to pull a container image
enum:
- Always
- IfNotPresent
- Never
type: string
imageRegistry:
description: IBM License Service Reporter docker Image Registry, will override default value and disable image env value in operator deployment
type: string
imageTagPostfix:
description: IBM License Service Reporter docker Image Tag or Digest, will override default value and disable image env value in operator deployment
type: string
resources:
description: ResourceRequirements describes the compute resource requirements.
properties:
limits:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
description: |-
Limits describes the maximum amount of compute resources allowed.
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
type: object
requests:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
description: |-
Requests describes the minimum amount of compute resources required.
If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
otherwise to an implementation-defined value.
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
type: object
type: object
type: object
reporterUIContainer:
description: Receiver Settings
properties:
imageName:
description: IBM License Service Reporter docker Image Name, will override default value and disable image env value in operator deployment
type: string
imagePullPolicy:
description: PullPolicy describes a policy for if/when to pull a container image
enum:
- Always
- IfNotPresent
- Never
type: string
imageRegistry:
description: IBM License Service Reporter docker Image Registry, will override default value and disable image env value in operator deployment
type: string
imageTagPostfix:
description: IBM License Service Reporter docker Image Tag or Digest, will override default value and disable image env value in operator deployment
type: string
resources:
description: ResourceRequirements describes the compute resource requirements.
properties:
limits:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
description: |-
Limits describes the maximum amount of compute resources allowed.
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
type: object
requests:
additionalProperties:
anyOf:
- type: integer
- type: string
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
x-kubernetes-int-or-string: true
description: |-
Requests describes the minimum amount of compute resources required.
If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
otherwise to an implementation-defined value.
More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
type: object
type: object
type: object
routeEnabled:
description: Information whether to create the Routes automatically by the operator (available only on OpenShift) to expose the IBM License Service Reporter Console and API
type: boolean
routeOptions:
description: Route parameters
properties:
tls:
description: TLSConfig defines config used to secure a route and provide termination
properties:
caCertificate:
description: caCertificate provides the cert authority certificate contents
type: string
certificate:
description: |-
certificate provides certificate contents. This should be a single serving certificate, not a certificate
chain. Do not include a CA certificate.
type: string
destinationCACertificate:
description: |-
destinationCACertificate provides the contents of the ca certificate of the final destination. When using reencrypt
termination this file should be provided in order to have routers use it for health checks on the secure connection.
If this field is not specified, the router may provide its own destination CA and perform hostname validation using
the short service name (service.namespace.svc), which allows infrastructure generated certificates to automatically
verify.
type: string
insecureEdgeTerminationPolicy:
description: |-
insecureEdgeTerminationPolicy indicates the desired behavior for insecure connections to a route. While
each router may make its own decisions on which ports to expose, this is normally port 80.
* Allow - traffic is sent to the server on the insecure port (default)
* Disable - no traffic is allowed on the insecure port.
* Redirect - clients are redirected to the secure port.
type: string
key:
description: key provides key file contents
type: string
termination:
description: |-
termination indicates termination type.
* edge - TLS termination is done by the router and http is used to communicate with the backend (default)
* passthrough - Traffic is sent straight to the destination without the router providing TLS termination
* reencrypt - TLS termination is done by the router and https is used to communicate with the backend
type: string
required:
- termination
type: object
type: object
storageClass:
description: Storage class used by database to provide persistency
type: string
version:
description: Version
type: string
required:
- license
type: object
x-kubernetes-preserve-unknown-fields: true
status:
description: IBMLicenseServiceReporterStatus defines the observed state of IBMLicenseServiceReporter
properties:
LicenseServiceReporterPods:
description: |-
Important: Run "operator-sdk generate k8s" to regenerate code after modifying this file
Add custom validation using kubebuilder tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html
items:
description: |-
PodStatus represents information about the status of a pod. Status may trail the actual
state of a system, especially if the node that hosts the pod cannot contact the control
plane.
properties:
conditions:
description: |-
Current service state of pod.
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
items:
description: PodCondition contains details for the current condition of this pod.
properties:
lastProbeTime:
description: Last time we probed the condition.
format: date-time
type: string
lastTransitionTime:
description: Last time the condition transitioned from one status to another.
format: date-time
type: string
message:
description: Human-readable message indicating details about last transition.
type: string
reason:
description: Unique, one-word, CamelCase reason for the condition's last transition.
type: string
status:
description: |-
Status is the status of the condition.
Can be True, False, Unknown.
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
type: string
type:
description: |-
Type is the type of the condition.
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
type: string
required:
- status
- type
type: object
type: array
containerStatuses:
description: |-
The list has one entry per container in the manifest.
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
items:
description: ContainerStatus contains details for the current status of this container.
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'.
type: string
image:
description: |-
The image the container is running.
More info: https://kubernetes.io/docs/concepts/containers/images.
type: string
imageID:
description: ImageID of the container's image.
type: string
lastState:
description: Details about the container's last termination condition.
properties:
running:
description: Details about a running container
properties:
startedAt:
description: Time at which the container was last (re-)started
format: date-time
type: string
type: object
terminated:
description: Details about a terminated container
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'
type: string
exitCode:
description: Exit status from the last termination of the container
format: int32
type: integer
finishedAt:
description: Time at which the container last terminated
format: date-time
type: string
message:
description: Message regarding the last termination of the container
type: string
reason:
description: (brief) reason from the last termination of the container
type: string
signal:
description: Signal from the last termination of the container
format: int32
type: integer
startedAt:
description: Time at which previous execution of the container started
format: date-time
type: string
required:
- exitCode
type: object
waiting:
description: Details about a waiting container
properties:
message:
description: Message regarding why the container is not yet running.
type: string
reason:
description: (brief) reason the container is not yet running.
type: string
type: object
type: object
name:
description: |-
This must be a DNS_LABEL. Each container in a pod must have a unique name.
Cannot be updated.
type: string
ready:
description: Specifies whether the container has passed its readiness probe.
type: boolean
restartCount:
description: The number of times the container has been restarted.
format: int32
type: integer
started:
description: |-
Specifies whether the container has passed its startup probe.
Initialized as false, becomes true after startupProbe is considered successful.
Resets to false when the container is restarted, or if kubelet loses state temporarily.
Is always true when no startupProbe is defined.
type: boolean
state:
description: Details about the container's current condition.
properties:
running:
description: Details about a running container
properties:
startedAt:
description: Time at which the container was last (re-)started
format: date-time
type: string
type: object
terminated:
description: Details about a terminated container
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'
type: string
exitCode:
description: Exit status from the last termination of the container
format: int32
type: integer
finishedAt:
description: Time at which the container last terminated
format: date-time
type: string
message:
description: Message regarding the last termination of the container
type: string
reason:
description: (brief) reason from the last termination of the container
type: string
signal:
description: Signal from the last termination of the container
format: int32
type: integer
startedAt:
description: Time at which previous execution of the container started
format: date-time
type: string
required:
- exitCode
type: object
waiting:
description: Details about a waiting container
properties:
message:
description: Message regarding why the container is not yet running.
type: string
reason:
description: (brief) reason the container is not yet running.
type: string
type: object
type: object
required:
- image
- imageID
- name
- ready
- restartCount
type: object
type: array
ephemeralContainerStatuses:
description: Status for any ephemeral containers that have run in this pod.
items:
description: ContainerStatus contains details for the current status of this container.
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'.
type: string
image:
description: |-
The image the container is running.
More info: https://kubernetes.io/docs/concepts/containers/images.
type: string
imageID:
description: ImageID of the container's image.
type: string
lastState:
description: Details about the container's last termination condition.
properties:
running:
description: Details about a running container
properties:
startedAt:
description: Time at which the container was last (re-)started
format: date-time
type: string
type: object
terminated:
description: Details about a terminated container
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'
type: string
exitCode:
description: Exit status from the last termination of the container
format: int32
type: integer
finishedAt:
description: Time at which the container last terminated
format: date-time
type: string
message:
description: Message regarding the last termination of the container
type: string
reason:
description: (brief) reason from the last termination of the container
type: string
signal:
description: Signal from the last termination of the container
format: int32
type: integer
startedAt:
description: Time at which previous execution of the container started
format: date-time
type: string
required:
- exitCode
type: object
waiting:
description: Details about a waiting container
properties:
message:
description: Message regarding why the container is not yet running.
type: string
reason:
description: (brief) reason the container is not yet running.
type: string
type: object
type: object
name:
description: |-
This must be a DNS_LABEL. Each container in a pod must have a unique name.
Cannot be updated.
type: string
ready:
description: Specifies whether the container has passed its readiness probe.
type: boolean
restartCount:
description: The number of times the container has been restarted.
format: int32
type: integer
started:
description: |-
Specifies whether the container has passed its startup probe.
Initialized as false, becomes true after startupProbe is considered successful.
Resets to false when the container is restarted, or if kubelet loses state temporarily.
Is always true when no startupProbe is defined.
type: boolean
state:
description: Details about the container's current condition.
properties:
running:
description: Details about a running container
properties:
startedAt:
description: Time at which the container was last (re-)started
format: date-time
type: string
type: object
terminated:
description: Details about a terminated container
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'
type: string
exitCode:
description: Exit status from the last termination of the container
format: int32
type: integer
finishedAt:
description: Time at which the container last terminated
format: date-time
type: string
message:
description: Message regarding the last termination of the container
type: string
reason:
description: (brief) reason from the last termination of the container
type: string
signal:
description: Signal from the last termination of the container
format: int32
type: integer
startedAt:
description: Time at which previous execution of the container started
format: date-time
type: string
required:
- exitCode
type: object
waiting:
description: Details about a waiting container
properties:
message:
description: Message regarding why the container is not yet running.
type: string
reason:
description: (brief) reason the container is not yet running.
type: string
type: object
type: object
required:
- image
- imageID
- name
- ready
- restartCount
type: object
type: array
hostIP:
description: IP address of the host to which the pod is assigned. Empty if not yet scheduled.
type: string
initContainerStatuses:
description: |-
The list has one entry per init container in the manifest. The most recent successful
init container will have ready = true, the most recently started container will have
startTime set.
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
items:
description: ContainerStatus contains details for the current status of this container.
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'.
type: string
image:
description: |-
The image the container is running.
More info: https://kubernetes.io/docs/concepts/containers/images.
type: string
imageID:
description: ImageID of the container's image.
type: string
lastState:
description: Details about the container's last termination condition.
properties:
running:
description: Details about a running container
properties:
startedAt:
description: Time at which the container was last (re-)started
format: date-time
type: string
type: object
terminated:
description: Details about a terminated container
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'
type: string
exitCode:
description: Exit status from the last termination of the container
format: int32
type: integer
finishedAt:
description: Time at which the container last terminated
format: date-time
type: string
message:
description: Message regarding the last termination of the container
type: string
reason:
description: (brief) reason from the last termination of the container
type: string
signal:
description: Signal from the last termination of the container
format: int32
type: integer
startedAt:
description: Time at which previous execution of the container started
format: date-time
type: string
required:
- exitCode
type: object
waiting:
description: Details about a waiting container
properties:
message:
description: Message regarding why the container is not yet running.
type: string
reason:
description: (brief) reason the container is not yet running.
type: string
type: object
type: object
name:
description: |-
This must be a DNS_LABEL. Each container in a pod must have a unique name.
Cannot be updated.
type: string
ready:
description: Specifies whether the container has passed its readiness probe.
type: boolean
restartCount:
description: The number of times the container has been restarted.
format: int32
type: integer
started:
description: |-
Specifies whether the container has passed its startup probe.
Initialized as false, becomes true after startupProbe is considered successful.
Resets to false when the container is restarted, or if kubelet loses state temporarily.
Is always true when no startupProbe is defined.
type: boolean
state:
description: Details about the container's current condition.
properties:
running:
description: Details about a running container
properties:
startedAt:
description: Time at which the container was last (re-)started
format: date-time
type: string
type: object
terminated:
description: Details about a terminated container
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'
type: string
exitCode:
description: Exit status from the last termination of the container
format: int32
type: integer
finishedAt:
description: Time at which the container last terminated
format: date-time
type: string
message:
description: Message regarding the last termination of the container
type: string
reason:
description: (brief) reason from the last termination of the container
type: string
signal:
description: Signal from the last termination of the container
format: int32
type: integer
startedAt:
description: Time at which previous execution of the container started
format: date-time
type: string
required:
- exitCode
type: object
waiting:
description: Details about a waiting container
properties:
message:
description: Message regarding why the container is not yet running.
type: string
reason:
description: (brief) reason the container is not yet running.
type: string
type: object
type: object
required:
- image
- imageID
- name
- ready
- restartCount
type: object
type: array
message:
description: A human readable message indicating details about why the pod is in this condition.
type: string
nominatedNodeName:
description: |-
nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be
scheduled right away as preemption victims receive their graceful termination periods.
This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide
to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to
give the resources on this node to a higher priority pod that is created after preemption.
As a result, this field may be different than PodSpec.nodeName when the pod is
scheduled.
type: string
phase:
description: |-
The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle.
The conditions array, the reason and message fields, and the individual container status
arrays contain more detail about the pod's status.
There are five possible phase values:
Pending: The pod has been accepted by the Kubernetes system, but one or more of the
container images has not been created. This includes time before being scheduled as
well as time spent downloading images over the network, which could take a while.
Running: The pod has been bound to a node, and all of the containers have been created.
At least one container is still running, or is in the process of starting or restarting.
Succeeded: All containers in the pod have terminated in success, and will not be restarted.
Failed: All containers in the pod have terminated, and at least one container has
terminated in failure. The container either exited with non-zero status or was terminated
by the system.
Unknown: For some reason the state of the pod could not be obtained, typically due to an
error in communicating with the host of the pod.
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase
type: string
podIP:
description: |-
IP address allocated to the pod. Routable at least within the cluster.
Empty if not yet allocated.
type: string
podIPs:
description: |-
podIPs holds the IP addresses allocated to the pod. If this field is specified, the 0th entry must
match the podIP field. Pods may be allocated at most 1 value for each of IPv4 and IPv6. This list
is empty if no IPs have been allocated yet.
items:
description: "IP address information for entries in the (plural) PodIPs field.\nEach entry includes:\n\n\n\tIP: An IP address allocated to the pod. Routable at least within the cluster."
properties:
ip:
description: ip is an IP address (IPv4 or IPv6) assigned to the pod
type: string
type: object
type: array
qosClass:
description: |-
The Quality of Service (QOS) classification assigned to the pod based on resource requirements
See PodQOSClass type for available QOS classes
More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md
type: string
reason:
description: |-
A brief CamelCase message indicating details about why the pod is in this state.
e.g. 'Evicted'
type: string
startTime:
description: |-
RFC 3339 date and time at which the object was acknowledged by the Kubelet.
This is before the Kubelet pulled the container image(s) for the pod.
format: date-time
type: string
type: object
type: array
LicensingReporterPods:
description: Property for compatibility with LicenseService LTSR
items:
description: |-
PodStatus represents information about the status of a pod. Status may trail the actual
state of a system, especially if the node that hosts the pod cannot contact the control
plane.
properties:
conditions:
description: |-
Current service state of pod.
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
items:
description: PodCondition contains details for the current condition of this pod.
properties:
lastProbeTime:
description: Last time we probed the condition.
format: date-time
type: string
lastTransitionTime:
description: Last time the condition transitioned from one status to another.
format: date-time
type: string
message:
description: Human-readable message indicating details about last transition.
type: string
reason:
description: Unique, one-word, CamelCase reason for the condition's last transition.
type: string
status:
description: |-
Status is the status of the condition.
Can be True, False, Unknown.
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
type: string
type:
description: |-
Type is the type of the condition.
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
type: string
required:
- status
- type
type: object
type: array
containerStatuses:
description: |-
The list has one entry per container in the manifest.
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
items:
description: ContainerStatus contains details for the current status of this container.
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'.
type: string
image:
description: |-
The image the container is running.
More info: https://kubernetes.io/docs/concepts/containers/images.
type: string
imageID:
description: ImageID of the container's image.
type: string
lastState:
description: Details about the container's last termination condition.
properties:
running:
description: Details about a running container
properties:
startedAt:
description: Time at which the container was last (re-)started
format: date-time
type: string
type: object
terminated:
description: Details about a terminated container
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'
type: string
exitCode:
description: Exit status from the last termination of the container
format: int32
type: integer
finishedAt:
description: Time at which the container last terminated
format: date-time
type: string
message:
description: Message regarding the last termination of the container
type: string
reason:
description: (brief) reason from the last termination of the container
type: string
signal:
description: Signal from the last termination of the container
format: int32
type: integer
startedAt:
description: Time at which previous execution of the container started
format: date-time
type: string
required:
- exitCode
type: object
waiting:
description: Details about a waiting container
properties:
message:
description: Message regarding why the container is not yet running.
type: string
reason:
description: (brief) reason the container is not yet running.
type: string
type: object
type: object
name:
description: |-
This must be a DNS_LABEL. Each container in a pod must have a unique name.
Cannot be updated.
type: string
ready:
description: Specifies whether the container has passed its readiness probe.
type: boolean
restartCount:
description: The number of times the container has been restarted.
format: int32
type: integer
started:
description: |-
Specifies whether the container has passed its startup probe.
Initialized as false, becomes true after startupProbe is considered successful.
Resets to false when the container is restarted, or if kubelet loses state temporarily.
Is always true when no startupProbe is defined.
type: boolean
state:
description: Details about the container's current condition.
properties:
running:
description: Details about a running container
properties:
startedAt:
description: Time at which the container was last (re-)started
format: date-time
type: string
type: object
terminated:
description: Details about a terminated container
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'
type: string
exitCode:
description: Exit status from the last termination of the container
format: int32
type: integer
finishedAt:
description: Time at which the container last terminated
format: date-time
type: string
message:
description: Message regarding the last termination of the container
type: string
reason:
description: (brief) reason from the last termination of the container
type: string
signal:
description: Signal from the last termination of the container
format: int32
type: integer
startedAt:
description: Time at which previous execution of the container started
format: date-time
type: string
required:
- exitCode
type: object
waiting:
description: Details about a waiting container
properties:
message:
description: Message regarding why the container is not yet running.
type: string
reason:
description: (brief) reason the container is not yet running.
type: string
type: object
type: object
required:
- image
- imageID
- name
- ready
- restartCount
type: object
type: array
ephemeralContainerStatuses:
description: Status for any ephemeral containers that have run in this pod.
items:
description: ContainerStatus contains details for the current status of this container.
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'.
type: string
image:
description: |-
The image the container is running.
More info: https://kubernetes.io/docs/concepts/containers/images.
type: string
imageID:
description: ImageID of the container's image.
type: string
lastState:
description: Details about the container's last termination condition.
properties:
running:
description: Details about a running container
properties:
startedAt:
description: Time at which the container was last (re-)started
format: date-time
type: string
type: object
terminated:
description: Details about a terminated container
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'
type: string
exitCode:
description: Exit status from the last termination of the container
format: int32
type: integer
finishedAt:
description: Time at which the container last terminated
format: date-time
type: string
message:
description: Message regarding the last termination of the container
type: string
reason:
description: (brief) reason from the last termination of the container
type: string
signal:
description: Signal from the last termination of the container
format: int32
type: integer
startedAt:
description: Time at which previous execution of the container started
format: date-time
type: string
required:
- exitCode
type: object
waiting:
description: Details about a waiting container
properties:
message:
description: Message regarding why the container is not yet running.
type: string
reason:
description: (brief) reason the container is not yet running.
type: string
type: object
type: object
name:
description: |-
This must be a DNS_LABEL. Each container in a pod must have a unique name.
Cannot be updated.
type: string
ready:
description: Specifies whether the container has passed its readiness probe.
type: boolean
restartCount:
description: The number of times the container has been restarted.
format: int32
type: integer
started:
description: |-
Specifies whether the container has passed its startup probe.
Initialized as false, becomes true after startupProbe is considered successful.
Resets to false when the container is restarted, or if kubelet loses state temporarily.
Is always true when no startupProbe is defined.
type: boolean
state:
description: Details about the container's current condition.
properties:
running:
description: Details about a running container
properties:
startedAt:
description: Time at which the container was last (re-)started
format: date-time
type: string
type: object
terminated:
description: Details about a terminated container
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'
type: string
exitCode:
description: Exit status from the last termination of the container
format: int32
type: integer
finishedAt:
description: Time at which the container last terminated
format: date-time
type: string
message:
description: Message regarding the last termination of the container
type: string
reason:
description: (brief) reason from the last termination of the container
type: string
signal:
description: Signal from the last termination of the container
format: int32
type: integer
startedAt:
description: Time at which previous execution of the container started
format: date-time
type: string
required:
- exitCode
type: object
waiting:
description: Details about a waiting container
properties:
message:
description: Message regarding why the container is not yet running.
type: string
reason:
description: (brief) reason the container is not yet running.
type: string
type: object
type: object
required:
- image
- imageID
- name
- ready
- restartCount
type: object
type: array
hostIP:
description: IP address of the host to which the pod is assigned. Empty if not yet scheduled.
type: string
initContainerStatuses:
description: |-
The list has one entry per init container in the manifest. The most recent successful
init container will have ready = true, the most recently started container will have
startTime set.
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
items:
description: ContainerStatus contains details for the current status of this container.
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'.
type: string
image:
description: |-
The image the container is running.
More info: https://kubernetes.io/docs/concepts/containers/images.
type: string
imageID:
description: ImageID of the container's image.
type: string
lastState:
description: Details about the container's last termination condition.
properties:
running:
description: Details about a running container
properties:
startedAt:
description: Time at which the container was last (re-)started
format: date-time
type: string
type: object
terminated:
description: Details about a terminated container
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'
type: string
exitCode:
description: Exit status from the last termination of the container
format: int32
type: integer
finishedAt:
description: Time at which the container last terminated
format: date-time
type: string
message:
description: Message regarding the last termination of the container
type: string
reason:
description: (brief) reason from the last termination of the container
type: string
signal:
description: Signal from the last termination of the container
format: int32
type: integer
startedAt:
description: Time at which previous execution of the container started
format: date-time
type: string
required:
- exitCode
type: object
waiting:
description: Details about a waiting container
properties:
message:
description: Message regarding why the container is not yet running.
type: string
reason:
description: (brief) reason the container is not yet running.
type: string
type: object
type: object
name:
description: |-
This must be a DNS_LABEL. Each container in a pod must have a unique name.
Cannot be updated.
type: string
ready:
description: Specifies whether the container has passed its readiness probe.
type: boolean
restartCount:
description: The number of times the container has been restarted.
format: int32
type: integer
started:
description: |-
Specifies whether the container has passed its startup probe.
Initialized as false, becomes true after startupProbe is considered successful.
Resets to false when the container is restarted, or if kubelet loses state temporarily.
Is always true when no startupProbe is defined.
type: boolean
state:
description: Details about the container's current condition.
properties:
running:
description: Details about a running container
properties:
startedAt:
description: Time at which the container was last (re-)started
format: date-time
type: string
type: object
terminated:
description: Details about a terminated container
properties:
containerID:
description: Container's ID in the format '<type>://<container_id>'
type: string
exitCode:
description: Exit status from the last termination of the container
format: int32
type: integer
finishedAt:
description: Time at which the container last terminated
format: date-time
type: string
message:
description: Message regarding the last termination of the container
type: string
reason:
description: (brief) reason from the last termination of the container
type: string
signal:
description: Signal from the last termination of the container
format: int32
type: integer
startedAt:
description: Time at which previous execution of the container started
format: date-time
type: string
required:
- exitCode
type: object
waiting:
description: Details about a waiting container
properties:
message:
description: Message regarding why the container is not yet running.
type: string
reason:
description: (brief) reason the container is not yet running.
type: string
type: object
type: object
required:
- image
- imageID
- name
- ready
- restartCount
type: object
type: array
message:
description: A human readable message indicating details about why the pod is in this condition.
type: string
nominatedNodeName:
description: |-
nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be
scheduled right away as preemption victims receive their graceful termination periods.
This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide
to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to
give the resources on this node to a higher priority pod that is created after preemption.
As a result, this field may be different than PodSpec.nodeName when the pod is
scheduled.
type: string
phase:
description: |-
The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle.
The conditions array, the reason and message fields, and the individual container status
arrays contain more detail about the pod's status.
There are five possible phase values:
Pending: The pod has been accepted by the Kubernetes system, but one or more of the
container images has not been created. This includes time before being scheduled as
well as time spent downloading images over the network, which could take a while.
Running: The pod has been bound to a node, and all of the containers have been created.
At least one container is still running, or is in the process of starting or restarting.
Succeeded: All containers in the pod have terminated in success, and will not be restarted.
Failed: All containers in the pod have terminated, and at least one container has
terminated in failure. The container either exited with non-zero status or was terminated
by the system.
Unknown: For some reason the state of the pod could not be obtained, typically due to an
error in communicating with the host of the pod.
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase
type: string
podIP:
description: |-
IP address allocated to the pod. Routable at least within the cluster.
Empty if not yet allocated.
type: string
podIPs:
description: |-
podIPs holds the IP addresses allocated to the pod. If this field is specified, the 0th entry must
match the podIP field. Pods may be allocated at most 1 value for each of IPv4 and IPv6. This list
is empty if no IPs have been allocated yet.
items:
description: "IP address information for entries in the (plural) PodIPs field.\nEach entry includes:\n\n\n\tIP: An IP address allocated to the pod. Routable at least within the cluster."
properties:
ip:
description: ip is an IP address (IPv4 or IPv6) assigned to the pod
type: string
type: object
type: array
qosClass:
description: |-
The Quality of Service (QOS) classification assigned to the pod based on resource requirements
See PodQOSClass type for available QOS classes
More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md
type: string
reason:
description: |-
A brief CamelCase message indicating details about why the pod is in this state.
e.g. 'Evicted'
type: string
startTime:
description: |-
RFC 3339 date and time at which the object was acknowledged by the Kubelet.
This is before the Kubelet pulled the container image(s) for the pod.
format: date-time
type: string
type: object
type: array
type: object
type: object
served: true
storage: true
subresources:
status: {}
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/component: rbac
app.kubernetes.io/created-by: ibm-license-service-reporter-operator
app.kubernetes.io/instance: ibm-license-service-reporter
app.kubernetes.io/managed-by: kustomize
app.kubernetes.io/name: serviceaccount
app.kubernetes.io/part-of: ibm-license-service-reporter-operator
name: ibm-license-service-reporter
namespace: $LSR_NAMESPACE
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/component: rbac
app.kubernetes.io/created-by: ibm-license-service-reporter-operator
app.kubernetes.io/instance: ibm-license-service-reporter-operator
app.kubernetes.io/managed-by: kustomize
app.kubernetes.io/name: serviceaccount
app.kubernetes.io/part-of: ibm-license-service-reporter-operator
name: ibm-license-service-reporter-operator
namespace: $LSR_NAMESPACE
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
creationTimestamp: null
name: ibm-license-service-reporter
namespace: $LSR_NAMESPACE
rules:
- apiGroups:
- ""
resources:
- configmaps
verbs:
- create
- get
- list
- update
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
labels:
app.kubernetes.io/component: rbac
app.kubernetes.io/created-by: ibm-license-service-reporter-operator
app.kubernetes.io/instance: leader-election-role
app.kubernetes.io/managed-by: kustomize
app.kubernetes.io/name: role
app.kubernetes.io/part-of: ibm-license-service-reporter-operator
name: leader-election-role
namespace: $LSR_NAMESPACE
rules:
- apiGroups:
- ""
resources:
- configmaps
verbs:
- get
- list
- watch
- create
- update
- patch
- delete
- apiGroups:
- coordination.k8s.io
resources:
- leases
verbs:
- get
- list
- watch
- create
- update
- patch
- delete
- apiGroups:
- ""
resources:
- events
verbs:
- create
- patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: manager-role
namespace: $LSR_NAMESPACE
rules:
- apiGroups:
- ""
resources:
- configmaps
- endpoints
- namespaces
- persistentvolumeclaims
- secrets
- serviceaccounts
- services
- services/finalizers
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- ""
resources:
- events
verbs:
- create
- patch
- apiGroups:
- ""
resources:
- pods
verbs:
- delete
- list
- watch
- apiGroups:
- apps
resources:
- daemonsets
- deployments
- replicasets
- statefulsets
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- networking.k8s.io
resources:
- ingresses
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- route.openshift.io
resources:
- routes
- routes/custom-host
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: manager-role
rules:
- apiGroups:
- operator.ibm.com
resources:
- ibmlicenseservicereporters
- ibmlicenseservicereporters/finalizers
- ibmlicenseservicereporters/status
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- operator.openshift.io
resources:
- servicecas
verbs:
- list
- apiGroups:
- storage.k8s.io
resources:
- storageclasses
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
labels:
app.kubernetes.io/component: rbac
app.kubernetes.io/created-by: ibm-license-service-reporter-operator
app.kubernetes.io/instance: ibm-license-service-reporter
app.kubernetes.io/managed-by: kustomize
app.kubernetes.io/name: rolebinding
app.kubernetes.io/part-of: ibm-license-service-reporter-operator
name: ibm-license-service-reporter
namespace: $LSR_NAMESPACE
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: ibm-license-service-reporter
subjects:
- kind: ServiceAccount
name: ibm-license-service-reporter
namespace: $LSR_NAMESPACE
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
labels:
app.kubernetes.io/component: rbac
app.kubernetes.io/created-by: ibm-license-service-reporter-operator
app.kubernetes.io/instance: leader-election-rolebinding
app.kubernetes.io/managed-by: kustomize
app.kubernetes.io/name: rolebinding
app.kubernetes.io/part-of: ibm-license-service-reporter-operator
name: leader-election-rolebinding
namespace: $LSR_NAMESPACE
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: leader-election-role
subjects:
- kind: ServiceAccount
name: ibm-license-service-reporter-operator
namespace: $LSR_NAMESPACE
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
labels:
app.kubernetes.io/component: rbac
app.kubernetes.io/created-by: ibm-license-service-reporter-operator
app.kubernetes.io/instance: manager-rolebinding
app.kubernetes.io/managed-by: kustomize
app.kubernetes.io/name: rolebinding
app.kubernetes.io/part-of: ibm-license-service-reporter-operator
name: manager-rolebinding
namespace: $LSR_NAMESPACE
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: manager-role
subjects:
- kind: ServiceAccount
name: ibm-license-service-reporter-operator
namespace: $LSR_NAMESPACE
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
app.kubernetes.io/component: rbac
app.kubernetes.io/created-by: ibm-license-service-reporter-operator
app.kubernetes.io/instance: manager-rolebinding
app.kubernetes.io/managed-by: kustomize
app.kubernetes.io/name: clusterrolebinding
app.kubernetes.io/part-of: ibm-license-service-reporter-operator
name: manager-rolebinding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: manager-role
subjects:
- kind: ServiceAccount
name: ibm-license-service-reporter-operator
namespace: $LSR_NAMESPACE
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/component: manager
app.kubernetes.io/created-by: ibm-license-service-reporter-operator
app.kubernetes.io/instance: ibm-license-service-reporter-operator
app.kubernetes.io/managed-by: kustomize
app.kubernetes.io/name: deployment
app.kubernetes.io/part-of: ibm-license-service-reporter-operator
control-plane: ibm-license-service-reporter-operator
name: ibm-license-service-reporter-operator
namespace: $LSR_NAMESPACE
spec:
replicas: 1
selector:
matchLabels:
control-plane: ibm-license-service-reporter-operator
template:
metadata:
annotations:
kubectl.kubernetes.io/default-container: ibm-license-service-reporter-operator
productID: 068a62892a1e4db39641342e592daa25
productMetric: FREE
productName: IBM Cloud Platform Common Services
labels:
app.kubernetes.io/instance: ibm-license-service-reporter-operator
app.kubernetes.io/managed-by: ibm-license-service-reporter-operator
app.kubernetes.io/name: ibm-license-service-reporter
control-plane: ibm-license-service-reporter-operator
name: ibm-license-service-reporter-operator
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- amd64
- key: kubernetes.io/os
operator: In
values:
- linux
containers:
- args:
- --leader-elect
command:
- ibm-license-service-reporter-operator
env:
- name: IBM_POSTGRESQL_IMAGE
value: icr.io/cpopen/cpfs/ibm-postgresql:4.2.10
- name: IBM_LICENSE_SERVICE_REPORTER_IMAGE
value: icr.io/cpopen/cpfs/ibm-license-service-reporter:4.2.10
- name: IBM_LICENSE_SERVICE_REPORTER_UI_IMAGE
value: icr.io/cpopen/cpfs/ibm-license-service-reporter-ui:4.2.10
- name: IBM_LICENSE_SERVICE_REPORTER_AUTH_IMAGE
value: icr.io/cpopen/cpfs/ibm-license-service-reporter-oauth2-proxy:4.2.10
- name: WATCH_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.annotations['olm.targetNamespaces']
- name: OPERATOR_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: OPERATOR_NAME
value: ibm-license-service-reporter-operator
- name: SA_NAME
valueFrom:
fieldRef:
fieldPath: spec.serviceAccountName
image: icr.io/cpopen/ibm-license-service-reporter-operator:4.2.10
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
path: /healthz
port: 8081
initialDelaySeconds: 15
periodSeconds: 20
name: ibm-license-service-reporter-operator
readinessProbe:
httpGet:
path: /readyz
port: 8081
initialDelaySeconds: 5
periodSeconds: 10
resources:
limits:
cpu: 10m
ephemeral-storage: 500Mi
memory: 64Mi
requests:
cpu: 10m
ephemeral-storage: 256Mi
memory: 64Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
privileged: false
readOnlyRootFilesystem: true
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
serviceAccountName: ibm-license-service-reporter-operator
-
Apply the
install-license-service-reporter.yaml
file on the cluster by running the following command:envsubst < install-license-service-reporter.yaml | kubectl apply -f -
-
Verify if the License Service Reporter pod is successfully created with the following command:
kubectl -n ${LSR_NAMESPACE} get pods
An example of the response:
NAME READY STATUS RESTARTS AGE ibm-license-service-reporter-operator-6bc65f99f9-dmrmk 1/1 Running 0 4m50s
-
Create the License Service Reporter instance.
-
Create the
license-reporter.yaml
file with the following definition:apiVersion: operator.ibm.com/v1alpha1 kind: IBMLicenseServiceReporter metadata: name: ibm-lsr-instance namespace: ${LSR_NAMESPACE} labels: app.kubernetes.io/created-by: ibm-license-service-reporter-operator app.kubernetes.io/instance: ibmlicenseservicereporter-instance app.kubernetes.io/name: ibmlicenseservicereporter app.kubernetes.io/part-of: ibm-license-service-reporter-operator spec: license: accept: true authentication: useradmin: enabled: true
Note: License Service Reporter uses the default storage class. To use a different storage class, add and define the 'storageClass' parameter in the
spec
section of thelicense-reporter.yaml
. For example:spec: storageClass: storage-class-internal
-
Run the following command to apply the
license-reporter.yaml
on the cluster:envsubst < license-reporter.yaml | kubectl apply -f -
-
-
Configure ingress.
-
Automatic configuration
-
Get the nginx Ingress controller, for example from https://kubernetes.github.io/ingress-nginx/deploy.
Note: If you already have Ingress controller on the cluster, you do not need another one.
-
Run the following command:
Note: The command assumes that your License Service Reporter instance has a default name. If your License Service Reporter instance has a custom name, check the name of the instance with the following command:
kubectl get IBMLicenseServiceReporter -n ${LSR_NAMESPACE}
.kubectl get IBMLicenseServiceReporter -n ${LSR_NAMESPACE} ibm-lsr-instance -o yaml > license-service-reporter-ingress.yaml
-
Edit the
license-service-reporter-ingress.yaml
file. Make sure thatingressEnabled
is set totrue
and thatingressOptions
section contains the appropriate values that depend on your preferred configuration.The following table lists the ingress parameters in the
ingressOptions
section.|Parameter| Description| Example| |---|---|---| |
ingressClassName
| Specify the Ingress class. | nginx | |host
| Specify the host. |www.example.com| |apiOptions
| Specify the details of the License Service Reporter API Ingress under this section.|n/a| |consoleOptions
|Specify the details of the License Service Reporter UI Ingress under this section.| n/a| |annotations
| Specify annotations for the Ingress.|nginx.ingress.kubernetes.io/backend-protocol: HTTPS
| |path
| Provide the path to License Service Reporter UI or License Service Reporter API. The path for the UI must be set in such way that the root of the application is available under/license-service-reporter
endpoint.|/license-service-reporter-api
| |tls
| Provide your secure connection configuration. | |For more information, see Ingress in Kubernetes documentation.
The following is an example of the
license-service-reporter-ingress.yaml
file:apiVersion: operator.ibm.com/v1alpha1 kind: IBMLicenseServiceReporter metadata: name: ibm-lsr-instance namespace: $LSR_NAMESPACE spec: license: accept: true authentication: useradmin: enabled: true ingressEnabled: true ingressOptions: commonOptions: ingressClassName: nginx host: www.example.com apiOptions: annotations: Specify the details of the License Service Reporter API Ingress under this section. nginx.ingress.kubernetes.io/rewrite-target: "/$2" path: /license-service-reporter-api(/|$)(.*) tls: - hosts: - www.example.com secretName: api-secret-tls consoleOptions: annotations: nginx.ingress.kubernetes.io/backend-protocol: HTTPS nginx.ingress.kubernetes.io/rewrite-target: "/license-service-reporter$1$2" path: /license-service-reporter(/|$)(.*) tls: - hosts: - www.example.com secretName: console-secret-tls
The following is an example for Ingress configuration for Amazon Elastic Kubernetes Service (EKS):
Note: To retrieve the host for the EKS Ingress, run the following command:
export subdomain=$(kubectl get svc ingress-nginx-controller -n ingress-nginx -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
apiVersion: operator.ibm.com/v1alpha1 kind: IBMLicenseServiceReporter metadata: name: ibm-lsr-instance namespace: ${LSR_NAMESPACE} labels: app.kubernetes.io/created-by: ibm-license-service-reporter-operator app.kubernetes.io/instance: ibmlicenseservicereporter-instance app.kubernetes.io/name: ibmlicenseservicereporter app.kubernetes.io/part-of: ibm-license-service-reporter-operator spec: license: accept: true authentication: useradmin: enabled: true ingressEnabled: true ingressOptions: commonOptions: ingressClassName: nginx host: $subdomain apiOptions: annotations: nginx.ingress.kubernetes.io/backend-protocol: HTTPS nginx.ingress.kubernetes.io/rewrite-target: "/$2" path: /license-service-reporter-api(/|$)(.*) tls: - hosts: - $subdomain secretName: testsecret-tls consoleOptions: annotations: nginx.ingress.kubernetes.io/backend-protocol: HTTPS nginx.ingress.kubernetes.io/rewrite-target: "/license-service-reporter$1$2" path: /license-service-reporter(/|$)(.*)
-
Run the following command to apply the
license-service-reporter-ingress.yaml
file with Ingress configuration on the cluster:envsubst < license-service-reporter-ingress.yaml | kubectl apply -f -
-
-
Manual configuration
To manually configure Ingress, complete the following steps:
-
Create the
license-service-reporter-ingress.yaml
file :kubectl get IBMLicenseServiceReporter -n ${LSR_NAMESPACE} ibm-lsr-instance -o yaml > license-service-reporter-ingress.yaml
-
Disable automatic creation of Ingress in the
IBMLicenseServiceReporter
instance. Set theingressEnabled
parameter to false. Then, you to create a custom Ingress.spec: ... ingressEnabled: false ...
-
Create the
license-service-reporter-manual-ingress.yaml
file with Ingress for License Service Reporter UI and License Service Reporter API.Note: The name of the License Service Reporter UI Ingress must be set to:
ibm-license-service-reporter-console-ingress
. The path for the UI must be set in such way that the root of the application is available under/license-service-reporter
endpoint.The following is an example of the
license-service-reporter-manual-ingress.yaml
file that defines the License Service Reporter UI and the License Service Reporter API Ingress:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/backend-protocol: HTTPS nginx.ingress.kubernetes.io/rewrite-target: "/$2" name: ibm-license-service-reporter-api-ingress namespace: $LSR_NAMESPACE spec: ingressClassName: nginx rules: - host: $subdomain http: paths: - backend: service: name: ibm-license-service-reporter port: number: 8080 path: /license-service-reporter-api(/|$)(.*) pathType: ImplementationSpecific --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/backend-protocol: HTTPS nginx.ingress.kubernetes.io/rewrite-target: "/license-service-reporter$1$2" name: ibm-license-service-reporter-console-ingress namespace: $LSR_NAMESPACE spec: ingressClassName: nginx rules: - host: $subdomain http: paths: - backend: service: name: ibm-license-service-reporter port: number: 8888 path: /license-service-reporter(/|$)(.*) pathType: ImplementationSpecific
-
Run the following command to apply the
license-service-reporter-manual-ingress.yaml
file with Ingress configuration on the cluster:envsubst < license-service-reporter-manual-ingress.yaml | kubectl apply -f -
-
Verification
-
Verify whether the License Service Reporter UI and the License Service Reporter API Ingresses are available under the endpoints that are specified in the Ingress configuration.
Run the following command to check whether the Ingresses are properly configured:
kubectl get ingress -n ${LSR_NAMESPACE} -o yaml
In the response, you get information about Ingresses that you configured for License Service Reporter. Look at the
spec.rules.host
section to check the configuration. You should see twospec.rules.host
sections, one for each Ingresse that you configured. -
Run the following command to check whether the License Service Reporter pods are running:
kubectl -n ${LSR_NAMESPACE} get pods
An example of the response:
NAME READY STATUS RESTARTS AGE ibm-license-service-reporter-operator-6bc65f99f9-dmrmk 1/1 Running 0 4m50s ibm-license-service-reporter-instance-5544795988-jrxqx 1/1 Running 0 2m50s