You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by as...@apache.org on 2023/11/24 10:15:46 UTC

(apisix-helm-chart) branch dev updated: feat: add standalone support with helm chart (#671)

This is an automated email from the ASF dual-hosted git repository.

ashishtiwari pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/apisix-helm-chart.git


The following commit(s) were added to refs/heads/dev by this push:
     new e91048d  feat: add standalone support with helm chart (#671)
e91048d is described below

commit e91048d67a80acd8c741eda190dd0a831d753a4a
Author: Ashish Tiwari <as...@gmail.com>
AuthorDate: Fri Nov 24 15:45:40 2023 +0530

    feat: add standalone support with helm chart (#671)
    
    * add standalone support with helm chart
    
    Signed-off-by: Ashish Tiwari <as...@gmail.com>
    
    * Update charts/apisix/templates/apisix-config-cm.yml
    
    ---------
    
    Signed-off-by: Ashish Tiwari <as...@gmail.com>
    Co-authored-by: Abhishek Choudhary <sh...@gmail.com>
---
 charts/apisix/README.md                      |   2 +-
 charts/apisix/templates/apisix-config-cm.yml |  32 ++++
 charts/apisix/templates/configmap.yaml       |   5 +-
 charts/apisix/templates/deployment.yaml      |  12 ++
 charts/apisix/values.yaml                    |   2 +-
 docs/en/latest/FAQ.md                        | 255 +--------------------------
 6 files changed, 50 insertions(+), 258 deletions(-)

diff --git a/charts/apisix/README.md b/charts/apisix/README.md
index 4ba433f..36482ae 100644
--- a/charts/apisix/README.md
+++ b/charts/apisix/README.md
@@ -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) |
diff --git a/charts/apisix/templates/apisix-config-cm.yml b/charts/apisix/templates/apisix-config-cm.yml
new file mode 100644
index 0000000..d76fe99
--- /dev/null
+++ b/charts/apisix/templates/apisix-config-cm.yml
@@ -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 }}
diff --git a/charts/apisix/templates/configmap.yaml b/charts/apisix/templates/configmap.yaml
index b7317e6..e3917c6 100644
--- a/charts/apisix/templates/configmap.yaml
+++ b/charts/apisix/templates/configmap.yaml
@@ -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") }}
@@ -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.
@@ -371,4 +371,5 @@ data:
           sni: "{{ .Values.etcd.auth.tls.sni }}"
         {{- end }}
       {{- end }}
+      {{- end }}
      
diff --git a/charts/apisix/templates/deployment.yaml b/charts/apisix/templates/deployment.yaml
index 5a9aa5d..2a92928 100644
--- a/charts/apisix/templates/deployment.yaml
+++ b/charts/apisix/templates/deployment.yaml
@@ -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 }}
@@ -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
@@ -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
diff --git a/charts/apisix/values.yaml b/charts/apisix/values.yaml
index d84e754..4debf80 100644
--- a/charts/apisix/values.yaml
+++ b/charts/apisix/values.yaml
@@ -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
diff --git a/docs/en/latest/FAQ.md b/docs/en/latest/FAQ.md
index 2c5c5e6..3e80701 100644
--- a/docs/en/latest/FAQ.md
+++ b/docs/en/latest/FAQ.md
@@ -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?