Kubernetes tutorial

 -deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: speaker
namespace: opentracing
annotations:
kubernetes.io/change-cause: Change /healthzs to /healthz
spec:
selector:
matchLabels:
app: speaker
replicas: 1
template:
metadata:
name: speaker
labels:
app: speaker
spec:
containers:
- name: speaker
image: harbor.google.com/porta-test/speaker:1.1.0
imagePullPolicy: Always
livenessProbe:
httpGet:
path: /healthz
port: 8081
httpHeaders:
- name: X-API-KEYS
value: Awesome-12aswq123
initialDelaySeconds: 3
periodSeconds: 5
ports:
- name: speaker
containerPort: 8081
protocol: TCP
env:
- name: LOG_LEVEL_SETUP
valueFrom:
configMapKeyRef:
name: env-config
key: log_level
- name: LOG_LEVEL_SETUP_D
valueFrom:
configMapKeyRef:
name: env-config
key: log_level
- name: PORT_SERVICE
valueFrom:
configMapKeyRef:
name: env-config
key: port
- name: PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: PASSWORD

---configmap


apiVersion: v1
kind: ConfigMap
metadata:
name: env-config
namespace: opentracing
data:
log_level: INFO
port: "8081"
protocol: TCP


---ingress---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: speaker
namespace: opentracing
annotations:
kubernetes.io/ingress.class: nginx

spec:
rules:
- host: speaker-porta.google-dev.com
http:
paths:
- path: "/"
backend:
serviceName: speaker
servicePort: http


---secret---

apiVersion: v1
kind: Secret
metadata:
name: mysecret
namespace: opentracing
type: Opaque
data:
USER_NAME: YWRtaW4=
PASSWORD: YWRtaW4=
PASSWORD_V: YWRtaW4=


---service


apiVersion: v1
kind: Service
metadata:
name: speaker
namespace: opentracing
spec:
selector:
app: speaker
ports:
- name: http
protocol: "TCP"
port: 80
targetPort: 8081


--dockerfile

FROM python:3.9

RUN apt-get update

RUN mkdir /app
WORKDIR /app
ADD . /app/
RUN pip install -r requirements.txt

EXPOSE 8081

CMD exec gunicorn --bind :8081 --workers 1 --threads 8 --timeout 0 main:app


--main.py--

from flask import Flask
from flask import request
from tracing import init_tracer
from opentracing.ext import tags
from opentracing.propagation import Format
import requests


app = Flask(__name__)
tracer = init_tracer('speaker')


@app.route("/healthz", methods=['GET'])
def healthz():
print("healthz")
return "ok"


@app.route("/speak", methods=['POST'])
def speak():
span_ctx = tracer.extract(Format.HTTP_HEADERS, request.headers)
span_tags = {tags.SPAN_KIND: tags.SPAN_KIND_RPC_SERVER}
with tracer.start_active_span('speak', child_of=span_ctx, tags=span_tags) as scope:
scope.span.log_kv({'args': request.args, 'body': request.get_json()})
res = request.get_json()
# res = requests.post('http://localhost:8082/format',json=res)
res = requests.post('http://formatter/format',
json=res, headers=maker_header())
scope.span.log_kv({'response': res.json()})
return res.json()


if __name__ == "__main__":
app.run(port=8081)


def maker_header():
span = tracer.active_span
span.set_tag(tags.SPAN_KIND, tags.SPAN_KIND_RPC_CLIENT)
headers = {}
tracer.inject(span, Format.HTTP_HEADERS, headers)
return headers


--tracing.py---

import logging
from jaeger_client import Config


def init_tracer(service):
logging.getLogger('').handlers = []
logging.basicConfig(format='%(message)s', level=logging.DEBUG)

config = Config(
config={ # usually read from some yaml config
'sampler': {
'type': 'const',
'param': 1,
},
'logging': True,
'reporter_batch_size': 1,
'local_agent': {
'reporting_host': "jaeger-agent",
'reporting_port': 6831,
},
},
service_name=service,
)

# this call also sets opentracing.tracer
return config.initialize_tracer()


---requirements.txt


Flask==2.0.1
gunicorn==20.1.0

jaeger-client==4.6.0

opentracing==2.4.0

requests==2.26.0











Comments

Popular posts from this blog

Fixing the DeepSpeed Import Error While Fine-Tuning the Qwen Model

Amazon Linux 2023 - User data configuration for launch templates to connect to the EKS cluster

How to create ISM policy and rotate logs in opensearch