【云原生】kustomize_常见的部署方式

【云原生】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、注意事项
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集群管理

相关推荐
人间凡尔赛8 小时前
K8s 十年之变:从 Cloud Native 到 AI Native,2026 年后端架构的范式革命
后端·云原生·架构
名字还没想好☜9 小时前
Kubernetes CrashLoopBackOff 排查全流程:从 describe 到日志到 exit code
运维·docker·云原生·容器·kubernetes
Cloud云卷云舒10 小时前
AI Agent记忆系统:分层记忆体系的技术架构与实践
云原生·ai-native·haishandb
Ulyanov10 小时前
Python雷达电子对抗仿真引擎(一):打破单体瓶颈,构建微服务与ECS架构的顶层设计
开发语言·python·微服务·云原生·架构·雷达电子对抗
spider_xcxc1 天前
基于项目实际 k8s/ 目录 YAML 文件的完整学习指南。
云原生·容器·kubernetes
张忠琳1 天前
【NVIDIA】 NVIDIA Container Toolkit v1.19.1 — OCI 模块超深度分析之三
云原生·容器·架构·kubernetes·nvidia
阿里云云原生1 天前
让 AI Agent 看见正在发生的业务,阿里云 EventHouse 正式商业化
云原生
AOwhisky1 天前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发
微三云 - 廖会灵 (私域系统开发)1 天前
电商系统从单体到微服务拆分实践:拆什么、怎么拆、拆完后怎么办
微服务·云原生·架构
前端Baymax1 天前
K8s PodCrashLoopBackOff假阳性排查
云原生·容器·kubernetes