我已经使用 Kubernetes 和 Helm 一段时间了,现在第一次遇到 Kustomize。
但是 Kustomize 和 Helm 到底有什么区别呢?
两者是否只是用于捆绑 K8s 元素(例如服务、部署等)的不同解决方案?或者同时使用 Helm 和 Kustomize 是否有意义?
patchesStrategicMerge我在 kustomization.yaml 文件中看到,但没有清楚地了解它,比如它的需要是什么或者我们为什么需要它?
自定义.yaml
resources:
- a.yaml
patchesStrategicMerge:
- b.yaml
- c.yaml
Run Code Online (Sandbox Code Playgroud)
我经历过这个: https: //kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/#customizing和 https://github.com/kubernetes/community/blob/master/contributors/devel/sig- api-machinery/strategic-merge-patch.md
我有一个像这样使用 kustomize 的简单项目:
base/
namespace.yaml
kustomization.yaml
service.yaml
Run Code Online (Sandbox Code Playgroud)
与kustomization.yaml是:
resources:
- namespace.yaml
- service.yaml
namespace: my_wanted_namespace
Run Code Online (Sandbox Code Playgroud)
并且namespace.yaml是:
apiVersion: v1
kind: Namespace
metadata:
name: default
Run Code Online (Sandbox Code Playgroud)
问题是,当我这样做时: kustomize build ./base
我有这个:
apiVersion: v1
kind: Namespace
metadata:
name: default
Run Code Online (Sandbox Code Playgroud)
我怎么会有
apiVersion: v1
kind: Namespace
metadata:
name: my_wanted_namespace
Run Code Online (Sandbox Code Playgroud)
谢谢。
根据我阅读的文档,有 3 种修补方法:
patchesStrategicMerge和之间的区别patchesJson6902很明显。patchesStrategicMerge需要 kubernetes 资源的重复结构来标识正在修补的基本资源,然后是规范的修改部分以指示更改(或删除)的内容。
patchesJson6902 定义了一个 'target' 属性,用于指定 kubernetes 资源和一个 'path' 属性,该属性指定资源中的哪个属性被修改、添加或删除。
但是,什么是我不明白之间的差别patches和patchesJson6902。它们在性质上似乎非常相似。两者都指定了一个“目标”属性和描述被修改内容的操作对象。
我注意到的唯一区别是patches不需要“组”属性,而需要patchesJson6902;原因不明。
那么为什么两者之间存在差异呢?我如何确定使用哪一个?
在我们的项目中,也使用 Kustomize,我们的基本deployment.yaml文件如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:IMAGE_TAG # <------------------------------
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
然后我们用它sed来替换IMAGE_TAG我们想要部署的镜像版本。
是否有更复杂的方法来执行此操作,而不是使用 编辑文本 yaml 文件sed?
我正在尝试查看是否有一种方法可以将 kustomize patchTransformer 应用到 pod 中的特定容器,而不是使用其数组索引。例如,如果我的 pod 中有 3 个容器 (0, 1, 2),并且我想修补容器“1”,我通常会执行以下操作:
patch: |-
- op: add
path: /spec/containers/1/command
value: ["sh", "-c", "tail -f /dev/null"]
Run Code Online (Sandbox Code Playgroud)
这在很大程度上取决于集装箱订单保持静态。如果容器“1”由于某种原因被删除,数组将被重新洗牌,容器“2”突然变成容器“1”,使我的补丁不再适用。
有没有办法按名称修补,或定位标签/注释,或其他机制?
path: /spec/containers/${NAME_OF_CONTAINER}/command
Run Code Online (Sandbox Code Playgroud)
任何见解都将受到高度赞赏。
我正在使用 ArgoCD,我想跟踪不同子目录下的文件。我已将路径设置为 ./root_directory,但我还想跟踪 root_directory 子目录中的文件。例如 /root_directory/dir1、/root_directory/dir2,还有 /root_directory/dir1/dir1.1 ecc.. 我该怎么做?
感谢您的帮助
我正在尝试为特定环境示例构建清单文件:- 测试,我想重新使用基本清单文件,如下所述。
k8s/kustomize/overlays/test/kustomization.yaml
commonLabels:
variant: test
app: test-app
resources:
- ../../base/deployment.yaml
- ../../base/service.yaml
- ../../base/configmap.yaml
- ../../base/secret.yaml
- namespace.yaml
namespace: app-test
patchesStrategicMerge:
- secret.yaml
- configmap.yaml
Run Code Online (Sandbox Code Playgroud)
但是当我运行命令时出现以下错误 - kustomize build k8s/kustomize/overlay/test
2020/02/19 16:04:36 got file 'deployment.yaml', but 'path/k8s/kustomize/base/deployment.yaml' must be a directory to be a root
Error: accumulating resources: accumulating resources from '../../base/deployment.yaml': security; file 'path/k8s/kustomize/base/deployment.yaml' is not in or below 'path/k8s/kustomize/overlay/test'
Run Code Online (Sandbox Code Playgroud)
P.S: kustomize version is - Version: {KustomizeVersion:3.2.0 GitCommit:a3103f1e62ddb5b696daa3fd359bb6f2e8333b49 BuildDate:2019-09-18T18:31:04+01:00 GoOs:darwin GoArch:amd64}
Run Code Online (Sandbox Code Playgroud)
我是 kubernetes 和 kustomize 的新手。请帮帮我好吗?
我通常使用 kubectl 提供的 kustomize。我想知道是否有办法找到 kubectl 附带的 kustomize 版本?
所以我已经在 GKE 中部署了这个项目,并且我正在尝试从 github 操作制作 CI/CD。所以我添加了工作流程文件,其中包含
name: Build and Deploy to GKE
on:
push:
branches:
- main
env:
PROJECT_ID: ${{ secrets.GKE_PROJECT }}
GKE_CLUSTER: ${{ secrets.GKE_CLUSTER }} # Add your cluster name here.
GKE_ZONE: ${{ secrets.GKE_ZONE }} # Add your cluster zone here.
DEPLOYMENT_NAME: ems-app # Add your deployment name here.
IMAGE: ciputra-ems-backend
jobs:
setup-build-publish-deploy:
name: Setup, Build, Publish, and Deploy
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout
uses: actions/checkout@v2
# Setup gcloud CLI
- uses: google-github-actions/setup-gcloud@94337306dda8180d967a56932ceb4ddcf01edae7
with:
service_account_key: ${{ …Run Code Online (Sandbox Code Playgroud) kubernetes google-kubernetes-engine kubectl github-actions kustomize
kustomize ×10
kubernetes ×9
kubectl ×2
patch ×2
yaml ×2
argocd ×1
arrays ×1
containers ×1
gitops ×1
json-patch ×1
openshift ×1