2

我需要将独立补丁定义为 YAML。

更具体地说,我想做以下事情:

kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "registry-my-registry"}]}'

问题是我不能使用kubectl patch。我正在使用带有 Flux 的 GitOps 工作流程,而我要修补的资源是在 Flux 之外创建的默认资源。

换句话说,我需要做与上面的命令相同的事情,但kubectl apply只需要:

kubectl apply patch.yaml

我无法弄清楚您是否可以定义这样的补丁。

关键是我无法预测新集群上默认秘密令牌的名称(因为名称是随机的,即default-token-uudge

4

2 回答 2

1
  • 从资源配置中设置和删除的字段通过以下方式合并到资源中Kubectl apply
  • 如果 Resource 已经存在,Apply 通过将本地 Resource Config 合并到远程 Resources 来更新 Resources
  • 从资源配置中删除的字段将从远程资源中删除

您可以了解有关Kubernetes 字段合并语义的更多信息。

  • 如果您的限制是不知道秘密default-token-xxxxx名称,没问题,只需将该字段保留在您的 yaml 之外。

  • 只要 yaml 有足够的字段来识别目标资源(名称、种类、命名空间),它就会添加/编辑您设置的字段。

  • 我创建了一个集群(本例中为 minikube,但它可以是任何集群)并检索当前的默认 serviceAccount:

$ kubectl get serviceaccount default -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: "2020-07-01T14:51:38Z"
  name: default
  namespace: default
  resourceVersion: "330"
  selfLink: /api/v1/namespaces/default/serviceaccounts/default
  uid: a9e5ff4a-8bfb-466f-8873-58c2172a5d11
secrets:
- name: default-token-j6zx2
  • 然后,我们使用要添加的内容创建一个 yaml 文件:
$ cat add-image-pull-secrets.yaml 
apiVersion: v1
kind: ServiceAccount
metadata:
  name: default
  namespace: default
imagePullSecrets:
 - name: registry-my-registry
  • 现在我们申请并验证:
$ kubectl apply -f add-image-pull-secrets.yaml 
serviceaccount/default configured

$ kubectl get serviceaccount default -o yaml
apiVersion: v1
imagePullSecrets:
- name: registry-my-registry
kind: ServiceAccount
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","imagePullSecrets":[{"name":"registry-my-registry2"}],"kind":"ServiceAccount","metadata":{"annotations":{},"name":"default","namespace":"default"}}
  creationTimestamp: "2020-07-01T14:51:38Z"
  name: default
  namespace: default
  resourceVersion: "2382"
  selfLink: /api/v1/namespaces/default/serviceaccounts/default
  uid: a9e5ff4a-8bfb-466f-8873-58c2172a5d11
secrets:
- name: default-token-j6zx2

如您所见,ImagePullPolicy 已添加到资源中。

我希望它符合您的需求。如果您有任何其他问题,请在评论中告诉我。

于 2020-07-01T15:33:00.387 回答
0

假设您的服务帐户 YAML 如下所示:

$ kubectl get sa demo -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: demo
  namespace: default
secrets:
 - name: default-token-uudge

现在,您要为该服务帐户添加或更改imagePullSecrets。为此,请编辑 YAML 文件并添加imagePullSecrets.

apiVersion: v1
kind: ServiceAccount
metadata:
  name: demo
  namespace: default
secrets:
 - name: default-token-uudge
imagePullSecrets:
 - name: myregistrykey

最后,应用更改:

$ kubectl apply -f service-account.yaml
于 2020-07-01T07:56:36.000 回答