Exec 插件示例

本教程只是一个快速开始的示例,完整的插件文档请看:

本示例将使用 bash 编写了一个简单的 exec 插件,用来生成一个 。

尝试本教程不会破坏你的当前设置。

环境要求

  • linux
  • git
  • curl
  • Go 1.13

编写 kustomization

新建一个目录来保存所有的配置:

  1. MYAPP=$DEMO/myapp
  2. mkdir -p $MYAPP

编写一个 Deployment 配置:

  1. cat <<'EOF' >$MYAPP/deployment.yaml
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: the-deployment
  6. spec:
  7. replicas: 3
  8. template:
  9. spec:
  10. containers:
  11. - name: the-container
  12. image: monopole/hello:1
  13. "--port=8080",
  14. "--date=$(THE_DATE)",
  15. "--enableRiskyFeature=$(ENABLE_RISKY)"]
  16. ports:
  17. - containerPort: 8080
  18. env:
  19. - name: THE_DATE
  20. configMapKeyRef:
  21. name: the-map
  22. key: today
  23. - name: ALT_GREETING
  24. valueFrom:
  25. configMapKeyRef:
  26. name: the-map
  27. key: altGreeting
  28. - name: ENABLE_RISKY
  29. valueFrom:
  30. configMapKeyRef:
  31. name: the-map
  32. key: enableRisky
  33. EOF

编写一个 service 配置:

  1. cat <<EOF >$MYAPP/service.yaml
  2. kind: Service
  3. apiVersion: v1
  4. metadata:
  5. spec:
  6. type: LoadBalancer
  7. ports:
  8. - protocol: TCP
  9. port: 8666
  10. targetPort: 8080
  11. EOF

这个配置文件的内容也是 k8s 资源对象。其中 和 kind 字段的值用于在文件系统中查找插件代码(稍后会对此进行更多介绍)。

  1. cat <<'EOF' >$MYAPP/cmGenerator.yaml
  2. apiVersion: myDevOpsTeam
  3. kind: SillyConfigMapGenerator
  4. metadata:
  5. name: whatever
  6. argsOneLiner: Bienvenue true
  7. EOF

最后在 kustomization 文件中引用以上所有内容:

检查这些文件

  1. ls -C1 $MYAPP

插件必须位于特定的目录,以便 Kustomize 能够找到它们。

该示例将使用临时目录:

  1. PLUGIN_ROOT=$DEMO/kustomize/plugin

在上面定义的插件配置 $MYAPP/cmGenerator.yaml 中指定:

  1. MY_PLUGIN_DIR=$PLUGIN_ROOT/myDevOpsTeam/sillyconfigmapgenerator
  2. mkdir -p $MY_PLUGIN_DIR

插件的目录结构为: apiVersion 的 value/小写 kind 的 value

插件拥有自己的目录,不但可以保存插件代码,还可以保存测试代码以需要的补充数据文件。

编写插件

插件有 execGo 两种.

编写一个 exec 插件,将其安装到正确的目录,文件名必须与插件的类型匹配(在本例中为 SillyConfigMapGenerator):

根据定义,exec 插件必须是可执行的:

  1. chmod a+x $MY_PLUGIN_DIR/SillyConfigMapGenerator

根据安装 kustomize:

  1. curl -s "https://raw.githubusercontent.com/\
  2. kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
  3. mkdir -p $DEMO/bin
  4. mv kustomize $DEMO/bin

检查目录结构

    1. XDG_CONFIG_HOME=$DEMO $DEMO/bin/kustomize build --enable_alpha_plugins $MYAPP