小编Alb*_*rto的帖子

K8s Operator 使用事件过滤器监听秘密更改

几个月前我们创建了一个控制器,它使用 kubebuilder 运行得很好。

\n

几周前,我们将 \xe2\x80\x9clistener\xe2\x80\x9d 添加到秘密中,当秘密更改时(秘密属性)\n应该调用协调,问题是它有时有效有时无效, (您更改秘密应用它并且协调不会发生\xe2\x80\x99t),我们正在为完全相同的秘密文件执行此操作

\n

我们尝试了几天来找到根本原因,但没有成功,(我们将k8s.io/client-go v0.23.4和 更改为v0.22.3,现在 v0.22.1这才起作用。\n知道问题可能是什么吗?任何提示都会有帮助。或者我们有任何其他方法可以做到这一点可以尝试一下。

\n
func (r *vtsReconciler) SetupWithManager(mgr ctrl.Manager) error {\n    manager := ctrl.NewControllerManagedBy(mgr).\n        For(&vts.str).\n        WithEventFilter(predicate.Or(predicate.AnnotationChangedPredicate{}))\n    manager = manager.Watches(&source.Kind{Type: &v1.Secret{}}, handler.EnqueueRequestsFromMapFunc(func(a client.Object) []reconcile.Request {\n        return r.SecretRequests.SecretFinder(a.GetName())\n    }))\n    return manager.Complete(r)\n}\n\n\n\nfunc (secm *SecretMapper) SecretFinder(name string) []reconcile.Request {\n    v := cli.ObjectKey{Name: name}\n    return secm.SecMap[v.String()]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

go kubernetes kubernetes-secrets kubebuilder

6
推荐指数
1
解决办法
1854
查看次数

使用 kubeconfig 进行 helm 客户端安装 panding

我使用 helm SDK并且它工作得很好,对于我使用有效的假选项(对于 kubeconfig)的测试,

现在,当我更新kubeconfig到我的集群时,我注意到在安装过程中图表停留状态挂起,并且它永远停留在这个状态直到我删除并再次安装它,(手动)我的问题是如何解决这个问题所述 头盔SDK(通过代码只)https://pkg.go.dev/helm.sh/helm/v3

我的意思是稍等片刻,如果状态在 3 分钟后挂起,请删除并重新安装...或在此之前尝试升级

这是代码

    kubeConfigPath, err := findKubeConfig()
    if err != nil {
        fmt.Println()
    }

    actionConfig := &action.Configuration{
    }

    cfg := cli.New()
    clientGetter := genericclioptions.NewConfigFlags(false)
    clientGetter.KubeConfig = &kubeConfigPath

    actionConfig.Init(clientGetter, "def", "memory", log.Printf)
    if err != nil {
        fmt.Println(err)
    }

    chart, err := installation.InstallChart(cfg, "test", "chart1", "./charts/dns", nil, actionConfig)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(chart)
}

func findKubeConfig() (string, error) { …
Run Code Online (Sandbox Code Playgroud)

go kubernetes kubernetes-helm

5
推荐指数
1
解决办法
400
查看次数

使用 Rust 从字节获取 json 值

我需要从值中获取名称base64,我尝试了以下操作,但无法解析它并获取名称属性,知道我该怎么做吗?

extern crate base64;
use serde_json::Value;
fn main() {


    let v = "eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ";

    let bytes = base64::decode(v).unwrap();
    println!("{:?}", bytes);
   
   
    let v: Value = serde_json::from_slice(bytes);
    

}
Run Code Online (Sandbox Code Playgroud)

该值代表 json,例如

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
Run Code Online (Sandbox Code Playgroud)

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=1df0f644a139f8d526a44af8abf78e8e

最后我需要打印"name": "John Doe"

这是解码后的值

在此输入图像描述

byte json rust

5
推荐指数
2
解决办法
6412
查看次数

使用 yq 从 YAML 映射对象中删除某些字段

我需要为 yaml 文件做一些棘手的事情,这就是它之前的样子

apiVersion: v1
items:
  - apiVersion: core.k8s.com/v1alpha1
    kind: Test
    metadata:
      creationTimestamp: '2022-02-097T19:511:11Z'
      finalizers:
        - cuv.ssf.com
      generation: 1
      name: bar
      namespace: foo
      resourceVersion: '12236'
      uid: 0117657e8
    spec:
      certificateIssuer:
        acme:
          email: myemail
      provider:
        credentials: dst
        type: foo
      domain: vst
      type: bar
    status:
      conditions:
        - lastTransitionTime: '2022-02-09T19:50:12Z'
          message: test
          observedGeneration: 1
          reason: Ready
          status: 'True'
          type: Ready
      lastOperation:
        description: test
        state: Succeeded
        type: Reconcile
Run Code Online (Sandbox Code Playgroud)

https://codebeautify.org/yaml-validator/y22fe4943

我需要删除部分下的所有字段metadata,棘手的部分是仅保留name并且namespace 除了完全删除该status部分之外,它应该如下所示

  apiVersion: v1
    items:
      - apiVersion: …
Run Code Online (Sandbox Code Playgroud)

yaml yq

5
推荐指数
1
解决办法
5048
查看次数

go-generics :将实现 client.Object 的对象列表转换为列表

我们有以下类型,它是通用资源列表,该结构有 4 个通用参数(全部与对象列表指针类型相关),但我找不到减少它的方法。

import(
  ...
   "sigs.k8s.io/controller-runtime/pkg/client"
) 

type GenResourceLister[OBJ any, OBJPTR interface {
    client.Object
    *OBJ
}, LIST interface {
    GetItems() []OBJ
}, LISTPTR interface {
    client.ObjectList
    *LIST
}] struct{}
Run Code Online (Sandbox Code Playgroud)

以下函数有 2 个泛型参数,其中一个是切片参数的元素类型,但我认为另一个(其指针类型)会阻止类型推断,因此必须在每次调用时指定参数。我找不到摆脱它们的方法。

// itemsToObjectList converts a list of objects whose pointer
// type implements client.Object to a list of client.Object

func itemsToObjectList[T any, TPTR interface {
    client.Object
    *T
}](items []T) []client.Object {
    objs := make([]client.Object, 0, len(items))
    for _, resource := range items {
        resource := resource …
Run Code Online (Sandbox Code Playgroud)

generics polymorphism go kubernetes-go-client

5
推荐指数
0
解决办法
725
查看次数

K8S 提供 kubeconfig 作为字节数组 genericclioptions

有什么方法可以传递到kubeconfig 的&genericclioptionsk8s 客户端吗?bytearray

https://pkg.go.dev/k8s.io/cli-runtime/pkg/genericclioptions

目前, genericclioptionsits默认情况下从环境/路径到文件,但我需要将其作为bytearray参数显式传递,而不是对文件或环境的引用,有没有办法做到这一点?

我尝试了以下方法,但它不起作用:

package main

import (
    "bytes"
    "github.com/spf13/pflag"
    "k8s.io/cli-runtime/pkg/genericclioptions"
)

func main() {
    kubeconfigData := []byte("my_kubeconfig")

    // create a new flag set and bind the kubeconfig flag
    flags := pflag.NewFlagSet("default", pflag.ExitOnError)
    kubeconfigFlag := flags.String("kubeconfig", "", "absolute path to the kubeconfig file")
    flags.Parse([]string{})

    // set the kubeconfig flag to the data in the byte array
    *kubeconfigFlag = "-"
    configOverrides := &genericclioptions.ConfigOverrides{ClusterDefaults: genericclioptions.NewClusterDefaults()}
    configLoader := genericclioptions.NewConfigFlags(false).WithOverrideFlags(configOverrides)
    configLoader.KubeConfig = bytes.NewBuffer(kubeconfigData)

    // ... …
Run Code Online (Sandbox Code Playgroud)

azure go google-cloud-platform kubernetes

5
推荐指数
1
解决办法
380
查看次数

从 k8s 程序读取 configmap

I\xe2\x80\x99ve 一个 go 程序,需要访问配置映射,当使用以下 clusterRole 时,我们得到错误禁止

\n
kind: ClusterRole\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n name: s-access\n labels:\n  app.kubernetes.io/instance: te-mger\nrules:\n - verbs:\n   - get\n   - watch\n   - list\n   - update\n  apiGroups:\n   - dpt.com\n  resources:\n   - pods\n
Run Code Online (Sandbox Code Playgroud)\n

现在,当我将其更改为以下内容时,它就可以工作了(添加 apiGroups \'\')并configmaps添加到resources\n由于这是一种解决方法,我们应该为长期解决方案做什么

\n
kind: ClusterRole\napiVersion: rbac.authorization.k8s.io/v1\nmetadata:\n name: s-access\n labels:\n  app.kubernetes.io/instance: te-mger\nrules:\n - verbs:\n   - get\n   - watch\n   - list\n   - update\n  apiGroups:\n   - dpt.com\n   - \'\'\n  resources:\n   - pods\n   - configmaps\n
Run Code Online (Sandbox Code Playgroud)\n

我阅读了以下内容,但没有帮助https://kubernetes.io/docs/reference/access-authn-authz/rbac/

\n

我想避免使用apiGroups: \'\'

\n

azure kubernetes azure-aks

3
推荐指数
1
解决办法
248
查看次数

从 cronjob 中删除 ns 中的所有 pod

我想在特定的 ns 内有一个 cron 作业,它将能够删除所有命名空间 pod,我尝试如下

\n
apiVersion: batch/v1\nkind: CronJob\nmetadata:\n  name: restart\n  namespace: foo\nspec:\n  concurrencyPolicy: Forbid\n  schedule: "*/1 * * * *"\n  jobTemplate:\n    spec:\n      backoffLimit: 2\n      activeDeadlineSeconds: 600\n      template:\n        spec:\n          restartPolicy: Never\n          containers:\n            - name: kubectl\n              image: bitnami/kubectl:1.22.3\n              command:\n                - 'kubectl'\n                - 'delete'\n                - '--all'\n                - 'pods'\n                - '--namespace=foo'\n
Run Code Online (Sandbox Code Playgroud)\n

我收到一个错误,知道如何解决它吗?\n这是一个 deamonset 的 Pod(位于 ns foo 中),我想从这个命名空间中删除它foo,知道吗?

\n

这是错误:

\n
\n

`来自服务器的错误(禁止):pod 被禁止:用户\n"system:serviceaccount:foo:default" 无法在命名空间 "foo \xe2\x94\x82\xe2\ 中的 API\ngroup "" 中列出资源 "pods" x94\x82 流已关闭 EOF for\nfoo/restart-27415740--1-495xg (kubectl)

\n
\n

cron amazon-web-services kubernetes

1
推荐指数
1
解决办法
765
查看次数

k8s cron作业运行多次

我有以下 cronjob,它删除特定命名空间中的 pod。

我按原样运行作业,但似乎作业不会每 20 分钟运行一次,而是每隔几(2-3)分钟运行一次,我需要的是,作业每 20 分钟就会开始删除 pod指定的命名空间然后终止,知道这里可能出了什么问题吗?

apiVersion: batch/v1
kind: CronJob
metadata:
  name: restart
spec:
  schedule: "*/20 * * * *"
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 0
  failedJobsHistoryLimit: 0
  jobTemplate:
    spec:
      backoffLimit: 0
      template:
        spec:
          serviceAccountName: sa
          restartPolicy: Never
          containers:
            - name: kubectl
              image: bitnami/kubectl:1.22.3
              command:
                - /bin/sh
                - -c
                - kubectl get pods -o name | while read -r POD; do kubectl delete "$POD"; sleep 30; done
Run Code Online (Sandbox Code Playgroud)

我真的不知道为什么会发生这种情况......

也许删除 pod 会崩溃

更新

我尝试了以下操作,但没有删除任何 Pod,知道吗?

apiVersion: batch/v1
kind: CronJob
metadata: …
Run Code Online (Sandbox Code Playgroud)

bash shell amazon-web-services kubernetes

1
推荐指数
1
解决办法
1532
查看次数