【云原生】kustomize_常见的部署方式
kustomize
1、是什么
https://kustomize.io/ Kubernetes本地的配置管理工具。轻量版的helm;
以后我们公司自己部署的一些中间件等,可以封装为 kustomize 管理的文件结构。
只需要
kubectl apply -k即可快速部署不同环境应用
2、用法
1、文件结构

2、文件内容
yaml
#service.yaml
kind: Service
apiVersion: v1
metadata:
name: the-service
spec:
selector:
deployment: hello
type: ClusterIP
ports:
- protocol: TCP
port: 8666
targetPort: 8080
yaml
#kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
metadata:
name: arbitrary
# Example configuration for the webserver
# at https://github.com/monopole/hello
commonLabels:
app: hello # 构建出来的每个资源上都有app=hello标签
resources:
- deployment.yaml
- service.yaml
- configMap.yaml
yaml
#configMap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: the-map
data:
altGreeting: "Good Morning!"
enableRisky: "false"
yaml
#deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: the-deployment
spec:
replicas: 3
selector:
matchLabels:
deployment: hello
template:
metadata:
labels:
deployment: hello
spec:
containers:
- name: the-container
image: monopole/hello:1
command: ["/hello",
"--port=8080",
"--enableRiskyFeature=$(ENABLE_RISKY)"]
ports:
- containerPort: 8080
env:
- name: ALT_GREETING
valueFrom:
configMapKeyRef:
name: the-map
key: altGreeting
- name: ENABLE_RISKY
valueFrom:
configMapKeyRef:
name: the-map
key: enableRisky
3、使用
sh
kubectl apply -k demo
kubectl delete -k demo
4、注意事项
- kustomization.yaml 文件名是固定的;
- kubectl apply -k path 会自动找path下的kustomization.yaml
- kustomzition文件能写的内容:https://kubectl.docs.kubernetes.io/guides/config_management/
5、高级-环境分离
-
创建 overlay,分离各个环境。原来的可以抽取为
base环境。其他环境层可只定义变量覆盖 -
每个环境层定义自己的 kustomization.yaml
-
新的层级结构
-

-
多的内容
yaml#production/kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namePrefix: production- commonLabels: variant: production org: acmeCorporation commonAnnotations: note: Hello, I am production! bases: - ../../base patchesStrategicMerge: - deployment.yaml #production/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: the-deployment spec: replicas: 10 ## 只需要定义可变部分yaml#staging/kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namePrefix: staging- #所有资源的前缀 commonLabels: #所有资源的标签 variant: staging org: acmeCorporation commonAnnotations: #所有资源的注解 note: Hello, I am staging! bases: - ../../base #基础配置的位置 patchesStrategicMerge: - map.yaml #需要额外引入部署的内容,如果引入的内容基础内容有配置,则使用这个最新的 #staging/map.yaml apiVersion: v1 kind: ConfigMap metadata: name: the-map data: altGreeting: "Have a pineapple!" enableRisky: "true" -
执行命令
sh
kubectl apply -k demo/base
kubectl apply -k demo/overlays/production
kubectl apply -k demo/overlays/staging -n hello #可以在部署的时候统一指定名称空间
常见的部署方式
1、简单微服务:自己写 Deployment(无状态)、StatefulSet(有状态)之类的文件
问题:多环境适配没法做(因为得写好多)
2、一系列的部署(中大型应用【中间件】):MySQL集群、redis-ha等;用Helm(应用商店)。一般第三方应用都做好了镜像。
-
1、下载包
-
2、再根据values.yaml文件,抽取一个自己的需要改的配置项override.yaml
4、kustomize:【比1重,比2轻,介于中间】
自己写一堆部署(service,deploy,redis,xxxx),还能多环境适配
docker-compose :一起up/一起down
k8s的compose就是 kustomize
kubectl apply -k kustomize文件夹。全部部署
5、operator:最高级和智能的(operator是k8s的二次开发,operator能识别自定义资源类型)
比如:prometheus-stack-kube-prom-operator【helm装的Prometheus】
比如:ECK 提供 operator 协助部署整个es技术栈产品
第三方的组件过来怎么部署到k8s上?
1、docker run能出来的,k8s都能出来【deploy,sts】
2、gitlab、harbor等,推荐可以专门部署到某些机器,可以不用k8s集群管理