K8S yaml
参数很多,需要边写边查?首先,你需要知道有这些知识点,其次要把这些知识点都搞明白也不容易,再次,每次编写依然容易出错!
前一篇文章 讲解了如何快速创建自己的服务镜像,不过为了演示,这篇文章我们以 redis:6-alpine
镜像为例。
首先安装 goctl
工具
GO111MODULE=on GOPROXY=https://goproxy.cn/,direct go get -u github.com/tal-tech/go-zero/tools/goctl
一键生成 K8S 部署文件
goctl kube deploy -name redis -namespace adhoc -image redis:6-alpine -o redis.yaml -port 6379
生成的 yaml
文件如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
namespace: adhoc
labels:
app: redis
spec:
replicas: 3
revisionHistoryLimit: 5
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:6-alpine
lifecycle:
preStop:
exec:
command: ["sh","-c","sleep 5"]
ports:
- containerPort: 6379
readinessProbe:
tcpSocket:
port: 6379
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 6379
initialDelaySeconds: 15
periodSeconds: 20
resources:
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: 1000m
memory: 1024Mi
volumeMounts:
- name: timezone
mountPath: /etc/localtime
volumes:
- name: timezone
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
---
apiVersion: v1
kind: Service
metadata:
name: redis-svc
namespace: adhoc
spec:
ports:
- port: 6379
selector:
app: redis
---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: redis-hpa-c
namespace: adhoc
labels:
app: redis-hpa-c
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: redis
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 80
---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: redis-hpa-m
namespace: adhoc
labels:
app: redis-hpa-m
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: redis
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: memory
targetAverageUtilization: 80
部署服务,如果 adhoc
namespace 不存在的话,请先通过 kubectl create namespace adhoc
创建
$ kubectl apply -f redis.yaml
deployment.apps/redis created
service/redis-svc created
horizontalpodautoscaler.autoscaling/redis-hpa-c created
horizontalpodautoscaler.autoscaling/redis-hpa-m created
查看服务允许状态
$ kubectl get all -n adhoc
NAME READY STATUS RESTARTS AGE
pod/redis-585bc66876-5ph26 1/1 Running 0 6m5s
pod/redis-585bc66876-bfqxz 1/1 Running 0 6m5s
pod/redis-585bc66876-vvfc9 1/1 Running 0 6m5s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/redis-svc ClusterIP 172.24.15.8 <none> 6379/TCP 6m5s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/redis 3/3 3 3 6m6s
NAME DESIRED CURRENT READY AGE
replicaset.apps/redis-585bc66876 3 3 3 6m6s
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
horizontalpodautoscaler.autoscaling/redis-hpa-c Deployment/redis 0%/80% 3 10 3 6m6s
horizontalpodautoscaler.autoscaling/redis-hpa-m Deployment/redis 0%/80% 3 10 3 6m6s
测试服务
$ kubectl run -i --tty --rm cli --image=redis:6-alpine -n adhoc -- sh
/data # redis-cli -h redis-svc
redis-svc:6379> set go-zero great
OK
redis-svc:6379> get go-zero
"great"
goctl
工具极大简化了 K8S yaml 文件的编写,提供了开箱即用的最佳实践,并且支持了模板自定义。
如果觉得文章有帮助,欢迎 star 🤝
1
dany813 2020-12-14 09:13:47 +08:00 1
标题霸气啊
|
2
vhus 2020-12-14 09:15:49 +08:00 via Android
学习了,mark 一下。
|
4
Yano 2020-12-14 10:04:49 +08:00
这个文章,我在掘金、博客园、v2ex 至少看到 5 遍了,囧
|
6
XiLingHost 2020-12-14 10:09:36 +08:00
感觉还不如直接用 helm 上一堆写好的 chart
|
8
kevinwan OP @XiLingHost redis:6-alpine 只是个举例哈,你自己写的服务写 chart 是不是就复杂点了?
|
9
w292614191 2020-12-14 10:37:49 +08:00
简单不是字少代码多。
而是字多代码多。 csdn 的感觉。 |
10
loveyu 2020-12-14 10:41:33 +08:00
现实情况是,要是生产环境的配置都像文中这么简单就好了。目前一个 yaml 接近 200 行,还有不断增加的趋势
|
13
kevinwan OP @julyclyde 掘金也有后端的,周末北京有个掘金的微服务专场,我本来要去讲的,可惜跟另一个分享冲突了
|
14
joesonw 2020-12-14 14:01:37 +08:00
grafana tanka
|
16
kingxt 2020-12-14 20:05:38 +08:00
看起来挺屌样子,去试试
|
17
dayeye2006199 2020-12-15 01:16:29 +08:00 via Android
你这个可以做成 kubectl 的 plugin,可能有更多的受众
|
18
kevinwan OP @dayeye2006199 好主意👍
|
19
datafeng 2020-12-15 09:27:31 +08:00
违反广告法了。。。
|
21
eudore 2020-12-16 09:20:12 +08:00
不应该 helm 吗,直接 helm 生成或一键上服务,命令行和 helm 差不多的。
|
22
hantsy 2020-12-16 16:34:25 +08:00
现在不是都是用 Operater,我不大懂。感觉 DevOps 都是走 MarketPlace 路线,和 Github Actions 类似,很多东西通过市场发布复用。
|
23
dreamusername 2020-12-17 20:31:36 +08:00
伪需求,如果需要生成,必然要了解各种配置的定义,这样前方有 kustomize 与 helm 在等着你,再然后就看到了 argocd,然后发现 kubectl 都可以不用。
|
24
kevinwan OP @dreamusername 不同公司,不同场景有不同用法嘛
|