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