组件 Kubernetes 属性管理

本文介绍如何给 Rainbond 上的组件设置 Kubernetes 特殊属性,例如:privileged、affinity 等等。

在组件内 -> 其他设置中可找到 Kubernetes 属性并进行配置。

Kubernetes 属性

与 Kubenetes 中定义属性不同的是,该属性为 YAML 格式时,开头无需填写属性名。

nodeSelector

用于将Pod调度到匹配Label的Node上,如果没有匹配的标签会调度失败。

labels

是附加到k8s对象上的键值对标识,支持高效的查找和监听。作用就是字面意思,给k8s对象打上标签,我们可以使用标签来选择对象。

volumes

数据的持久化存储,volumes 在 k8s 中定义时的格式为:

  1. volumes:
  2. - name: config-vol
  3. configMap:
  4. name: log-config
  5. items:
  6. - key: log_level
  7. path: log_level

在 Rainbond 上添加属性时不需要在开头定义 volumes,如以下格式:

  1. - name: config-vol
  2. configMap:
  3. name: log-config
  4. items:
  5. - key: log_level
  6. path: log_level

volumeMounts

挂载 volumes,volumeMounts 在k8s中定义时的格式为:

  1. volumeMounts: #容器内挂载点
  2. - mountPath: /data
  3. name: redis-data #必须有名称

在 Rainbond 上添加属性时不需要在开头定义 volumeMounts,如以下格式:

  1. - mountPath: /data
  2. name: redis-data

affinity

详细信息可参考k8s官方文档 https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node/

亲和性调度,affinity在k8s中定义时的格式为:

  1. affinity:
  2. nodeAffinity: # 作用域:Pod和Node之间
  3. requiredDuringSchedulingIgnoredDuringExecution: # Node亲和性-硬策略
  4. nodeSelectorTerms:
  5. - matchExpressions:
  6. - key: kubernetes.io/hostname
  7. operator: NotIn
  8. values:
  9. - node3

在 Rainbond 上添加属性时不需要在开头定义 affinity,如以下格式:

  1. nodeAffinity: # 作用域:Pod和Node之间
  2. requiredDuringSchedulingIgnoredDuringExecution: # Node亲和性-硬策略
  3. nodeSelectorTerms:
  4. - matchExpressions:
  5. - key: kubernetes.io/hostname
  6. operator: NotIn
  7. values:
  8. - node3

tolerations

详细信息可参考k8s官方文档 https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/

容忍度,tolerations 在 k8s 中定义时的格式为:

  1. tolerations:
  2. - key: "key1"
  3. operator: "Equal"
  4. value: "value1"
  5. effect: "NoSchedule"
  6. tolerationSeconds: 3600
  7. - key: "key1"
  8. operator: "Equal"
  9. value: "value1"
  10. effect: "NoExecute"

在 Rainbond 上添加属性时不需要在开头定义 tolerations,如以下格式:

  1. - key: "key1"
  2. operator: "Equal"
  3. value: "value1"
  4. effect: "NoSchedule"
  5. tolerationSeconds: 3600
  6. - key: "key1"
  7. operator: "Equal"
  8. value: "value1"
  9. 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 中定义时的格式为:

  1. env:
  2. - name: Version
  3. value: v5.8
  4. - name: NGINX_USERNAEM
  5. valueFrom:
  6. secretKeyRef:
  7. name: nginx-secret
  8. key: username
  9. optional: false
  10. - name: NGINX_PASSWORD
  11. valueFrom:
  12. secretKeyRef:
  13. name: nginx-secret
  14. key: password
  15. optional: false
  16. - name: MY_POD_IP
  17. valueFrom:
  18. fieldRef:
  19. fieldPath: status.podIP

在 Rainbond 上添加属性时不需要在开头定义 env,如以下格式:

  1. - name: Version
  2. value: v5.8
  3. - name: NGINX_USERNAEM
  4. valueFrom:
  5. secretKeyRef:
  6. name: nginx-secret
  7. key: username
  8. optional: false
  9. - name: NGINX_PASSWORD
  10. valueFrom:
  11. secretKeyRef:
  12. name: nginx-secret
  13. key: password
  14. optional: false
  15. - name: MY_POD_IP
  16. valueFrom:
  17. fieldRef:
  18. fieldPath: status.podIP

shareProcessNamespace

在 Pod 中的容器之间共享进程命名空间

详细信息可参考k8s官方文档 https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/share-process-namespace/

dnsPolicy

Pod的DNS策略, 可以逐个 Pod 来设定。目前 Kubernetes 支持以下特定 Pod 的 DNS 策略

Default: Pod 从运行所在的节点继承名称解析配置

ClusterFirst: 与配置的集群域后缀不匹配的任何 DNS 查询(例如 “www.kubernetes.io”) 都将转发到从节点继承的上游名称服务器。集群管理员可能配置了额外的存根域和上游 DNS 服务器。

ClusterFirstWithHostNet: 对于以 hostNetwork 方式运行的 Pod,应显式设置其 DNS 策略

None: 此设置允许 Pod 忽略 Kubernetes 环境中的 DNS 设置。 注: Pod 会使用其 dnsConfig 字段所提供的 DNS 设置

详细信息可参考k8s官方文档 https://kubernetes.io/zh-cn/docs/concepts/services-networking/dns-pod-service/

dnsConfig 配置在 k8s 中定义时的格式为:

  1. dnsConfig:
  2. nameservers:
  3. - 1.2.3.4
  4. searches:
  5. - ns1.svc.cluster-domain.example
  6. - my.dns.search.suffix
  7. options:
  8. - name: ndots
  9. value: "2"
  10. - name: edns0

在 Rainbond 上添加属性时不需要在开头定义 dnsConfig,如以下格式:

  1. nameservers:
  2. - 1.2.3.4
  3. searches:
  4. - ns1.svc.cluster-domain.example
  5. - my.dns.search.suffix
  6. options:
  7. - name: ndots
  8. value: "2"
  9. - name: edns0

resources

为 Pod 和容器管理资源

详细信息可参考k8s官方文档 https://kubernetes.io/zh-cn/docs/concepts/configuration/manage-resources-containers/

resources 在 k8s 中定义时的格式为:

  1. resources:
  2. requests:
  3. memory:
  4. limits:
  5. memory:

在 Rainbond 上添加属性时不需要在开头定义 resources,如以下格式:

  1. requests:
  2. memory:
  3. limits:
  4. memory:

hostIPC

控制容器是否可以共享主机的IPC名称空间

lifecycle

为容器的生命周期事件设置处理函数

详细信息可参考k8s官方文档 https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/

lifecycle 在 k8s 中定义时的格式为:

  1. lifecycle:
  2. ostStart:
  3. exec:
  4. command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
  5. preStop:
  6. exec:
  7. command: ["/bin/sh","-c","nginx -s quit; while killall -0 nginx; do sleep 1; done"]

在 Rainbond 添加属性时不需要在开头定义 lifecycle,如以下格式:

  1. postStart:
  2. exec:
  3. command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
  4. preStop:
  5. exec:
  6. command: ["/bin/sh","-c","nginx -s quit; while killall -0 nginx; do sleep 1; done"]