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 --------------------------------
|
// ----------------------------------- 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"
|
const val K3S_VERSION = "v1.29.1+k3s2"
|
||||||
|
|
||||||
// ----------------------------------- directories --------------------------------
|
// ----------------------------------- 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