Podinfo,迷你的 Go 微服务模板

mb6077a82612db2 · · 319 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

项目介绍

Podinfo 是一个用 Go 制作的小型 web 应用程序,它展示了在 Kubernetes 中运行微服务的最佳实践。

它已实现的技术指标(截选自官方 README.md ):

里面每一项技术指标的实现方式,其实都可以拿出来单独讲好久,相关理论也有好多。

这里我只是讲针对这个项目,我们该如何使用 Docker 去试玩它。

构建容器调试环境

IDE

VSCode + golang/vscode-go

Go 国内加速镜像

https://learnku.com/go/wikis/38122

编写 Dockerfile.dev 文件

FROM golang:1.14

WORKDIR /workspace

# copy modules manifests
COPY go.mod go.mod
COPY go.sum go.sum

# 阿里云
RUN go env -w GO111MODULE=on
RUN go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct

# cache modules
RUN go mod download
RUN go get github.com/go-delve/delve/cmd/dlv

构建 Image

docker build -f Dockerfile.dev -t podinfo:dev .

编写 docker-compose.yaml

version: "3.4"
services:
 golang:
   image: podinfo:dev
   command: >
     bash -c "ls -la
     && dlv debug /workspace/cmd/podinfo --headless --log -l 0.0.0.0:2345 --api-version=2"
   volumes:
   - ./:/workspace
   ports:
     - 9898:9898
     - 2345:2345
   security_opt:
     - "seccomp:unconfined"

配置 .vscode 的 launch.json

{
 "version": "0.2.0",
 "configurations": [
     {
         "name": "Remote Docker",
         "type": "go",
         "request": "launch",
         "mode": "remote",
         "remotePath":"/workspace",
         "port": 2345,
         "host": "127.0.0.1",
         "program": "${workspaceFolder}",
         "args": [],
         "trace" : "verbose",
         "env" : {}
     }
 ]
}

开始试玩

docker compose 一键启动

docker-compose up

Run Remote Docker

查看首页

http://localhost:9898

查看给 Prometheus 的 metrics API

http://localhost:9898/metrics

下断点,发请求调试

curl http://localhost:9898/api/info

Helm Charts 

Podinfo/Charts

  • https://github.com/stefanprodan/podinfo/tree/master/charts/podinfo

因为 Podinfo 是一个云原生项目,所以它的 Helm Charts 的编写还是值得借鉴和学习的。

当然这里需要你有一些 K8S 的经验。

Helm 安装 Podinfo

$ helm repo add podinfo https://stefanprodan.github.io/podinfo

$ helm upgrade -i my-release podinfo/podinfo

Helm 卸载 Podinfo

$ helm delete my-release

看配置,了解 PodInfo 是如何上云的?

非常值得借鉴

参数默认值描述
replicaCount1期望的 K8S Pods(也就是代码在集群中部署几个实例)
logLevelinfo

日志级别:

 debuginfowarnerrorflat 

or panic

backendNone需要调用的后端或者是第三方的 URL(如 Java 后端)
backends[]需要调用的后端或者是第三方的 URLs(如 Java 后端)
cacheNoneRedis 地址 <host>:<port>
redis.enabledfalse是否开启 Redis 缓存
ui.color#34577cUI 颜色
ui.messageNoneUI 问候消息
ui.logoNoneUI logo
faults.delayfalse随机 HTTP 响应延迟 0 到 5 秒
faults.errorfalse1/3 概率的随机 HTTP 响应错误
faults.unhealthyfalse设置后,永远不会达到健康状态
faults.unreadyfalse当设置时,永远不会达到就绪状态
faults.testFailfalse当设置时,helm 测试总是失败
faults.testTimeoutfalse当设置时,helm 测试总是包括超时
h2c.enabledfalse允许升级到 h2c
image.repositorystefanprodan/podinfo镜像库(地址)
image.tag<VERSION>镜像 tag
image.pullPolicyIfNotPresentImage 拉取策略
service.enabledtrue创建 Kubernetes 服务,使用 Flagger 时应禁用
service.typeClusterIPKubernetes Service 类型
service.metricsPort9797Prometheus 指标端点端口
service.httpPort9898Container HTTP 端口
service.externalPort9898ClusterIP HTTP 端口
service.grpcPort9999ClusterIP gPRC 端口
service.grpcServicepodinfogPRC service 名称
service.nodePort31198HTTP 端点的 NodePort
hpa.enabledfalse

启用 Kubernetes HPA

(Pod 水平自动伸缩)

hpa.maxReplicas10Pods 最大数量
hpa.cpuNone每个 Pod 的目标CPU使用率
hpa.memoryNone每个 Pod 的目标内存使用量
hpa.requestsNone每个 Pod 每秒目标 HTTP 请求
serviceAccount.enabledfalse是否应创建 service account
serviceAccount.nameNone要使用的 service account 的名称,如果未设置且 enabled 为true,则使用 fullname 生成名称
linkerd.profile.enabledfalse创建 Linkerd 服务配置文件
serviceMonitor.enabledfalse是否应创建 Prometheus Operator 服务监视器
serviceMonitor.interval15sPrometheus 抓取间隔
ingress.enabledfalse启用 Ingress
ingress.annotations{}Ingress 注解
ingress.path/*Ingress 路径
ingress.hosts[]Ingress 接受的 hosts
ingress.tls[]Ingress TLS 配置
resources.requests.cpu1mPod CPU 请求
resources.requests.memory16MiPod 内存 请求
resources.limits.cpuNonePod CPU 限制
resources.limits.memoryNonePod memory 限制
nodeSelector{}Pod 分配的集群节点标签(说白了就是固定部署到你指定的机器)
tolerations[]可容忍的节点污点列表
affinityNoneNode/pod 亲和力
podAnnotations{}Pod 注解

Refs

笔者修改过的 Podinfo 项目地址

  • https://github.com/Hacker-Linner/podinfo

官方 Podinfo

  • https://github.com/stefanprodan/podinfo

 

我是为少。

微信:uuhells123。
公众号:***下午茶。
谢谢点赞支持????????????!

 


有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:mb6077a82612db2

查看原文:Podinfo,迷你的 Go 微服务模板

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

319 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传