最簡單的 K8S 部署檔案編寫姿勢,沒有之一!
1. 頭疼編寫 K8S 部署檔案?
-
K8S yaml
引數很多,需要邊寫邊查? - 保留回滾版本數怎麼設?
- 如何探測啟動成功,如何探活?
- 如何分配和限制資源?
- 如何設定時區?否則列印日誌是 GMT 標準時間
- 如何暴露服務供其它服務呼叫?
- 如何根據 CPU 和記憶體使用率來配置水平伸縮?
首先,你需要知道有這些知識點,其次要把這些知識點都搞明白也不容易,再次,每次編寫依然容易出錯!
2. 建立服務映象
前一篇文章 講解了如何快速建立自己的服務映象,不過為了演示,這篇文章我們以 redis:6-alpine
映象為例。
3. 完整 K8S 部署檔案編寫過程
- 首先安裝
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"
4. 總結
goctl
工具極大簡化了 K8S yaml 檔案的編寫,提供了開箱即用的最佳實踐,並且支援了模板自定義。
如果覺得工具有幫助,歡迎 star ?
5. 專案地址
https://github.com/tal-tech/go-zero
6. 微信交流群
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 最簡單的 Go Dockerfile 編寫姿勢,沒有之一!GoDocker
- 最簡單的Go Dockerfile編寫姿勢,沒有之一!GoDocker
- 最簡單的服務響應時長優化方法,沒有之一優化
- 最簡單的移動端適配方案(rem+vw)--沒有之一REM
- 編寫最簡單的核心:HelloWorld
- 用Java編寫一個最簡單的桌面程式Java
- 一個最簡單的XML檔案(轉)XML
- 最簡單的授權檔案
- 使用 Fuse 和 java 17 編寫一個簡單的檔案系統Java
- 寫一個 iOS 複雜表單的正確姿勢iOS
- 用Vue編寫一個簡單的仿Explorer檔案管理器Vue
- 史上最強程式碼自測方法,沒有之一!
- 編寫簡單的windows bat批處理指令碼檔案WindowsBAT指令碼
- PHP 檔案操作的各種姿勢PHP
- javascript編寫一個簡單的編譯器JavaScript編譯
- PDF轉文字檔案的最簡單方法
- 檔案包含漏洞(繞過姿勢)
- 編寫易維護跨端元件的正確姿勢跨端元件
- 編寫一個非常簡單的 JavaScript 編輯器JavaScript
- 【k8s】使用k8s部署一個簡單的nginx服務K8SNginx
- 編寫一個簡單的智慧合約
- 編寫一個簡單的babel外掛Babel
- 編寫一個簡單的JavaScript模板引擎JavaScript
- 檔案上傳漏洞(繞過姿勢)
- 手把手教你編寫最簡單的效能指令碼指令碼
- [Vue]寫一個簡單的檔案上傳控制元件Vue控制元件
- 在K8S中,deployment的yaml檔案如何編寫呢?K8SYAML
- Java專案部署到雲伺服器最簡單的方法Java伺服器
- linux讀寫檔案 簡單版Linux
- 配置檔案的編寫
- GitHub上最火的、最值得前端學習的幾個資料結構與演算法專案!沒有之一!Github前端資料結構演算法
- 編寫一個檔案補丁
- XSS姿勢——檔案上傳XSS
- 讀取ClassPath下resource檔案的正確姿勢
- LeetCode 上最難的連結串列演算法題,沒有之一!LeetCode演算法
- 3分鐘短文:可能是Laravel模板最直白的用法了,沒有之一Laravel
- 一個簡單的ipf配置檔案
- 最簡單的分散式檔案系統 go-fastdfs分散式GoAST