From a98c53c2250eccabdb52db691120ed0e77375437 Mon Sep 17 00:00:00 2001 From: Mark Kibara Date: Mon, 16 Jan 2023 12:32:17 +0300 Subject: [PATCH] Topsideboss2 added checklist.md Update README.md Update README.md Update README.md Update README.md Modified checklist.md Add understanding_DevOps_Lifecycle.md Modified understanding_DevOps_Lifecycle.md Modified understanding_DevOps_Lifecycle.md Modified understanding_DevOps_Lifecycle.md Modified understanding_DevOps_Lifecycle.md Modified understanding_DevOps_Lifecycle.md Add learning_Linux_Basics.md Modified learning_Linux_Basics.md Modified learning_Linux_Basics.md Modified learning_Linux_Basics.md Created repos Modified README.md Modified README.md Renames checklist.md -> resources.md Renames checklist.md -> resources.md Modified README.md: Removed empty dir Modified README.md Modified README.md Modified README.md rmdir Modified README.md Modified learning_Linux_Basics.md Modified learning_Linux_Basics.md Modified learning_Linux_Basics.md Modified learning_Linux_Basics.md Modified learning_Linux_Basics.md Modified learning_Linux_Basics.md Modified learning_Linux_Basics.md Modified learning_Linux_Basics.md rm Topsideboss2 Add files Add files git revert --- Topsideboss2/README.md | 25 +++++- Topsideboss2/learning_Linux_Basics.md | 77 +++++++++++++++++ Topsideboss2/resources.md | 84 +++++++++++++++++++ .../understanding_DevOps_Lifecycle.md | 47 +++++++++++ 4 files changed, 232 insertions(+), 1 deletion(-) create mode 100644 Topsideboss2/learning_Linux_Basics.md create mode 100644 Topsideboss2/resources.md create mode 100644 Topsideboss2/understanding_DevOps_Lifecycle.md diff --git a/Topsideboss2/README.md b/Topsideboss2/README.md index 13572d55..0c907e66 100644 --- a/Topsideboss2/README.md +++ b/Topsideboss2/README.md @@ -1,6 +1,7 @@ +# DevOps Roadmap 2023 ## Introduction -Welcome to my DevOps Projects repository. I aspire to document my journey in DevOps/Cloud as I adventure to learn a good foundational understanding of all the tools and concepts. +Welcome to my DevOpsRoadmap2023 repository. I aspire to document my journey in DevOps/Cloud as I adventure to learn a good foundational understanding of all the tools and concepts. This learning journey towards DevOps started for me early 2023 when I was actively looking for an external attachment as required by my institution of learning. And that was when I came across Oaknet Business (Engineering and Technology) and after a series of interviews and chowcasing how passionate I am to learn, they offered me an opportunity to concentrate my efforts around DevOps and the community surrounding these technologies. Oaknet Business was admittedly the best choice because they offer Software, Big Data, Smart Data Centres, Control Rooms, Internet Of Things among other Technological Services to prestigious clients and I only saw it fit to accept the opportunity. @@ -19,3 +20,25 @@ I have a long journey ahead of me for the next 90 days that will cover the follo - [ ✔️ ] ♾️ 11 > Kubernetes - [ ✔️ ] ♾️ 12 > Monitoring, Log Management and Data Visualisation - [ ✔️ ] ♾️ 13 > Store and Protect Data + +## Folders + +A list of all of the folders in this repository and a brief description. + +| Folder name | Description | +| ----------- | ----------- | +| `checklist.md` | It aims to show a brief checklist of all the modules and topics that DevOps aims to cover | +| `understandingDevOpsLifecycle.md` | It takes a look at the high-level view of the application from start to finish and then back around again like a constant loop | +| `LearningLinuxBasics.md` | It takes a brief overview of Linux and DevOps | +| `PickingAProgrammingLanguage.md` | It takes a good look at Python and/or Golang | +| `UnderstandingNetworking.md` | It is a good understanding og hardware or software-defined Networking options, switches, routers and elements used around networking such as DHCP, DNS, NAT etc. | +| `UnderstandingHowPublicCloudWorks.md` | It makes sure one understands and knows all elements and/or the best service to choose for the right price point | +| `UsingGitEffectively.md` | It aims to give a good understanding of what version control is and the basics of git | +| `InfrastructureAsCode.md` | It is a good understanding of what Terraform is and what deploying virtual machines with code is | +| `AutomateConfigurationManagement.md` | It aims to explain the process of maintaining applications, systems and servers in the desired state. | +| `CICDPipelines.md` | It aims to explain the backbone of modern DevOps environment | +| `Containers.md` | It is a brief introduction to containers and looking into Docker and getting some of the key areas to understand more about Containers | +| `Kubernetes.md` | It aims to explain what Kubernetes(k8s) is and how it works | +| `MonitoringLogManagementDataVisualisation.md` | It aims to give a deep understanding of Monitoring and what it is and why we need it | +| `StoreAndProtectData.md` | What is Data Management and why is it important? | + diff --git a/Topsideboss2/learning_Linux_Basics.md b/Topsideboss2/learning_Linux_Basics.md new file mode 100644 index 00000000..0f2dd5d3 --- /dev/null +++ b/Topsideboss2/learning_Linux_Basics.md @@ -0,0 +1,77 @@ +# Learning Linux Basics + +The main objective is to be comfortable with the administration, configuration and operation of Linux. Spending a lot of time working with Linux so any effort spent there will pay dividends later. As an added bonus, learning how Linux operates takes a lot of mystery out of "how things work". + +No need to become an expert but instead beinging comfortable with the tasks here is all that is important. Googling or using the man pages for syntax help is important. The key thing is to know what tool to use.Using any Linux distribution available, though I prefer Debian as these are the ones i will encounter most frequently. Ubuntu is very user friendly btw. + +### Skills Objectives +Learned about/how to: +* Install/configure OS +* Using BASH +* Starting/stopping/creating service +* User management +* The Linux filesystem +* Text manipulation(awk, sed, grep, wc, echo, cat, tail, etc...) +* Process monitoring with top, ps, lsof +* Networking and network configuration +* System performance +* Using screen or tmux +* Logging in locally and remotely +* Firewall management +* Install/configure applications using the OS package manager(apt or yum) +* POSIX basics +* File permissions + +## Scripting + +Scripting is a must-have skill for DevOps and sysadmins alike. Scripting comes in handy when one needs to make repetitive changes across multiple systems. Think about tasks like: +* applying a security patch to 1000 servers to close a security hole +* copying millions of files from one storage location to another +* digging through log files to identify a specific scenario + +It set the stage for me to learn programming, which I will eventually do. Even after knowIing a coding language, I'll still use scripting for those quick and dirty tasks. +I chose from a few different options for scripting: BASH, Python, Javascript or Ruby. +I personally recommend BASH: It's guaranteed to be on every system you ever touch. Python is a great choice also, and can double as your programming language when you reach that point. I advise against Javascript. Its asycnhronous nature is not suited for our case. Ruby is fine but not common. I'd only recommend it if you knew you were going to be working in a Ruby shop. + +### Skills Objectives +Learned about: +* Making scripts executable +* Capturing input from keyboards and computers +* Reading/writing to filesystems, networks and (in some cases) databases +* Providing script feedback (output status) and reacting accordingly +* Executing scripts on remote computers +* Using conditionals, variables, logic, functions, and proper syntax. + +Common Linux commands one should know: + +| Commands | Description | +| ------------- | -------------- | +| `where ` | This will show the list of directories in which a file is present | +| `open .` | This will open all the files present in a specific directory | +| ` echo $PATH` | When one types a command to run, the system looks for it in the directorios specified by PATH. It will display the files and folder paths by the difference of colon : It will check the executable command in one of these paths. | +| `echo "Hey" > file.txt` | This will override the text in a file | +| `echo "Hey" >> file.txt` | This will append text in that file | +| `export MY_PATH="Mark"` | This will create another path that will contain the string. But this is not permanent | +| `pwd` | This will print the current working directory | +| `ls` | This will show you the list of all the files present in a specific directory | +| `.` | This represents the current directory | +| `..` | This represents the previous directory | +| `cd` | This will change the path location from one directory to another | +| `cat filename`| This will print all the content of a file in a standard output | +| `cat > filename` | This will create a new file if it is not present and allow us to enter the text also | +| `tr` | Thus will translate the characters from one string to another string | +| `cat lower.txt` | tr a-z A-Z > upper.txt` | The output of the first command is the input of the second command | +| `man command-name` | This will show the details of a specific command | +| `mkdir directory-name` | This will create a new directory | +| `mkdir -p this/middle/one` | This will create a middle directory between two directories | +| `touch filename` | This will create a new file | +| `cp file.txt copy-file.txt` | Thus wull make a copy of the file.txt | +| `mv file.txt random` | This will move the file.txt to the random folder | +| `mv file.txt new-file.txt` | This will rename the file.txt to new-file.txt | +| `mv test renamedTest` | This will rename the directory | +| `rm file.txt` | This will remove file.txt from the compuster permanently | +| `rm -R directory-name` | This will remove the directory recursively | +| `rm -rf directory-name` | This will forcefully remove the directory | + +### Here is a link to my ALX Scripting Directory +* [ALX Scripting Directory](https://github.com/Topsideboss2/alx-system_engineering-devops) diff --git a/Topsideboss2/resources.md b/Topsideboss2/resources.md new file mode 100644 index 00000000..0e44bf33 --- /dev/null +++ b/Topsideboss2/resources.md @@ -0,0 +1,84 @@ +### Checklist + +## Prerequisites +- [ ] [Introduction to Linux](https://www.edx.org/course/introduction-to-linux) +- [ ] [DevOps Prerequisite (freecodecamp)](https://youtu.be/Wvf0mBNGjXY) +- [ ] [CCNA part 1](https://youtu.be/rv3QK2UquxM) +- [ ] [Golang complete course (techworldwithnana)](https://youtu.be/yyUHQIec83I) + +## YAML +- [ ] [Introduction to YAML](https://youtu.be/1uFVr15xDGg) +- [ ] [Introduction to YAML (Kunal Kushwaha)](https://youtu.be/IA90BTozdow) + +## Git +- [ ] [Git and GitHub crash course (freecodecamp)](https://youtu.be/RGOj5yH7evk) +- [ ] [Complete Git and GitHub Tutorial (Kunal Kushwaha)](https://youtu.be/apGV9Kg7ics) +- [ ] [Git for Professionals (freecodecamp)](https://youtu.be/Uszj_k0DGsg) + +## cloud +- [ ] [AWS cloud practitioner (freecodecamp)](https://youtu.be/SOTamWNgDKc) + +## docker +- [ ] [Docker playlist by Saloni](https://www.youtube.com/playlist?list=PL5uLNcv9SibBZj30yqG01a7A4_MXSyGK3) +- [ ] [Docker ((freecodecamp)](https://youtu.be/9zUHg7xjIqQ) +- [ ] [Docker (Techworldwithnana)](https://youtu.be/3c-iBn73dDE) +- [ ] [Docker deep dive by Nigel](https://youtu.be/GwXLNAcHk-k) +- [ ] [Dockerfile best practices](https://youtu.be/JofsaZ3H1qM) +- [ ] [Docker security essentials](https://youtu.be/KINjI1tlo2w) +- [ ] [Auditing Docker security](https://youtu.be/mQkVB6KMHCg) +- [ ] [Docker in a visual way](https://aurelievache.gumroad.com/l/understanding-docker-visual-way) +- [ ] [Ivan container articles](https://iximiuz.com/en/categories/?category=Containers) + +## Kubernetes +- [ ] [Civo Academy](civo.com/academy) +- [ ] [Kubernetes course (techworldwithnana)](https://youtu.be/X48VuDVv0do) +- [ ] [Kube academy](https://kube.academy/) +- [ ] [Introduction to Kubernetes (edx)](https://www.edx.org/course/introduction-to-kubernetes) +- [ ] [KCNA](https://youtu.be/iGkFHB1kFZ0) +- [ ] [Hands on CKA/CKAD/CKS](https://youtu.be/jZOs8Oips7Q) +- [ ] [Certs Magic show](https://www.youtube.com/playlist?list=PLj6h78yzYM2MOZst3T8t2qpsdwBpyxWwy) +- [ ] [CKS book](https://saiyampathak.gumroad.com/l/cksbook) + +## CI/CD +- [ ] [Jenkins complete course](https://youtu.be/FX322RVNGj4) +- [ ] [Github actions (techworldwithnana)](https://youtu.be/R8_veQiYBjI) +- [ ] [GitHub actions with cloud run](https://youtu.be/eooi60Mks_0) +- [ ] [CI/CD week](https://www.youtube.com/playlist?list=PL5uLNcv9SibC0Osfk9Nhf7MgP2UNzZkDR) +- [ ] [Get Certified for GitOps with Argo](https://codefresh.learnworlds.com/) + +## IAC tools +- [ ] [Terrafrom in 2 hours (freecodecamp)](https://youtu.be/SLB_c_ayRMo) +- [ ] [Hashicorp terraform accociate certification (freecodecamp)](https://youtu.be/V4waklkBC38) +- [ ] [Crossplane CNCFMinutes](https://youtu.be/NLHmqVUvtkU) +- [ ] [Crossplane deep dive](https://youtu.be/5lWUWat_bbY) +- [ ] [Crossplane composition deepdive](https://youtu.be/78xR7ypzB4Q) +- [ ] [Learn pulumi](https://youtu.be/vIjeiDcsR3Q) + +## Observability +- [ ] [Getting started with Jaeger](https://youtu.be/aMZoUIG-mgY) +- [ ] [Getting dirty with Monitoring and Autoscaling Features for Self Managed Kubernetes cluster](https://youtu.be/TqfIfUuuPdE) +- [ ] [Intro to Kubernetes monitoring](https://youtu.be/B5UY-qeW96I) +- [ ] [Prometheus CNCFMinutes](https://youtu.be/llwxJ0VdYWY) +- [ ] [Thanos CNCFMinutes](https://youtu.be/Pr3MbsGHljI) +- [ ] [Thanos deep dive](https://youtu.be/nYV_wU7_Xm0) + +## Chaos engineering +- [ ] [Chaos mesh CNCFMinutes](https://youtu.be/HAU_cjW1bMw) +- [ ] [Chaos mesh 2.0](https://youtu.be/HmQ9cFwxF7g) +- [ ] [Litmus CNCFMinutes](https://youtu.be/rDQ9XKbSJIc) +- [ ] [Cloud native chaos paradigms](https://youtu.be/uBGPFfTu6TU) + +## Policy engines +- [ ] [Kyverno CNCFMinutes](https://youtu.be/Bo8KhWhNY6g) +- [ ] [Kyverno deep dive](https://youtu.be/QR-iBeh9Vy0) +- [ ] [Kyverno courses](https://learn.nirmata.com/courses/) +- [ ] [jsPolicy](https://youtu.be/AzPczzKW71A) +- [ ] [Kubewarden](https://youtu.be/b14YkyrLFcs) +- [ ] [OPA CNCFMinutes](https://youtu.be/49my68py3KY) +- [ ] [OPA deep dive](https://youtu.be/J6tM9O-0LvI) +- [ ] [Various policy engines for Kubernetes](https://youtu.be/gKQOq7904h8) +- [ ] [Styra Academy](https://academy.styra.com/courses/opa-rego) + +## Servicemesh +- [ ] [Introduction to Service mesh with Linkerd](https://www.edx.org/course/introduction-to-service-mesh-with-linkerd) + diff --git a/Topsideboss2/understanding_DevOps_Lifecycle.md b/Topsideboss2/understanding_DevOps_Lifecycle.md new file mode 100644 index 00000000..973e755d --- /dev/null +++ b/Topsideboss2/understanding_DevOps_Lifecycle.md @@ -0,0 +1,47 @@ +# Introduction to DevOps Lifecycle + +## Development + +Taking a brand new example of an application, to start with we have nothing created, maybe as a developer, you have to discuss with your client or end user the requirements and come up with some sort of plan or requirements for your application. We then need to create from the requirements our brand new application. + +In regards to tools, there is no real requirement here other than choosing your IDE and the programming language you wish to use to write your application. + +As a DevOps engineer, remember you are probably not the one creating this plan or coding the application for the end user, this will be a skilled developer. + +But it also wouldn't hurt for you to be able to read some of the code so that you can make the best infrastructure decisions moving forward for your application. + +This application will be maintained using a version control system because the application can be written in any language. +It is also likely that it will not be one developer working on this project although this could be the case even so best practices would require a code repository to store and collaborate on the code, this could be private or public and could be hosted or privately deployed generally speaking you would hear the likes of **Github** or **Gitlab** being used as a code repository. + +## Testing + +At this stage, we have our requirements and we have our application being developed. But we need to make sure we are testing our code in all the different environments that we have available to us specifically maybe to the programming language chosen. This phase enables Quaity Assurance to test for bugs, more frequently we see containers being used for simulating the test for environments which overall can improve on cost overheads of physical or cloud infrastructure. + +This phase is also going to be automated as part of the next area which is Continuous Integration. The ability to automate this testing vs 10s, 100s or even 1000s of quality assurance engineers having to do this manually speaks for itself, these engineers can focus on something else within the stack to ensure you are moving faster and developing more functionality vs testing bugs and software which tends to be the hold up on most traditional software releases that use a waterfall methodology. + +## Integration + +Quite importantly Integration is at the middle of the DevOps Lifecycle. It is the practice in which developers require to commit changes to the source code more frequently. This could be on a daily or weekly basis. +With every commit, your application can go through the automated testing phases and this allows for early detection of issues or bugs before the next phase. + +## Deployment + +Ok so we have our application built and tested against the requirements of our user and we now need to go ahead and deploy this application into application for our end users to consume. + +This is the stage where the code is deployed to the production servers, now this is where things get extremely interesting. Because different applications require different possibly hardware or configurations. This is where **Application Configuration Management** and **Infrastructure as Code** could play a key part in your DevOps lifecycle. It might be that your application is **Cointainerised** but also available to run on a virtual machine. This then also leads us onto platforms like **Kubernetes** which would be orchestrating these containers and making sure you have the desired state available to your end users. + +## Monitoring + +Things are moving fast here and we have our application that we are continuously updating with new features and functionality and we have our testing making sure no gremlins are being found. We have the application running in our environment that can be continually keeping the required configuration and performance. +But now we need to be sure that our end users are getting the experience they expire. Here we need to make sure that our Application Performance is continuously being monitored, this phase is going to allow your developers to make better decisions about enhancements to the application in future releases to better serve the end users. +Monitoring is also where we are going to capture that feedbacl wheel about the features that have been implemented and how the end users would like to make these better for them. +Reliability is a key factor here as well, at the end of the day we want our Application to be available all the time it is required. This then leads to other observability, seecurity and data management areas that should be continuously monitored and feedback can always be used to better enhance, update and release the application continuously. + +In the words of @MichaelCade + +> I think it is also a good time to bring up the "DevOps Engineer" mentioned above, albeit there are many DevOps Engineer positions in the wild that people hold, this is not the ideal way of positioning the process of DevOps. What I mean is from speaking to others in the community the title of DevOps Engineer should not be the goal for anyone because really any position should be adopting DevOps processes and culture explained here. DevOps should be used in many different positions such as Cloud-Native engineer/architect, virtualization admin, cloud architect/engineer, and infrastructure admin. This is to name a few but the reason for using DevOps Engineer above was really to highlight the scope of the process used by any of the above positions and more. + + + + +