aboutsummaryrefslogtreecommitdiff
path: root/content/posts
diff options
context:
space:
mode:
Diffstat (limited to 'content/posts')
-rw-r--r--content/posts/2019-03-03-welcome-to-my-blog.md14
-rw-r--r--content/posts/2019-03-03-welcome-to-my-blog.org12
-rw-r--r--content/posts/2019-03-07-ansible-part-1.md104
-rw-r--r--content/posts/2019-03-07-ansible-part-1.org99
-rw-r--r--content/posts/2019-04-22-ansible-part-2.md79
-rw-r--r--content/posts/2019-04-22-ansible-part-2.org75
-rw-r--r--content/posts/2019-11-16-compiling-emacs.md40
-rw-r--r--content/posts/2020-07-13-k8s.md79
-rw-r--r--content/posts/2020-07-14-fritzbox.md16
-rw-r--r--content/posts/2020-08-22-genpass.md39
-rw-r--r--content/posts/2020-12-28-k8s-private-registry.md56
-rw-r--r--content/posts/2021-12-26-nfs-k3s.md62
12 files changed, 489 insertions, 186 deletions
diff --git a/content/posts/2019-03-03-welcome-to-my-blog.md b/content/posts/2019-03-03-welcome-to-my-blog.md
new file mode 100644
index 0000000..01aeff3
--- /dev/null
+++ b/content/posts/2019-03-03-welcome-to-my-blog.md
@@ -0,0 +1,14 @@
++++
+title = "Welcome to my blog"
+date = 2019-03-03
+lastmod = 2020-07-12
++++
+
+On this blog, I\'ll be posting some personal projects that I\'m working
+on or just logging stuff that I don\'t want to forget.
+
+*Disclaimer*: English it\'s not my native language so if you find
+something that you don\'t understand I\'d love you to open an
+[issue](https://gitlab.com/gabrielgio/homestation/-/issuess), or if you
+have something to add open a
+[MR](phttps://gitlab.com/gabrielgio/homestation/-/merge_requests)
diff --git a/content/posts/2019-03-03-welcome-to-my-blog.org b/content/posts/2019-03-03-welcome-to-my-blog.org
deleted file mode 100644
index 889131d..0000000
--- a/content/posts/2019-03-03-welcome-to-my-blog.org
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: "Welcome to my blog"
-date: 2019-03-03
-lastmod: 2020-07-12
----
-
-On this blog, I'll be posting some personal projects that I'm working on or just
-logging stuff that I don't want to forget.
-
-/Disclaimer/: English it's not my native language so if you find something that
-you don't understand I'd love you to open an [[https://gitlab.com/gabrielgio/homestation/-/issuess][issue]], or if you have something to
-add open a [[phttps://gitlab.com/gabrielgio/homestation/-/merge_requests][MR]]
diff --git a/content/posts/2019-03-07-ansible-part-1.md b/content/posts/2019-03-07-ansible-part-1.md
new file mode 100644
index 0000000..2746afc
--- /dev/null
+++ b/content/posts/2019-03-07-ansible-part-1.md
@@ -0,0 +1,104 @@
+---
+layout: post
+title: "Automating setup with ansible-pull part-1"
+date: 2019-03-07
+lastmod: 2020-07-12
+tags: ['ansible','ansible-pull', 'linux', 'fedora']
+---
+
+Every time that I do a clean install on my machine it takes a few hours till I
+get to point where I was before formatting it, install all packages, select
+themes, icons, fonts, install IDEs, extensions and so on. After doing it a few
+times I came to the conclusion that I would save time by spending time
+automating this chore, and as a result, I could toy a little more with my
+system and not worry about spending a weekend re-installing everything (which
+have happened more time that I\'d like to remember).
+
+\<!--more-->
+
+So after a few attempts using python and bash I ended with many files and keep
+everything organized and concise turned out to be more tedious than the setup
+itself. So there comes [Ansible](https://www.ansible.com/). It is an
+enterprise-graded software used to automate tasks. It has A LOT OF features and
+it can be really helpful if you\'re a sysadmin but for now we\'re going to
+focus on [Ansible
+Pull](https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#ansible-pull)
+and
+[Playbooks](https://docs.ansible.com/ansible/latest/user_guide/playbooks.html).
+As better described:
+
+> \[Ansible-Pull\] is used to up a remote copy of ansible on each
+> managed node, each set to run via cron and update playbook source via
+> a source repository. This inverts the default push architecture of
+> Ansible into a pull architecture, which has near-limitless scaling
+> potential.
+>
+> Playbooks are Ansible's configuration, deployment, and orchestration
+> language. They can describe a policy you want your remote systems to
+> enforce, or a set of steps in a general IT process.
+>
+> [source](https://docs.ansible.com/ansible/latest/cli/ansible-pull.html)
+
+The goal is to pull and run a playbook remotely using a git repository.
+The playbook will describe the tasks needed to setup our machine from
+scratch.
+
+But first lets toy a bit a with playbooks locally with `ansible-playbook`, to
+do so we need to add `localhost` to ansible's hosts list. Add it to
+ `/etc/ansible/hosts`:
+
+``` service
+[all]
+localhost
+```
+
+As an experiment we\'re going to write a asks to install vim. Currently, I\'m
+using [Fedora](https://getfedora.org/) thus we going to use [dnf
+modeule](https://docs.ansible.com/ansible/latest/modules/dnf_module.html) to
+install packages, but if you\'re using another distribution look for a
+equivalent module like [apt
+module](https://docs.ansible.com/ansible/latest/modules/apt_module.html) for
+[Ubuntu](https://ubuntu.com/).
+
+The playbook to install is quite straightforward:
+
+``` yaml
+# main.yaml
+- hosts: all
+ tasks:
+ - name: install vim
+ dnf:
+ name: vim
+ state: latest
+```
+
+`hosts:` is required and it has to match our hosts otherwise the
+playbook won\'t run.
+
+`tasks:` is the list of tasks that the playbook will perform, in this
+case will be `dnf install vim`.
+
+To run a playbook use the command `ansible-playbook` commando to run
+`main.yml` direct from disk, do to so just run the following command:
+
+``` bash
+sudo ansible-playbook --connection=local main.yml
+```
+
+After a few seconds, vim will be installed on your machine.
+
+```
+PLAY [all] *************************************************************
+
+TASK [Gathering Facts] *************************************************
+ok: [localhost]
+
+TASK [install vim] *****************************************************
+ok: [localhost]
+
+PLAY RECAP *************************************************************
+localhost : ok=2 changed=0 unreachable=0 failed=0
+```
+
+This is the first step, next part we shall create a more complex
+playbook and setup repository to run it remotely using `ansible-pull`.
diff --git a/content/posts/2019-03-07-ansible-part-1.org b/content/posts/2019-03-07-ansible-part-1.org
deleted file mode 100644
index c8782e9..0000000
--- a/content/posts/2019-03-07-ansible-part-1.org
+++ /dev/null
@@ -1,99 +0,0 @@
----
-layout: post
-title: "Automating setup with ansible-pull part-1"
-date: 2019-03-07
-lastmod: 2020-07-12
-tags: ['ansible', 'ansible-pull', 'linux', 'fedora']
----
-
-Every time that I do a clean install on my machine it takes a few hours till I
-get to point where I was before formatting it, install all packages, select
-themes, icons, fonts, install IDEs, extensions and so on. After doing it a few
-times I came to the conclusion that I would save time by spending time automating this chore, and
-as a result, I could tinker a little more with my system and not worry about
-spending a weekend re-installing everything (which have happened more time that
-I'd like to remember).
-
-<!--more-->
-
-So after a few attempts using python and bash I ended with many files and
-keep everything organized and concise turned out to be more tedious than the
-setup itself. So there comes [[https://www.ansible.com/][Ansible]]. It is an enterprise-graded software used
-to automate tasks. It has A LOT OF features and it can be really helpful if
-you're a sysadmin but for now we're going to focus on [[https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#ansible-pull][Ansible Pull]] and
-[[https://docs.ansible.com/ansible/latest/user_guide/playbooks.html][Playbooks]]. As better described:
-
-#+BEGIN_QUOTE
-[Ansible-Pull] is used to up a remote copy of ansible on each managed node, each
-set to run via cron and update playbook source via a source repository. This
-inverts the default push architecture of Ansible into a pull architecture, which
-has near-limitless scaling potential.
-
-Playbooks are Ansible’s configuration, deployment, and orchestration language.
-They can describe a policy you want your remote systems to enforce, or a set of
-steps in a general IT process.
-
-[[https://docs.ansible.com/ansible/latest/cli/ansible-pull.html][source]]
-#+END_QUOTE
-
-The goal is to pull and run a playbook remotely using a git repository. The
-playbook will describe the tasks needed to setup our machine from scratch.
-
-But first lets tinker a bit a with playbooks locally with ~ansible-playbook~, to
-do so we need to add ~localhost~ to ansible's hosts list. Add it to
-~/etc/ansible/hosts~:
-
-#+BEGIN_SRC service
-[all]
-localhost
-#+END_SRC
-
-As an experiment we're going to write a asks to install vim. Currently, I'm using
-[[https://getfedora.org/][Fedora]] thus we going to use [[https://docs.ansible.com/ansible/latest/modules/dnf_module.html][dnf modeule]] to install packages, but if you're using
-another distribution look for a equivalent module like [[https://docs.ansible.com/ansible/latest/modules/apt_module.html][apt module]] for [[https://ubuntu.com/][Ubuntu]].
-
-The playbook to install is quite simple:
-
-#+BEGIN_SRC yaml
-# main.yaml
-- hosts: all
- tasks:
- - name: install vim
- dnf:
- name: vim
- state: latest
-#+END_SRC
-
-~hosts:~ is required and it has to match our hosts otherwise the playbook won't
-run.
-
-~tasks:~ is the list of tasks that the playbook will perform, in this case will
-be ~dnf install vim~.
-
-To run a playbook use the command ~ansible-playbook~ commando to run
-~main.yml~ direct from disk, do to so just run the following command:
-
-#+BEGIN_SRC bash
-sudo ansible-playbook --connection=local main.yml
-#+END_SRC
-
-
-After a few seconds, vim will be installed on your machine.
-
-#+BEGIN_SRC
-PLAY [all] *************************************************************
-
-TASK [Gathering Facts] *************************************************
-ok: [localhost]
-
-TASK [install vim] *****************************************************
-ok: [localhost]
-
-PLAY RECAP *************************************************************
-localhost : ok=2 changed=0 unreachable=0 failed=0
-#+END_SRC
-
-
-This is the first step, next part we shall create a more complex playbook and
-setup repository to run it remotely using ~ansible-pull~.
-
diff --git a/content/posts/2019-04-22-ansible-part-2.md b/content/posts/2019-04-22-ansible-part-2.md
new file mode 100644
index 0000000..e50005e
--- /dev/null
+++ b/content/posts/2019-04-22-ansible-part-2.md
@@ -0,0 +1,79 @@
+---
+title: "Automating desktop setup with ansible-pull part-2"
+date: 2019-04-22
+lastmod: 2020-07-12
+tags: ['ansible', 'ansible-pull', 'linux', 'fedora']
+---
+
+Now we\'re going to setup ansible to work with a git repository. The process is
+quite similar to `ansible-playbook`, the only difference is that the source for
+the playbook will be a remote repository and not a local file. Following the
+previous example we\'ll get vim setup automated.
+
+Create a git repository wherever you see fit,
+[gitlab](https://about.gitlab.com/) and [github](https://github.com/) offer
+free repositories. For this task we need to add only two file: one for the
+`yml` file describing the tasks and the `.vimrc` file.
+
+In the `.vimrc` add your own configuration, you can see mine [over
+here](https://gitlab.com/gabrielgio/homestation/-/blob/debcf3458df511aef9f7dca0cb73f6cf6baddd5d/.vimrc),
+it is pretty small as I don\'t use it but for small text editing (like this
+post) so you can start with that if you don\'t have one.
+
+The `yml` file will have two tasks, one is to install vim, just like we
+did in the part 1.
+
+``` yaml
+# main.yml
+---
+- name: install vim
+ dnf:
+ name: vim
+ state: latest
+```
+
+To copy `.vimrc` file to your `$HOME` we going to use [copy
+module](https://docs.ansible.com/ansible/latest/modules/copy_module.html):
+
+``` yaml
+# main.yml
+---
+- name: copy vimrc file
+ copy:
+ src: config/.vimrc
+ dest: ~/
+ mode: 0644
+```
+
+After we\'ve added those two files to repository you will have be something
+[like
+this](https://gitlab.com/gabrielgio/homestation/-/tree/debcf3458df511aef9f7dca0cb73f6cf6baddd5d).
+
+And now we just need to run `ansible-pull` command
+
+``` shell
+# you may need run it as a sudo
+ansible-pull -U $YOUR_REPO -i all main.yml
+```
+
+Params:
+
+- **`-i`** is a list of hosts.
+- **`-U`** is the git repository URL.
+
+Remember `man` is your best friend, take a look at `man ansible-pull` to
+know more about its parameters.
+
+The best part you can quickly test and see the result by running my
+sample:
+
+``` shell
+ansible-pull -U https://gitlab.com/gabrielgio/homestation.git -C debcf3458df511aef9f7dca0cb73f6cf6baddd5d -i all main.yml
+```
+
+The idea here is to keep your repository as a source of truth when comes to
+configuration, you can add `ansible-pull` to a CRON tab, so you just need to
+push something to your repository and after a few minutes not only your machine
+but all the machines that have it setup will run the playbooks. You can use
+this method as a straightforward way to install software, update machines or
+even distribute tooling company-wise.
diff --git a/content/posts/2019-04-22-ansible-part-2.org b/content/posts/2019-04-22-ansible-part-2.org
deleted file mode 100644
index cea1161..0000000
--- a/content/posts/2019-04-22-ansible-part-2.org
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: "Automating desktop setup with ansible-pull part-2"
-date: 2019-04-22
-lastmod: 2020-07-12
-tags: ['ansible', 'ansible-pull', 'linux', 'fedora']
----
-
-[[{{< ref "2019-03-07-ansible-part-1.org " >}}][See part 1]]
-
-Now we're going to setup ansible to work with a git repository. The process is
-quite similar to ~ansible-playbook~, the only difference is that the source for
-the playbook will be a remote repository and not a local file. Following the
-previous example we'll get vim setup automated.
-
-Create a git repository wherever you see fit, [[https://about.gitlab.com/][gitlab]] and [[https://github.com/][github]] offer free
-repositories. For this task we need to add only two file: one for the
-~yml~ file describing the tasks and the ~.vimrc~ file.
-
-
-In the ~.vimrc~ add your own configuration, you can see mine [[https://gitlab.com/gabrielgio/homestation/-/blob/debcf3458df511aef9f7dca0cb73f6cf6baddd5d/.vimrc][over here]], it is
-pretty simple as I don't use it but for simple text editing (like this post) so
-you can start with that if you don't have one.
-
-The ~yml~ file will have two tasks, one is to install vim, just like we did in
-the part 1.
-
-#+BEGIN_SRC yaml
-# main.yml
----
-- name: install vim
- dnf:
- name: vim
- state: latest
-#+END_SRC
-
-To copy ~.vimrc~ file to your ~$HOME~ we going to use [[https://docs.ansible.com/ansible/latest/modules/copy_module.html][copy module]]:
-
-#+BEGIN_SRC yaml
-# main.yml
----
-- name: copy vimrc file
- copy:
- src: config/.vimrc
- dest: ~/
- mode: 0644
-#+END_SRC
-
-After we've added those two files to repository you will have be something [[https://gitlab.com/gabrielgio/homestation/-/tree/debcf3458df511aef9f7dca0cb73f6cf6baddd5d][like
-this]].
-
-And now we just need to run ~ansible-pull~ command
-
-#+BEGIN_SRC shell
-# you may need run it as a sudo
-ansible-pull -U $YOUR_REPO -i all main.yml
-#+END_SRC
-
-Params:
-- *~-i~* is a list of hosts.
-- *~-U~* is the git repository URL.
-
-Remember ~man~ is your best friend, take a look at ~man ansible-pull~ to know
-more about its parameters.
-
-The best part you can quickly test and see the result by running my sample:
-#+BEGIN_SRC shell
-ansible-pull -U https://gitlab.com/gabrielgio/homestation.git -C debcf3458df511aef9f7dca0cb73f6cf6baddd5d -i all main.yml
-#+END_SRC
-
-The idea here is to keep your repository as a source of truth when comes to
-configuration, you can add ~ansible-pull~ to a CRON tab, so you just need to push
-something to your repository and after a few minutes not only your machine but
-all the machines that have it setup will run the playbooks. You can use this
-method as a simple way to install software, update machines or even distribute
-tooling company-wise.
diff --git a/content/posts/2019-11-16-compiling-emacs.md b/content/posts/2019-11-16-compiling-emacs.md
new file mode 100644
index 0000000..6773344
--- /dev/null
+++ b/content/posts/2019-11-16-compiling-emacs.md
@@ -0,0 +1,40 @@
+---
+title: "Compiling emacs from source code on Fedora"
+date: 2019-11-16
+lastmod: 2020-08-25
+tags: ['emacs', 'emacs27','linux', 'fedora']
+---
+
+Compiling emacs from source and installing on fedora.
+
+# Installing Packages
+
+Install the following packages:
+
+```shell
+sudo dnf install git autoconf make gcc texinfo \
+ gnutls-devel giflib-devel ncurses-devel \
+ libjpeg-turbo-devel giflib-devel gtk3-devel \
+ libXpm-devel libtiff-devel libxml2-devel -y
+```
+
+# Cloning Repository
+
+Clone repository
+[savannah.gnu.org](http://savannah.gnu.org/projects/emacs/):
+
+ git clone -b master git://git.sv.gnu.org/emacs.git
+
+# Compiling
+
+Navigate to emacs folder (`cd emacs`) and run the following steps
+
+```shell
+./autogen.sh
+./configure
+make -j$(nproc)
+sudo make install
+```
+
+After verify version with `emacs --version`, it should be equal or
+higher than `28.0.50`.
diff --git a/content/posts/2020-07-13-k8s.md b/content/posts/2020-07-13-k8s.md
new file mode 100644
index 0000000..8b706c1
--- /dev/null
+++ b/content/posts/2020-07-13-k8s.md
@@ -0,0 +1,79 @@
+---
+title: "Road to local k8s"
+date: 2020-07-13
+tags: ['kubernetes', 'linux', 'fedora']
+---
+
+# Goal
+
+The goal is to deploy kubernetes on my local networks, and keep everything as
+reproducible as possible.
+
+# Stack
+
+I\'ll use Fedora Core OS, Matchbox and Terraform [^1], a match the requirements
+for Tectonic [^2]
+
+## Steps
+
+- Network Setup DHCP/TFTP/DNS [^3]
+- Matchbox [^4]
+- PXE network boot environment
+- Terraform Tectonic [^5]
+
+## Network Setup DHCP/TFTP/DNS
+
+First learning the basics again:
+
+- <https://linuxhint.com/install_dhcp_server_ubuntu/>
+- <https://www.youtube.com/watch?v=XQ3T14SIlV4>
+
+To check open ports
+
+```shell
+lsof -Pni | grep LISTEN
+```
+
+Run the provided [^6] image with `dnsmasq` and PXE toolkit
+
+``` {.bash org-language="sh"}
+docker run --rm --cap-add=NET_ADMIN --net=host quay.io/coreos/dnsmasq \
+ -d -q \
+ --dhcp-range=192.168.1.3,192.168.1.254 \
+ --enable-tftp --tftp-root=/var/lib/tftpboot \
+ --dhcp-match=set:bios,option:client-arch,0 \
+ --dhcp-boot=tag:bios,undionly.kpxe \
+ --dhcp-match=set:efi32,option:client-arch,6 \
+ --dhcp-boot=tag:efi32,ipxe.efi \
+ --dhcp-match=set:efibc,option:client-arch,7 \
+ --dhcp-boot=tag:efibc,ipxe.efi \
+ --dhcp-match=set:efi64,option:client-arch,9 \
+ --dhcp-boot=tag:efi64,ipxe.efi \
+ --dhcp-userclass=set:ipxe,iPXE \
+ --dhcp-boot=tag:ipxe,http://matchbox.example.com:8080/boot.ipxe \
+ --address=/matchbox.example/192.168.1.2 \
+ --log-queries \
+ --log-dhcp
+```
+
+## Matchbox
+
+## PXE network boot environment
+
+## Terraform Tectonic
+
+------------------------------------------------------------------------
+
+# Links
+
+[^1]: <https://coreos.com/tectonic/docs/latest/install/bare-metal/metal-terraform.html>
+
+[^2]: <https://coreos.com/tectonic/docs/latest/install/bare-metal/requirements.html>
+
+[^3]: <https://coreos.com/matchbox/docs/latest/network-setup.html>
+
+[^4]: <https://coreos.com/matchbox/docs/latest/deployment.html>
+
+[^5]: <https://coreos.com/tectonic/releases/>
+
+[^6]: <https://github.com/poseidon/matchbox/tree/v0.7.0/contrib/dnsmasq>
diff --git a/content/posts/2020-07-14-fritzbox.md b/content/posts/2020-07-14-fritzbox.md
new file mode 100644
index 0000000..bba7f4e
--- /dev/null
+++ b/content/posts/2020-07-14-fritzbox.md
@@ -0,0 +1,16 @@
+---
+title: "Friz.box turned off DHCP"
+date: 2020-07-14
+tags: ['fritz.box', 'DHCP']
+---
+
+If you turned off your DHCP server follow these steps to connect to FritzBox
+settings.
+
+- Set your computer IP to `169.254.1.2` and your mask to `255.255.0.0`
+- Then go to `169.254.1.1`, login and re-enable the DHCP server.
+
+On gnome turn the wired connection off on again to apply the settings.
+
+Note: why in the hell does FritzBox 7490 require a land-line telephone to be
+physically factory reset?
diff --git a/content/posts/2020-08-22-genpass.md b/content/posts/2020-08-22-genpass.md
new file mode 100644
index 0000000..3991a86
--- /dev/null
+++ b/content/posts/2020-08-22-genpass.md
@@ -0,0 +1,39 @@
+---
+title: "Moving from Github to Gitlab pages"
+date: 2020-08-22
+tags: ['gitlab']
+---
+
+This was quite fast, I had just to create a small Gitlab pipeline job and
+publish to pages this is done by:
+
+```yml
+image: clojure:lein-2.7.0
+
+before_script:
+ - lein deps
+
+test:
+ script:
+ - lein test
+
+pages:
+ stage: deploy
+ script:
+ - lein package
+ artifacts:
+ paths:
+ - public
+ only:
+ - master
+```
+
+before_script
+: will download all the dependencies with `lein deps`.
+
+test
+: is self explanatory.
+
+pages
+: will compile the cljs into js with `lein package` and publish it
+ into pages.
diff --git a/content/posts/2020-12-28-k8s-private-registry.md b/content/posts/2020-12-28-k8s-private-registry.md
new file mode 100644
index 0000000..6706da7
--- /dev/null
+++ b/content/posts/2020-12-28-k8s-private-registry.md
@@ -0,0 +1,56 @@
+---
+title: "K8S private gitlab registry using podman"
+date: 2021-12-28
+tags: ['kubernetes', 'linux', 'podman', 'gitlab', 'k3s']
+---
+
+This is based on [Log in to Docker
+Hub](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/).
+It is just a bit different to use podman
+
+First we should take a look at podman-login man page:
+
+``` bash
+man podman login
+```
+
+It will give some valueable information like the location of auth.json
+file. Now we can login using podman:
+
+``` bash
+podman login registry.gitlab.com
+```
+
+Then check the `auth.json` file located at
+`${XDG_RUNTIME_DIR}/containers/auth.json` (as described by the manual).
+
+``` bash
+cat "${XDG_RUNTIME_DIR}/containers/auth.json"
+```
+
+It will print your auth config:
+
+``` json
+{
+ "auths": {
+ "registry.gitlab.com": {
+ "auth": "..."
+ }
+ }
+}
+```
+
+Now copy that file over to the server and register it in k8s with the
+following command:
+
+``` bash
+kubectl create secret generic regcred \
+ --from-file=.dockerconfigjson=auth.json \
+ --type=kubernetes.io/dockerconfigjson
+```
+
+Once you have created you can list by `kubectl get secret`:
+```
+NAME TYPE DATA AGE
+regcred kubernetes.io/dockerconfigjson 1 53s
+```
diff --git a/content/posts/2021-12-26-nfs-k3s.md b/content/posts/2021-12-26-nfs-k3s.md
new file mode 100644
index 0000000..e9988c7
--- /dev/null
+++ b/content/posts/2021-12-26-nfs-k3s.md
@@ -0,0 +1,62 @@
+---
+title: "Enable NFS on K3S"
+date: 2021-12-26
+tags: ['kubernetes', 'linux', 'helm', 'k3s']
+---
+
+By default [K3S](https://k3s.io/) comes only with
+[local-path](https://github.com/rancher/local-path-provisioner) storage
+class, and if you are running with more than one node in your cluster
+you may want to use a more \"distributed\" solution. For may case I
+opted for NFS.
+
+To check the current storage class you can run:
+
+``` bash
+k3s kubectl get storageclasses
+```
+
+And it will print something like:
+
+ NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
+ local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 154d
+
+To start adding First you need to install
+[helm](https://github.com/helm/helm) on your server. To do so you may
+run:
+
+``` bash
+curl -sSL https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
+```
+
+**Be careful when running scripts directly into bash always check the
+source** **Sometimes is also recommended to do not pipe directly to
+bash**
+
+Once it is installed we need to add the [NFS storage
+classes](https://kubernetes.io/docs/concepts/storage/storage-classes/#nfs).
+It has two providers, I have chose [NFS Subdir External
+Provisioner](https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner).
+
+Add the helm repo
+
+``` bash
+helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
+```
+
+Then we need to actually install the provider
+
+``` bash
+helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
+ --set nfs.server=x.x.x.x \
+ --set nfs.path=/exported/path
+```
+
+Set the `nfs.server` and `nfs.path` accordingly with your setup.
+
+After that if we run `k3s kubectl get storageclasses` it will now print
+another NFS provider:
+
+ NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
+ local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 154d
+ nfs-client cluster.local/nfs-subdir-external-provisioner Delete Immediate true 76m