Skip to content

Commit

Permalink
feat: add standalone support with helm chart (#671)
Browse files Browse the repository at this point in the history
* add standalone support with helm chart

Signed-off-by: Ashish Tiwari <[email protected]>

* Update charts/apisix/templates/apisix-config-cm.yml

---------

Signed-off-by: Ashish Tiwari <[email protected]>
Co-authored-by: Abhishek Choudhary <[email protected]>
  • Loading branch information
Revolyssup and shreemaan-abhishek authored Nov 24, 2023
1 parent bbe3bd9 commit e91048d
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 258 deletions.
2 changes: 1 addition & 1 deletion charts/apisix/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ The command removes all the Kubernetes components associated with the chart and
| apisix.customPlugins.plugins[0].configMap | object | `{"mounts":[{"key":"the-file-name","path":"mount-path"}],"name":"configmap-name"}` | plugin codes can be saved inside configmap object. |
| apisix.customPlugins.plugins[0].configMap.mounts | list | `[{"key":"the-file-name","path":"mount-path"}]` | since keys in configmap is flat, mountPath allows to define the mount path, so that plugin codes can be mounted hierarchically. |
| apisix.customPlugins.plugins[0].configMap.name | string | `"configmap-name"` | name of configmap. |
| apisix.deployment.mode | string | `"traditional"` | Apache APISIX deployment mode Optional: traditional, decoupled ref: https://apisix.apache.org/docs/apisix/deployment-modes/ |
| apisix.deployment.mode | string | `"traditional"` | Apache APISIX deployment mode Optional: traditional, decoupled, standalone ref: https://apisix.apache.org/docs/apisix/deployment-modes/ |
| apisix.deployment.role | string | `"traditional"` | Deployment role Optional: traditional, data_plane, control_plane ref: https://apisix.apache.org/docs/apisix/deployment-modes/ |
| apisix.discovery.enabled | bool | `false` | Enable or disable Apache APISIX integration service discovery |
| apisix.discovery.registry | object | `{}` | Registry is the same to the one in APISIX [config-default.yaml](https://github.com/apache/apisix/blob/master/conf/config-default.yaml#L281), and refer to such file for more setting details. also refer to [this documentation for integration service discovery](https://apisix.apache.org/docs/apisix/discovery) |
Expand Down
32 changes: 32 additions & 0 deletions charts/apisix/templates/apisix-config-cm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

{{- if eq .Values.apisix.deployment.mode "standalone" }}
kind: ConfigMap
apiVersion: v1
metadata:
name: apisix.yaml
data:
apisix.yaml: |
routes:
-
uri: /hi
upstream:
nodes:
"127.0.0.1:1980": 1
type: roundrobin
#END
{{- end }}
5 changes: 3 additions & 2 deletions charts/apisix/templates/configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ data:
{{- if eq .Values.apisix.deployment.role "data_plane" }}
role_data_plane:
config_provider: etcd
config_provider: {{- eq .Values.apisix.deployment.mode "standalone" | ternary "yaml" "etcd" | indent 1 }}
{{- end }}
{{- if not (eq .Values.apisix.deployment.role "data_plane") }}
Expand Down Expand Up @@ -339,7 +339,7 @@ data:
{{- end }}
role: viewer
{{- end }}
{{- if not (eq .Values.apisix.deployment.mode "standalone")}}
etcd:
{{- if .Values.etcd.enabled }}
host: # it's possible to define multiple etcd hosts addresses of the same etcd cluster.
Expand Down Expand Up @@ -371,4 +371,5 @@ data:
sni: "{{ .Values.etcd.auth.tls.sni }}"
{{- end }}
{{- end }}
{{- end }}
12 changes: 12 additions & 0 deletions charts/apisix/templates/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,9 @@ spec:
{{- . | toYaml | nindent 12 }}
{{- end }}
image: "{{ .Values.image.repository }}:{{ default .Chart.AppVersion .Values.image.tag }}"
{{- if eq .Values.apisix.deployment.mode "standalone" }}
command: ["sh", "-c","ln -s /apisix-config/apisix.yaml /usr/local/apisix/conf/apisix.yaml && /docker-entrypoint.sh docker-start"]
{{- end }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
{{- if .Values.timezone }}
Expand Down Expand Up @@ -166,6 +169,10 @@ spec:
- -c
- "sleep 30"
volumeMounts:
{{- if eq .Values.apisix.deployment.mode "standalone" }}
- mountPath: /apisix-config
name: apisix-admin
{{- end }}
{{- if .Values.apisix.setIDFromPodUID }}
- mountPath: /usr/local/apisix/conf/apisix.uid
name: id
Expand Down Expand Up @@ -229,6 +236,11 @@ spec:
{{- toYaml .Values.extraInitContainers | nindent 8 }}
{{- end }}
volumes:
{{- if eq .Values.apisix.deployment.mode "standalone" }}
- configMap:
name: apisix.yaml
name: apisix-admin
{{- end }}
- configMap:
name: {{ include "apisix.fullname" . }}
name: apisix-config
Expand Down
2 changes: 1 addition & 1 deletion charts/apisix/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ apisix:

deployment:
# -- Apache APISIX deployment mode
# Optional: traditional, decoupled
# Optional: traditional, decoupled, standalone
#
# ref: https://apisix.apache.org/docs/apisix/deployment-modes/
mode: traditional
Expand Down
255 changes: 1 addition & 254 deletions docs/en/latest/FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,260 +39,7 @@ helm install apisix apisix/apisix \

### How to install Apache APISIX running in standalone mode?

Helm chart does not provide a direct way to deploy Apache APISIX running in standalone mode. You can install it in the following manner.

Create a `deploy.yaml` with the following content.

<Tabs
groupId="version"
defaultValue="3.0.0-beta"
values={[
{label: '3.0.0-beta', value: '3.0.0-beta'},
{label: '2.15', value: '2.15'},
]}>

<TabItem value="3.0.0-beta">

```yaml
# deploy.yaml
kind: ConfigMap
apiVersion: v1
metadata:
name: apisix-gw-config.yaml
data:
config.yaml: |
deployment:
role: data_plane
role_data_plane:
config_provider: yaml
---
kind: ConfigMap
apiVersion: v1
metadata:
name: apisix.yaml
data:
apisix.yaml: |
routes:
-
uri: /hi
upstream:
nodes:
"127.0.0.1:1980": 1
type: roundrobin
#END
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: apisix-deployment
spec:
replicas: 1
selector:
matchLabels:
app: apisix-deployment
strategy:
rollingUpdate:
maxSurge: 50%
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
labels:
app: apisix-deployment
spec:
terminationGracePeriodSeconds: 0
containers:
- livenessProbe:
failureThreshold: 3
initialDelaySeconds: 1
periodSeconds: 2
successThreshold: 1
tcpSocket:
port: 9080
timeoutSeconds: 2
readinessProbe:
failureThreshold: 3
initialDelaySeconds: 1
periodSeconds: 2
successThreshold: 1
tcpSocket:
port: 9080
timeoutSeconds: 2
image: "apache/apisix:2.99.0-centos"
imagePullPolicy: IfNotPresent
name: apisix-deployment
# Create a soft link to link the apisix.yaml file in the mount directory to /usr/local/apisix/conf/apisix.yaml.
command: ["sh", "-c","ln -s /apisix-config/apisix.yaml /usr/local/apisix/conf/apisix.yaml && /docker-entrypoint.sh docker-start"]
ports:
- containerPort: 9080
name: "http"
protocol: "TCP"
- containerPort: 9443
name: "https"
protocol: "TCP"

volumeMounts:
- mountPath: /usr/local/apisix/conf/config.yaml
name: apisix-config-yaml-configmap
subPath: config.yaml
# configMap directory mounts
- mountPath: /apisix-config
name: apisix-admin
volumes:
- configMap:
name: apisix-gw-config.yaml
name: apisix-config-yaml-configmap
- configMap:
name: apisix.yaml
name: apisix-admin
---
apiVersion: v1
kind: Service
metadata:
name: apisix-service
spec:
selector:
app: apisix-deployment
ports:
- name: http
port: 9080
protocol: TCP
targetPort: 9080
- name: https
port: 9443
protocol: TCP
targetPort: 9443
type: NodePort
```
</TabItem>
<TabItem value="2.15">
```yaml
# deploy.yaml
kind: ConfigMap
apiVersion: v1
metadata:
name: apisix-gw-config.yaml
data:
config.yaml: |
apisix:
enable_admin: false
config_center: yaml
---
kind: ConfigMap
apiVersion: v1
metadata:
name: apisix.yaml
data:
apisix.yaml: |
routes:
-
uri: /hi
upstream:
nodes:
"127.0.0.1:1980": 1
type: roundrobin
#END
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: apisix-deployment
spec:
replicas: 1
selector:
matchLabels:
app: apisix-deployment
strategy:
rollingUpdate:
maxSurge: 50%
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
labels:
app: apisix-deployment
spec:
terminationGracePeriodSeconds: 0
containers:
- livenessProbe:
failureThreshold: 3
initialDelaySeconds: 1
periodSeconds: 2
successThreshold: 1
tcpSocket:
port: 9080
timeoutSeconds: 2
readinessProbe:
failureThreshold: 3
initialDelaySeconds: 1
periodSeconds: 2
successThreshold: 1
tcpSocket:
port: 9080
timeoutSeconds: 2
image: "apache/apisix:2.15.0-alpine"
imagePullPolicy: IfNotPresent
name: apisix-deployment
# Create a soft link to link the apisix.yaml file in the mount directory to /usr/local/apisix/conf/apisix.yaml.
command: ["sh", "-c", "ln -s /apisix-config/apisix.yaml /usr/local/apisix/conf/apisix.yaml && /usr/bin/apisix init && /usr/bin/apisix init_etcd && /usr/local/openresty/bin/openresty -p /usr/local/apisix -g 'daemon off;'"]
ports:
- containerPort: 9080
name: "http"
protocol: "TCP"
- containerPort: 9443
name: "https"
protocol: "TCP"
volumeMounts:
- mountPath: /usr/local/apisix/conf/config.yaml
name: apisix-config-yaml-configmap
subPath: config.yaml
# configMap directory mounts
- mountPath: /apisix-config
name: apisix-admin
volumes:
- configMap:
name: apisix-gw-config.yaml
name: apisix-config-yaml-configmap
- configMap:
name: apisix.yaml
name: apisix-admin
---
apiVersion: v1
kind: Service
metadata:
name: apisix-service
spec:
selector:
app: apisix-deployment
ports:
- name: http
port: 9080
protocol: TCP
targetPort: 9080
- name: https
port: 9443
protocol: TCP
targetPort: 9443
type: NodePort
```
</TabItem>
</Tabs>
Apply the configuration in `deploy.yaml` to pod.

```shell
kubectl apply -f deploy.yaml
```

:::note
1. The mount of the `apisix.yaml` file requires the injection of the softlink command, so do not change the configMap mount directory to `/usr/local/apisix/conf`, to avoid other configuration files being overwritten.
2. The `apisix.yaml` is mounted as a configMap, so there will be a delay in reloading the rules after `apisix.yaml` is changed; please refer to this [document](https://kubernetes.io/docs/concepts/configuration/configmap/#mounted-configmaps-are-updated-automatically) for details.
:::
helm install apisix apisix/apisix --set apisix.deployment.mode=standalone --set etcd.enabled=false --set apisix.deployment.role=data_plane

### Why get 403 when I access Apache APISIX admin api?

Expand Down

0 comments on commit e91048d

Please sign in to comment.