remove k3d
This commit is contained in:
parent
02ce6336a2
commit
eccf61b3d6
3 changed files with 2 additions and 166 deletions
|
@ -1,39 +0,0 @@
|
|||
package org.domaindrivenarchitecture.provs.server.domain
|
||||
|
||||
import org.domaindrivenarchitecture.provs.framework.core.Prov
|
||||
import org.domaindrivenarchitecture.provs.framework.core.docker.provideContainer
|
||||
import org.domaindrivenarchitecture.provs.framework.core.echoCommandForTextWithNewlinesReplaced
|
||||
import org.domaindrivenarchitecture.provs.framework.core.repeatTaskUntilSuccess
|
||||
|
||||
|
||||
/**
|
||||
* Runs a k3s server and a k3s agent as containers.
|
||||
* Copies the kubeconfig from container to the default location: $HOME/.kube/config
|
||||
*/
|
||||
fun Prov.installK3sAsContainers(token: String = "12345678901234") = task {
|
||||
cmd("docker volume create k3s-server")
|
||||
provideContainer("k3s-server", "rancher/k3s", command = "server --cluster-init", options =
|
||||
"-d --privileged --tmpfs /run --tmpfs /var/run " +
|
||||
"-e K3S_TOKEN=$token -e K3S_KUBECONFIG_OUTPUT=./kubeconfig.yaml -e K3S_KUBECONFIG_MODE=666 " +
|
||||
"-v k3s-server:/var/lib/rancher/k3s:z -p 6443:6443 -p 80:80 -p 443:443 " +
|
||||
"--ulimit nproc=65535 --ulimit nofile=65535:65535")
|
||||
|
||||
// wait for config file
|
||||
cmd("export timeout=60; while [ ! -f /var/lib/docker/volumes/k3s-server/_data/server/kubeconfig.yaml ]; do if [ \"${'$'}timeout\" == 0 ]; then echo \"ERROR: Timeout while waiting for file.\"; break; fi; sleep 1; ((timeout--)); done")
|
||||
|
||||
sh("""
|
||||
mkdir -p ${'$'}HOME/.kube/
|
||||
cp /var/lib/docker/volumes/k3s-server/_data/server/kubeconfig.yaml ${'$'}HOME/.kube/config
|
||||
""".trimIndent())
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Apply a config to kubernetes.
|
||||
* Prerequisite: Kubectl has to be installed
|
||||
*/
|
||||
fun Prov.applyK8sConfig(configAsYaml: String, kubectlCommand: String = "kubectl") = task {
|
||||
repeatTaskUntilSuccess(6, 10) {
|
||||
cmd(echoCommandForTextWithNewlinesReplaced(configAsYaml) + " | $kubectlCommand apply -f -")
|
||||
}
|
||||
}
|
|
@ -10,7 +10,8 @@ import java.io.File
|
|||
|
||||
// ----------------------------------- versions --------------------------------
|
||||
|
||||
// when updating it is recommended to update also file k3s-install.sh in this repo (under: src/main/resources/org/domaindrivenarchitecture/provs/server/infrastructure/k3s/k3s-install.sh)
|
||||
// when updating this version, it is recommended to update also file k3s-install.sh in this repo
|
||||
// (under: src/main/resources/org/domaindrivenarchitecture/provs/server/infrastructure/k3s/k3s-install.sh)
|
||||
const val K3S_VERSION = "v1.29.1+k3s2"
|
||||
|
||||
// ----------------------------------- directories --------------------------------
|
||||
|
|
|
@ -1,126 +0,0 @@
|
|||
package org.domaindrivenarchitecture.provs.server.infrastructure
|
||||
|
||||
import org.domaindrivenarchitecture.provs.framework.core.*
|
||||
import org.domaindrivenarchitecture.provs.framework.core.docker.containerExec
|
||||
import org.domaindrivenarchitecture.provs.framework.core.docker.provideContainer
|
||||
import org.domaindrivenarchitecture.provs.framework.core.processors.ContainerStartMode
|
||||
import org.domaindrivenarchitecture.provs.server.domain.applyK8sConfig
|
||||
import org.domaindrivenarchitecture.provs.server.domain.installK3sAsContainers
|
||||
import org.domaindrivenarchitecture.provs.test.tags.ContainerTest
|
||||
import org.domaindrivenarchitecture.provs.test.tags.NonCi
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.Disabled
|
||||
|
||||
internal class K3dKtTest {
|
||||
|
||||
@Disabled // remove line and execute manually as this test may take several minutes
|
||||
@ContainerTest
|
||||
@NonCi
|
||||
fun installK3sAsContainers() {
|
||||
|
||||
// given
|
||||
val containerName = "alpine-docker-dind"
|
||||
local().task {
|
||||
provideContainer(
|
||||
containerName,
|
||||
"yobasystems/alpine-docker:dind-amd64",
|
||||
ContainerStartMode.CREATE_NEW_KILL_EXISTING, // for re-create a potentially existing container
|
||||
sudo = false,
|
||||
options = "--privileged"
|
||||
)
|
||||
|
||||
// alpine does not have bash pre-installed - but bash is currently required for provs
|
||||
containerExec(containerName, "sh -c \"apk add bash\"", sudo = false)
|
||||
}
|
||||
|
||||
val result = docker(containerName, sudo = false).task {
|
||||
|
||||
cmd("apk update")
|
||||
cmd("apk add sudo curl")
|
||||
task(
|
||||
"Install kubectl"
|
||||
) {
|
||||
sh("""
|
||||
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl
|
||||
chmod +x ./kubectl
|
||||
mv ./kubectl /usr/local/bin/kubectl
|
||||
kubectl version --client
|
||||
""".trimIndent())
|
||||
}
|
||||
|
||||
// when
|
||||
installK3sAsContainers()
|
||||
applyK8sConfig(appleConfig())
|
||||
|
||||
cmd("kubectl wait --for=condition=ready --timeout=600s pod apple-app")
|
||||
checkAppleService()
|
||||
}
|
||||
|
||||
// then
|
||||
assertTrue(result.success)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks if URL "$host/apple" is available and return text "apple"
|
||||
*/
|
||||
private fun Prov.checkAppleService(host: String = "127.0.0.1") = requireLast {
|
||||
// repeat required as curl may return with "empty reply from server" or with "Recv failure: Connection reset by peer"
|
||||
val res = repeatTaskUntilSuccess(12, 10) {
|
||||
cmd("curl -m 30 $host/apple")
|
||||
}.out?.trim()
|
||||
|
||||
if ("apple" == res) {
|
||||
ProvResult(true, out = res)
|
||||
} else {
|
||||
ProvResult(false, err = "Url $host/apple did not return text \"apple\" but returned: $res")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun appleConfig() =
|
||||
"""
|
||||
kind: Ingress
|
||||
apiVersion: networking.k8s.io/v1
|
||||
metadata:
|
||||
name: apple-ingress
|
||||
annotations:
|
||||
kubernetes.io/ingress.class: "traefik"
|
||||
spec:
|
||||
rules:
|
||||
- http:
|
||||
paths:
|
||||
- path: /apple
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: apple-service
|
||||
port:
|
||||
number: 5678
|
||||
---
|
||||
|
||||
kind: Pod
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: apple-app
|
||||
labels:
|
||||
app: apple
|
||||
spec:
|
||||
containers:
|
||||
- name: apple-app
|
||||
image: hashicorp/http-echo
|
||||
args:
|
||||
- "-text=apple"
|
||||
---
|
||||
|
||||
kind: Service
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: apple-service
|
||||
spec:
|
||||
selector:
|
||||
app: apple
|
||||
ports:
|
||||
- port: 5678 # Default port for image
|
||||
"""
|
Loading…
Reference in a new issue