开源软件名称(OpenSource Name): fkorotkov/k8s-kotlin-dsl开源软件地址(OpenSource Url): https://github.com/fkorotkov/k8s-kotlin-dsl开源编程语言(OpenSource Language):
Kotlin
100.0%
开源软件介绍(OpenSource Introduction):
Kotlin DSL for Kubernetes and Openshift Container Platform on top of fabric8 client .
Usage
k8s-kotlin-dsl
package can be found on jitpack . Simply add following lines to your build.gradle
:
allprojects {
repositories {
maven { url ' https://jitpack.io' }
}
}
dependencies {
implementation(" com.github.fkorotkov:k8s-kotlin-dsl:${ kubernetes_dsl_version} " )
}
Using with kubernetes-client
Let's check out how to create an Ingress via fabric8 client . Don't forget to add a dependency on io.fabric8:kubernetes-client:${kubernetes_client_version}
.
import com.fkorotkov.kubernetes.extensions.*
import io.fabric8.kubernetes.api.model.IntOrString
import io.fabric8.kubernetes.client.DefaultKubernetesClient
fun main () {
val client = DefaultKubernetesClient ().inNamespace(" default" )
client.extensions().ingresses().createOrReplace(
newIngress {
metadata {
name = " example-ingress"
}
spec {
backend {
serviceName = " example-service"
servicePort = IntOrString (8080 )
}
}
}
)
}
Apply modifications
By leveraging awesomeness of Kotlin it becomes super easy to have a base service template that every microservice is created from:
val baseService = defaultServiceTemplate()
baseService.apply {
metadata {
name = " foo"
}
}
Complete Deployment example
Here is an example of BaseDeployment
that defines a deployment with one replica and mounts a secret that can be used by the service.
import com.fkorotkov.kubernetes.*
import com.fkorotkov.kubernetes.apps.*
import io.fabric8.kubernetes.api.model.IntOrString
import io.fabric8.kubernetes.api.model.apps.Deployment
class BaseDeployment : Deployment {
constructor (serviceName: String ) {
metadata {
name = " $serviceName -service-deployment"
labels = mapOf (
" app" to serviceName,
" tier" to " backend"
)
}
spec {
replicas = 1
template {
metadata {
labels = mapOf (
" app" to serviceName,
" tier" to " backend"
)
}
spec {
containers = listOf (
newContainer {
name = " $serviceName -service"
image = " gcr.io/fkorotkov/$serviceName -service:latest"
volumeMounts = listOf (
newVolumeMount {
name = " gcp-credentials"
mountPath = " /etc/credentials"
readOnly = true
}
)
env = listOf (
newEnvVar {
name = " GOOGLE_APPLICATION_CREDENTIALS"
value = " /etc/credentials/service-account-credentials.json"
}
)
ports = listOf (
newContainerPort {
containerPort = 8080
}
)
livenessProbe {
httpGet {
path = " /healthz"
port = IntOrString (8080 )
}
periodSeconds = 60
}
readinessProbe {
httpGet {
path = " /healthz"
port = IntOrString (8080 )
}
initialDelaySeconds = 10
periodSeconds = 60
}
}
)
volumes = listOf (
newVolume {
name = " gcp-credentials"
secret {
secretName = " gcp-credentials"
}
}
)
}
}
}
}
}
Contribution
Check CONTRIBUTING.md
请发表评论