项目介绍
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
.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
metrics
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 是如何上云的?
非常值得借鉴
参数 | 默认值 | 描述 |
---|---|---|
|
|
期望的 K8S Pods(也就是代码在集群中部署几个实例) |
|
|
日志级别:
or |
|
|
需要调用的后端或者是第三方的 URL(如 Java 后端) |
|
|
需要调用的后端或者是第三方的 URLs(如 Java 后端) |
|
|
Redis 地址
|
|
|
是否开启 Redis 缓存 |
|
|
UI 颜色 |
|
|
UI 问候消息 |
|
|
UI logo |
|
|
随机 HTTP 响应延迟 0 到 5 秒 |
|
|
1/3 概率的随机 HTTP 响应错误 |
|
|
设置后,永远不会达到健康状态 |
|
|
当设置时,永远不会达到就绪状态 |
|
|
当设置时,helm 测试总是失败 |
|
|
当设置时,helm 测试总是包括超时 |
|
|
允许升级到 h2c |
|
|
镜像库(地址) |
|
|
镜像 tag |
|
|
Image 拉取策略 |
|
|
创建 Kubernetes 服务,使用 Flagger 时应禁用 |
|
|
Kubernetes Service 类型 |
|
|
Prometheus 指标端点端口 |
|
|
Container HTTP 端口 |
|
|
ClusterIP HTTP 端口 |
|
|
ClusterIP gPRC 端口 |
|
|
gPRC service 名称 |
|
|
HTTP 端点的 NodePort |
|
|
启用 Kubernetes HPA (Pod 水平自动伸缩) |
|
|
Pods 最大数量 |
|
|
每个 Pod 的目标CPU使用率 |
|
|
每个 Pod 的目标内存使用量 |
|
|
每个 Pod 每秒目标 HTTP 请求 |
|
|
是否应创建 service account |
|
|
要使用的 service account 的名称,如果未设置且 enabled 为true,则使用 fullname 生成名称 |
|
|
创建 Linkerd 服务配置文件 |
|
|
是否应创建 Prometheus Operator 服务监视器 |
|
|
Prometheus 抓取间隔 |
|
|
启用 Ingress |
|
|
Ingress 注解 |
|
|
Ingress 路径 |
|
|
Ingress 接受的 hosts |
|
|
Ingress TLS 配置 |
|
|
Pod CPU 请求 |
|
|
Pod 内存 请求 |
|
|
Pod CPU 限制 |
|
|
Pod memory 限制 |
|
|
Pod 分配的集群节点标签(说白了就是固定部署到你指定的机器) |
|
|
可容忍的节点污点列表 |
|
|
Node/pod 亲和力 |
|
|
Pod 注解 |
Refs
笔者修改过的 Podinfo 项目地址
-
https://github.com/Hacker-Linner/podinfo
官方 Podinfo
-
https://github.com/stefanprodan/podinfo
我是为少。
微信:uuhells123。
公众号:黑客下午茶。
谢谢点赞支持👍👍👍!