From f75caede7d6a4e98fad871b8de710a3ae75c531d Mon Sep 17 00:00:00 2001 From: Manuel Vergara Date: Sun, 18 Jun 2023 04:46:35 +0200 Subject: [PATCH 1/5] Translated to Spanish the day86 file Signed-off-by: Manuel Vergara --- 2022/es/Days/day86.md | 125 +++++++++++++++++++++--------------------- 1 file changed, 63 insertions(+), 62 deletions(-) diff --git a/2022/es/Days/day86.md b/2022/es/Days/day86.md index 198c2e0ff..74dc99d67 100644 --- a/2022/es/Days/day86.md +++ b/2022/es/Days/day86.md @@ -1,166 +1,167 @@ -## Backup all the platforms +## Backup de todas las plataformas -During this whole challenge, we discussed many different platforms and environments. One thing all of those have in common is the fact they all need some level of data protection! +Durante todo este desafío, discutimos muchas plataformas y entornos diferentes. Una cosa que todos ellos tienen en común es que necesitan algún nivel de protección de datos. -Data Protection has been around for many many years but the wealth of data that we have today and the value that this data brings means we have to make sure we are not only resilient to infrastructure failure by having multiple nodes and high availability across applications but we must also consider that we need a copy of that data, that important data in a safe and secure location if a failure scenario was to occur. +La protección de datos ha existido durante muchos años, pero la cantidad de datos que tenemos hoy en día y el valor que estos datos aportan significa que debemos asegurarnos de no solo ser resilientes ante fallas de infraestructura teniendo múltiples nodos y alta disponibilidad en las aplicaciones, sino que también debemos considerar que necesitamos una copia de esos datos, esos datos importantes, en un lugar seguro si ocurriera un escenario de falla. -We hear a lot these days it seems about cybercrime and ransomware, and don't get me wrong this is a massive threat and I stand by the fact that you will be attacked by ransomware. It is not a matter of if it is a matter of when. So even more reason to make sure you have your data secure for when that time arises. However, the most common cause for data loss is not ransomware or cybercrime it is simply accidental deletion! +Hoy en día escuchamos mucho sobre delitos cibernéticos y ransomware, y no me malinterpretes, esta es una gran amenaza y sostengo que serás atacado por ransomware. No se trata de si sucederá, sino de cuándo sucederá. Por lo tanto, hay aún más razón para asegurarte de que tus datos estén protegidos cuando llegue ese momento. Sin embargo, la causa más común de pérdida de datos no es el ransomware ni los delitos cibernéticos, ¡sino simplemente la eliminación accidental! -We have all done it, deleted something we shouldn't have and had that instant regret. +Todos lo hemos hecho, hemos eliminado algo que no deberíamos haber eliminado y hemos sentido un arrepentimiento instantáneo. -With all of the technology and automation we have discussed during the challenge, the requirement to protect any stateful data or even complex stateless configuration is still there, regardless of the platform. +Con toda la tecnología y automatización de la que hemos hablado durante el desafío, el requisito de proteger cualquier dato con estado o incluso una configuración sin estado compleja aún está presente, independientemente de la plataforma. ![](Images/Day86_Data1.png) -But we should be able to perform that protection of the data with automation in mind and be able to integrate it into our workflows. +¡Pero deberíamos poder realizar esa protección de datos teniendo en cuenta la automatización y poder integrarla en nuestros flujos de trabajo. -If we look at what backup is: +Si analizamos lo que es un backup: -_In information technology, a backup, or data backup is a copy of computer data taken and stored elsewhere so that it may be used to restore the original after a data loss event. The verb form, referring to the process of doing so, is "back up", whereas the noun and adjective form is "backup"._ +*"En tecnología de la información, un backup o copia de seguridad de datos es una copia de los datos de la computadora que se toma y se almacena en otro lugar para que se pueda usar para restaurar el original después de un evento de pérdida de datos. El verbo que se refiere al proceso de hacer esto es "respaldar", mientras que el sustantivo y el adjetivo son "backup"."* -If we break this down to the simplest form, a backup is a copy and paste of data to a new location. Simply put I could take a backup right now by copying a file from my C: drive to my D: drive and I would then have a copy in case something happened to the C: drive or something was edited wrongly within the files. I could revert to the copy I have on the D: drive. Now if my computer dies where both the C & D drives live then I am not protected so I have to consider a solution or a copy of data outside of my system maybe onto a NAS drive in my house? But then what happens if something happens to my house, maybe I need to consider storing it on another system in another location, maybe the cloud is an option. Maybe I could store a copy of my important files in several locations to mitigate the risk of failure? +Si lo desglosamos a la forma más simple, un backup es una copia y pegado de datos en una nueva ubicación. En pocas palabras, podría hacer un backup en este momento copiando un archivo de mi unidad C: a mi unidad D:, y luego tendría una copia en caso de que algo le sucediera a la unidad C: o si se editara incorrectamente algún archivo. Podría volver a la copia que tengo en la unidad D:. Ahora, si mi computadora muere, donde están tanto las unidades C: como D:, entonces no estoy protegido, por lo que debo considerar una solución o una copia de los datos fuera de mi sistema, tal vez en una unidad NAS en mi casa. Pero luego, ¿qué sucede si algo le sucede a mi casa? Tal vez necesite considerar almacenarlo en otro sistema en otra ubicación, tal vez la nube sea una opción. Quizás podría almacenar una copia de mis archivos importantes en varios lugares para mitigar el riesgo de falla. -### 3-2-1 Backup Methodolgy +### Metodología de backup 3-2-1 -Now seems a good time to talk about the 3-2-1 rule or backup methodology. I did a [lightning talk](https://www.youtube.com/watch?v=5wRt1bJfKBw) covering this topic. +Ahora parece un buen momento para hablar sobre la regla 3-2-1 o metodología de backup. Hice una [charla rápida](https://www.youtube.com/watch?v=5wRt1bJfKBw) que aborda este tema. -We have already mentioned before some of the extreme ends of why we need to protect our data but a few more are listed below: +Ya hemos mencionado anteriormente algunas de las razones extremas por las que necesitamos proteger nuestros datos, pero a continuación se enumeran algunas más: ![](Images/Day86_Data2.png) -Which then allows me to talk about the 3-2-1 methodology. My first copy or backup of my data should be as close to my production system as possible, the reason for this is based on speed to recovery and again going back to that original point about accidental deletion this is going to be the most common reason for recovery. But I want to be storing that on a suitable second media outside of the original or production system. +Esto nos permite hablar sobre la metodología 3-2-1. Mi primera copia o backup de mis datos debería estar lo más cerca posible de mi sistema de producción, la razón de esto se basa en la velocidad de recuperación y nuevamente volvemos al punto original sobre la eliminación accidental, que será la razón más común para la recuperación. Pero quiero almacenar eso en un segundo medio adecuado fuera del sistema original o de producción. -We then want to make sure we also send a copy of our data external or offsite this is where a second location comes in be it another house, building, data centre or the public cloud. +Luego, queremos asegurarnos de enviar una copia de nuestros datos externamente o fuera del sitio, y aquí es donde entra en juego una segunda ubicación, ya sea otra casa, edificio, centro de datos o la nube pública. ![](Images/Day86_Data3.png) -### Backup Responsibility -We have most likely heard all of the myths when it comes to not having to backup, things like "Everything is stateless" I mean if everything is stateless then what is the business? no databases? word documents? There is a level of responsibility on every individual within the business to ensure they are protected but it is going to come down most likely to the operations teams to provide the backup process for the mission-critical applications and data. +### Responsabilidad del backup -Another good one is that "High availability is my backup, we have built in multiple nodes into our cluster there is no way this is going down!" apart from when you make a mistake to the database and this is replicated over all the nodes in the cluster, or there is fire, flood or blood scenario that means the cluster is no longer available and with it the important data. It's not about being stubborn it is about being aware of the data and the services, absolutely everyone should factor in high availability and fault tolerance into their architecture but that does not substitute the need for backup! +Probablemente hayamos escuchado todos los mitos cuando se trata de no tener que hacer backups, como "Todo es sin estado". Quiero decir, si todo es sin estado, ¿qué negocio tenemos? ¿sin bases de datos? ¿documentos de Word? Existe un nivel de responsabilidad en cada persona dentro de la empresa para asegurarse de estar protegidos, pero es probable que los equipos de operaciones sean los responsables de proporcionar el proceso de backup para las aplicaciones y datos críticos para la misión. -Replication can also seem to give us the offsite copy of the data and maybe that cluster mentioned above does live across multiple locations, however, the first accidental mistake would still be replicated there. But again a Backup requirement should stand alongside application replication or system replication within the environment. +Otro buen ejemplo es "La alta disponibilidad es mi backup, hemos incorporado varios nodos en nuestro clúster, ¡no hay forma de que esto falle!". Excepto cuando se comete un error en la base de datos y se replica en todos los nodos del clúster, o si hay un incendio, inundación o escenario de sangre que significa que el clúster ya no está disponible y, con él, los datos importantes. No se trata de ser obstinados, sino de ser conscientes de los datos y los servicios. Absolutamente todos deberían tener en cuenta la alta disponibilidad y la tolerancia a fallos en su arquitectura, pero eso no sustituye la necesidad de backup. -Now with all this said you can go to the extreme on the other end as well and send copies of data to too many locations which is going to not only cost but also increase the risk of being attacked as your surface area is now massively expanded. +La replicación también puede parecer que nos proporciona una copia externa de los datos y tal vez ese clúster mencionado anteriormente esté distribuido en varias ubicaciones. Sin embargo, el primer error accidental aún se replicaría allí. Pero nuevamente, el requisito de backup debe ir junto con la replicación de la aplicación o la replicación del sistema dentro del entorno. -Anyway, who looks after backup? It will be different within each business but someone should be taking it upon themselves to understand the backup requirements. But also understand the recovery plan! +Ahora bien, con todo lo dicho, también se puede llegar al extremo opuesto y enviar copias de los datos a demasiadas ubicaciones, lo que no solo aumentará los costos, sino que también aumentará el riesgo de ser atacado, ya que tu superficie de exposición ahora se ha ampliado enormemente. -### Nobody cares till everybody cares +De todos modos, ¿quién se encarga del backup? Será diferente en cada empresa, pero alguien debería encargarse de comprender los requisitos de backup. ¡Pero también comprender el plan de recuperación! -Backup is a prime example, nobody cares about backup until you need to restore something. Alongside the requirement to back our data up we also need to consider how we restore! +### A nadie le importa hasta que a todos les importa -With our text document example, we are talking about very small files so the ability to copy back and forth is easy and fast. But if we are talking about 100GB plus files then this is going to take time. Also, we have to consider the level at which we need to recover if we take a virtual machine for example. +El backup es un ejemplo perfecto: a nadie le importa el backup hasta que necesita restaurar algo. Además del requisito de hacer copias de seguridad de nuestros datos, también debemos considerar cómo restaurarlos. -We have the whole Virtual Machine, we have the Operating System, Application installation and then if this is a database server we will have some database files as well. If we have made a mistake and inserted the wrong line of code into our database I probably don't need to restore the whole virtual machine, I want to be granular on what I recover back. +En nuestro ejemplo de documento de texto, estamos hablando de archivos muy pequeños, por lo que la capacidad de copiar de un lado a otro es fácil y rápida. Pero si hablamos de archivos de más de 100 GB, esto llevará tiempo. Además, debemos considerar el nivel al que necesitamos recuperarnos, por ejemplo, si tomamos una máquina virtual. -### Backup Scenario +Tenemos toda la máquina virtual, tenemos el sistema operativo, la instalación de la aplicación y, si se trata de un servidor de bases de datos, también tendremos algunos archivos de la base de datos. Si cometemos un error e insertamos la línea de código incorrecta en nuestra base de datos, probablemente no necesitemos restaurar toda la máquina virtual, sino que queremos ser más precisos en lo que recuperamos. -I want to now start building on a scenario to protect some data, specifically, I want to protect some files on my local machine (in this case Windows but the tool I am going to use is not only free and open-source but also cross-platform) I would like to make sure they are protected to a NAS device I have locally in my home but also into an Object Storage bucket in the cloud. +### Escenario de backup -I want to back up this important data, it just so happens to be the repository for the 90DaysOfDevOps, which yes is also being sent to GitHub which is probably where you are reading this now but what if my machine was to die and GitHub was down? How would anyone be able to read the content but also how would I potentially be able to restore that data to another service? +Ahora quiero comenzar a construir un escenario para proteger algunos datos, específicamente, quiero proteger algunos archivos en mi máquina local (en este caso, Windows, pero la herramienta que voy a usar no solo es gratuita y de código abierto, sino también multiplataforma). Me gustaría asegurarme de que estén respaldados en un dispositivo NAS que tengo localmente en mi hogar, pero también en un depósito de almacenamiento de objetos en la nube. + +Quiero hacer una copia de seguridad de estos datos importantes, que resulta ser el repositorio para los "90DaysOfDevOps", que sí, también se envía a GitHub, que probablemente es donde estás leyendo esto ahora, pero ¿qué pasaría si mi máquina muriera y GitHub estuviera caído? ¿Cómo podría alguien leer el contenido, pero también cómo podría restaurar esos datos en otro servicio? ![](Images/Day86_Data5.png) -There are lots of tools that can help us achieve this but I am going to be using a tool called [Kopia](https://kopia.io/) an Open-Source backup tool which will enable us to encrypt, dedupe and compress our backups whilst being able to send them to many locations. +Hay muchas herramientas que pueden ayudarnos a lograr esto, pero voy a utilizar una herramienta llamada [Kopia](https://kopia.io/), una herramienta de backup de código abierto que nos permitirá cifrar, deduplicar y comprimir nuestras copias de seguridad y enviarlas a muchos lugares. -You will find the releases to download [here](https://github.com/kopia/kopia/releases) at the time of writing I will be using v0.10.6. +Puedes encontrar las versiones para descargar [aquí](https://github.com/kopia/kopia/releases). En el momento de escribir esto, estaré usando la versión 0.10.6. -### Installing Kopia +### Instalación de Kopia -There is a Kopia CLI and GUI, we will be using the GUI but know that you can have a CLI version of this as well for those Linux servers that do not give you a GUI. +Existen una interfaz de línea de comandos (CLI) y una interfaz gráfica de usuario (GUI) de Kopia. Usaremos la GUI, pero debes saber que también puedes usar una versión de CLI para aquellos servidores Linux que no tienen una GUI. -I will be using `KopiaUI-Setup-0.10.6.exe` +Usaré `KopiaUI-Setup-0.10.6.exe`. -Really quick next next installation and then when you open the application you are greeted with the choice of selecting the storage type that you wish to use as your backup repository. +La instalación es muy rápida y luego, cuando abres la aplicación, te da la opción de seleccionar el tipo de almacenamiento que deseas utilizar como repositorio de backup. ![](Images/Day86_Data6.png) -### Setting up a Repository +### Configuración de un repositorio -Firstly we would like to set up a repository using our local NAS device and we are going to do this using SMB, but we could also use NFS I believe. +En primer lugar, nos gustaría configurar un repositorio utilizando nuestro dispositivo NAS local y lo haremos mediante SMB, aunque también podríamos usar NFS, creo. ![](Images/Day86_Data7.png) -On the next screen, we are going to define a password, this password is used to encrypt the repository contents. +En la siguiente pantalla, vamos a definir una contraseña, que se utilizará para cifrar el contenido del repositorio. ![](Images/Day86_Data8.png) -Now that we have the repository configured we can trigger an ad-hoc snapshot to start writing data to it. +Ahora que hemos configurado el repositorio, podemos iniciar una instantánea ad hoc para comenzar a escribir datos en él. ![](Images/Day86_Data9.png) -First up we need to enter a path to what we want to snapshot and in our case we want to take a copy of our `90DaysOfDevOps` folder. We will get back to the scheduling aspect shortly. +Lo primero que debemos hacer es ingresar la ruta de lo que queremos capturar en la instantánea, y en nuestro caso, queremos hacer una copia de nuestra carpeta `90DaysOfDevOps`. Volveremos a la programación más adelante. ![](Images/Day86_Data10.png) -We can define our snapshot retention. +Podemos definir la retención de nuestra instantánea. ![](Images/Day86_Data11.png) -Maybe there are files or file types that we wish to exclude. +Tal vez hay archivos o tipos de archivo que deseamos excluir. ![](Images/Day86_Data12.png) -If we wanted to define a schedule we could do this on this next screen, when you first create this snapshot this is the opening page to define. +Si quisiéramos definir una programación, podríamos hacerlo en esta próxima pantalla. Cuando creas esta instantánea, esta es la página de apertura para definirla. ![](Images/Day86_Data13.png) -And you will see several other settings that can be handled here. +Y verás que aquí se pueden manejar varios otros ajustes. ![](Images/Day86_Data14.png) -Select snapshot now and the data will be written to your repository. +Selecciona "Snapshot now" y los datos se escribirán en tu repositorio. ![](Images/Day86_Data15.png) -### Offsite backup to S3 +### backup externo a S3 -With Kopia we can through the UI it seems only to have one repository configured at a time. But through the UI we can be creative and have multiple repository configuration files to choose from to achieve our goal of having a copy local and offsite in Object Storage. +Con Kopia, parece que solo podemos tener un repositorio configurado a la vez a través de la interfaz gráfica. Sin embargo, a través de la interfaz gráfica, podemos ser creativos y tener varios archivos de configuración de repositorio para elegir y lograr nuestro objetivo de tener una copia local y externa en un almacenamiento de objetos. -The Object Storage I am choosing to send my data to is going to Google Cloud Storage. I firstly logged into my Google Cloud Platform account and created a storage bucket. I already had the Google Cloud SDK installed on my system but running the `gcloud auth application-default login` authenticated me with my account. +El almacenamiento de objetos que elegiré para enviar mis datos será Google Cloud Storage. Primero inicié sesión en mi cuenta de Google Cloud Platform y creé un depósito de almacenamiento. Ya tenía instalado el SDK de Google Cloud en mi sistema y al ejecutar el comando `gcloud auth application-default login` me autenticé con mi cuenta. ![](Images/Day86_Data16.png) -I then used the CLI of Kopia to show me the current status of my repository after we added our SMB repository in the previous steps. I did this using the `"C:\Program Files\KopiaUI\resources\server\kopia.exe" --config-file=C:\Users\micha\AppData\Roaming\kopia\repository.config repository status` command. +Luego usé la CLI de Kopia para mostrarme el estado actual de mi repositorio después de agregar nuestro repositorio SMB en los pasos anteriores. Hice esto usando el comando `"C:\Program Files\KopiaUI\resources\server\kopia.exe" --config-file=C:\Users\micha\AppData\Roaming\kopia\repository.config repository status`. ![](Images/Day86_Data17.png) -We are now ready to replace for the demo the configuration for the repository, what we would probably do if we wanted a long-term solution to hit both of these repositories is we would create an `smb.config` file and a `object.config` file and be able to run both of these commands to send our copies of data to each location. To add our repository we ran `"C:\Program Files\KopiaUI\resources\server\kopia.exe" --config-file=C:\Users\micha\AppData\Roaming\kopia\repository.config repository create gcs --bucket 90daysofdevops` +Ahora estamos listos para reemplazar, para la demostración, la configuración del repositorio. Lo que probablemente haríamos si quisiéramos una solución a largo plazo para ambos repositorios es crear un archivo `smb.config` y un archivo `object.config` y ejecutar ambos comandos para enviar nuestras copias de los datos a cada ubicación. Para agregar nuestro repositorio, ejecutamos el comando `"C:\Program Files\KopiaUI\resources\server\kopia.exe" --config-file=C:\Users\micha\AppData\Roaming\kopia\repository.config repository create gcs --bucket 90daysofdevops`. -The above command is taking into account that the Google Cloud Storage bucket we created is called `90daysofdevops` +El comando anterior tiene en cuenta que el depósito de Google Cloud Storage que creamos se llama `90daysofdevops`. ![](Images/Day86_Data18.png) -Now that we have created our new repository we can then run the `"C:\Program Files\KopiaUI\resources\server\kopia.exe" --config-file=C:\Users\micha\AppData\Roaming\kopia\repository.config repository status` command again and will now show the GCS repository configuration. +Ahora que hemos creado nuestro nuevo repositorio, podemos ejecutar nuevamente el comando `"C:\Program Files\KopiaUI\resources\server\kopia.exe" --config-file=C:\Users\micha\AppData\Roaming\kopia\repository.config repository` ![](Images/Day86_Data19.png) -The next thing we need to do is create a snapshot and send that to our newly created repository. Using the `"C:\Program Files\KopiaUI\resources\server\kopia.exe" --config-file=C:\Users\micha\AppData\Roaming\kopia\repository.config kopia snapshot create "C:\Users\micha\demo\90DaysOfDevOps"` command we can kick off this process. You can see in the below browser that our Google Cloud Storage bucket now has kopia files based on our backup in place. +Lo siguiente que debemos hacer es crear una instantánea y enviarla a nuestro repositorio recién creado. Usando el comando `"C:\Program Files\KopiaUI\resources\server\kopia.exe" --config-file=C:\Users\micha\AppData\Roaming\kopia\repository.config kopia snapshot create "C:\Users\micha\demo\90DaysOfDevOps"`, podemos iniciar este proceso. Como se puede ver en el navegador a continuación, nuestro depósito de Google Cloud Storage ahora tiene archivos de Kopia basados en nuestra copia de seguridad. ![](Images/Day86_Data20.png) -With the above process we can settle our requirement of sending our important data to 2 different locations, 1 of which is offsite in Google Cloud Storage and of course we still have our production copy of our data on a different media type. +Con el proceso anterior, podemos cumplir con nuestro requisito de enviar nuestros datos importantes a 2 ubicaciones diferentes, una de las cuales está fuera del sitio en Google Cloud Storage, y por supuesto, aún tenemos nuestra copia de producción de nuestros datos en un tipo de medio diferente. -### Restore +### Restauración -Restore is another consideration and is very important, Kopia gives us the capability to not only restore to the existing location but also a new location. +La restauración es otra consideración y es muy importante. Kopia nos brinda la capacidad de restaurar no solo en la ubicación existente, sino también en una ubicación nueva. -If we run the command `"C:\Program Files\KopiaUI\resources\server\kopia.exe" --config-file=C:\Users\micha\AppData\Roaming\kopia\repository.config snapshot list` this will list the snapshots that we have currently in our configured repository (GCS) +Si ejecutamos el comando `"C:\Program Files\KopiaUI\resources\server\kopia.exe" --config-file=C:\Users\micha\AppData\Roaming\kopia\repository.config snapshot list`, esto enumerará las instantáneas que tenemos actualmente en nuestro repositorio configurado (GCS). ![](Images/Day86_Data21.png) -We can then mount those snapshots directly from GCS using the `"C:\Program Files\KopiaUI\resources\server\kopia.exe" --config-file=C:\Users\micha\AppData\Roaming\kopia\repository.config mount all Z:` command. +Luego, podemos montar esas instantáneas directamente desde GCS utilizando el comando `"C:\Program Files\KopiaUI\resources\server\kopia.exe" --config-file=C:\Users\micha\AppData\Roaming\kopia\repository.config mount all Z:`. ![](Images/Day86_Data22.png) -We could also restore the snapshot contents using `kopia snapshot restore kdbd9dff738996cfe7bcf99b45314e193` +También podríamos restaurar el contenido de la instantánea usando `kopia snapshot restore kdbd9dff738996cfe7bcf99b45314e193`. -The commands above are very long and this is because I was using the KopiaUI version of the kopia.exe as explained at the top of the walkthrough you can download the kopia.exe and put it into a path so you can just use the `kopia` command. +Los comandos anteriores son muy largos y esto se debe a que estaba utilizando la versión KopiaUI de kopia.exe, como se explica al principio de la guía, puedes descargar kopia.exe y colocarlo en una ruta para que solo tengas que usar el comando `kopia`. -In the next session, we will be focusing on protecting workloads within Kubernetes. +En la próxima sesión, nos enfocaremos en proteger las cargas de trabajo dentro de Kubernetes. -## Resources +## Recursos - [Kubernetes Backup and Restore made easy!](https://www.youtube.com/watch?v=01qcYSck1c4&t=217s) - [Kubernetes Backups, Upgrades, Migrations - with Velero](https://www.youtube.com/watch?v=zybLTQER0yY) @@ -168,4 +169,4 @@ In the next session, we will be focusing on protecting workloads within Kubernet - [Disaster Recovery vs. Backup: What's the difference?](https://www.youtube.com/watch?v=07EHsPuKXc0) - [Veeam Portability & Cloud Mobility](https://www.youtube.com/watch?v=hDBlTdzE6Us&t=3s) -See you on [Day 87](day87.md) +Nos vemos en el [Día 87](day87.md) From 6f6df79f9f8efc69700edc671c645baee4850ddb Mon Sep 17 00:00:00 2001 From: Manuel Vergara Date: Sun, 18 Jun 2023 14:41:44 +0200 Subject: [PATCH 2/5] Translated to Spanish the day87 file Signed-off-by: Manuel Vergara --- 2022/es/Days/day87.md | 124 +++++++++++++++++++++--------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/2022/es/Days/day87.md b/2022/es/Days/day87.md index c67b83d91..dce13543b 100644 --- a/2022/es/Days/day87.md +++ b/2022/es/Days/day87.md @@ -1,23 +1,23 @@ -## Hands-On Backup & Recovery +## Respaldo y Recuperación Práctica -In the last session, we touched on [Kopia](https://kopia.io/) an Open-Source backup tool that we used to get some important data off to a local NAS and off to some cloud-based object storage. +En la última sesión, hablamos sobre [Kopia](https://kopia.io/), una herramienta de respaldo de código abierto que utilizamos para extraer algunos datos importantes a un NAS local y a un almacenamiento de objetos basado en la nube. -In this section, I want to get into the world of Kubernetes backup. It is a platform we covered [The Big Picture: Kubernetes](Days/day49.md) earlier in the challenge. +En esta sección, vamos a adentrarnos en el mundo del respaldo de Kubernetes. Es una plataforma que cubrimos anteriormente en el [panorama general](Days/day49.md): Kubernetes durante el desafío. -We will again be using our minikube cluster but this time we are going to take advantage of some of those addons that are available. +Nuevamente, utilizaremos nuestro clúster minikube, pero esta vez vamos a aprovechar algunos de los complementos disponibles. -### Kubernetes cluster setup +### Configuración del clúster de Kubernetes -To set up our minikube cluster we will be issuing the `minikube start --addons volumesnapshots,csi-hostpath-driver --apiserver-port=6443 --container-runtime=containerd -p 90daysofdevops --kubernetes-version=1.21.2` you will notice that we are using the `volumesnapshots` and `csi-hostpath-driver` as we will make full use of these for when we are taking our backups. +Para configurar nuestro clúster minikube, emitiremos el siguiente comando: `minikube start --addons volumesnapshots,csi-hostpath-driver --apiserver-port=6443 --container-runtime=containerd -p 90daysofdevops --kubernetes-version=1.21.2`. Observarás que estamos utilizando `volumesnapshots` y `csi-hostpath-driver`, ya que haremos un uso completo de ellos cuando realicemos nuestros respaldos. -At this point I know we have not deployed Kasten K10 yet but we want to issue the following command when your cluster is up, we want to annotate the volumesnapshotclass so that Kasten K10 can use this. +En este punto, sé que aún no hemos implementado Kasten K10, pero queremos emitir el siguiente comando cuando tu clúster esté activo para anotar la clase de volumesnapshot, de modo que Kasten K10 pueda utilizarla. ```Shell kubectl annotate volumesnapshotclass csi-hostpath-snapclass \ k10.kasten.io/is-snapshot-class=true ``` -We are also going to change over the default storageclass from the standard default storageclass to the csi-hostpath storageclass using the following. +También vamos a cambiar la storageclass predeterminada de la storageclass predeterminada estándar a la storageclass de csi-hostpath utilizando lo siguiente. ```Shell kubectl patch storageclass csi-hostpath-sc -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' @@ -27,35 +27,37 @@ kubectl patch storageclass standard -p '{"metadata": {"annotations":{"storagecla ![](Images/Day87_Data1.png) -### Deploy Kasten K10 -Add the Kasten Helm repository +### Implementar Kasten K10 -`helm repo add kasten https://charts.kasten.io/` - -We could use `arkade kasten install k10` here as well but for the demo, we will run through the following steps. [More Details](https://blog.kasten.io/kasten-k10-goes-to-the-arkade) - -Create the namespace and deploy K10, note that this will take around 5 mins - -`helm install k10 kasten/k10 --namespace=kasten-io --set auth.tokenAuth.enabled=true --set injectKanisterSidecar.enabled=true --set-string injectKanisterSidecar.namespaceSelector.matchLabels.k10/injectKanisterSidecar=true --create-namespace` - -![](Images/Day87_Data1.png) +Agrega el repositorio de Helm de Kasten. +```shell +helm repo add kasten https://charts.kasten.io/ +``` -You can watch the pods come up by running the following command. +Aquí también podríamos usar arkade kasten install k10, pero para la demostración, seguiremos los siguientes pasos. [Más detalles](https://blog.kasten.io/kasten-k10-goes-to-the-arkade) -`kubectl get pods -n kasten-io -w` +Crea el espacio de nombres y despliega K10. Ten en cuenta que esto tomará aproximadamente 5 minutos. -![](Images/Day87_Data3.png) +```shell +helm install k10 kasten/k10 --namespace=kasten-io --set auth.tokenAuth.enabled=true --set injectKanisterSidecar.enabled=true --set-string injectKanisterSidecar.namespaceSelector.matchLabels.k10/injectKanisterSidecar=true --create-namespace +``` -Port forward to access the K10 dashboard, open a new terminal to run the below command +Puedes observar cómo se inician los pods ejecutando el siguiente comando. +```shell +kubectl get pods -n kasten-io -w +``` -`kubectl --namespace kasten-io port-forward service/gateway 8080:8000` +Reenvía el puerto para acceder al panel de control de K10. Abre una nueva terminal y ejecuta el siguiente comando. +```shell +kubectl --namespace kasten-io port-forward service/gateway 8080:8000 +``` -The Kasten dashboard will be available at `http://127.0.0.1:8080/k10/#/` +El panel de control de Kasten estará disponible en `http://127.0.0.1:8080/k10/#/` ![](Images/Day87_Data4.png) -To authenticate with the dashboard we now need the token which we can get with the following commands. +Para autenticarte en el panel de control, ahora necesitamos obtener el token, que podemos obtener con los siguientes comandos. ```Shell TOKEN_NAME=$(kubectl get secret --namespace kasten-io|grep k10-k10-token | cut -d " " -f 1) @@ -67,109 +69,107 @@ echo $TOKEN ![](Images/Day87_Data5.png) -Now we take this token and we input that into our browser, you will then be prompted for an email and company name. +Ahora toma este token e ingrésalo en tu navegador, luego se te solicitará un correo electrónico y el nombre de la empresa. ![](Images/Day87_Data6.png) -Then we get access to the Kasten K10 dashboard. +Luego accederás al panel de control de Kasten K10. ![](Images/Day87_Data7.png) -### Deploy our stateful application +### Implementar nuestra aplicación persistente -Use the stateful application that we used in the Kubernetes section. +Utiliza la aplicación persistente que usamos en la sección de Kubernetes. ![](Images/Day55_Kubernetes1.png) -You can find the YAML configuration file for this application here-> [pacman-stateful-demo.yaml](Kubernetes/pacman-stateful-demo.yaml) +Puedes encontrar el archivo de configuración YAML para esta aplicación aquí-> [pacman-stateful-demo.yaml](Kubernetes/pacman-stateful-demo.yaml) ![](Images/Day87_Data8.png) -We can use `kubectl get all -n pacman` to check on our pods coming up. +Podemos utilizar `kubectl get all -n pacman` para verificar que nuestros pods se estén iniciando. ![](Images/Day87_Data9.png) -In a new terminal we can then port forward the pacman front end. `kubectl port-forward svc/pacman 9090:80 -n pacman` +En una nueva terminal, reenviemos el frontend de Pacman. `kubectl port-forward svc/pacman 9090:80 -n pacman` -Open another tab on your browser to http://localhost:9090/ +Abre otra pestaña en tu navegador e ingresa a http://localhost:9090/ ![](Images/Day87_Data10.png) -Take the time to clock up some high scores in the backend MongoDB database. +Tómate el tiempo para acumular algunas puntuaciones altas en la base de datos MongoDB de la parte posterior de la aplicación. ![](Images/Day87_Data11.png) -### Protect our High Scores +### Proteger nuestras puntuaciones altas -Now we have some mission-critical data in our database and we do not want to lose it. We can use Kasten K10 to protect this whole application. +Ahora tenemos algunos datos críticos en nuestra base de datos y no queremos perderlos. Podemos utilizar Kasten K10 para proteger toda esta aplicación. -If we head back into the Kasten K10 dashboard tab you will see that our number of applications has now increased from 1 to 2 with the addition of our Pacman application to our Kubernetes cluster. +Si volvemos a la pestaña del panel de control de Kasten K10, verás que el número de aplicaciones ha aumentado de 1 a 2 con la adición de nuestra aplicación Pacman a nuestro clúster de Kubernetes. ![](Images/Day87_Data12.png) -If you click on the Applications card you will see the automatically discovered applications in our cluster. +Si haces clic en la tarjeta de Aplicaciones, verás las aplicaciones descubiertas automáticamente en nuestro clúster. ![](Images/Day87_Data13.png) -With Kasten K10 we can leverage storage-based snapshots as well export our copies out to object storage options. +Con Kasten K10, podemos aprovechar los snapshots basados en almacenamiento y también exportar nuestras copias a opciones de almacenamiento de objetos. -For the demo, we will create a manual storage snapshot in our cluster and then we can add some rogue data to our high scores to simulate an accidental mistake being made or is it? +Para la demostración, crearemos un snapshot de almacenamiento manual en nuestro clúster y luego agregaremos algunos datos incorrectos a nuestras puntuaciones altas para simular un error accidental. ¿O será intencional? -Firstly we can use the manual snapshot option below. +En primer lugar, podemos utilizar la opción de snapshot manual a continuación. ![](Images/Day87_Data14.png) -For the demo, I am going to leave everything as the default +Para la demostración, dejaré todo como está por defecto. ![](Images/Day87_Data15.png) -Back on the dashboard, you get a status report on the job as it is running and then when complete it should look as successful as this one. - -![](Images/Day87_Data16.png) +De vuelta en el panel de control, obtendrás un informe de estado sobre el trabajo a medida que se ejecuta y, cuando se complete, debería aparecer como exitoso como este. -### Failure Scenario +### Escenario de error -We can now make that fatal change to our mission-critical data by simply adding in a prescriptive bad change to our application. +Ahora podemos hacer ese cambio fatal a nuestros datos críticos simplemente agregando un cambio incorrecto y preescrito a nuestra aplicación. -As you can see below we have two inputs that we probably don't want in our production mission-critical database. +Como puedes ver a continuación, tenemos dos entradas que probablemente no queremos en nuestra base de datos de producción crítica. ![](Images/Day87_Data17.png) -### Restore the data +### Restaurar los datos -This is a simple demo and in a way not realistic although have you seen how easy it is to drop databases? +Esta es una demostración sencilla y de alguna manera no realista, aunque ¿has visto lo fácil que es eliminar bases de datos? -Now we want to get that high score list looking a little cleaner and how we had it before the mistakes were made. +Ahora queremos que la lista de puntuaciones altas luzca un poco más limpia, como estaba antes de que se cometieran los errores. -Back in the Applications card and on the Pacman tab, we now have 1 restore point we can use to restore from. +En la tarjeta de Aplicaciones y en la pestaña de Pacman, ahora tenemos 1 punto de restauración que podemos utilizar para restaurar. ![](Images/Day87_Data18.png) -When you select restore you can see all the associated snapshots and exports to that application. +Cuando selecciones la opción de restauración, verás todos los snapshots asociados y las exportaciones de esa aplicación. ![](Images/Day87_Data19.png) -Select that restore and a side window will appear, we will keep the default settings and hit restore. +Selecciona esa restauración y aparecerá una ventana lateral, mantendremos la configuración predeterminada y haremos clic en restaurar. ![](Images/Day87_Data20.png) -Confirm that you want to make this happen. +Confirma que deseas realizar esto. ![](Images/Day87_Data21.png) -You can then go back to the dashboard and see the progress of the restore. You should see something like this. +Luego puedes volver al panel de control y ver el progreso de la restauración. Deberías ver algo como esto. ![](Images/Day87_Data22.png) -But more importantly, how is our High-Score list looking in our mission-critical application. You will have to start the port forward again to Pacman as we previously covered. +Pero lo más importante, ¿cómo se ve nuestra lista de puntuaciones altas en nuestra aplicación crítica? Deberás volver a iniciar el reenvío de puertos hacia Pacman como mencionamos anteriormente. ![](Images/Day87_Data23.png) -A super simple demo and only really touching the surface of what Kasten K10 can achieve when it comes to backup. I will be creating some more in-depth video content on some of these areas in the future. We will also be using Kasten K10 to highlight some of the other prominent areas around Data Management when it comes to Disaster Recovery and the mobility of your data. +Una demostración muy simple y que apenas rasca la superficie de lo que Kasten K10 puede lograr en términos de copias de seguridad. Crearé contenido de video más detallado sobre algunas de estas áreas en el futuro. También utilizaremos Kasten K10 para destacar algunas de las otras áreas prominentes en la gestión de datos cuando se trata de la recuperación ante desastres y la movilidad de tus datos. -Next, we will take a look at Application consistency. +A continuación, echaremos un vistazo a la consistencia de la aplicación. -## Resources +## Recursos - [Kubernetes Backup and Restore made easy!](https://www.youtube.com/watch?v=01qcYSck1c4&t=217s) - [Kubernetes Backups, Upgrades, Migrations - with Velero](https://www.youtube.com/watch?v=zybLTQER0yY) @@ -177,4 +177,4 @@ Next, we will take a look at Application consistency. - [Disaster Recovery vs. Backup: What's the difference?](https://www.youtube.com/watch?v=07EHsPuKXc0) - [Veeam Portability & Cloud Mobility](https://www.youtube.com/watch?v=hDBlTdzE6Us&t=3s) -See you on [Day 88](day88.md) +Nos vemos en el [Día 88](day88.md) From 1b16a5f0c90f5dc47c3d04f6e8389a8a72d13813 Mon Sep 17 00:00:00 2001 From: Manuel Vergara Date: Sun, 18 Jun 2023 15:02:15 +0200 Subject: [PATCH 3/5] Translated to Spanish the day88 file Signed-off-by: Manuel Vergara --- 2022/es/Days/day88.md | 126 ++++++++++++++++++++++-------------------- 1 file changed, 66 insertions(+), 60 deletions(-) diff --git a/2022/es/Days/day88.md b/2022/es/Days/day88.md index 937e67903..e11003fbd 100644 --- a/2022/es/Days/day88.md +++ b/2022/es/Days/day88.md @@ -1,62 +1,63 @@ -## Application-Focused Backups +## Copias de seguridad enfocadas en aplicaciones -We have already spent some time talking about data services or data-intensive applications such as databases on [Day 85](day85.md). For these data services, we have to consider how we manage consistency, especially when it comes to application consistency. +Ya hemos dedicado tiempo a hablar sobre servicios de datos o aplicaciones intensivas en datos, como las bases de datos en [Día 85](day85.md). Para estos servicios de datos, debemos considerar cómo gestionamos la consistencia, especialmente cuando se trata de la consistencia de la aplicación. -In this post, we are going to dive into that requirement around consistently protecting the application data. +En esta publicación, profundizaremos en ese requisito de proteger de manera consistente los datos de la aplicación. -To do this our tool of choice will be [Kanister](https://kanister.io/) +Para hacer esto, nuestra herramienta elegida será [Kanister](https://kanister.io/). ![](Images/Day88_Data1.png) -### Introducing Kanister +### Introducción a Kanister -Kanister is an open-source project by Kasten, that enables us to manage (backup and restore) application data on Kubernetes. You can deploy Kanister as a helm application into your Kubernetes cluster. +Kanister es un proyecto de código abierto de Kasten que nos permite gestionar (hacer copias de seguridad y restaurar) los datos de la aplicación en Kubernetes. Puedes implementar Kanister como una aplicación Helm en tu clúster de Kubernetes. -Kanister uses Kubernetes custom resources, the main custom resources that are installed when Kanister is deployed are +Kanister utiliza recursos personalizados de Kubernetes. Los recursos personalizados principales que se instalan al implementar Kanister son: -- `Profile` - is a target location to store your backups and recover from. Most commonly this will be object storage. -- `Blueprint` - steps that are to be taken to backup and restore the database should be maintained in the Blueprint -- `ActionSet` - is the motion to move our target backup to our profile as well as restore actions. +- `Profile` (perfil): es un lugar de destino para almacenar tus copias de seguridad y recuperarlas. Por lo general, esto será un almacenamiento de objetos. +- `Blueprint` (diseño): los pasos que se deben seguir para hacer una copia de seguridad y restaurar la base de datos se deben mantener en el blueprint. +- `ActionSet` (conjunto de acciones): es el movimiento para mover nuestra copia de seguridad objetivo a nuestro perfil, así como las acciones de restauración. -### Execution Walkthrough +### Ejecución paso a paso -Before we get hands-on we should take a look at the workflow that Kanister takes in protecting application data. Firstly our controller is deployed using helm into our Kubernetes cluster, Kanister lives within its namespace. We take our Blueprint of which there are many community-supported blueprints available, we will cover this in more detail shortly. We then have our database workload. +Antes de comenzar, debemos echar un vistazo al flujo de trabajo que Kanister sigue para proteger los datos de la aplicación. En primer lugar, implementamos nuestro controlador mediante Helm en nuestro clúster de Kubernetes. Kanister se ejecuta en su propio espacio de nombres (namespace). A continuación, tomamos nuestro Blueprint, del cual hay muchos blueprints respaldados por la comunidad disponibles. Cubriremos esto en más detalle en breve. Luego, tenemos nuestra carga de trabajo de la base de datos. ![](Images/Day88_Data2.png) -We then create our ActionSet. +A continuación, creamos nuestro ActionSet. ![](Images/Day88_Data3.png) -The ActionSet allows us to run the actions defined in the blueprint against the specific data service. +El ActionSet nos permite ejecutar las acciones definidas en el blueprint contra el servicio de datos específico. ![](Images/Day88_Data4.png) -The ActionSet in turn uses the Kanister functions (KubeExec, KubeTask, Resource Lifecycle) and pushes our backup to our target repository (Profile). +A su vez, el ActionSet utiliza las funciones de Kanister (KubeExec, KubeTask, Resource Lifecycle) y envía nuestra copia de seguridad a nuestro repositorio de destino (Profile). ![](Images/Day88_Data5.png) -If that action is completed/failed the respective status is updated in the Actionset. +Si la acción se completa o falla, el estado respectivo se actualiza en el ActionSet. ![](Images/Day88_Data6.png) -### Deploying Kanister +### Implementación de Kanister -Once again we will be using the minikube cluster to achieve this application backup. If you have it still running from the previous session then we can continue to use this. +Una vez más, utilizaremos el clúster minikube para lograr esta copia de seguridad de la aplicación. Si todavía lo tienes en ejecución desde la sesión anterior, podemos seguir usándolo. -At the time of writing, we are up to image version `0.75.0` with the following helm command we will install kanister into our Kubernetes cluster. - -`helm install kanister --namespace kanister kanister/kanister-operator --set image.tag=0.75.0 --create-namespace` +En el momento de escribir esto, estamos en la versión de imagen 0.75.0. Con el siguiente comando de Helm, instalaremos Kanister en nuestro clúster de Kubernetes: +```sh +helm install kanister --namespace kanister kanister/kanister-operator --set image.tag=0.75.0 --create-namespace +``` ![](Images/Day88_Data7.png) -We can use `kubectl get pods -n kanister` to ensure the pod is up and running and then we can also check our custom resource definitions are now available (If you have only installed Kanister then you will see the highlighted 3) +Podemos usar kubectl get pods -n kanister para asegurarnos de que el pod esté en funcionamiento y también podemos verificar que las definiciones de recursos personal. ![](Images/Day88_Data8.png) -### Deploy a Database +### Despliegue de una base de datos -Deploying MySQL via helm: +Desplegar MySQL mediante Helm: ```Shell APP_NAME=my-production-app @@ -68,7 +69,7 @@ kubectl get pods -n ${APP_NAME} -w ![](Images/Day88_Data9.png) -Populate the MySQL database with initial data, and run the following: +Rellenar la base de datos de MySQL con datos iniciales y ejecutar lo siguiente: ```Shell MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace ${APP_NAME} mysql-store -o jsonpath="{.data.mysql-root-password}" | base64 --decode) @@ -77,9 +78,9 @@ MYSQL_EXEC="mysql -h ${MYSQL_HOST} -u root --password=${MYSQL_ROOT_PASSWORD} -Dm echo MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} ``` -### Create a MySQL CLIENT +### Crear un CLIENTE de MySQL -We will run another container image to act as our client +Ejecutaremos otra imagen de contenedor para actuar como nuestro cliente: ```Shell APP_NAME=my-production-app @@ -92,7 +93,7 @@ Note: if you already have an existing MySQL client pod running, delete with the kubectl delete pod -n ${APP_NAME} mysql-client ``` -### Add Data to MySQL +### Agregar datos a MySQL ```Shell echo "create database myImportantData;" | mysql -h ${MYSQL_HOST} -u root --password=${MYSQL_ROOT_PASSWORD} @@ -111,27 +112,28 @@ echo "select * from Accounts;" | ${MYSQL_EXEC} exit ``` -You should be able to see some data as per below. +Deberías poder ver algunos datos como se muestra a continuación. ![](Images/Day88_Data10.png) -### Create Kanister Profile +### Crear perfil Kanister -Kanister provides a CLI, `kanctl` and another utility `kando` that is used to interact with your object storage provider from the blueprint and both of these utilities. +Kanister proporciona una CLI, `kanctl`, y otra utilidad, `kando`, que se utiliza para interactuar con tu proveedor de almacenamiento de objetos desde el blueprint y ambas utilidades. -[CLI Download](https://docs.kanister.io/tooling.html#tooling) +[Descarga de la CLI](https://docs.kanister.io/tooling.html#tooling) -I have gone and I have created an AWS S3 Bucket that we will use as our profile target and restore location. I am going to be using environment variables so that I can still show you the commands I am running with `kanctl` to create our kanister profile. - -`kanctl create profile s3compliant --access-key $ACCESS_KEY --secret-key $SECRET_KEY --bucket $BUCKET --region eu-west-2 --namespace my-production-app` +He creado un bucket de AWS S3 que utilizaremos como destino de nuestro perfil y ubicación de restauración. Voy a utilizar variables de entorno para mostrar los comandos que ejecuto con kanctl para crear nuestro perfil Kanister. +```sh +kanctl create profile s3compliant --access-key $ACCESS_KEY --secret-key $SECRET_KEY --bucket $BUCKET --region eu-west-2 --namespace my-production-app +``` ![](Images/Day88_Data11.png) -### Blueprint time +### Blueprint -Don't worry you don't need to create your one from scratch unless your data service is not listed here in the [Kanister Examples](https://github.com/kanisterio/kanister/tree/master/examples) but by all means, community contributions are how this project gains awareness. +No te preocupes, no necesitas crear uno desde cero a menos que tu servicio de datos no esté listado aquí en los [Ejemplos de Kanister](https://github.com/kanisterio/kanister/tree/master/examples), pero, por supuesto, las contribuciones de la comunidad son la forma en que este proyecto gana visibilidad. -The blueprint we will be using will be the below. +El blueprint que utilizaremos será el siguiente: ```Shell apiVersion: cr.kanister.io/v1alpha1 @@ -213,67 +215,71 @@ actions: kando location delete --profile '{{ toJson .Profile }}' --path ${s3_path} ``` -To add this we will use the `kubectl create -f mysql-blueprint.yml -n kanister` command +Para agregar esto, utilizaremos el comando `kubectl create -f mysql-blueprint.yml -n kanister`. ![](Images/Day88_Data12.png) -### Create our ActionSet and Protect our application +### Crear nuestro ActionSet y proteger nuestra aplicación -We will now take a backup of the MySQL data using an ActionSet defining backup for this application. Create an ActionSet in the same namespace as the controller. - -`kubectl get profiles.cr.kanister.io -n my-production-app` This command will show us the profile we previously created, we can have multiple profiles configured here so we might want to use specific ones for different ActionSets +Ahora realizaremos una copia de seguridad de los datos de MySQL utilizando un ActionSet que define la copia de seguridad para esta aplicación. Crea un ActionSet en el mismo namespace que el controlador. +```sh +kubectl get profiles.cr.kanister.io -n my-production-app +``` -We are then going to create our ActionSet with the following command using `kanctl` +Este comando nos mostrará el perfil que creamos anteriormente. Podemos tener múltiples perfiles configurados aquí, por lo que podemos usar perfiles específicos para diferentes ActionSets. -`kanctl create actionset --action backup --namespace kanister --blueprint mysql-blueprint --statefulset my-production-app/mysql-store --profile my-production-app/s3-profile-dc5zm --secrets mysql=my-production-app/mysql-store` +Luego, crearemos nuestro ActionSet con el siguiente comando utilizando `kanctl`: +```sh +kanctl create actionset --action backup --namespace kanister --blueprint mysql-blueprint --statefulset my-production-app/mysql-store --profile my-production-app/s3-profile-dc5zm --secrets mysql=my-production-app/mysql-store +``` -You can see from the command above we are defining the blueprint we added to the namespace, the statefulset in our `my-production-app` namespace and also the secrets to get into the MySQL application. +En el comando anterior, estamos definiendo el blueprint que agregamos al namespace, el statefulset en nuestro namespace `my-production-app` y también los secretos para acceder a la aplicación MySQL. ![](Images/Day88_Data13.png) -Check the status of the ActionSet by taking the ActionSet name and using this command `kubectl --namespace kanister describe actionset backup-qpnqv` +Verifica el estado del ActionSet utilizando el nombre del ActionSet con el siguiente comando: kubectl --namespace kanister describe actionset backup-qpnqv. -Finally, we can go and confirm that we now have data in our AWS S3 bucket. +Finalmente, podemos confirmar que ahora tenemos datos en nuestro bucket de AWS S3. ![](Images/Day88_Data14.png) -### Restore +### Restauración -We need to cause some damage before we can restore anything, we can do this by dropping our table, maybe it was an accident, maybe it wasn't. +Necesitamos causar algún daño antes de poder restaurar algo, podemos hacer esto eliminando nuestra tabla, tal vez fue un accidente, tal vez no lo fue. -Connect to our MySQL pod. +Conéctate a nuestro pod de MySQL. ```Shell APP_NAME=my-production-app kubectl run mysql-client --rm --env APP_NS=${APP_NAME} --env MYSQL_EXEC="${MYSQL_EXEC}" --env MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} --env MYSQL_HOST=${MYSQL_HOST} --namespace ${APP_NAME} --tty -i --restart='Never' --image docker.io/bitnami/mysql:latest --command -- bash ``` -You can see that our importantdata DB is there with `echo "SHOW DATABASES;" | ${MYSQL_EXEC}` +Puedes ver que nuestra base de datos importantdata está ahí con `echo "SHOW DATABASES;" | ${MYSQL_EXEC}`. -Then to drop we ran `echo "DROP DATABASE myImportantData;" | ${MYSQL_EXEC}` +Luego, para eliminarla, ejecutamos `echo "DROP DATABASE myImportantData;" | ${MYSQL_EXEC}`. -And confirmed that this was gone with a few attempts to show our database. +Y confirmamos que se haya eliminado con algunos intentos de mostrar nuestra base de datos. ![](Images/Day88_Data15.png) -We can now use Kanister to get our important data back in business using the `kubectl get actionset -n kanister` to find out the ActionSet name that we took earlier. Then we will create a restore ActionSet to restore our data using `kanctl create actionset -n kanister --action restore --from "backup-qpnqv"` +Ahora podemos usar Kanister para restaurar nuestros datos importantes utilizando el comando `kubectl get actionset -n kanister` para encontrar el nombre del ActionSet que tomamos anteriormente. Luego, crearemos un ActionSet de restauración para restaurar nuestros datos usando `kanctl create actionset -n kanister --action restore --from "backup-qpnqv`". ![](Images/Day88_Data16.png) -We can confirm our data is back by using the below command to connect to our database. +Podemos confirmar que nuestros datos están de vuelta en nuestro pod de MySQL. ```Shell APP_NAME=my-production-app kubectl run mysql-client --rm --env APP_NS=${APP_NAME} --env MYSQL_EXEC="${MYSQL_EXEC}" --env MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} --env MYSQL_HOST=${MYSQL_HOST} --namespace ${APP_NAME} --tty -i --restart='Never' --image docker.io/bitnami/mysql:latest --command -- bash ``` -Now we are inside the MySQL Client, we can issue the `echo "SHOW DATABASES;" | ${MYSQL_EXEC}` and we can see the database is back. We can also issue the `echo "select * from Accounts;" | ${MYSQL_EXEC}` to check the contents of the database and our important data is restored. +Ahora estamos dentro del Cliente de MySQL, podemos ejecutar `echo "SHOW DATABASES;" | ${MYSQL_EXEC}` y podemos ver que la base de datos está de vuelta. También podemos ejecutar `echo "select * from Accounts;" | ${MYSQL_EXEC}` para verificar el contenido de la base de datos y nuestros datos importantes están restaurados. ![](Images/Day88_Data17.png) -In the next post, we take a look at Disaster Recovery within Kubernetes. +En la próxima publicación, veremos la Recuperación de Desastres dentro de Kubernetes. -## Resources +## Recursos - [Kanister Overview - An extensible open-source framework for app-lvl data management on Kubernetes](https://www.youtube.com/watch?v=wFD42Zpbfts) - [Application Level Data Operations on Kubernetes](https://community.cncf.io/events/details/cncf-cncf-online-programs-presents-cncf-live-webinar-kanister-application-level-data-operations-on-kubernetes/) @@ -283,4 +289,4 @@ In the next post, we take a look at Disaster Recovery within Kubernetes. - [Disaster Recovery vs. Backup: What's the difference?](https://www.youtube.com/watch?v=07EHsPuKXc0) - [Veeam Portability & Cloud Mobility](https://www.youtube.com/watch?v=hDBlTdzE6Us&t=3s) -See you on [Day 89](day89.md) +Nos vemos en el [Día 89](day89.md) From 4bab205bbf25a3a96c21ca292fd329527f4a02b2 Mon Sep 17 00:00:00 2001 From: Manuel Vergara Date: Sun, 18 Jun 2023 22:31:28 +0200 Subject: [PATCH 4/5] Translated to Spanish the day89 file Signed-off-by: Manuel Vergara --- 2022/es/Days/day89.md | 132 +++++++++++++++++++++--------------------- 1 file changed, 67 insertions(+), 65 deletions(-) diff --git a/2022/es/Days/day89.md b/2022/es/Days/day89.md index 3985cf425..a57c1c0ed 100644 --- a/2022/es/Days/day89.md +++ b/2022/es/Days/day89.md @@ -1,34 +1,33 @@ -## Disaster Recovery +## Recuperación de desastres -We have mentioned already how different failure scenarios will warrant different recovery requirements. When it comes to Fire, Flood and Blood scenarios we can consider these mostly disaster situations where we might need our workloads up and running in a completely different location as fast as possible or at least with near-zero recovery time objectives (RTO). +Ya hemos mencionado cómo diferentes escenarios de falla requerirán diferentes requisitos de recuperación. Cuando se trata de escenarios de incendio, inundación y sangre, podemos considerarlos como situaciones de desastre en las que es posible que necesitemos que nuestras cargas de trabajo estén en funcionamiento en una ubicación completamente diferente lo más rápido posible, o al menos con objetivos de tiempo de recuperación cercanos a cero (RTO). -This can only be achieved at scale when you automate the replication of the complete application stack to a standby environment. +Esto solo se puede lograr a gran escala cuando se automatiza la replicación de la pila de aplicaciones completa en un entorno de espera. -This allows for fast failovers across cloud regions, cloud providers or between on-premises and cloud infrastructure. +Esto permite una conmutación por error rápida entre regiones en la nube, proveedores de nube o entre infraestructura local y en la nube. -Keeping with the theme so far, we are going to concentrate on how this can be achieved using Kasten K10 using the minikube cluster that we deployed and configured a few sessions ago. +Siguiendo con el tema hasta ahora, nos vamos a concentrar en cómo se puede lograr esto utilizando Kasten K10 utilizando el clúster de minikube que implementamos y configuramos hace algunas sesiones. -We will then create another minikube cluster with Kasten K10 also installed to act as our standby cluster which in theory could be any location. +Luego crearemos otro clúster de minikube con Kasten K10 también instalado para actuar como nuestro clúster de espera, que en teoría podría ser cualquier ubicación. -Kasten K10 also has built-in functionality to ensure if something was to happen to the Kubernetes cluster it is running on that the catalogue data is replicated and available in a new one [K10 Disaster Recovery](https://docs.kasten.io/latest/operating/dr.html). +Kasten K10 también tiene funcionalidad incorporada para asegurar que si algo le sucede al clúster de Kubernetes en el que se está ejecutando, los datos del catálogo se repliquen y estén disponibles en un nuevo clúster [Recuperación de desastres de K10](https://docs.kasten.io/latest/operating/dr.html). -### Add object storage to K10 +### Agregar almacenamiento de objetos a K10 -The first thing we need to do is add an object storage bucket as a target location for our backups to land. Not only does this act as an offsite location but we can also leverage this as our disaster recovery source data to recover from. +Lo primero que debemos hacer es agregar un bucket de almacenamiento de objetos como ubicación de destino para que nuestras copias de seguridad se almacenen. Esto no solo actúa como una ubicación externa, sino que también podemos aprovecharlo como nuestros datos de origen para la recuperación de desastres. -I have cleaned out the S3 bucket that we created for the Kanister demo in the last session. +He limpiado el bucket de S3 que creamos para la demostración de Kanister en la última sesión. -![](Images/Day89_Data1.png) - -Port forward to access the K10 dashboard, open a new terminal to run the below command: - -`kubectl --namespace kasten-io port-forward service/gateway 8080:8000` +Reenvíe el puerto para acceder al panel de control de K10. Abra una nueva terminal y ejecute el siguiente comando: +```bash +kubectl --namespace kasten-io port-forward service/gateway 8080:8000 +``` -The Kasten dashboard will be available at `http://127.0.0.1:8080/k10/#/` +El panel de control de Kasten estará disponible en `http://127.0.0.1:8080/k10/#/` ![](Images/Day87_Data4.png) -To authenticate with the dashboard, we now need the token which we can get with the following commands. +Para autenticarse en el panel de control, ahora necesitamos el token que podemos obtener con los siguientes comandos. ```Shell TOKEN_NAME=$(kubectl get secret --namespace kasten-io|grep k10-k10-token | cut -d " " -f 1) @@ -40,97 +39,100 @@ echo $TOKEN ![](Images/Day87_Data5.png) -Now we take this token and we input that into our browser, you will then be prompted for an email and company name. +Ahora tomamos este token y lo ingresamos en nuestro navegador. Luego se le pedirá un correo electrónico y el nombre de la empresa. ![](Images/Day87_Data6.png) -Then we get access to the Kasten K10 dashboard. +Luego obtendremos acceso al panel de control de Kasten K10. ![](Images/Day87_Data7.png) -Now that we are back in the Kasten K10 dashboard we can add our location profile, select "Settings" at the top of the page and "New Profile". +Ahora que volvemos al panel de control de Kasten K10, podemos agregar nuestro perfil de ubicación. Seleccione "Configuración" en la parte superior de la página y luego "Nuevo perfil". ![](Images/Day89_Data2.png) -You can see from the image below that we have a choice when it comes to where this location profile is, we are going to select Amazon S3, and we are going to add our sensitive access credentials, region and bucket name. +Desde la imagen a continuación, puedes ver que tenemos una opción cuando se trata de la ubicación de este perfil. Vamos a seleccionar Amazon S3 y agregaremos nuestras credenciales de acceso sensibles, región y nombre del bucket. ![](Images/Day89_Data3.png) -If we scroll down on the New Profile creation window you will see, that we also can enable immutable backups which leverage the S3 Object Lock API. For this demo, we won't be using that. +Si nos desplazamos hacia abajo en la ventana de creación del Nuevo perfil, veremos que también podemos habilitar copias de seguridad inmutables que aprovechan la API de bloqueo de objetos de S3. Para esta demostración, no vamos a utilizar eso. ![](Images/Day89_Data4.png) -Hit "Save Profile" and you can now see our newly created or added location profile as per below. +Haz clic en "Guardar perfil" y ahora puedes ver nuestro perfil de ubicación recién creado o agregado como se muestra a continuación. ![](Images/Day89_Data5.png) -### Create a policy to protect the Pac-Man app to object storage +### Crear una política para proteger la aplicación Pac-Man en el almacenamiento de objetos -In the previous session, we created only an ad-hoc snapshot of our Pac-Man application, therefore we need to create a backup policy that will send our application backups to our newly created object storage location. +En la sesión anterior, creamos solo una instantánea ad hoc de nuestra aplicación Pac-Man, por lo tanto, necesitamos crear una política de respaldo que envíe nuestras copias de seguridad de la aplicación a nuestra ubicación de almacenamiento de objetos recién creada. -If you head back to the dashboard and select the Policy card you will see a screen as per below. Select "Create New Policy". +Si regresas al panel de control y seleccionas la tarjeta de Política, verás una pantalla como se muestra a continuación. Selecciona "Crear nueva política". ![](Images/Day89_Data6.png) -First, we can give our policy a useful name and description. We can also define our backup frequency for demo purposes I am using on-demand. +Primero, podemos darle a nuestra política un nombre útil y una descripción. También podemos definir la frecuencia de respaldo. Para fines de demostración, estoy usando "bajo demanda". ![](Images/Day89_Data7.png) -Next, we want to enable backups via Snapshot exports meaning that we want to send our data out to our location profile. If you have multiple you can select which one you would like to send your backups to. +A continuación, queremos habilitar las copias de seguridad a través de exportaciones de instantáneas, lo que significa que queremos enviar nuestros datos a nuestro perfil de ubicación. Si tienes varios perfiles, puedes seleccionar a cuál de ellos quieres enviar tus copias de seguridad. ![](Images/Day89_Data8.png) -Next, we select the application by either name or labels, I am going to choose by name and all resources. +A continuación, seleccionamos la aplicación por nombre o etiquetas. Voy a elegir por nombre y todos los recursos. ![](Images/Day89_Data9.png) -Under Advanced settings we are not going to be using any of these but based on our [walkthrough of Kanister yesterday](https://github.com/MichaelCade/90DaysOfDevOps/blob/main/Days/day88.md), we can leverage Kanister as part of Kasten K10 as well to take those application consistent copies of our data. +En la configuración avanzada, no vamos a usar ninguna de estas opciones, pero según nuestro [recorrido de Kanister de ayer](https://github.com/MichaelCade/90DaysOfDevOps/blob/main/Days/day88.md), también podemos aprovechar Kanister como parte de Kasten K10 para obtener copias coherentes de la aplicación de nuestros datos. ![](Images/Day89_Data10.png) -Finally, select "Create Policy" and you will now see the policy in our Policy window. +Finalmente, selecciona "Crear política" y ahora verás la política en nuestra ventana de Políticas. ![](Images/Day89_Data11.png) -At the bottom of the created policy, you will have "Show import details" we need this string to be able to import into our standby cluster. Copy this somewhere safe for now. +En la parte inferior de la política creada, tendrás "Mostrar detalles de importación". Necesitamos esta cadena para poder importarla en nuestro clúster de espera. Copia esto en algún lugar seguro por ahora. ![](Images/Day89_Data12.png) -Before we move on, we just need to select "run once" to get a backup sent to our object storage bucket. +Antes de continuar, solo necesitamos seleccionar "ejecutar una vez" para que se envíe una copia de seguridad a nuestro bucket de almacenamiento de objetos. ![](Images/Day89_Data13.png) -Below, the screenshot is just to show the successful backup and export of our data. +A continuación, la captura de pantalla muestra el respaldo y la exportación exitosos de nuestros datos. ![](Images/Day89_Data14.png) -### Create a new MiniKube cluster & deploy K10 +### Crear un nuevo clúster MiniKube e implementar K10 -We then need to deploy a second Kubernetes cluster and where this could be any supported version of Kubernetes including OpenShift, for education we will use the very free version of MiniKube with a different name. +Luego, necesitamos implementar un segundo clúster de Kubernetes y esto puede ser cualquier versión admitida de Kubernetes, incluido OpenShift. Para fines educativos, utilizaremos la versión gratuita de MiniKube con un nombre diferente. -Using `minikube start --addons volumesnapshots,csi-hostpath-driver --apiserver-port=6443 --container-runtime=containerd -p standby --kubernetes-version=1.21.2` we can create our new cluster. +Usando el comando `minikube start --addons volumesnapshots,csi-hostpath-driver --apiserver-port=6443 --container-runtime=containerd -p standby --kubernetes-version=1.21.2`, podemos crear nuestro nuevo clúster. ![](Images/Day89_Data15.png) -We then can deploy Kasten K10 in this cluster using: - -`helm install k10 kasten/k10 --namespace=kasten-io --set auth.tokenAuth.enabled=true --set injectKanisterSidecar.enabled=true --set-string injectKanisterSidecar.namespaceSelector.matchLabels.k10/injectKanisterSidecar=true --create-namespace` +Luego, podemos implementar Kasten K10 en este clúster utilizando el siguiente comando: -This will take a while but in the meantime, we can use `kubectl get pods -n kasten-io -w` to watch the progress of our pods getting to the running status. +```Shell +helm install k10 kasten/k10 --namespace=kasten-io --set auth.tokenAuth.enabled=true --set injectKanisterSidecar.enabled=true --set-string injectKanisterSidecar.namespaceSelector.matchLabels.k10/injectKanisterSidecar=true --create-namespace +``` -It is worth noting that because we are using MiniKube our application will just run when we run our import policy, our storageclass is the same on this standby cluster. However, something we will cover in the final session is mobility and transformation. +Esto llevará un tiempo, pero mientras tanto, podemos utilizar el comando `kubectl get pods -n kasten-io -w` para seguir el progreso de nuestros pods hasta que estén en estado de ejecución. -When the pods are up and running, we can follow the steps we went through on the previous steps in the other cluster. +Vale la pena señalar que, debido a que estamos usando MiniKube, nuestra aplicación se ejecutará cuando ejecutemos nuestra política de importación. Sin embargo, algo que cubriremos en la última sesión es la movilidad y la transformación. -Port forward to access the K10 dashboard, open a new terminal to run the below command +Una vez que los pods estén en ejecución, podemos seguir los pasos que realizamos en los pasos anteriores en el otro clúster. -`kubectl --namespace kasten-io port-forward service/gateway 8080:8000` +Reenvía el puerto para acceder al panel de control de K10. Abre una nueva terminal y ejecuta el siguiente comando: +```Shell +kubectl --namespace kasten-io port-forward service/gateway 8080:8000 +``` -The Kasten dashboard will be available at `http://127.0.0.1:8080/k10/#/` +El panel de control de Kasten estará disponible en http://127.0.0.1:8080/k10/#/ ![](Images/Day87_Data4.png) -To authenticate with the dashboard, we now need the token which we can get with the following commands. +Para autenticar en el panel de control, ahora necesitamos el token que podemos obtener con los siguientes comandos: ```Shell TOKEN_NAME=$(kubectl get secret --namespace kasten-io|grep k10-k10-token | cut -d " " -f 1) @@ -142,65 +144,65 @@ echo $TOKEN ![](Images/Day87_Data5.png) -Now we take this token and we input that into our browser, you will then be prompted for an email and company name. +Ahora tomamos este token y lo ingresamos en nuestro navegador, luego se te pedirá un correo electrónico y el nombre de la empresa. ![](Images/Day87_Data6.png) -Then we get access to the Kasten K10 dashboard. +Luego obtenemos acceso al panel de control de Kasten K10. ![](Images/Day87_Data7.png) -### Import Pac-Man into new the MiniKube cluster +### Importar Pac-Man en el nuevo clúster MiniKube -At this point, we are now able to create an import policy in that standby cluster and connect to the object storage backups and determine what and how we want this to look. +En este punto, ahora podemos crear una política de importación en ese clúster de espera y conectarnos a las copias de seguridad de almacenamiento de objetos y determinar qué y cómo queremos que se vea. -First, we add in our Location Profile that we walked through earlier on the other cluster, showing off dark mode here to show the difference between our production system and our DR standby location. +Primero, agregamos nuestro perfil de ubicación que revisamos anteriormente en el otro clúster. Aquí mostramos el modo oscuro para mostrar la diferencia entre nuestro sistema de producción y nuestra ubicación de espera para recuperación ante desastres. ![](Images/Day89_Data16.png) -Now we go back to the dashboard and into the policies tab to create a new policy. +Ahora volvemos al panel de control y a la pestaña de políticas para crear una nueva política. ![](Images/Day89_Data17.png) -Create the import policy as per the below image. When complete, we can create a policy. There are options here to restore after import and some people might want this option, this will go and be restored into our standby cluster on completion. We also can change the configuration of the application as it is restored and this is what I have documented in [Day 90](day90.md). +Crea la política de importación según la imagen siguiente. Cuando esté completa, podemos crear una política. Aquí hay opciones para restaurar después de la importación y algunas personas podrían querer esta opción, esto se irá y se restaurará en nuestro clúster de espera al completarse. También podemos cambiar la configuración de la aplicación mientras se restaura, y esto es lo que he documentado en [Día 90](day90.md). ![](Images/Day89_Data18.png) -I selected to import on demand, but you can set a schedule on when you want this import to happen. Because of this, I am going to run once. +Seleccioné importar bajo demanda, pero puedes programar el momento en que deseas que ocurra esta importación. Debido a esto, voy a ejecutarlo una vez. ![](Images/Day89_Data19.png) -You can see below the successful import policy job. +A continuación, puedes ver el trabajo exitoso de la política de importación. ![](Images/Day89_Data20.png) -If we now head back to the dashboard and into the Applications card, we can then select the drop-down where you see below "Removed" you will see our application here. Select Restore +Si volvemos al panel de control y seleccionamos la tarjeta de "Aplicaciones", luego podemos seleccionar el menú desplegable donde ves "Eliminado" y veremos nuestra aplicación aquí. Selecciona "Restaurar". ![](Images/Day89_Data21.png) -Here we can see the restore points we have available to us; this was the backup job that we ran on the primary cluster against our Pac-Man application. +Aquí podemos ver los puntos de restauración que tenemos disponibles; este fue el trabajo de copia de seguridad que ejecutamos en el clúster principal para nuestra aplicación Pac-Man. ![](Images/Day89_Data22.png) -I am not going to change any of the defaults as I want to cover this in more detail in the next session. +No voy a cambiar ninguno de los valores predeterminados, ya que quiero cubrir esto con más detalle en la próxima sesión. ![](Images/Day89_Data23.png) -When you hit "Restore" it will prompt you with a confirmation. +Cuando presiones "Restaurar", te pedirá confirmación. ![](Images/Day89_Data24.png) -We can see below that we are in the standby cluster and if we check on our pods, we can see that we have our running application. +A continuación, podemos ver que estamos en el clúster de espera y si verificamos nuestros pods, veremos que nuestra aplicación se está ejecutando. ![](Images/Day89_Data25.png) -We can then port forward (in real-life/production environments, you would not need this step to access the application, you would be using ingress) +Luego podemos redirigir el puerto (en entornos de producción reales, no necesitarías este paso para acceder a la aplicación, estarías utilizando el enrutamiento). ![](Images/Day89_Data26.png) -Next, we will take a look at Application mobility and transformation. +A continuación, echaremos un vistazo a la movilidad y transformación de aplicaciones. -## Resources +## Recursos - [Kubernetes Backup and Restore made easy!](https://www.youtube.com/watch?v=01qcYSck1c4&t=217s) - [Kubernetes Backups, Upgrades, Migrations - with Velero](https://www.youtube.com/watch?v=zybLTQER0yY) @@ -208,4 +210,4 @@ Next, we will take a look at Application mobility and transformation. - [Disaster Recovery vs. Backup: What's the difference?](https://www.youtube.com/watch?v=07EHsPuKXc0) - [Veeam Portability & Cloud Mobility](https://www.youtube.com/watch?v=hDBlTdzE6Us&t=3s) -See you on [Day 90](day90.md) +Nos vemos en el [Día 90](day90.md) From 91df5a33cc651dc8d84e21338115f68e4a02c785 Mon Sep 17 00:00:00 2001 From: Manuel Vergara Date: Mon, 19 Jun 2023 00:08:29 +0200 Subject: [PATCH 5/5] Translated to Spanish the day90 file Signed-off-by: Manuel Vergara --- 2022/es/Days/day90.md | 88 +++++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 41 deletions(-) diff --git a/2022/es/Days/day90.md b/2022/es/Days/day90.md index 12aaa54ed..5ea101aba 100644 --- a/2022/es/Days/day90.md +++ b/2022/es/Days/day90.md @@ -1,90 +1,90 @@ -## Data & Application Mobility +## Movilidad de datos y aplicaciones -Day 90 of the #90DaysOfDevOps Challenge! In this final session, I am going to cover the mobility of our data and applications. I am specifically going to focus on Kubernetes but the requirement across platforms and between platforms is something that is an ever-growing requirement and is seen in the field. +Día 90 del desafío #90DaysOfDevOps. En esta última sesión, cubriré la movilidad de nuestros datos y aplicaciones. Me enfocaré específicamente en Kubernetes, pero el requisito de movilidad se aplica tanto dentro de plataformas como entre ellas, y es algo que cada vez se demanda más en el campo. -The use case being "I want to move my workload, application and data from one location to another" for many different reasons, could be cost, risk or to provide the business with a better service. +El caso de uso es "quiero mover mi carga de trabajo, aplicación y datos de una ubicación a otra" por muchas razones diferentes, como el costo, el riesgo o para brindar un mejor servicio a la empresa. -In this session, we are going to take our workload and we are going to look at moving a Kubernetes workload from one cluster to another, but in doing so we are going to change how our application is on the target location. +En esta sesión, vamos a tomar nuestra carga de trabajo y vamos a ver cómo mover una carga de trabajo de Kubernetes de un clúster a otro, pero al hacerlo, vamos a cambiar cómo está nuestra aplicación en la ubicación de destino. -It uses a lot of the characteristics that we went through with [Disaster Recovery](day89.md) +Se utilizan muchas de las características que hemos revisado en [Recuperación de desastres](day89.md). -### **The Requirement** +### **El requisito** -Our current Kubernetes cluster cannot handle demand and our costs are rocketing through the roof, it is a business decision that we wish to move our production Kubernetes cluster to our Disaster Recovery location, located on a different public cloud which will provide the ability to expand but also at a cheaper rate. We could also take advantage of some of the native cloud services available in the target cloud. +Nuestro clúster actual de Kubernetes no puede manejar la demanda y nuestros costos están aumentando rápidamente. Es una decisión empresarial que queremos mover nuestro clúster de producción de Kubernetes a nuestra ubicación de recuperación ante desastres, que se encuentra en una nube pública diferente que nos permitirá expandirnos pero a un costo más bajo. También podríamos aprovechar algunos de los servicios nativos de la nube disponibles en la nube de destino. -Our current mission-critical application (Pac-Man) has a database (MongoDB) and is running on slow storage, we would like to move to a newer faster storage tier. +Nuestra aplicación crítica para la misión actual (Pac-Man) tiene una base de datos (MongoDB) y se ejecuta en un almacenamiento lento. Nos gustaría pasar a un nivel de almacenamiento más nuevo y rápido. -The current Pac-Man (NodeJS) front-end is not scaling very well, and we would like to increase the number of available pods in the new location. +La interfaz de usuario actual de Pac-Man (NodeJS) no escala muy bien y nos gustaría aumentar el número de pods disponibles en la nueva ubicación. -### Getting to IT +### Llegando a eso -We have our brief and in fact, we have our imports already hitting the Disaster Recovery Kubernetes cluster. +Ya tenemos nuestra descripción y, de hecho, ya tenemos nuestras importaciones llegando al clúster de Kubernetes de recuperación ante desastres. -The first job we need to do is remove the restore operation we carried out on Day 89 for the Disaster Recovery testing. +El primer trabajo que debemos hacer es eliminar la operación de restauración que realizamos en el Día 89 para las pruebas de recuperación ante desastres. -We can do this using `kubectl delete ns pacman` on the "standby" minikube cluster. +Podemos hacer esto usando `kubectl delete ns pacman` en el clúster "standby" de minikube. ![](Images/Day90_Data1.png) -To get started head into the Kasten K10 Dashboard, and select the Applications card. From the dropdown choose "Removed" +Para comenzar, vaya al panel de control de Kasten K10 y seleccione la tarjeta "Applications". En el menú desplegable, elija "Removed" (Eliminado). ![](Images/Day90_Data2.png) -We then get a list of the available restore points. We will select the one that is available as this contains our mission-critical data. (In this example we only have a single restore point.) +Luego obtendremos una lista de los puntos de restauración disponibles. Seleccionaremos el que está disponible, ya que contiene nuestros datos críticos para la misión. (En este ejemplo, solo tenemos un punto de restauración único). ![](Images/Day90_Data3.png) -When we worked on the Disaster Recovery process, we left everything as default. However, these additional restore options are there if you have a Disaster Recovery process that requires the transformation of your application. In this instance, we have the requirement to change our storage and number of replicas. +Cuando trabajamos en el proceso de recuperación ante desastres, dejamos todo como predeterminado. Sin embargo, estas opciones adicionales de restauración están ahí si tienes un proceso de recuperación ante desastres que requiere la transformación de tu aplicación. En este caso, necesitamos cambiar nuestro almacenamiento y el número de réplicas. ![](Images/Day90_Data4.png) -Select the "Apply transforms to restored resources" option. +Selecciona la opción "Aplicar transformaciones a los recursos restaurados". ![](Images/Day90_Data5.png) -It just so happens that the two built-in examples for the transformation that we want to perform are what we need for our requirements. +Resulta que los dos ejemplos incorporados para la transformación que queremos realizar son justo lo que necesitamos para nuestros requisitos. ![](Images/Day90_Data6.png) -The first requirement is that on our primary cluster we were using a Storage Class called `csi-hostpath-sc` and in our new cluster we would like to use `standard` so we can make that change here. +El primer requisito es que en nuestro clúster principal estábamos utilizando una clase de almacenamiento llamada `csi-hostpath-sc`, y en nuestro nuevo clúster nos gustaría usar `standard`, por lo que podemos hacer ese cambio aquí. ![](Images/Day90_Data7.png) -Looks good, hit the create transform button at the bottom. +Se ve bien, pulsa el botón de crear transformación en la parte inferior. ![](Images/Day90_Data8.png) -The next requirement is that we would like to scale our Pac-Man frontend deployment to "5" +El siguiente requisito es que nos gustaría escalar nuestra implementación de la interfaz de usuario de Pac-Man a "5". ![](Images/Day90_Data9.png) -If you are following along you should see both of our transforms as per below. +Si estás siguiendo, deberías ver ambas transformaciones como se muestra a continuación. ![](Images/Day90_Data10.png) -You can now see from the below image that we are going to restore all of the artefacts listed below, if we wanted to we could also be granular about what we wanted to restore. Hit the "Restore" button +Ahora puedes ver en la siguiente imagen que vamos a restaurar todos los artefactos enumerados a continuación. Si quisieras, también podríamos ser más detallados sobre lo que queremos restaurar. Pulsa el botón "Restore" (Restaurar). ![](Images/Day90_Data11.png) -Again, we will be asked to confirm the actions. +Una vez más, se nos pedirá que confirmemos las acciones. ![](Images/Day90_Data12.png) -The final thing to show is now if we head back into the terminal and we take a look at our cluster, you can see we have 5 pods now for the Pacman pods and our storageclass is now set to standard vs the csi-hostpath-sc +Lo último que se mostrará ahora es que si volvemos a la terminal y observamos nuestro clúster, verás que ahora tenemos 5 pods para los pods de Pacman y nuestra clase de almacenamiento ahora está configurada como estándar en lugar de csi-hostpath-sc. ![](Images/Day90_Data13.png) -Many different options can be achieved through transformation. This can span not only migration but also Disaster Recovery, test and development type scenarios and more. +Se pueden lograr muchas opciones diferentes a través de la transformación. Esto no solo abarca la migración, sino también los escenarios de recuperación ante desastres, pruebas y desarrollo, y más. -### API and Automation +### API y automatización -I have not spoken about the ability to leverage the API and automate some of these tasks, but these options are present and throughout the UI some breadcrumbs provide the command sets to take advantage of the APIs for automation tasks. +No he hablado sobre la capacidad de aprovechar la API y automatizar algunas de estas tareas, pero estas opciones están presentes y a lo largo de la interfaz de usuario se proporcionan comandos para aprovechar las API en tareas de automatización. -The important thing to note about Kasten K10 is that on deployment it is deployed inside the Kubernetes cluster and then can be called through the Kubernetes API. +Lo importante a tener en cuenta acerca de Kasten K10 es que, al implementarlo, se despliega dentro del clúster de Kubernetes y luego se puede llamar a través de la API de Kubernetes. -This then brings us to a close on the section around Storing and Protecting your data. +Esto concluye la sección sobre almacenar y proteger tus datos. -## Resources +## Recursos - [Kubernetes Backup and Restore made easy!](https://www.youtube.com/watch?v=01qcYSck1c4&t=217s) - [Kubernetes Backups, Upgrades, Migrations - with Velero](https://www.youtube.com/watch?v=zybLTQER0yY) @@ -92,26 +92,32 @@ This then brings us to a close on the section around Storing and Protecting your - [Disaster Recovery vs. Backup: What's the difference?](https://www.youtube.com/watch?v=07EHsPuKXc0) - [Veeam Portability & Cloud Mobility](https://www.youtube.com/watch?v=hDBlTdzE6Us&t=3s) -### **Closing** +### **Cierre** -As I wrap up this challenge, I want to continue to ask for feedback to make sure that the information is always relevant. +Al finalizar este desafío, quiero seguir solicitando comentarios para asegurarme de que la información siempre sea relevante y este actualizada. -I also appreciate there are a lot of topics that I was not able to cover or not able to dive deeper into around the topics of DevOps. +También aprecio que hay muchos temas sobre los que no pude profundizar o no pude cubrir en profundidad en relación con los temas de DevOps. -This means that we can always make another attempt that this challenge next year and find another 90 days' worth of content and walkthroughs to work through. +Esto significa que el próximo año seguramente se vuelva a hacer otra edicción con otros 90 días de contenido y ejercicios prácticos para trabajar. -### What is next? +### ¿Qué sigue? -Firstly, a break from writing for a little while, I started this challenge on the 1st of January 2022 and I finished on the 31st of March 2022 at 19:50 BST! It has been a slog. But as I say and have said for a long time, if this content helps one person, then it is always worth learning in public! +En primer lugar, un descanso de la escritura por un tiempo. Comencé este desafío el 1 de enero de 2022 y lo terminé el 31 de marzo de 2022 a las 19:50 BST. Ha sido agotador. Pero como he dicho durante mucho tiempo, si este contenido ayuda a una persona, siempre vale la pena aprender en público. -I have some ideas on where to take this next and hopefully, it has a life outside of a GitHub repository and we can look at creating an eBook and possibly even a physical book. +Tengo algunas ideas sobre qué hacer a continuación y con suerte, esto tendrá vida más allá de un repositorio de GitHub, y podremos crear un libro electrónico e incluso un libro físico. -I also know that we need to revisit each post and make sure everything is grammatically correct before making anything like that happen. If anyone does know about how to take markdown to print or to an eBook it would be greatly appreciated feedback. +También sé que necesitamos revisar cada publicación y asegurarnos de que todo esté gramaticalmente correcto antes de hacer que algo así suceda. Si alguien sabe cómo convertir el markdown en impresión o en un libro electrónico, agradecería mucho los comentarios. -As always keep the issues and PRs coming. +Como siempre, sigan enviando issues y Pull Request. + +Gracias! -Thanks! @MichaelCade1 - [GitHub](https://github.com/MichaelCade) - [Twitter](https://twitter.com/MichaelCade1) + +Traducción por Manuel + +- [GitHub](https://github.com/manuelver) +- [Web](https://vergaracarmona.es)