组件 Kubernetes 属性管理
本文介绍如何给 Rainbond 上的组件设置 Kubernetes 特殊属性, 例如:privileged、affinity 等等。
在组件内 -> 其他设置中可找到 Kubernetes 属性并进行配置。
Kubernetes 属性
与 Kubenetes 中定义属性不同的是,该属性为 YAML 格式时,开头无需填写属性名。
nodeSelector
用于将Pod调度到匹配Label的Node上,如果没有匹配的标签会调度失败。
labels
是附加到k8s对象上的键值对标识,支持高效的查找和监听。作用就是字面意思,给k8s对象打上标签,我们可以使用标签来选择对象。
volumes
数据的持久化存储,volumes 在 k8s 中定义时的格式为:
volumes:
  - name: config-vol
    configMap:
      name: log-config
      items:
        - key: log_level
          path: log_level
在 Rainbond 上添加属性时不需要在开头定义 volumes,如以下格式:
- name: config-vol
  configMap:
    name: log-config
    items:
      - key: log_level
        path: log_level
volumeMounts
挂载 volumes,volumeMounts 在k8s中定义时的格式为:
volumeMounts:        #容器内挂载点
  - mountPath: /data
    name: redis-data        #必须有名称
在 Rainbond 上添加属性时不需要在开头定义 volumeMounts,如以下格式:
- mountPath: /data
  name: redis-data
affinity
详细信息可参考k8s官方文档 https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node/
亲和性调度,affinity在k8s中定义时的格式为:
affinity:
  nodeAffinity:  # 作用域:Pod和Node之间
    requiredDuringSchedulingIgnoredDuringExecution:  # Node亲和性-硬策略
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: NotIn
          values:
          - node3
在 Rainbond 上添加属性时不需要在开头定义 affinity,如以下格式:
nodeAffinity:  # 作用域:Pod和Node之间
  requiredDuringSchedulingIgnoredDuringExecution:  # Node亲和性-硬策略
    nodeSelectorTerms:
    - matchExpressions:
      - key: kubernetes.io/hostname
        operator: NotIn
        values:
        - node3
tolerations
详细信息可参考k8s官方文档 https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/
容忍度,tolerations 在 k8s 中定义时的格式为:
tolerations:
  - key: "key1"
    operator: "Equal"
    value: "value1"
    effect: "NoSchedule"
    tolerationSeconds: 3600
  - key: "key1"
    operator: "Equal"
    value: "value1"
    effect: "NoExecute"
在 Rainbond 上添加属性时不需要在开头定义 tolerations,如以下格式:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"
  tolerationSeconds: 3600
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoExecute"
serviceAccountName
配置服务账户,详细信息可参考k8s官方文档 https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-service-account/
privileged
决定是否 Pod 中的某容器可以启用特权模式。 默认情况下,容器是不可以访问宿主上的任何设备的,不过一个“privileged(特权的)” 容器则被授权访问宿主上所有设备。 这种容器几乎享有宿主上运行的进程的所有访问权限。
env
详细信息可参考 k8s 官方文档 https://kubernetes.io/zh-cn/docs/tasks/inject-data-application/define-environment-variable-container/
环境变量,env 在 k8s 中定义时的格式为:
env:
- name: Version
  value: v5.8
- name: NGINX_USERNAEM
  valueFrom:
    secretKeyRef:
      name: nginx-secret
      key: username
      optional: false
- name: NGINX_PASSWORD
  valueFrom:
    secretKeyRef:
      name: nginx-secret
      key: password
      optional: false
- name: MY_POD_IP
  valueFrom:
    fieldRef:
      fieldPath: status.podIP
在 Rainbond 上添加属性时不需要在开头定义 env,如以下格式:
- name: Version
  value: v5.8
- name: NGINX_USERNAEM
  valueFrom:
    secretKeyRef:
      name: nginx-secret
      key: username
      optional: false
- name: NGINX_PASSWORD
  valueFrom:
    secretKeyRef:
      name: nginx-secret
      key: password
      optional: false
- name: MY_POD_IP
  valueFrom:
    fieldRef:
      fieldPath: status.podIP