背景
在 Kubernetes 之上部署 OpenStack 是一件較為困難的事情赋续, OpenStack 較為復(fù)雜呀非,服務(wù)各不相同卻又相互協(xié)作泪喊。將 OpenStack 所有服務(wù)容器化并部署在Kubernetes 中蝇刀,所需要使用的 Kubernetes 資源更是多種多樣譬淳。因此從Kubernetes 的角度來看 OpenStack 是一個(gè)十分復(fù)雜的應(yīng)用募舟。
而 Helm 最大的優(yōu)勢(shì)就是對(duì)復(fù)雜應(yīng)用的管理祠斧。想要在 Kubernetes 之上構(gòu)建 OpenStack 體系,關(guān)鍵是進(jìn)行 Chart 的開發(fā)拱礁,Chart 包含了創(chuàng)建 OpenStack 應(yīng)用所需的所有資源和資源之間的相互關(guān)系琢锋。
而 OpenStack-Helm 這一項(xiàng)目最主要的工作就是進(jìn)項(xiàng) OpenStack Helm Chart 的開發(fā)。
下面鏈接為官方的openstack-helm chart的實(shí)現(xiàn)
https://opendev.org/openstack/openstack-helm
https://opendev.org/openstack/openstack-helm-infra
openstack endpoint類型
Endpoint是一個(gè)可以通過網(wǎng)絡(luò)來訪問和定位某個(gè)Openstack service的地址呢灶,通常是一個(gè)URL吴超。
openstack endpoint有三種類型admin,internal鸯乃,public鲸阻。
admin:給admin用戶使用
internal:內(nèi)部使用, OpenStack內(nèi)部服務(wù)使用來跟別的服務(wù)通信
public:互聯(lián)網(wǎng)用戶可以訪問的地址
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層鸟悴,通過創(chuàng)建 Service,可以為一組具有相同功能的容器ceilometer-api應(yīng)用提供一個(gè)統(tǒng)一的內(nèi)部入口地址宏蛉,實(shí)現(xiàn)負(fù)載均衡遣臼。
{{- 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一個(gè)非常重要的Controller,它類似一個(gè)路由轉(zhuǎn)發(fā)的組件拾并,可以讓外界訪問Kubernetes內(nèi)部的Service揍堰。支持7層適用于將public的endpoint暴露給外面的互聯(lián)網(wǎng)用戶使用
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