github.com/tickoalcantara12/micro/v3@v3.0.0-20221007104245-9d75b9bcbab9/docs/v2/deployment/deploy-kubernetes.md (about)

     1  ---
     2  title: Kubernetes Deployment
     3  keywords: kubernetes
     4  tags: [kubernetes]
     5  sidebar: home_sidebar
     6  permalink: /deploy-kubernetes
     7  summary: 
     8  ---
     9  
    10  
    11  This doc provides a guide to running micro on kubernetes.
    12  
    13  ## Getting Started
    14  
    15  - [Dependencies](#dependencies)
    16  - [Deployment](#deployment)
    17  - [Micro API](#micro-api)
    18  - [Micro Web](#micro-web)
    19  
    20  ## Dependencies
    21  
    22  On kubernetes we would recommend running [etcd](https://github.com/etcd-io/etcd) and [nats](https://github.com/nats-io/nats-server).
    23  
    24  - etcd is used for highly scalable service discovery
    25  - NATS is used for asynchronous messaging
    26  
    27  To install etcd ([instructions](https://github.com/helm/charts/tree/master/stable/etcd-operator))
    28  
    29  ```
    30  helm install --name my-release --set customResources.createEtcdClusterCRD=true stable/etcd-operator
    31  ```
    32  
    33  To install nats ([instructions](https://github.com/helm/charts/tree/master/stable/nats))
    34  
    35  ```
    36  helm install my-release stable/nats
    37  ```
    38  
    39  You should now have the required dependencies.
    40  
    41  ## Deployment
    42  
    43  Here's an example k8s deployment for a micro service
    44  
    45  ```
    46  apiVersion: extensions/v1beta1
    47  kind: Deployment
    48  metadata:
    49    namespace: default
    50    name: greeter
    51  spec:
    52    replicas: 1
    53    selector:
    54      matchLabels:
    55        name: greeter-srv
    56        micro: service
    57    template:
    58      metadata:
    59        labels:
    60          name: greeter-srv
    61          micro: service
    62      spec:
    63        containers:
    64          - name: greeter
    65            command: [
    66  		"/greeter-srv",
    67  	  ]
    68            image: micro/go-micro
    69            imagePullPolicy: Always
    70            ports:
    71            - containerPort: 8080
    72              name: greeter-port
    73            env:
    74            - name: MICRO_SERVER_ADDRESS
    75              value: "0.0.0.0:8080"
    76            - name: MICRO_BROKER
    77              value: "nats"
    78            - name: MICRO_BROKER_ADDRESS
    79              value: "nats-cluster"
    80            - name: MICRO_REGISTRY
    81              value: "etcd"
    82            - name: MICRO_REGISTRY_ADDRESS
    83              value: "etcd-cluster-client"
    84  ```
    85  
    86  Deploy with kubectl
    87  
    88  ```
    89  kubectl apply -f greeter.yaml
    90  ```
    91  
    92  ## Micro API
    93  
    94  To deploy the micro api use the following config. Note the ENABLE_ACME env var where you want Let's Encrypt SSL by default.
    95  
    96  Create the api service
    97  
    98  ```
    99  apiVersion: v1
   100  kind: Service
   101  metadata:
   102    name: micro-api
   103    namespace: default
   104    labels:
   105      name: micro-api
   106      micro: service
   107  spec:
   108    ports:
   109    - name: https
   110      port: 443
   111      targetPort: 443
   112    selector:
   113      name: micro-api
   114      micro: service
   115    type: LoadBalancer
   116  ```
   117  
   118  Create the deployment
   119  
   120  ```
   121  apiVersion: apps/v1
   122  kind: Deployment
   123  metadata:
   124    namespace: default
   125    name: micro-api
   126    labels:
   127      micro: service
   128  spec:
   129    replicas: 3
   130    selector:
   131      matchLabels:
   132        name: micro-api
   133        micro: service
   134    strategy:
   135      rollingUpdate:
   136        maxSurge: 0
   137        maxUnavailable: 1
   138    template:
   139      metadata:
   140        labels:
   141          name: micro-api
   142          micro: service
   143      spec:
   144        containers:
   145        - name: api
   146          env:
   147          - name: MICRO_ENABLE_STATS
   148            value: "true"
   149          - name: MICRO_BROKER
   150            value: "nats"
   151          - name: MICRO_BROKER_ADDRESS
   152            value: "nats-cluster"
   153          - name: MICRO_REGISTRY
   154            value: "etcd"
   155          - name: MICRO_REGISTRY_ADDRESS
   156            value: "etcd-cluster-client"
   157          - name: MICRO_REGISTER_TTL
   158            value: "60"
   159          - name: MICRO_REGISTER_INTERVAL
   160            value: "30"
   161          - name: MICRO_ENABLE_ACME
   162            value: "true"
   163          args:
   164          - api
   165          image: micro/micro
   166          imagePullPolicy: Always
   167          ports:
   168          - containerPort: 443
   169            name: api-port
   170  ```
   171  
   172  ## Micro Web
   173  
   174  To deploy the micro web use the following config. Note the ENABLE_ACME env var where you want Let's Encrypt SSL by default.
   175  
   176  Create the service
   177  
   178  ```
   179  apiVersion: v1
   180  kind: Service
   181  metadata:
   182    name: micro-web
   183    namespace: default
   184    labels:
   185      name: micro-web
   186      micro: service
   187  spec:
   188    ports:
   189    - name: https
   190      port: 443
   191      targetPort: 443
   192    selector:
   193      name: micro-web
   194      micro: service
   195    type: LoadBalancer
   196  ```
   197  
   198  Create the deployment
   199  
   200  ```
   201  apiVersion: apps/v1
   202  kind: Deployment
   203  metadata:
   204    namespace: default
   205    name: micro-web
   206    labels:
   207      micro: service
   208  spec:
   209    replicas: 1
   210    selector:
   211      matchLabels:
   212        name: micro-web
   213        micro: service
   214    template:
   215      metadata:
   216        labels:
   217          name: micro-web
   218          micro: service
   219      spec:
   220        containers:
   221        - name: web
   222          env:
   223          - name: MICRO_BROKER
   224            value: "nats"
   225          - name: MICRO_BROKER_ADDRESS
   226            value: "nats-cluster"
   227          - name: MICRO_ENABLE_STATS
   228            value: "true"
   229          - name: MICRO_REGISTRY
   230            value: "etcd"
   231          - name: MICRO_REGISTRY_ADDRESS
   232            value: "etcd-cluster-client"
   233          - name: MICRO_ENABLE_ACME
   234            value: "true"
   235          args:
   236          - web
   237          image: micro/micro
   238          imagePullPolicy: Always
   239          ports:
   240          - containerPort: 443
   241            name: web-port
   242  ```
   243