​项目介绍

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 是如何上云的?

非常值得借鉴

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

日志级别:

debuginfowarnerrorflat

or panic

backend None 需要调用的后端或者是第三方的 URL(如 Java 后端)
backends [] 需要调用的后端或者是第三方的 URLs(如 Java 后端)
cache None Redis 地址 <host>:<port>
redis.enabled false 是否开启 Redis 缓存
ui.color #34577c UI 颜色
ui.message None UI 问候消息
ui.logo None UI logo
faults.delay false 随机 HTTP 响应延迟 0 到 5 秒
faults.error false 1/3 概率的随机 HTTP 响应错误
faults.unhealthy false 设置后,永远不会达到健康状态
faults.unready false 当设置时,永远不会达到就绪状态
faults.testFail false 当设置时,helm 测试总是失败
faults.testTimeout false 当设置时,helm 测试总是包括超时
h2c.enabled false 允许升级到 h2c
image.repository stefanprodan/podinfo 镜像库(地址)
image.tag <VERSION> 镜像 tag
image.pullPolicy IfNotPresent Image 拉取策略
service.enabled true 创建 Kubernetes 服务,使用 Flagger 时应禁用
service.type ClusterIP Kubernetes Service 类型
service.metricsPort 9797 Prometheus 指标端点端口
service.httpPort 9898 Container HTTP 端口
service.externalPort 9898 ClusterIP HTTP 端口
service.grpcPort 9999 ClusterIP gPRC 端口
service.grpcService podinfo gPRC service 名称
service.nodePort 31198 HTTP 端点的 NodePort
hpa.enabled false

启用 Kubernetes HPA

(Pod 水平自动伸缩)

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

Refs

笔者修改过的 Podinfo 项目地址

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

官方 Podinfo

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

Podinfo,迷你的 Go 微服务模板的更多相关文章

  1. 通用 spring cloud 微服务模板

    说明文档 功能 1. 基于映射数据库一键生成 spring cloud 微服务 2. 通用 Controller ,无需编写代码即可完成基于数据库的服务 3. 动态多条件 CRUD + 分页 使用说明 ...

  2. 一起学习 微服务(MicroServices)-笔记

    笔记 微服务特性: 1. 小 专注与做一件事(适合团队就是最好的) 2. 松耦合 独立部署 3. 进程独立 4. 轻量级通信机制 实践: 1. 微服务周边的一系列基础建设 Load Balancing ...

  3. 微服务时代之自定义archetype(模板/骨架/脚手架)

    1. 场景描述 (1)随着微服务越来越常见,一个大的项目会被拆分成多个小的微服务,jar包以及jar之间的版本冲突问题,变得越来越常见,如何保持整体微服务群jar及版本统一,也变成更加重要了,mave ...

  4. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_17-页面静态化-模板管理-GridFS研究-存文件

    将模板信息保存在cms_template里面 存储在fs.chunks这个集合中.这个集合里面存的是分块文件. fs.files存的是文件的基本信息 chunks存的是块信息 创建测试文件 在cms的 ...

  5. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_16-页面静态化-模板管理-模板制作

    这是轮播图的原始文件 运行门户需要把 nginx启动起来 单独运行轮播图.把里面的css的引用都加上网址的url 这就是单独访问到的轮播图的效果 轮播图模板的地址: 阶段5 3.微服务项目[学成在线] ...

  6. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_18-页面静态化-模板管理-GridFS研究-取文件

    需要创建mongoDB的配置类1 配置类里面主要创建.GridFSBucket这个对象.这个对象的作用就是用来打开一个下载流 在cms的微服务下,在config下创建MongoConfig.这个时候就 ...

  7. 微服务实战(六):选择微服务部署策略 - DockOne.io

    原文:微服务实战(六):选择微服务部署策略 - DockOne.io [编者的话]这篇博客是用微服务建应用的第六篇,第一篇介绍了微服务架构模板,并且讨论了使用微服务的优缺点.随后的文章讨论了微服务不同 ...

  8. Kubernetes 微服务最佳实践

    本文由个人笔记 ryan4yin/knowledge 整理而来 本文主要介绍我个人在使用 Kubernetes 的过程中,总结出的一套「Kubernetes 配置」,是我个人的「最佳实践」. 其中大部 ...

  9. 在 Kubernetes 容器集群,微服务项目最佳实践

    转载自:https://mp.weixin.qq.com/s/WYu3gDwKKf06f_FYbO9YRg 本文主要介绍我个人在使用 Kubernetes 的过程中,总结出的一套「Kubernetes ...

随机推荐

  1. 仵航说 前后端分离,文件上传下载(springBoot+vue+elementUI)仵老大

    1.介绍 ​ 本文主要是介绍前后端分离的上传下载,后端使用的是SpringBoot,持久层用的是mybatis-plus,前端用的Vue,UI用的elementUI,测试了一下,文本,图片,excel ...

  2. 用burp爆破tomcat的过程

    首先burp抓包,将抓到的包放到intruder中 通过burp中自带的解码得知账号密码中有个":"号 所以我们选择的数据类型为Custom iterator 第二条输入" ...

  3. 装逼篇 | 抖音超火的九宫格视频是如何生成的,Python 告诉你答案

    1. 场景 如果你经常刷抖音和微信朋友圈,一定发现了最近九宫格短视频很火! 从朋友圈九宫格图片,到九宫格视频,相比传统的图片视频,前者似乎更有个性和逼格 除了传统的剪辑软件可以实现,是否有其他更加快捷 ...

  4. 教你如何修改Python的pip源镜像

    PS:在pip install安装扩展库的时候,遇到安装超时失败,可能是因为国外镜像被屏蔽了. 可以使用国内开放的pip源: 阿里云 http://mirrors.aliyun.com/pypi/si ...

  5. [.NET] - EventSource类的使用

    EventSource类: 这个类是在.NET 4.5新推出的一个类,用来提供创建事件用于 Windows 事件跟踪的功能 (ETW).在之前如果要配置一个Event Tracing for Wind ...

  6. 区块链从零开始做开发(0):hyperledger Fabric2.3安装

    一.前言 各位看官好,这是本人第一篇技术博客. 写博客的契机是因为原来配的环境在虚拟机扩容后莫名奇妙崩了(具体情况我以后会写),为了以后的自己特此从头开始记录.以前都是作为一个读者,这次终于有机会能够 ...

  7. 【陪你系列】5 千字长文+ 30 张图解 | 陪你手撕 STL 空间配置器源码

    大家好,我是小贺. 点赞再看,养成习惯 文章每周持续更新,可以微信搜索「herongwei」第一时间阅读和催更,本文 GitHub https://github.com/rongweihe/MoreT ...

  8. C# 使用 log4net 日志组件

    一. 什么是 log4net  Apache log4net 库是帮助程序员将日志语句输出到各种输出目标的工具,它是从Java中的Log4j迁移过来的一个.Net版的开源日志框架.log4net 的一 ...

  9. 「译」 .NET 5 新增的Http, Sockets, DNS 和 TLS 遥测

    .NET 一直在稳定的增加和改善对应用程序进行跨平台的诊断分析,在.NET Core 3.0, 我们看到了 EventCounters 的介绍,用于观察和分析指标测量. 我最近在几个 .NET Cor ...

  10. LessonStrangeWords7

    capacity 容量 measurement n. 度量 per 每一 analog 模拟的 continuous 连续的 one-lane 单车道 external 外部的 asynchronou ...