{"id":902,"date":"2024-11-18T02:13:15","date_gmt":"2024-11-18T02:13:15","guid":{"rendered":"https:\/\/realstudy.net\/?p=902"},"modified":"2024-11-18T14:20:24","modified_gmt":"2024-11-18T14:20:24","slug":"install-nats-docker-and-kubernetes","status":"publish","type":"post","link":"https:\/\/realstudy.net\/?p=902","title":{"rendered":"Install NATS \u2013 Docker and Kubernetes"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"902\" class=\"elementor elementor-902\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cb49249 e-flex e-con-boxed e-con e-parent\" data-id=\"cb49249\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1d3f926d elementor-widget elementor-widget-text-editor\" data-id=\"1d3f926d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div>NATS is a high-performance open-source messaging system widely used in various fields such as microservices, IoT, and cloud-native applications. This blog provides a detailed guide on installing and running NATS using Docker-Compose and Helm. With this guide, you can easily set up NATS, from local development environments to Kubernetes clusters.<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5a485cb1 elementor-widget elementor-widget-text-editor\" data-id=\"5a485cb1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Prerequisites :<\/h3><ul style=\"margin-left: 0em;\"><li><strong>Docker<\/strong> and <strong>Docker-Compose<\/strong> installed<\/li><li>Access to a <strong>Kubernetes cluster<\/strong><\/li><li><strong>Helm<\/strong> installed<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a5d27ed elementor-widget elementor-widget-text-editor\" data-id=\"a5d27ed\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Contents :<\/h3><ol style=\"margin-left: 0em;\"><li><strong>Installing with Docker Compose:<\/strong><br \/><ul style=\"margin-left: 0em;\"><li>Set up NATS locally using Docker.<\/li><\/ul><\/li><li><strong>Installing on Kubernetes:<\/strong><br \/><ul style=\"margin-left: 0em;\"><li>Deploy NATS using Helm.<\/li><\/ul><\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-255eff3 e-flex e-con-boxed e-con e-parent\" data-id=\"255eff3\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c8867dc elementor-widget elementor-widget-heading\" data-id=\"c8867dc\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">* Installing Locally with Docker Compose<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7194773 elementor-widget elementor-widget-text-editor\" data-id=\"7194773\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div>* In the example, the local path for storing data files is set to \/data\/nats. The configuration file nats.conf is created externally and passed to the container.<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6133d3b elementor-widget elementor-widget-code-highlight\" data-id=\"6133d3b\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>user:~$ sudo mkdir -p \/data\/nats\nuser:~$ cd \/data\/nats\nuser:\/data\/nats$ vi nats.conf\n### NATS Clients Port ###############################################\nport: 4222\n# PID file shared with configuration reloader.\n# pid_file: \"\/var\/run\/nats\/nats.pid\"\n\n### Monitoring  #####################################################\nhttp: 8222\nserver_name: nats-0\nserver_tags: [\n    \"mem:4Gi\",\n]\n\n### NATS JetStream ##################################################\njetstream {\n    max_mem:2G\n    store_dir: \"\/data\"\n    max_file:10Gi\n    unique_tag: \"natsuniquetag\"\n}\n\n### NATS Full Mesh Clustering Setup #################################\n# cluster {\n#     name: natscluster\n#     port: 6222\n#     routes = [\n#     nats:\/\/nats-0.nats.nats.svc.cluster.local:6222\n#     nats:\/\/nats-1.nats.nats.svc.cluster.local:6222\n#     nats:\/\/nats-2.nats.nats.svc.cluster.local:6222\n\n#     ]\n#     cluster_advertise: $CLUSTER_ADVERTISE\n#     connect_retries: 120\n# }\nlame_duck_grace_period: 10s\nlame_duck_duration: 30s<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4002e0a elementor-widget elementor-widget-text-editor\" data-id=\"4002e0a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div><b>docker-compose.yml<\/b><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0dd9905 elementor-widget elementor-widget-code-highlight\" data-id=\"0dd9905\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>services:\n# define nats container\n  nats:\n    image: nats:alpine\n    restart: unless-stopped\n    container_name: nats\n    ports:\n      - \"4222:4222\" # client port\n      - \"8222:8222\" # monitoring port\n    volumes:\n      - \/data\/nats\/nats.conf:\/etc\/nats\/nats.conf\n      - \/data\/nats:\/data\n    command: -c \/etc\/nats\/nats.conf<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3854c00 elementor-widget elementor-widget-text-editor\" data-id=\"3854c00\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div><strong>Commands to Start and Stop the Container<\/strong><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-acd1d9e elementor-widget elementor-widget-code-highlight\" data-id=\"acd1d9e\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp># start container\nuser:~$ docker compose up nats -d\n\n# stop container\nuser:~$ docker container stop <container hash value>\n\n# remove container\nuser:~$ docker container rm <container hash value>\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b415525 e-flex e-con-boxed e-con e-parent\" data-id=\"b415525\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7d63a5f elementor-widget elementor-widget-heading\" data-id=\"7d63a5f\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">* Installing on Kubernetes with Helm<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d5add63 elementor-widget elementor-widget-text-editor\" data-id=\"d5add63\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div>Using Helm simplifies the installation and management of NATS in a Kubernetes environment.<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-da3fb4e elementor-widget elementor-widget-text-editor\" data-id=\"da3fb4e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div><b>Add the NATS Helm repository and update:<\/b><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8feb4d0 elementor-widget elementor-widget-code-highlight\" data-id=\"8feb4d0\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>user:~$ helm repo add nats https:\/\/nats-io.github.io\/k8s\/helm\/charts\/\nuser:~$ helm repo update<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2ff90af elementor-widget elementor-widget-text-editor\" data-id=\"2ff90af\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div><b>Check configuration options:<\/b><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c2137ac elementor-widget elementor-widget-code-highlight\" data-id=\"c2137ac\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-python line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-python\">\n\t\t\t\t\t<xmp>user:~$ helm show values nats\/nats > nats-values.yaml<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f5df603 elementor-widget elementor-widget-text-editor\" data-id=\"f5df603\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div>* This command saves the configurable options to nats-values.yaml.<br \/>* The official documentation for more details : <a href=\"https:\/\/artifacthub.io\/packages\/helm\/nats\/nats\" target=\"_blank\" rel=\"noopener\">https:\/\/artifacthub.io\/packages\/helm\/nats\/nats<\/a><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bb5b6d1 elementor-widget elementor-widget-text-editor\" data-id=\"bb5b6d1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div><strong>Install NATS with Helm:<\/strong><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-74ea5c7 elementor-widget elementor-widget-code-highlight\" data-id=\"74ea5c7\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>user:~$ helm install nats nats\/nats --namespace nats --create-namespace \\\n  --set config.jetstream.enabled=true \\\n  --set config.jetstream.fileStore.pvc.size=5Gi \\\n  --set config.jetstream.fileStore.pvc.storageClassName=local-path<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5306ed3 elementor-widget elementor-widget-text-editor\" data-id=\"5306ed3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div>* Expose NATS externally by creating a LoadBalancer service<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-97aed96 elementor-widget elementor-widget-code-highlight\" data-id=\"97aed96\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp># export port (optional)\nuser:~$ cat << EOF | kubectl apply -f -\napiVersion: v1\nkind: Service\nmetadata:\n  name: nats\n  namespace: nats\nspec:\n  type: LoadBalancer\n  ports:\n    - port: 4222\n      targetPort: 4222\n      protocol: TCP\n  selector:\n    app.kubernetes.io\/instance: nats\n    app.kubernetes.io\/name: nats\nEOF<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c84475 elementor-widget elementor-widget-text-editor\" data-id=\"6c84475\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div><strong>Verify the installation<\/strong><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-db006e4 elementor-widget elementor-widget-code-highlight\" data-id=\"db006e4\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard word-wrap\">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-python line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-python\">\n\t\t\t\t\t<xmp># Check if it is installed and running properly.\nuser:~$ kubectl get all -n nats<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>NATS is a high-performance open-source messaging system widely used in various fields such as microservices, IoT, and cloud-native applications. This&hellip;<\/p>\n","protected":false},"author":1,"featured_media":772,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[21],"tags":[],"class_list":["post-902","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-computer_en"],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/realstudy.net\/wp-content\/uploads\/2024\/11\/nats_install.jpeg","_links":{"self":[{"href":"https:\/\/realstudy.net\/index.php?rest_route=\/wp\/v2\/posts\/902","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/realstudy.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/realstudy.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/realstudy.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/realstudy.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=902"}],"version-history":[{"count":4,"href":"https:\/\/realstudy.net\/index.php?rest_route=\/wp\/v2\/posts\/902\/revisions"}],"predecessor-version":[{"id":906,"href":"https:\/\/realstudy.net\/index.php?rest_route=\/wp\/v2\/posts\/902\/revisions\/906"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/realstudy.net\/index.php?rest_route=\/wp\/v2\/media\/772"}],"wp:attachment":[{"href":"https:\/\/realstudy.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=902"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/realstudy.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=902"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/realstudy.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=902"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}