Guide to Self-Hosting GitLab & GitLab Runner on K3s with Custom TLS (Because Security is Serious Business… But Not That Serious)

Hey there, fellow code wranglers and server tamers! Buckle up, because we’re about to embark on a glorious journey – installing our very own self-hosted GitLab with a trusty GitLab Runner on top of the tiny yet mighty K3s, all while spicing things up with a custom TLS certificate configuration.

Po (holding a giant wrench): “There is no secret ingredient to self-hosting GitLab… except maybe a little kung fu hustle!”

Now, before we dive in, a word of warning: this might get a little technical. But fear not, for I, your friendly neighborhood DevOps engineer (with a serious case of meme addiction), will guide you through the process with enough humor and helpful visuals to make even the most complex configurations feel like a walk in the park… or a victory lap around a server room, whichever floats your boat.

Why Self-Host, You Ask?

Because, my friends, freedom! No more relying on flaky cloud services or fighting for resources. With self-hosting, you’re the captain of your own DevOps destiny. Plus, it’s a fantastic learning experience (and a great way to impress your colleagues at the next virtual watercooler chat… or, you know, send them slightly concerned glances about your newfound DevOps skills 😎).

The Ingredients (Because We Don’t Code on Empty Stomachs):

  • A bunch of VMs (preferably one that doesn’t double as your toaster)
  • K3s – the lightweight Kubernetes distribution that’s like the tiny, adorable martial arts master of the container orchestration world (think: Kubernetes meets Yoda)
  • Self-hosted GitLab – the crown jewel, where all your code magic happens ✨
  • GitLab Runner – your tireless build automation buddy, ready to execute your CI/CD pipelines with lightning speed ⚡
  • A custom TLS certificate – the security shield that keeps the bad guys out and also avoids painful clicks in your browser every time you access Gitlab (think of it as a digital bouncer with a very strict dress code) ️

Step 1: Installing K3s – It’s K3s-y!

This is where things get fun. We’ll follow the K3s installation guide here.

Step 2: Custom TLS – Because Security is Still Serious Business (But Way More Metal Now)

This is where things get a little more hands-on. Instead of Let’s Encrypt, we’ll be using your battle-axe sharp custom TLS certificate and its trusty squire, the private key (PEM file). Here’s the breakdown:

  1. Prepare Your Weapons: Make sure you have both the certificate file (CRT) and the private key file (PEM) readily available. These are the digital guardians that will keep unauthorized users at bay.
  2. Mount the Cavalry: We’ll need to mount these files as secrets within the GitLab deployment on K3s. This ensures they are securely accessible to the application but hidden from prying eyes.
# Create generic secret
sudo kubectl create secret generic gitlab-tls-secret \                                                         
  --namespace gl \
  --from-file=/root/devops/certs/devops.crt 

# Create TLS secret
sudo kubectl create secret tls example-tls-secret \                                                     
  --namespace gl \           
  --cert=/root/certs/devops.pem \    
  --key=/root/certs/devops.key

Step 3: Deploying GitLab – Let the Code Flow!

Here comes the big kahuna! We’ll leverage the power of Helm charts to deploy GitLab on our K3s cluster provided by GitLab. Think of Helm charts as pre-made recipes for deploying complex applications on Kubernetes – like having a personal DevOps sous chef at your beck and call. ‍

Here are the commands to spin up GitLab

helm upgrade --install gitlab gitlab/gitlab \                                                            
  --namespace gl \
  --set global.hosts.domain=gitlab.example.com \
  --set global.hosts.gitlab.path=gitlab \
  --set global.hosts.disableCertmanager=true \
  --set certmanager-issuer.email=dummy@example.com \
  --set global.hosts.secretName=example-tls-secret \
  --set gitlab-runner.runners.privileged=true \
  --set global.edition=ce \
  --set gitlab.webservice.ingress.tls.secretName=example-tls-secret \
  --set global.ingress.tls.secretName=example-tls-secret \
  --set global.smtp_enabled=true \
  --set global.smtp.address='smtp-outbound.example.com' \
  --set global.smtp.port=25 \
  --set global.smtp.domain='smtp-outbound.example.com' \
  --set global.smtp.tls=false \
  --set global.smtp.openssl_verify_mode='none' \
  --set global.email.display_name='DevOps Gitlab' \
  --set global.email.from='no_reply@example.com' \
  --set global.email.reply_to='no_reply@example.com' \
  --set global.tls.secretName=example-tls-secret

Step 4: Unleash the GitLab Runner – Build Like a Boss!

With GitLab up and running, it’s time to unleash the GitLab Runner. We’ll use the Helm chart magic again to deploy the Runner and configure it to talk to our shiny new GitLab instance.

# Create generic secret
sudo kubectl create secret generic gitlab-cert \                                                         
  --namespace gitlab-runner \
  --from-file=/root/certs/devops.pem

For GitLab Runner to function, your configuration file must specify the following:

Read more from Gitlab documentation

# Create new namespace and install gitlab-runner separately 
helm upgrade --install  gitlab-runner -f values.yaml gitlab/gitlab-runner -n gitlab-runner

After gitlab-runner installation, gitlab runner won’t run 😡

Master Oogway (wearing a server admin hat): “Yesterday you struggled with deployments, tomorrow you may face bugs. But today, focus on configuring your TLS certificate with inner peace.”

kgp -n gitlab-runner
NAME READY STATUS RESTARTS AGE
gitlab-runner-8b54596c8-hmdgg 0/1 Running 5 (68s ago) 9m29s

kl -n gitlab-runner gitlab-runner-8b54596c8-hmdgg
Registration attempt 1 of 30
Runtime platform arch=amd64 os=linux pid=14 revision=44feccdf v
WARNING: Running in user-mode.
WARNING: The user-mode requires you to manually start builds processing:
WARNING: $ gitlab-runner run
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner…

<<<REDACTED>>>

PANIC: Failed to verify the runner.
Registration attempt 17 of 30
Runtime platform arch=amd64 os=linux pid=272 revision=44feccdf
WARNING: Running in user-mode.
WARNING: The user-mode requires you to manually start builds processing:
WARNING: $ gitlab-runner run
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner…

Merging configuration from template file “/configmaps/config.template.toml”
ERROR: Verifying runner… failed runner=SGpPs5Spu status=couldn’t execute POST example.com/api/v4/runners/verify: Post “https://gitlab.example.com/api/v4/runners/ certificate: x509: certificate signed by unknown authority
PANIC: Failed to verify the runner.
Quit (core dumped)

To fix the issue modify the below configmap file

# kubectl edit cm -n gitlab-runner gitlab-runner
<<<redacted >>>
config.template.toml: |
[[runners]]
executor = "kubernetes"
builds_dir = "/cache"
cache_dir = "/cache"
tls-ca-file = "/home/gitlab-runner/.gitlab-runner/certs/devops.pem" <<< Change to this path
[runners.kubernetes]
namespace = "gitlab-runner"
terminationGracePeriodSeconds = 5
privileged = true
tls_verify = false
skip-tls-verify = true <<< Add this line
allow_privilege_escalation = true
image = "ubuntu:22.04"
[[runners.kubernetes.volumes.pvc]]
name = "gitlab-runner"
mount_path = "/cache"

Step 5: Let’s Test Drive!

Here’s the .gitlab-ci.yml standard template file

image: ubuntu:22.10
before_script:
  - echo "Before script section"
  - echo "For example you might run an update here or install a build dependency"
  - echo "Or perhaps you might print out some debugging details"

after_script:
  - echo "After script section"
  - echo "For example you might do some cleanup here"

build1:
  stage: build
  tags:
    - k3s
  script:
    - echo "Do your build here"

test1:
  stage: test
  tags:
    - k3s
  script:
    - echo "Do a test here"
    - echo "For example run a test suite"

test2:
  stage: test
  script:
    - echo "Do another parallel test here"
    - echo "For example run a lint test"

deploy1:
  stage: deploy
  script:
    - echo "Do your deploy here"
  environment: production

and the Output/Outcome is as under… As you can it was not a cakewalk… I’ve failed 91 times and succeeded on the 92nd attempt. “Keep calm and carry a wand.” — A.W. Jantha

Step 6: Victory Lap – You Did It!

Congratulations, brave adventurer! You’ve successfully self-hosted GitLab and GitLab Runner on K3s, complete with a custom TLS configuration. Now, go forth and conquer your CI/CD pipelines with newfound confidence (and maybe a celebratory dance break).

Bonus Round: Troubleshooting – Because Things Don’t Always Go According to Plan

Let’s be honest, things might not always work perfectly on the first try with a personal track record of 91 attempts!! But fear not, for I’ve included a troubleshooting section with helpful tips and resources to get you back on track. “Debugging is like being the detective in a crime movie where you are also the murder suspect.” – Moshe Feder (Because troubleshooting your self-hosted setup might feel like a never-ending mystery)

# Checking the logs of Pod is the best way to start
kubectl logs -n gitlab-runner gitlab-runner-8b54596c8-hmdgg
# Describe Pod
kubectl describe -n gitlab-runner pod gitlab-runner-8b54596c8-hmdgg
# kubectl edit cm -n gitlab-runner gitlab-runner
Edit the configuration accordingly...
# Login to the container and check 
kubectl exec -it -n gitlab-runner gitlab-runner-8b54596c8-hmdgg -- bash
gitlab-runner-8b54596c8-hmdgg:/$ cat /home/gitlab-runner/.gitlab-runner/config.toml 
concurrent = 100
check_interval = 10
log_level = "debug"
connection_max_age = "15m0s"
shutdown_timeout = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "gitlab-runner-8b54596c8-hmdgg"
  url = "https://gitlab.example.com"
  id = 13
  token = "glrt-SGpPs5SpuGbYwfU9dzpB"
  token_obtained_at = 2024-06-22T10:46:19Z
  token_expires_at = 0001-01-01T00:00:00Z
  tls-ca-file = "/home/gitlab-runner/.gitlab-runner/certs/devops.pem"
  executor = "kubernetes"
  builds_dir = "/cache"
  cache_dir = "/cache"
  [runners.custom_build_dir]
  [runners.cache]
    MaxUploadedArchiveSize = 0
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.kubernetes]
    host = ""
    bearer_token_overwrite_allowed = false
    image = "ubuntu:22.04"
    namespace = "gitlab-runner"
    namespace_overwrite_allowed = ""
    namespace_per_job = false
    privileged = true
    skip-tls-verify = true
    allow_privilege_escalation = true
    node_selector_overwrite_allowed = ""
    node_tolerations_overwrite_allowed = ""
    pod_labels_overwrite_allowed = ""
    service_account_overwrite_allowed = ""
    pod_annotations_overwrite_allowed = ""
    [runners.kubernetes.init_permissions_container_security_context]
      [runners.kubernetes.init_permissions_container_security_context.capabilities]
    [runners.kubernetes.build_container_security_context]
      [runners.kubernetes.build_container_security_context.capabilities]
    [runners.kubernetes.helper_container_security_context]
      [runners.kubernetes.helper_container_security_context.capabilities]
    [runners.kubernetes.service_container_security_context]
      [runners.kubernetes.service_container_security_context.capabilities]
    [runners.kubernetes.volumes]

      [[runners.kubernetes.volumes.pvc]]
        name = "gitlab-runner"
        mount_path = "/cache"
    [runners.kubernetes.dns_config]

# Check the status of the Pod after the necessary changes
kgp -n gitlab-runner
NAME                            READY   STATUS    RESTARTS       AGE
gitlab-runner-8b54596c8-hmdgg   1/1     Running   10 (17h ago)   17h

Remember: This guide is meant to be informative and lighthearted. Always refer to the official documentation for detailed instructions. But hey, with a little humor and these handy tips, you’ll be self-hosting GitLab and Gitlab-Runner with TLS like a pro in no time!

If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Social Media Platforms. Thank you!

What am I missing here? Let me know in the comments and I’ll add it in! OR tweet it to me @babvin

Wayanad Wonders: An Everlasting Experience in Nature’s Playground

Hey there, fellow travelers and nature enthusiasts! Buckle up for a whimsical ride through my recent escapade to Falcons Chalet in the heart of Wayanad, Kerala. 🌿☕️

Picture this: cottages perched atop hills, surrounded by lush tea gardens, and enveloped in a misty embrace. Sounds dreamy, right? Well, add in the aroma of freshly brewed chai courtesy of my trusty sidekick, Sainas, and you’ve got yourself a scene straight out of a fairy tale. ✨

As we arrived around 4 pm, the thick fog welcomed us like an old friend, setting the stage for a magical evening ahead. And let me tell you, folks, sipping hot tea amidst nature’s grandeur is a therapy like no other. Take that, stress! 🍵

Our overnight stay was nothing short of enchanting, with adventures galore. From conquering the Attamala Glass Bridge (cue nervous laughter) to marveling at the panoramic views from the viewpoint, every moment was a testament to Mother Nature’s splendor.

But wait, there’s more! We stumbled upon a mini waterfall nearby, nature’s own little surprise tucked away in the hills. As the crickets serenaded us with their symphony and the star-studded sky put on a cosmic show, I couldn’t help but feel like a tiny speck in this vast universe.

And then, just when we thought nature couldn’t surprise us more, we embarked on a thrilling journey through the Bandipur National Wildlife Sanctuary. Elephants, majestic and serene, greeted us with their presence, while adorable calf’s and a plethora of deers added to the enchantment of the wilderness. Monkeys swung from branch to branch, their antics providing endless entertainment as we made our way through this wildlife haven.

Let’s not forget the stunning swimming pool, a sparkling oasis amidst the verdant landscape, where we splashed away our worries and basked in the warm embrace of the sun. 🏊‍♂️☀️

As we entered the retreat, the majestic Buddha statue greeted us with its serene presence, a reminder to find peace and tranquility amidst the chaos of life. 🧘‍♂️

And who could miss the beautiful painting of Falcon, the namesake of this charming chalet? With its wings outstretched and eyes gleaming with wisdom, it seemed to watch over us, imparting a sense of protection and guidance.

Now, let’s talk food. As a devout vegetarian (occasionally eggiterian 🥚🍰), I had my doubts about culinary delights in Wayanad. But oh boy, was I in for a treat! Sainas and his culinary maestro, whipped up dishes that were not only delicious but also had me licking my fingers in delight. Who knew veggie food @ Wayanad could be this drool-worthy? 🥗👨‍🍳

In the midst of our gastronomic adventures and nature-induced euphoria, let’s not forget the bigger picture. The Western Ghats, home to Wayanad’s breathtaking landscapes, are under threat. This World Environment Day, let’s pledge to do our part in preserving these ecological wonders for generations to come. 🌍🌱

So, fellow travelers, let’s raise our chai cups to the beauty of Wayanad, the joys of vegetarian cuisine, and the importance of protecting our planet. And a special shoutout to one of my best friends Girish and family who joined us on this unforgettable journey. Until next time, keep exploring and savoring the magic of nature! 🌟

For more details please visit Falcon Chalet’s IG – Falcon’s Chalet (@falconschalet) • Instagram photos and videos

So Long, Farewell, and Many Thanks for the Racket!

Featured

This blog is dedicated to my fabulous folks!

Gather ’round because we’re about to embark on a rollercoaster of emotions – from laughter to nostalgia to sheer excitement. Yep, you guessed it, it’s farewell time! But fear not, this ain’t your average teary-eyed goodbye; we’re going out with a bang!

So, picture this: me, sitting here, trying to put into words just how much you all mean to me. Spoiler alert: it’s a tough task. From the bottom of my heart, thank you for being the most kick-ass team a person could ask for. You’ve made every day an adventure, and I couldn’t have asked for better comrades in the battlefield of work.

Now, drumroll, please! Cue confetti I’m stoked to announce that I’m taking on a new gig within Dell Technologies. Yep, you heard it right – your boy is leveling up! But hey, no need for the waterworks just yet; I’ll still be lurking around, causing mischief and spreading good vibes.

Let’s talk gifts, shall we? You lot sure know how to hit the nail on the head. From those heartfelt cards that nearly had me reaching for the tissues to the gifts that screamed “we get you”, you nailed it. And can we talk about the badminton racket and bag? Best. Gift. Ever. You guys really know how to tug at my heartstrings (and sporty tendencies).

Now, onto the part you’ve all been waiting for –

After four and half years of awesome journey, I carry with me cherished memories, invaluable lessons, and the unwavering belief that our paths will cross again. Until then, let’s continue to embrace new challenges, celebrate each other’s successes, and never forget the incredible bond that unites us as a team. To my dear colleagues, thank you for everything. Here’s to new beginnings, endless possibilities, and the journey ahead!

But in all seriousness, Your energy and passion were like the glue that held this motley crew together, and I’m sure you’re gonna miss my dad’s jokes and sage advice (well, most of the time).

As I bid adieu to this ragtag bunch, know that you’ll always hold a special place in my heart – and my inbox. Here’s to new adventures, epic memories, and friendships that will last a lifetime!

With all the love and badminton racket swings & smashes, 🏸

💚 Vinay 💚

“The only way to make sense out of change is to plunge into it, move with it, and join the dance.” – Alan Watts

Ace Your Game: How ChatGPT Served Up a Slam Dunk with Badminton Court Booking and Team Attendance App 🤖👨🏾‍💻

Featured

Introduction:
Calling all badminton enthusiasts! Get ready to smash your way through the world of court bookings and team attendance like never before 😁 . With the help of ChatGPT 💪, we’ve served up a winning recipe for an ace badminton management system that’s bound to elevate your game!

Continue reading “Ace Your Game: How ChatGPT Served Up a Slam Dunk with Badminton Court Booking and Team Attendance App 🤖👨🏾‍💻”

Embracing Privacy and Full-Control: Hosting Rocket.Chat on K3S with Raspberry Pi for Personal Chat Server 🚀

Featured

In today’s digital age, privacy concerns are at the forefront of many discussions. With the increasing centralization of communication platforms, users are seeking alternatives that offer greater control over their data. One such solution is hosting a personal chat server using open-source software like Rocket.Chat, coupled with lightweight infrastructure like Raspberry Pi and Kubernetes (K3S). In this blog post, we’ll explore how you can set up your own private chat server for personal use, empowering you with control over your communication while leveraging the affordability and efficiency of Raspberry Pi and K3S.

Why Host Your Own Chat Server?

Privacy-conscious individuals often seek alternatives to mainstream chat platforms to regain control over their data. By hosting your own chat server, you eliminate reliance on third-party services, thereby reducing the risk of data breaches and surveillance. Additionally, self-hosted solutions offer customization options, ensuring that your communication environment aligns with your specific needs and preferences.

Introducing Rocket.Chat

Rocket.Chat is an open-source communication platform that provides features similar to popular messaging applications, including real-time messaging, file sharing, voice and video calls, and more. What sets Rocket.Chat apart is its self-hosting capability, enabling users to deploy it on their own servers and retain full control over their data.

Leveraging Raspberry Pi and K3S

Raspberry Pi, a low-cost, single-board computer, has gained popularity for its versatility and affordability. Check out my other blogs on Pi. Combined with K3S, a lightweight Kubernetes distribution designed for resource-constrained environments, Raspberry Pi becomes a viable option for hosting various applications, including Rocket.Chat.

Setting Up Your Personal Chat Server

1. Hardware Requirements:

  • Raspberry Pi (preferably Raspberry Pi 4 for better performance)
  • MicroSD card (16GB or higher recommended)
  • Power supply
  • Ethernet cable or Wi-Fi dongle for network connectivity
  • Follow this blog for step by step multi-master K3S node’s cluster setup

2. Software Requirements:

  • Raspbian OS installed on the Raspberry Pi
  • K3S installed on the Raspberry Pi (follow K3S installation instructions for ARM architecture)
  • Docker installed on the Raspberry Pi

3. Installing Rocket.Chat:

  • Deploy Rocket.Chat as a Docker container on the K3S cluster. You can use Helm charts for simplified deployment and management.
    • Follow this link for step-by-step documentation from Rocket.Chat

4. Configuring Rocket.Chat:

  • Set up user accounts, channels, and permissions according to your preferences.
  • Configure SSL/TLS certificates for secure communication (consider using Let’s Encrypt for automated certificate management using cert-manager).
  • After installing Rocket.Chat, completing the setup wizard and configuring Letsencrypt; Web UI may take a really long time to load in a web browser however it works absolutely fine on mobile or desktop apps. In such cases delete the Rocket.Chat pod and the deployment recreates the pod. This should solve the meteor framework-related JS load issues in all modern web browsers and should load the web UI immediately.
Notice the ‘AGE’ of Rocket.Chat Pod in comparison with Postgres and MongoDB pods

5. Accessing Your Chat Server:

  • Once configured, access your Rocket.Chat instance through a web browser or dedicated desktop/mobile client applications.
  • Ensure proper firewall configuration and port forwarding for external access if needed.
Rocket.Chat Home
Rocket.Cat Bot

Benefits of Self-Hosting Rocket.Chat on Raspberry Pi with K3S: 🚀

  1. Privacy and Control: By hosting your chat server, you retain full control over your data, ensuring privacy and security. 12M+ users in 150 countries choose this platform to bring data protection into every conversation.
  2. Cost-Efficiency: Raspberry Pi offers a cost-effective solution for hosting applications, significantly reducing operational expenses compared to cloud-based services.
  3. Customization: Tailor your chat environment to suit your needs, with options for integrating additional features, AI bots, and extensions.
  4. Learning Experience: Setting up and managing your own server provides valuable learning opportunities in Kubernetes cluster administration and container orchestration.

If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend or sharing it on X or other social media platforms. Thank you!

What am I missing here? Let me know in the comments and I’ll add it in! OR tweet it to me @babvin

Embracing the Radiant Spirit: Celebrating Rathasapthami

Featured

Rathasapthami, an auspicious festival in Hindu tradition, celebrates the glory of the Sun God, Surya. Observed on the seventh day (Saptami) in the bright half of the Hindu lunar month of Magha maasa, this festival marks the transition of the Sun’s journey towards the northern hemisphere. It’s a time of spiritual significance and cultural reverence, where devotees express gratitude for the life-giving energy of the Sun.

I found the below tweet by Aparna very useful where Vinay (not me 🙂 has shed some light on the God of Light!

The Significant connection between the Sun and the number Seven:

The Significance of Rathasapthami:

Rathasapthami holds profound symbolic meaning. “Ratha” refers to the Sun’s chariot which has seven horses, and “Sapthami” signifies the seventh day. It is believed that on this day, the Sun God embarks on his journey in a chariot drawn by seven horses, symbolizing the seven days of the week. The movement of the Sun towards the north symbolizes the onset of longer days, warmer weather, and the rejuvenation of nature.

The Spiritual Essence of Rathasapthami:

Rathasapthami is not merely a festival of rituals; it is a spiritual journey that seeks to awaken our inner light. The Sun is not only a celestial body but also a symbol of consciousness and enlightenment. As we honor Surya, we are reminded of the divine light that exists within each of us. It’s a time to reflect on our own journey, to dispel the darkness of ignorance, and to embrace the warmth of spiritual wisdom.

The Significance of Surya Namaskara:

Surya Namaskara, or Sun Salutation, is a sequence of yoga asanas (postures) performed in a rhythmic manner, salutations to the Sun. Each posture in the sequence is synchronized with the breath, creating a harmonious flow of movement that energizes the body and uplifts the spirit. The practice of Surya Namaskara is not only a physical exercise but also a profound spiritual discipline that aligns the practitioner with the solar energy, symbolized by the Sun.

Performing 108 Surya Namaskara on Rathasapthami:

On the auspicious day of Rathasapthami, many devotees undertake the challenge of performing 108 rounds of Surya Namaskara as an act of devotion and penance. The number 108 holds special significance in Hinduism, representing the wholeness of existence and the ultimate reality. By performing 108 Surya Namaskara, practitioners aim to purify the body, mind, and soul, and to express gratitude for the life-giving energy of the Sun.

Benefits of 108 Surya Namaskara:

The practice of 108 Surya Namaskara offers numerous physical, mental, and spiritual benefits. It enhances flexibility, strengthens muscles, improves circulation, and detoxifies the body. On a mental level, it promotes concentration, clarity, and emotional balance. Spiritually, it fosters a deep sense of connection with the cosmic energy, leading to inner peace and self-realization.

Surya Namaskara Stotra:

Hirnmayena paatrena sathyasyapihitham mukham |
Thathvam pooshanyapavruno sathya dharmaya drishtaye||
Akala mrathyu haranam sarvavyadhi nivaaranam | samastha dhurithopashamanam shree surya paadodakam theertham jathare dhaarayamyaham||

12 Surya Namaskar Mantras along with Yoga Poses

Performing 108 Surya Namaskara on Rathasapthami is not merely a physical exercise but a profound spiritual journey that connects us with the divine essence of the Sun. As we move through the sequence of asanas, let us immerse ourselves in the radiant energy of Surya, drawing inspiration, vitality, and wisdom. May this sacred practice illuminate our path, guiding us towards spiritual awakening and self-discovery.

On this Rathasapthami, let us embrace the transformative power of 108 Surya Namaskara and bask in the radiance of the Sun God, Surya.

Here are some of the pics taken from today’s celebrations and 108 Surya Namaskara performed by the Navabharathi Yoga team under the guidance of Bharathi Hegde Ma’am.

I hope the above seven lists of brief explanations summarize the importance of the festival Rathasapthami. Feel free to share your views in the below comments. Thanks for stopping by have a great day!

References and Gratitude:

Bharati Hegde – The Multi-Talented Artist and The Certified Yoga Instructor

https://www.fitsri.com/articles/surya-namaskar-mantras-meaning-postures

https://chat.openai.com

Consistency is what transforms average into Excellence

Today is the end of the first month of 2024! So soon isn’t it? This blog is a checkpoint for New Year resolutions and new goals 🚀🚀🚀

I was thinking about what should be the title of this blog for the entire day. While chatting with my neighbor & a good friend, she shared pics of her son’s birthday and found the above-titled quote on the birthday boy’s T-shirt! Yet another example is that we get inspiration to do the right task from so many ways and sources. 🎉

Many happy returns of the day, Happy Birthday Rehansh!

Now, let’s come back to the New Year resolutions and new goals that I started off at the beginning of this year.

I was inspired by one of the LinkedIn posts of Bhavna Toor and adopted her 21 habits tracker {with a bit of variations to suit my needs} and the results are quite impressive and made me awestruck by the multitude of changes in me. I’ve realized that consistency is the solid foundation for “Progress“, “Performing Better WorkLife“, “Getting in Shape“, “Continuous Learning“, “Love for Repetitions” and finally “Self-Love“. 💪🙌👌

I thought I’d never play badminton again and was all set to hang my boots. However, after following a 1% improvement as mentioned in the book “Atomic Habits” by James Clear. I’m playing regularly these days and I love my team! By the way, it was not easy, it was painful in the beginning, especially with an ACL slit, a Meniscus tear with a Grade 3 injury! Thanks to the Habit Tracker and Consistent Mindset. 💪🏸💚

Vinay’s Habit Tracker 2024
Habit Tracker 2024
MonthJan Success %Feb Success %
Mornings8670.84
Yoga + Meditate7462.06
Read + Learn9475.86
Write/Blog9075.86
Journal9472.41
Badminton8168
Work7886.2
Deep Work4882.75
Leadership8482.75
Top 3 Goals8482.75
Worst First9796.55
Consistent Pauses9177.82
Cold Showers9065.51
Breathwork9096.55
Mindful Eating8479.31
Mindful Walking10075.86
Values9898.275
Adundance100100
Courage94100
Empathy96.55
Gratitude10096.55
Evenings9680.5
Family Time9062.1
Plan Ahead100100
SM Free Night9779.31
Habits Success Rate

I also do this manually like Bhavna, however with my PA who is my younger daughter Disha 🥰 who loves to tick & cross, show off her highlighting skills, with a sad face. She’s compassionate and says don’t you can do it tomorrow if I fail to complete the habit. Finally, she evaluates everything and signs like a teacher at the end of every week! You can see “Good Job” in the lower left corner. 👩‍🏫

As you can see in the above pic there are a few days in a week when I tick all habits. For most of the days when I don’t tick all habits, I realized that individual failures have little impact on your long-term success, and then you can more easily rebound from failures and setbacks. 

I can now clearly see the habits to be consistent by avoiding the Monkey=MobilePhone during the Work/DeepWork. 🙏

Being Consistent helped me get back on track when I got off course!

Dear Guruji/Gurus/Coaches/Mentors 🌞,

As I take a moment to reflect on my journey of Jan 2024, I am overwhelmed with gratitude for the invaluable role you have played in shaping my life. Your guidance and teachings have been a beacon of light, steering me through both challenges and triumphs.

Thank you for imparting not only knowledge but also wisdom, for instilling in me a love for learning, and for being a source of inspiration. Your dedication to your craft has left an indelible mark on my mind, and I carry the lessons learned under your tutelage with me every day. 🙏🤗

To my dear family 🏠,

Your unwavering support has been the bedrock of my existence. Through thick and thin, you have stood by me, offering love, encouragement, and understanding. Your sacrifices and selflessness have paved the way for my growth, and I am profoundly grateful for the foundation you’ve provided. 🙏🤗

To my friends/well-wishers 😇,

Your encouragement has been a constant motivator. Your words of encouragement and belief in my abilities have fueled my determination. In moments of doubt, your support has been a reminder that I am not alone on this journey, and for that, I am sincerely thankful. 🙏🤗

Collectively, you have all played an integral role in my personal and professional development. As I navigate the intricate tapestry of life, I carry the lessons, values, and love instilled by each one of you. Your influence continues to shape my character, and for that, I am forever grateful.

In expressing my gratitude, I also commit to paying it forward, striving to make a positive impact on others, just as you have done for me. May your kindness and wisdom continue to ripple through the lives of many. 🙏🙏🙏

UPDATE: My elder daughter Saanvi joined the party 🎉by helping me and Disha to update the tracker, and calculate the success days and success rate. This influenced her to start tracking her habits and journaling! I’m very proud of them 👭

Learning journey in JavaScript and Full-Stack development :: MERN

I hope everyone had a fantastic holiday season filled with joy and relaxation. 🎄✨ Now, I’m excited to dive back into work with renewed energy and fresh perspectives! 💼💪

During the break, I just wrapped up an intensive dive into the world of JavaScript and Full Stack Development during the holiday season. I’m thrilled to share my key takeaways with the amazing followers and folks around the World! 🌐💻

🔍 Learnings:

  1. Acquired the intricacies of JavaScript, from basic syntax to advanced concepts, and unleashed the power of MERN stack development 💡
  2. Exploring front-end technologies like React for dynamic and responsive user interfaces. 🚀
  3. Navigated through back-end development using Node.js, Express, and MongoDB. 🖥️📊
  4. Embraced the power of full-stack development to seamlessly connect front and back-end components. 🌐
  5. VSCode is an excellent IDE not only for JS but also for Golang, Python, et al. It also has integrations for Docker and Kubernetes where we can build images, and create deployment files by a click of a button! 📚

🌱 Key Lessons:

  • Continuous learning is the backbone of growth in the tech space. 📚
  • Hands-on projects and real-world applications are the best teachers. 💼
  • Collaboration and networking open doors to endless opportunities. 🌐
  • Overcame challenges, embraced the power of debugging, and celebrated the tiny victories along the way! 🎉

Grateful for the amazing online resources, tutorials, and the supportive developer community. Especially #Google Baba and #StackOverflow Maa!🌐👩‍💻

👩‍💻 Next Steps: Eager to apply my skills to real-world projects and contribute to innovative solutions in 2024! 📆 Open to connecting with fellow enthusiasts, mentors, and professionals in the field. Let’s collaborate and create something amazing together! 🤝

💙 Gratitude and References 💚:

Udemy :: “Learn JavaScript: Full-Stack from Scratch” by Brad Schiff. Thanks a ton to Brad for your teachings.

https://learnk8s.io/deploying-nodejs-kubernetes

https://devopscube.com/deploy-mongodb-kubernetes/

#JavaScript #FullStackDevelopment #WebDevelopment #TechEnthusiast #ContinuousLearning #ExpressJS #Docker #Kubernetes #K3S

Github Repo: https://github.com/babvin/writersadda

Cloud Hosted Link: https://writersadda.onrender.com

Self-Hosted on K8S Link: https://writersadda.autoops.in

If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend or sharing it on X.com and other social platforms. Thank you!

What should I be learning alongside ReactJS? Let me know in the comments for me to review and peruse!

Be Thankful 🙏

Be thankful that you don’t already have everything you desire.

If you did, what would there be to look forward to?

Be thankful when you don’t know something.

For it gives you the opportunity to learn.

Be thankful for the difficult times,

 during those times you grow.

 Be thankful for your limitations.

Because they give you opportunities for improvement.

Be thankful for each new challenge.

Because it will build your strength and character.

Be thankful for getting dumped.

Love never fails, Like the Sun never fails to rise.

 Be thankful for your mistakes.

 They will teach you valuable lessons.

 Be thankful when you are tired and weary.

 Because it means you have made a difference.

 It is easy to be thankful for the good things.

 A life of rich fulfillment comes to those who are also

thankful for the setbacks.

~ Unknown

“Success is determined by how you handle setbacks”

Team Anti Patterns

 An anti-pattern is a behavior, process, or habit that seems to help a team but actually leads to negative outcomes. They are often well-intentioned but end up undermining the goals they were intended to achieve

Organizations must design Teams intentionally by asking these questions. Given our skills, constraints, and cultural and engineering maturity. Design, software, architecture, and business goals Which topology will help us deliver results faster and safer? How can we? Reduce or avoid handovers between teams in the main flow of change. Where should the boundaries be in the software system to preserve system viability and encourage continuous flow? How can our teams align to that?

Squads and Tribes Anti-Patterns

Spotify provides a good example of explicit organizational design to improve the effectiveness of software delivery and operations, as described by Henrik Kniberg and Anders Ivarsson in their 2012 blog post, “Scaling Agile at Spotify”, known as The Spotify Model, technical staff at Spotify are arranged into small autonomous cross-functional squads, each with a long-term mission and comprised of around 5 to 9 people. Several squads that work in similar areas are collected into a tribe, a sort of affinity grouping of Squads. The squads within a tribe are familiar with the bulk of other squads and coordinate inside the tribe.

Many organizations have mistakenly copied the Spotify model without understanding the underlying purpose, culture, diversity dynamics, or trajectory of this Spotify team arrangement. As Kniberg and Ivarsson clearly state in their post “We didn’t invent this model. Spotify is (like any good agile company) evolving fast. This article is only a snapshot of our current. Way of working a journey in progress, not a journey completed.”

Similarly. The other common anti-pattern is shuffling team members quite frequently. This leads to an extremely volatile team assembled on a project basis and disassembled immediately afterward, perhaps leaving one or two engineers behind to handle the “hardening” and maintenance phases of the applications. While there is a sense of higher flexibility and a perceived ability to respond faster to deadlines, the cost of forming new teams and switching contexts repeatedly gets overlooked (or is unconsciously factored in the project estimates).  A computer will perform the same whether it is placed in room A or room B. However an engineer placed on Team A may perform very differently than if placed on Team B.

Organizations must take into account more than a static placement of people when looking at the design of team interactions.

List of Patterns and Anti-Patterns

PatternAnti-pattern
Focus on OutcomesDoing an Agile Transformation
Start with Why; Empower the HowUsing Old Ways of Thinking to New Ways of Working
Achieve Big Through SmallThe Bigger the Capital “T” Transformation, the Bigger the Change Curve
Descale Before you ScaleScaling Agile before Descaling Work
Scale Agility, not Agile, Vertically then SidewaysGrass Roots Hits a Grass Ceiling
Not one size fits allOne Size Fits All
Invite over InflictInflict over Invite
Leaders Go FirstDo as I say, not as I do
Psychological SafetyPsychological unsafe
Emergent Mindset with Servant LeadershipDeterministic Mindset
Optimize for Fast End-to-End FlowLocal Optimization
Outcome HypothesisMilestone-driven Predicted solutions
Intelligent FlowHeadless Chicken
Stop Starting, Start FinishingStart Starting
Safety within SafetyLack of Safety within Safety
Organize Safety by Value StreamRole-Based Safety Silos
Intelligent ControlFixed Mindset to Risk
Go Slower to Go FasterGoing Faster Leads to Going Slower
Continuous Technical ExcellenceAgile Hollow Shell
Architect and Organize for FlowMisalignment of Teams and Architecture
Smart People and Smart Teams with Robot FriendsTools Over People
Optimize for LearningInformation and Learning Silos
Nested Learning with Built-in Feedback LoopsOutput over Outcomes
Communicate, Communicate, CommunicateThe Bubble Effect
Be Comfortable with UncertaintyApplying a Deterministic Approach to an Emergent Domain
Measure for LearningWeaponized Metrics

Team anti-patterns can occur at any stage of the process. Often, they’re caused by short-term thinking but by implementing some changes in your methodologies and building a long-term vision for the project’s success, we can overcome them. In this process, a vigilant Scrum Master, and effective scrum team members are essential, as they should act as a radar for anti-patterns.

If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend or sharing it on X.com and other social platforms. Thank you!

What am I missing here? Let me know in the comments and I’ll add it in!

References and Gratitude

Team Topologies Book

https://danlebrero.com/2021/12/01/sonner-safer-happier-summary-patterns-business-agility/

https://www.craiyon.com/