Openshift:可靠的Kubernetes发行版

Openshift上使用shell operator创建自己的o

2019-07-12  本文已影响1人  潘晓华Michael
Openshift Shell Operator

Flant公司是一家致力于提供解决所有基础设施问题的解决方案的公司。他们自称是提供DevOps-as-a-Service的服务。

需求

Shell Operator

实现部骤

  1. 创建shell-operator项目
$ oc new-project shell-operator
  1. 为该项目创建serviceAccount monitor-namespaces-acc,将给它授予获取全局namespace的权限
$ cat << EOF | oc create -f -
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: monitor-namespaces-acc

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: monitor-namespaces
rules:
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "watch", "list"]

EOF
$ oc adm policy add-cluster-role-to-user monitor-namespaces -z monitor-namespaces-acc
  1. 创建一个configmap,其中data中的内容为hook脚本
$ cat << EOF | oc create -f -
apiVersion: v1
data:
  shell-hook.sh: |-
    #!/usr/bin/env bash

    if [[ $1 == "--config" ]] ; then
      cat <<EOF
      {"onKubernetesEvent":[
        {
          "name":"OnCreateDeleteNamespace",
          "kind": "namespace",
          "event":["add", "delete"]
        },
        {
          "name":"OnModifiedNamespace",
          "kind": "namespace",
          "event":["update"],
          "jqFilter": ".metadata.labels"
        }
        ]
      }
    EOF
    else
      bindingName=$(jq -r '.[0].binding' $BINDING_CONTEXT_PATH)
      resourceEvent=$(jq -r '.[0].resourceEvent' $BINDING_CONTEXT_PATH)
      resourceName=$(jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH)
      if [[ $bindingName == "OnModifiedNamespace" ]] ; then
        echo "Namespace $resourceName labels were modified"
      else
        if [[ $resourceEvent == "add" ]] ; then
          echo "Namespace $resourceName was created"
        else
          echo "Namespace $resourceName was deleted"
        fi
      fi
    fi
kind: ConfigMap
metadata:
  name: hooks
EOF
  1. 运行shell-operator应用
$ cat << EOF | oc create -f -
apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
  labels:
    run: shell-operator
  name: shell-operator
spec:
  replicas: 1
  selector:
    run: shell-operator
  template:
    metadata:
      labels:
        run: shell-operator
    spec:
      serviceAccount: monitor-namespaces-acc
      containers:
        - image: 'flant/shell-operator:latest-alpine3.9'
          imagePullPolicy: IfNotPresent
          name: shell-operator
          volumeMounts:
            - mountPath: /hooks
              name: hooks-no934
      volumes:
        - configMap:
            defaultMode: 511
            name: hooks
          name: hooks-no934
  triggers:
    - type: ConfigChange
EOF

说明

Shell Operator

验证

  1. 创建一个project/删除该project
$ oc new-project  operator-test
$ oc delete project operator-test
  1. 查看shell-operator的日志
operator日志

总结

$ cat Dockerfile
FROM flant/shell-operator:latest
RUN apk --no-cache add python

钩子代码的环境使用python

#!/usr/bin/env python

参考文章

Shell-operator:用于简化Kubernetes operator的创建

上一篇 下一篇

猜你喜欢

热点阅读