背景
在 Kubernetes 之上部署 OpenStack 是一件较为困难的事情, OpenStack 较为复杂,服务各不相同却又相互协作。将 OpenStack 所有服务容器化并部署在Kubernetes 中,所需要使用的 Kubernetes 资源更是多种多样。因此从Kubernetes 的角度来看 OpenStack 是一个十分复杂的应用。
而 Helm 最大的优势就是对复杂应用的管理。想要在 Kubernetes 之上构建 OpenStack 体系,关键是进行 Chart 的开发,Chart 包含了创建 OpenStack 应用所需的所有资源和资源之间的相互关系。
而 OpenStack-Helm 这一项目最主要的工作就是进项 OpenStack Helm Chart 的开发。
下面链接为官方的openstack-helm chart的实现
https://opendev.org/openstack/openstack-helm
https://opendev.org/openstack/openstack-helm-infra
openstack endpoint类型
Endpoint是一个可以通过网络来访问和定位某个Openstack service的地址,通常是一个URL。
openstack endpoint有三种类型admin,internal,public。
admin:给admin用户使用
internal:内部使用, OpenStack内部服务使用来跟别的服务通信
public:互联网用户可以访问的地址
openstack endpoint list | grep ceilometer
| 9ac7c542efd94b628717c5fb50391042 | RegionOne | ceilometer | metering | True | internal | http://ceilometer-api.openstack.svc.cluster.local:8777/ |
| a071114cb8c24a67816424f02f856100 | RegionOne | ceilometer | metering | True | public | http://ceilometer.openstack.svc.cluster.local:80/ |
| ce11aa51d3204050b40b8feaa6686a65 | RegionOne | ceilometer | metering | True | admin | http://ceilometer-api.openstack.svc.cluster.local:8777/ |
在openstack helm中,serivce只支持4层,通过创建 Service,可以为一组具有相同功能的容器ceilometer-api应用提供一个统一的内部入口地址,实现负载均衡。
{{- if .Values.manifests.service_api }}
{{- $envAll := . }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ tuple "metering" "internal" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }}
spec:
ports:
- name: ce-api
port: {{ tuple "metering" "internal" "api" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
{{ if .Values.network.api.node_port.enabled }}
nodePort: {{ .Values.network.api.node_port.port }}
{{ end }}
selector:
{{ tuple $envAll "ceilometer" "api" | include "helm-toolkit.snippets.kubernetes_metadata_labels" | indent 4 }}
{{ if .Values.network.api.node_port.enabled }}
type: NodePort
{{ end }}
{{- end }}
ingress是Kubernetes一个非常重要的Controller,它类似一个路由转发的组件,可以让外界访问Kubernetes内部的Service。支持7层适用于将public的endpoint暴露给外面的互联网用户使用
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
creationTimestamp: "2020-12-27T21:02:38Z"
generation: 1
name: ceilometer
namespace: openstack
resourceVersion: "8378"
selfLink: /apis/extensions/v1beta1/namespaces/openstack/ingresses/ceilometer
uid: b7df080e-1f36-49b7-94f0-8486727f7add
spec:
rules:
- host: ceilometer.openstack.svc.cluster.local
http:
paths:
- backend:
serviceName: ceilometer-api
servicePort: ce-api
path: /
status:
loadBalancer:
ingress:
-ip: 10.20.0.1