Skip to content

Commit

Permalink
feat: allow deploying with standalone mode (apache#665)
Browse files Browse the repository at this point in the history
Signed-off-by: Ashish Tiwari <ashishjaitiwari15112000@gmail.com>
  • Loading branch information
Revolyssup authored Nov 21, 2023
1 parent 57783ea commit 021d1b0
Show file tree
Hide file tree
Showing 6 changed files with 55 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 @@ -120,7 +120,7 @@ The command removes all the Kubernetes components associated with the chart and
| dashboard.config.conf.etcd.prefix | string | `"/apisix"` | apisix configurations prefix |
| dashboard.config.conf.etcd.username | string | `nil` | Specifies etcd basic auth username if enable etcd auth |
| dashboard.enabled | bool | `false` | |
| deployment.mode | string | `"traditional"` | Apache APISIX deployment mode Optional: traditional, decoupled ref: https://apisix.apache.org/docs/apisix/deployment-modes/ |
| deployment.mode | string | `"traditional"` | Apache APISIX deployment mode Optional: traditional, decoupled, standalone ref: https://apisix.apache.org/docs/apisix/deployment-modes/ |
| deployment.role | string | `"traditional"` | Deployment role Optional: traditional, data_plane, control_plane ref: https://apisix.apache.org/docs/apisix/deployment-modes/ |
| discovery.enabled | bool | `false` | Enable or disable Apache APISIX integration service discovery |
| 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
12 changes: 12 additions & 0 deletions charts/apisix/templates/_pod.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ spec:
{{- . | toYaml | nindent 8 }}
{{- end }}
image: "{{ .Values.apisix.image.repository }}:{{ default .Chart.AppVersion .Values.apisix.image.tag }}"
{{- if eq .Values.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.apisix.image.pullPolicy }}
env:
{{- if .Values.apisix.timezone }}
Expand Down Expand Up @@ -133,6 +136,10 @@ spec:
- -c
- "sleep 30"
volumeMounts:
{{- if eq .Values.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 @@ -198,6 +205,11 @@ spec:
{{- toYaml .Values.extraInitContainers | nindent 4 }}
{{- end }}
volumes:
{{- if eq .Values.deployment.mode "standalone" }}
- configMap:
name: apisix.yaml
name: apisix-admin
{{- end }}
- configMap:
name: {{ include "apisix.fullname" . }}
name: apisix-config
Expand Down
32 changes: 32 additions & 0 deletions charts/apisix/templates/apisix-config-configmap.yaml
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.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 }}
10 changes: 8 additions & 2 deletions charts/apisix/templates/configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,11 @@ data:
{{- end }}
{{- end }}
enable_heartbeat: true
{{- if eq .Values.deployment.mode "standalone" }}
enable_admin: false
{{ else }}
enable_admin: {{ .Values.admin.enabled }}
{{- end }}
enable_admin_cors: {{ .Values.admin.cors }}
enable_debug: false
{{- if or .Values.customPlugins.enabled .Values.apisix.luaModuleHook.enabled }}
Expand Down Expand Up @@ -307,9 +311,10 @@ data:
config_provider: etcd
{{- end }}
{{- if eq .Values.deployment.role "data_plane" }}
role_data_plane:
config_provider: etcd
config_provider: {{- eq .Values.deployment.mode "standalone" | ternary "yaml" "etcd" | indent 1 }}
{{- end }}

{{- if not (eq .Values.deployment.role "data_plane") }}
Expand Down Expand Up @@ -353,7 +358,7 @@ data:
{{- end }}
role: viewer
{{- end }}
{{- if not (eq .Values.deployment.mode "standalone")}}
etcd:
{{- if .Values.etcd.enabled }}
host: # it's possible to define multiple etcd hosts addresses of the same etcd cluster.
Expand All @@ -379,6 +384,7 @@ data:
sni: "{{ .Values.etcd.auth.tls.sni }}"
{{- end }}
{{- end }}
{{- end }}


{{- end }}
2 changes: 1 addition & 1 deletion charts/apisix/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ rbac:

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 deployment.mode=standalone --set etcd.enabled=false --set deployment.role=data_plane

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

Expand Down

0 comments on commit 021d1b0

Please sign in to comment.