Merge infra and k3 into one directory again
Since I don't have multiple terraform steps anymore it simply doesn't make sense to me anymore to split all tasks into separate folders. Instead I try to be as clear as possible in the README to make it easy to follow the structure in the future without too much headache.
This commit is contained in:
86
README.adoc
86
README.adoc
@@ -11,11 +11,9 @@ The setup is split into 2 dedicated parts:
|
||||
|
||||
[source,bash]
|
||||
----
|
||||
cd infra
|
||||
terraform init
|
||||
terraform apply
|
||||
sleep 300 # Wait 5 minutes since the machines start _slow_ sometimes
|
||||
cd ../k3s
|
||||
ansible-galaxy install -r requirements.yml
|
||||
ansible-playbook site.yml
|
||||
----
|
||||
@@ -27,26 +25,82 @@ ansible-playbook site.yml
|
||||
|
||||
== Setup
|
||||
|
||||
The project is split into different directories, each responsible for another task.
|
||||
For the initial setup it is mandatory to follow the instructions of each directory in the following order.
|
||||
Subsequent changes may only require a subset of these instructions.
|
||||
Though, it should be safe to run each step multiple times, they should all be indempotent.
|
||||
The project is split into different steps, each responsible for another task.
|
||||
|
||||
=== infra
|
||||
=== terraform
|
||||
I use terraform to provide the required infrastructure to run a kubernetes-cluster.
|
||||
|
||||
Run this setup in the `infra/` directory.
|
||||
[WARNING]
|
||||
Make sure `config.auto.tfvars` with all the needed configuration-secrets is present otherwise the module cannot be applied!
|
||||
The file is savely stored in the password-manager.
|
||||
|
||||
include::./infra/README.adoc[tag=setup]
|
||||
[source,bash]
|
||||
----
|
||||
terraform init # <1>
|
||||
terraform apply # <2>
|
||||
----
|
||||
|
||||
=== k3s
|
||||
<1> Init the terraform modules if necessary
|
||||
<2> Setup infrastructure and create/update inventory.ini
|
||||
|
||||
Run this setup in the `k3s/` directory.
|
||||
[WARNING]
|
||||
The setup will take longer than just the `terraform apply`, since terraform returns as soon as the machine is provided.
|
||||
Though it hasn't been started the machines, yet.
|
||||
As a rule of thumb wait ca. 5 minutes after the apply to do other work.
|
||||
|
||||
=== ansible
|
||||
|
||||
Use ansible to setup a k3s installation and provide a set of foundational services in the cluster.
|
||||
The provided services are:
|
||||
|
||||
https://cert-manager.io/docs/installation/helm[cert-manager]::
|
||||
This allows issuing TLS certificates.
|
||||
The certificates are issued via https://letsencrypt.org[let's encrypt] and can be issued for the staging and production stage of let's encrypt.
|
||||
|
||||
https://www.min.io[minio]::
|
||||
Allow me to store data in an object storage.
|
||||
+
|
||||
TODO: Not setup yet!
|
||||
|
||||
https://concourse-ci.org[concourse-ci]::
|
||||
A powerful CI-cervice which I like to use to automate all kind of workloads.
|
||||
+
|
||||
TODO: Not setup yet!
|
||||
|
||||
https://about.gitea.com[gitea]::
|
||||
My personal favourite git-server.
|
||||
+
|
||||
TODO: Not setup yet!
|
||||
|
||||
https://github.com/pinterest/snappass[snappass]::
|
||||
A secure and reliable tool to share password.
|
||||
+
|
||||
TODO: Not setup yet!
|
||||
|
||||
[NOTE]
|
||||
The k3s-setup requires a `inventory.ini` which is automatically created by the infra.
|
||||
The k3s-setup requires a `inventory.ini` which is automatically created by terraform.
|
||||
So, make sure to apply the infra at least once, before running these playbooks.
|
||||
|
||||
include::./k3s/README.adoc[tag=setup]
|
||||
[source,bash]
|
||||
----
|
||||
ansible-galaxy install -r requirements.yml # <1>
|
||||
ansible-playbook site.yml # <2>
|
||||
----
|
||||
|
||||
<1> Install required ansible collections to create a k3s-cluster (can be omitted in subsequent runs)
|
||||
<2> Install k3s and download kube-config to .kube/config
|
||||
|
||||
[IMPORTANT]
|
||||
The second step will override any existing kube config, this might destroy any existing settings!
|
||||
|
||||
[NOTE]
|
||||
--
|
||||
To apply the playbook you may need to install additional packages:
|
||||
|
||||
* https://helm.sh/docs/intro/install/[helm]
|
||||
* https://github.com/databus23/helm-diff?tab=readme-ov-file#install[helm-diff]
|
||||
* python3-kubernetes (Debian/Ubuntu)
|
||||
--
|
||||
|
||||
== Enlarge / Reduce size of cluster
|
||||
|
||||
@@ -68,7 +122,7 @@ Instead proceed as the following:
|
||||
|
||||
== Responsibilities
|
||||
|
||||
`infra/`::
|
||||
terraform::
|
||||
* Creation of network for the kubernetes-cluster
|
||||
** A public subnet exposed to the internet for the kubernetes-servers
|
||||
** A private subnet for the kubernetes-agents
|
||||
@@ -82,11 +136,9 @@ Instead proceed as the following:
|
||||
* Creating the machines for kubernetes-agents in the private subnet
|
||||
* Creating DNS-records in Hetzer Cloud
|
||||
|
||||
`k3s/`::
|
||||
ansible::
|
||||
* Setup SSH-connections
|
||||
* Setting up routing on all servers
|
||||
* Installing k3s
|
||||
* Keep the software up-to-date
|
||||
* Add foundational services to the cluster
|
||||
|
||||
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
= infra
|
||||
:icons: font
|
||||
|
||||
This project is responsible for providing the required infra to run a kubernetes-cluster.
|
||||
|
||||
== Setup
|
||||
|
||||
// tag::setup[]
|
||||
[WARNING]
|
||||
Make sure `config.auto.tfvars` with all the needed configuration-secrets is present otherwise the module cannot be applied!
|
||||
The file is savely stored in the password-manager.
|
||||
|
||||
[source,bash]
|
||||
----
|
||||
terraform init # <1>
|
||||
terraform apply # <2>
|
||||
----
|
||||
|
||||
<1> Init the terraform modules if necessary
|
||||
<2> Setup infrastructure and create/update inventory.ini
|
||||
|
||||
[WARNING]
|
||||
The setup will take longer than just the `terraform apply`, since it will install some.
|
||||
As a rule of thumb wait ca. 5 minutes after the apply to do other work.
|
||||
// end::setup[]
|
||||
@@ -1,56 +0,0 @@
|
||||
= k3s
|
||||
:icons: font
|
||||
|
||||
This project is responsible for setting up a k3s installation and provide a set of foundational services in the cluster.
|
||||
The provided services are:
|
||||
|
||||
cert-manager::
|
||||
This allows issuing TLS certificates.
|
||||
The certificates are issued via https://letsencrypt.org[let's encrypt] and can be issued for the staging and production stage of let's encrypt.
|
||||
minio::
|
||||
|
||||
Allow me to store data in an object storage.
|
||||
+
|
||||
TODO: Not setup yet!
|
||||
|
||||
concourse-ci::
|
||||
A powerful CI-cervice which I like to use to automate all kind of workloads.
|
||||
+
|
||||
TODO: Not setup yet!
|
||||
|
||||
gitea::
|
||||
My personal favourite git-server.
|
||||
+
|
||||
TODO: Not setup yet!
|
||||
|
||||
snappass::
|
||||
A secure and reliable tool to share password.
|
||||
+
|
||||
TODO: Not setup yet!
|
||||
|
||||
== Setup
|
||||
|
||||
The setup requires a `inventory.ini` this should be provided by a previous step.
|
||||
|
||||
// tag::setup[]
|
||||
[source,bash]
|
||||
----
|
||||
ansible-galaxy install -r requirements.yml # <1>
|
||||
ansible-playbook site.yml # <2>
|
||||
----
|
||||
|
||||
<1> Install required ansible collections to create a k3s-cluster (can be omitted in subsequent runs)
|
||||
<2> Install k3s and download kube-config to .kube/config
|
||||
|
||||
[IMPORTANT]
|
||||
The second step will override any existing kube config, this might destroy any existing settings!
|
||||
|
||||
[NOTE]
|
||||
--
|
||||
To apply the playbook you may need to install additional packages:
|
||||
|
||||
* https://helm.sh/docs/intro/install/[helm]
|
||||
* https://github.com/databus23/helm-diff?tab=readme-ov-file#install[helm-diff]
|
||||
* python3-kubernetes (Debian/Ubuntu)
|
||||
--
|
||||
// end::setup[]
|
||||
@@ -58,7 +58,7 @@ module "k8s" {
|
||||
}
|
||||
|
||||
resource "local_file" "ansible_inventory" {
|
||||
filename = "${path.module}/../k3s/inventory.ini"
|
||||
filename = "${path.module}/inventory.ini"
|
||||
content = templatefile("./inventory.ini.tftpl", {
|
||||
server_ips = module.k8s.server_ips_v4,
|
||||
agent_ips = module.k8s.agent_ips_v4,
|
||||
Reference in New Issue
Block a user