Algorithm lc2185_统计包含给定前缀的字符串
今天的每日一题过于简单了
1 2 3 4 5 6 7 8 9 10 11 import "strings" func prefixCount (words []string , pref string ) int { cnt := 0 for _, str := range (words) { if strings.HasPrefix(str, pref) { cnt++ } } return cnt }
Review 【TED演讲】为什么学生应该有心理健康日?
心理健康和生理健康同样重要,学会放慢自己的脚步,在感到心理疲惫的时候,给与自己适当的休息,这样才能张弛有度,能够更好地实现自己的目标
Tips Gartner发布2023年十大战略技术趋势
了解新一年的发展趋势,是2023年第一周比较推荐的行为(当然2022年末就开始看更好)
Share-helm安装etcd-ha的失败的原因是bitnami不支持ARM架构-过程分享 按照指定步骤后,会得到po和pvc都处在pending状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 [root@arm download] --2022-12-30 19:07:28-- https://get.helm.sh/helm-v3.10.3-linux-arm64.tar.gz Resolving get.helm.sh (get.helm.sh)... 152.199.39.108, 2606:2800:247:1cb7:261b:1f9c:2074:3c Connecting to get.helm.sh (get.helm.sh)|152.199.39.108|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 13085851 (12M) [application/x-tar] Saving to: ‘helm-v3.10.3-linux-arm64.tar.gz’ helm-v3.10.3-linux-arm64.tar.gz 100%[======================================================================================>] 12.48M --.-KB/s in 0.04s 2022-12-30 19:07:29 (332 MB/s) - ‘helm-v3.10.3-linux-arm64.tar.gz’ saved [13085851/13085851] [root@arm download] total 125260 drwxr-xr-x 2 root root 4096 Dec 30 19:07 ./ drwx------ 12 root root 4096 Dec 29 18:54 ../ -rw-r--r-- 1 root root 115165850 Dec 7 03:31 go1.19.4.linux-arm64.tar.gz -rw-r--r-- 1 root root 13085851 Dec 14 23:44 helm-v3.10.3-linux-arm64.tar.gz [root@arm download] linux-arm64/ linux-arm64/helm linux-arm64/LICENSE linux-arm64/README.md [root@arm download] [root@arm download] The Kubernetes package manager ... [root@arm download] [root@arm download] [root@arm download] [root@arm download] 473 474 475 476 477 persistentVolumeClaimRetentionPolicy: 478 enabled: false [root@arm download] ... REVISION: 1 TEST SUITE: None NOTES: CHART NAME: etcd CHART VERSION: 8.5.11 APP VERSION: 3.5.6 ** Please be patient while the chart is being deployed ** etcd can be accessed via port 2379 on the following DNS name from within your cluster: my-release-etcd.default.svc.cluster.local To create a pod that you can use as a etcd client run the following command : kubectl run my-release-etcd-client --restart='Never' --image docker.io/bitnami/etcd:3.5.6-debian-11-r10 --env ROOT_PASSWORD=$(kubectl get secret --namespace default my-release-etcd -o jsonpath="{.data.etcd-root-password}" | base64 -d) --env ETCDCTL_ENDPOINTS="my-release-etcd.default.svc.cluster.local:2379" --namespace default --command -- sleep infinity Then, you can set /get a key using the commands below: kubectl exec --namespace default -it my-release-etcd-client -- bash etcdctl --user root:$ROOT_PASSWORD put /message Hello etcdctl --user root:$ROOT_PASSWORD get /message To connect to your etcd server from outside the cluster execute the following commands: kubectl port-forward --namespace default svc/my-release-etcd 2379:2379 & echo "etcd URL: http://127.0.0.1:2379" * As rbac is enabled you should add the flag `--user root:$ETCD_ROOT_PASSWORD ` to the etcdctl commands. Use the command below to export the password: export ETCD_ROOT_PASSWORD=$(kubectl get secret --namespace default my-release-etcd -o jsonpath="{.data.etcd-root-password}" | base64 -d) [root@arm download] pod/my-release-etcd-client created [root@arm download] error: cannot exec into a container in a completed pod; current phase is Failed [root@arm download] NAME READY STATUS RESTARTS AGE envoy-fb5d77cc9-rjw9w 1/1 Running 0 24h my-release-etcd-0 0/1 Pending 0 4m7s my-release-etcd-client 0/1 Error 0 18s [root@arm download] NAME READY STATUS RESTARTS AGE envoy-fb5d77cc9-rjw9w 1/1 Running 0 24h my-release-etcd-0 0/1 Pending 0 4m23s my-release-etcd-client 0/1 Error 0 34s [root@arm download] NAME READY STATUS RESTARTS AGE envoy-fb5d77cc9-rjw9w 1/1 Running 0 24h my-release-etcd-0 0/1 Pending 0 5m47s my-release-etcd-client 0/1 Error 0 118s
然后阅读pv,pvc的官方文档 发现:
静态制备 集群管理员创建若干 PV 卷。这些卷对象带有真实存储的细节信息, 并且对集群用户可用(可见)。PV 卷对象存在于 Kubernetes API 中,可供用户消费(使用)。
动态制备 如果管理员所创建的所有静态 PV 卷都无法与用户的 PersistentVolumeClaim 匹配, 集群可以尝试为该 PVC 申领动态制备一个存储卷。 这一制备操作是基于 StorageClass 来实现的:PVC 申领必须请求某个 存储类, 同时集群管理员必须已经创建并配置了该类,这样动态制备卷的动作才会发生。 如果 PVC 申领指定存储类为 ""
,则相当于为自身禁止使用动态制备的卷。
加上看到pvc的详细信息,确实是StorageClass为空,所以只能手动制备PV存储卷先了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@arm ~] Name: data-my-release-etcd-0 Namespace: default StorageClass: Status: Pending Volume: Labels: app.kubernetes.io/instance=my-release app.kubernetes.io/name=etcd Annotations: <none> Finalizers: [kubernetes.io/pvc-protection] Capacity: Access Modes: VolumeMode: Filesystem Used By: my-release-etcd-0 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal FailedBinding 2m32s (x50807 over 8d) persistentvolume-controller no persistent volumes available for this claim and no storage class is set
创建PV后成功绑定了一个pvc,但是还是不太行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 [root@arm pv] apiVersion: v1 kind: PersistentVolume metadata: name: task-pv-volume labels: type : local spec: capacity: storage: 8Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data" [root@arm pv] persistentvolume/task-pv-volume created [root@arm pv] NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE task-pv-volume 8Gi RWO Retain Bound default/data-my-release-etcd-2 3m26s [root@arm pv] NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE data-my-release-etcd-0 Pending 9d data-my-release-etcd-1 Pending 8d data-my-release-etcd-2 Bound task-pv-volume 8Gi RWO 8d [root@arm pv] apiVersion: v1 kind: PersistentVolume metadata: name: task-pv-volume-1 labels: type : local spec: capacity: storage: 8Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data" [root@arm pv] apiVersion: v1 kind: PersistentVolume metadata: name: task-pv-volume-2 labels: type : local spec: capacity: storage: 8Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data" [root@arm pv] persistentvolume/task-pv-volume-1 created [root@arm pv] persistentvolume/task-pv-volume-2 created [root@arm pv] NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE data-my-release-etcd-0 Pending 9d data-my-release-etcd-1 Pending 9d data-my-release-etcd-2 Bound task-pv-volume 8Gi RWO 9d [root@arm pv] NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE data-my-release-etcd-0 Bound task-pv-volume-1 8Gi RWO 9d data-my-release-etcd-1 Bound task-pv-volume-2 8Gi RWO 9d data-my-release-etcd-2 Bound task-pv-volume 8Gi RWO 9d [root@arm pv] NAME READY STATUS RESTARTS AGE envoy-fb5d77cc9-rjw9w 1/1 Running 0 10d my-release-etcd-0 0/1 Pending 0 9d my-release-etcd-1 0/1 Pending 0 9d my-release-etcd-2 0/1 CrashLoopBackOff 7 (79s ago) 9d my-release-etcd-client 0/1 Error 0 9d [root@arm pv] NAME READY STATUS RESTARTS AGE envoy-fb5d77cc9-rjw9w 1/1 Running 0 10d my-release-etcd-0 0/1 Error 0 9d my-release-etcd-1 0/1 Error 0 9d my-release-etcd-2 0/1 CrashLoopBackOff 7 (81s ago) 9d my-release-etcd-client 0/1 Error 0 9d [root@arm download] Name: my-release-etcd-0 Namespace: default Priority: 0 Node: arm/10.0.0.29 Start Time: Sun, 08 Jan 2023 19:44:00 +0800 Labels: app.kubernetes.io/instance=my-release app.kubernetes.io/managed-by=Helm app.kubernetes.io/name=etcd controller-revision-hash=my-release-etcd-5d49546c66 helm.sh/chart=etcd-8.5.11 statefulset.kubernetes.io/pod-name=my-release-etcd-0 Annotations: checksum/token-secret: b9cdb65acc8d3eff297975d64902520093c035e029074d0dc7b172f405f46e00 cni.projectcalico.org/containerID: 27fecd909420c116cc20862804e4c98aec2c37620b88a710dfead06d252eb863 cni.projectcalico.org/podIP: 192.168.64.206/32 cni.projectcalico.org/podIPs: 192.168.64.206/32 Status: Running IP: 192.168.64.206 IPs: IP: 192.168.64.206 Controlled By: StatefulSet/my-release-etcd Containers: etcd: Container ID: docker://c65f7b13411d6117954fd50fe35f826189667c6d1bf53ce8ef571a82cec165ff Image: docker.io/bitnami/etcd:3.5.6-debian-11-r10 Image ID: docker-pullable://bitnami/etcd@sha256:2d7b831769734bb97a5c1cfd2fe46e29f422b70b5ba9f9aedfd91300839ac3ee Ports: 2379/TCP, 2380/TCP Host Ports: 0/TCP, 0/TCP State: Waiting Reason: CrashLoopBackOff Last State: Terminated Reason: Error Exit Code: 1 Started: Sun, 08 Jan 2023 19:45:40 +0800 Finished: Sun, 08 Jan 2023 19:45:40 +0800 Ready: False Restart Count: 4 Liveness: exec [/opt/bitnami/scripts/etcd/healthcheck.sh] delay=60s timeout=5s period=30s Readiness: exec [/opt/bitnami/scripts/etcd/healthcheck.sh] delay=60s timeout=5s period=10s Environment: BITNAMI_DEBUG: false MY_POD_IP: (v1:status.podIP) MY_POD_NAME: my-release-etcd-0 (v1:metadata.name) MY_STS_NAME: my-release-etcd ETCDCTL_API: 3 ETCD_ON_K8S: yes ETCD_START_FROM_SNAPSHOT: no ETCD_DISASTER_RECOVERY: no ETCD_NAME: $(MY_POD_NAME) ETCD_DATA_DIR: /bitnami/etcd/data ETCD_LOG_LEVEL: info ALLOW_NONE_AUTHENTICATION: no ETCD_ROOT_PASSWORD: <set to the key 'etcd-root-password' in secret 'my-release-etcd' > Optional: false ETCD_AUTH_TOKEN: jwt,priv-key=/opt/bitnami/etcd/certs/token/jwt-token.pem,sign-method=RS256,ttl=10m ETCD_ADVERTISE_CLIENT_URLS: http://$(MY_POD_NAME).my-release-etcd-headless.default.svc.cluster.local:2379,http://my-release-etcd.default.svc.cluster.local:2379 ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:2379 ETCD_INITIAL_ADVERTISE_PEER_URLS: http://$(MY_POD_NAME).my-release-etcd-headless.default.svc.cluster.local:2380 ETCD_LISTEN_PEER_URLS: http://0.0.0.0:2380 ETCD_CLUSTER_DOMAIN: my-release-etcd-headless.default.svc.cluster.local Mounts: /bitnami/etcd from data (rw) /opt/bitnami/etcd/certs/token/ from etcd-jwt-token (ro) /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-bz6gj (ro) Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: etcd-jwt-token: Type: Secret (a volume populated by a Secret) SecretName: my-release-etcd-jwt-token Optional: false data: Type: EmptyDir (a temporary directory that shares a pod·s lifetime) Medium: SizeLimit: <unset > kube-api-access-bz6gj: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m36s default-scheduler Successfully assigned default/my-release-etcd-0 to arm Normal Created 101s (x4 over 2m35s) kubelet Created container etcd Normal Started 101s (x4 over 2m35s) kubelet Started container etcd Warning BackOff 70s (x12 over 2m33s) kubelet Back-off restarting failed container Normal Pulled 57s (x5 over 2m35s) kubelet Container image "docker.io/bitnami/etcd:3.5.6-debian-11-r10" already present on machine [root@arm download] exec /opt/bitnami/scripts/etcd/entrypoint.sh: exec format error
后面看网上文章发现自己忘了设置helm中的value.yaml中的persistence的enable为false了,就又试了一下empty-dir模式 然后
1 2 cd /root/downloadvim etcd/values.yaml
And set persistence to false:
1 2 3 4 558 persistence: 559 560 561 enabled: false
然后
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 [root@arm download] release "my-release" uninstalled [root@arm download] NAME READY STATUS RESTARTS AGE envoy-fb5d77cc9-rjw9w 1/1 Running 0 10d my-release-etcd-client 0/1 Error 0 9d [root@arm download] NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE data-my-release-etcd-0 Bound task-pv-volume-1 8Gi RWO 9d data-my-release-etcd-1 Bound task-pv-volume-2 8Gi RWO 9d data-my-release-etcd-2 Bound task-pv-volume 8Gi RWO 9d [root@arm download] persistentvolumeclaim "data-my-release-etcd-0" deleted persistentvolumeclaim "data-my-release-etcd-1" deleted persistentvolumeclaim "data-my-release-etcd-2" deleted [root@arm download] persistentvolume "task-pv-volume" deleted persistentvolume "task-pv-volume-1" deleted persistentvolume "task-pv-volume-2" deleted [root@arm download] NAME: my-release LAST DEPLOYED: Sun Jan 8 19:43:49 2023 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: CHART NAME: etcd CHART VERSION: 8.5.11 APP VERSION: 3.5.6 ** Please be patient while the chart is being deployed ** etcd can be accessed via port 2379 on the following DNS name from within your cluster: my-release-etcd.default.svc.cluster.local To create a pod that you can use as a etcd client run the following command : kubectl run my-release-etcd-client --restart='Never' --image docker.io/bitnami/etcd:3.5.6-debian-11-r10 --env ROOT_PASSWORD=$(kubectl get secret --namespace default my-release-etcd -o jsonpath="{.data.etcd-root-password}" | base64 -d) --env ETCDCTL_ENDPOINTS="my-release-etcd.default.svc.cluster.local:2379" --namespace default --command -- sleep infinity Then, you can set /get a key using the commands below: kubectl exec --namespace default -it my-release-etcd-client -- bash etcdctl --user root:$ROOT_PASSWORD put /message Hello etcdctl --user root:$ROOT_PASSWORD get /message To connect to your etcd server from outside the cluster execute the following commands: kubectl port-forward --namespace default svc/my-release-etcd 2379:2379 & echo "etcd URL: http://127.0.0.1:2379" * As rbac is enabled you should add the flag `--user root:$ETCD_ROOT_PASSWORD ` to the etcdctl commands. Use the command below to export the password: export ETCD_ROOT_PASSWORD=$(kubectl get secret --namespace default my-release-etcd -o jsonpath="{.data.etcd-root-password}" | base64 -d) [root@arm download] NAME READY STATUS RESTARTS AGE envoy-fb5d77cc9-rjw9w 1/1 Running 0 10d my-release-etcd-0 0/1 CrashLoopBackOff 2 (18s ago) 44s my-release-etcd-client 0/1 Error 0 9d [root@arm download] Name: my-release-etcd-0 Namespace: default Priority: 0 Node: arm/10.0.0.29 Start Time: Sun, 08 Jan 2023 19:44:00 +0800 Labels: app.kubernetes.io/instance=my-release app.kubernetes.io/managed-by=Helm app.kubernetes.io/name=etcd controller-revision-hash=my-release-etcd-5d49546c66 helm.sh/chart=etcd-8.5.11 statefulset.kubernetes.io/pod-name=my-release-etcd-0 Annotations: checksum/token-secret: b9cdb65acc8d3eff297975d64902520093c035e029074d0dc7b172f405f46e00 cni.projectcalico.org/containerID: 27fecd909420c116cc20862804e4c98aec2c37620b88a710dfead06d252eb863 cni.projectcalico.org/podIP: 192.168.64.206/32 cni.projectcalico.org/podIPs: 192.168.64.206/32 Status: Running IP: 192.168.64.206 IPs: IP: 192.168.64.206 Controlled By: StatefulSet/my-release-etcd Containers: etcd: Container ID: docker://c65f7b13411d6117954fd50fe35f826189667c6d1bf53ce8ef571a82cec165ff Image: docker.io/bitnami/etcd:3.5.6-debian-11-r10 Image ID: docker-pullable://bitnami/etcd@sha256:2d7b831769734bb97a5c1cfd2fe46e29f422b70b5ba9f9aedfd91300839ac3ee Ports: 2379/TCP, 2380/TCP Host Ports: 0/TCP, 0/TCP State: Waiting Reason: CrashLoopBackOff Last State: Terminated Reason: Error Exit Code: 1 Started: Sun, 08 Jan 2023 19:45:40 +0800 Finished: Sun, 08 Jan 2023 19:45:40 +0800 Ready: False Restart Count: 4 Liveness: exec [/opt/bitnami/scripts/etcd/healthcheck.sh] delay=60s timeout=5s period=30s Readiness: exec [/opt/bitnami/scripts/etcd/healthcheck.sh] delay=60s timeout=5s period=10s Environment: BITNAMI_DEBUG: false MY_POD_IP: (v1:status.podIP) MY_POD_NAME: my-release-etcd-0 (v1:metadata.name) MY_STS_NAME: my-release-etcd ETCDCTL_API: 3 ETCD_ON_K8S: yes ETCD_START_FROM_SNAPSHOT: no ETCD_DISASTER_RECOVERY: no ETCD_NAME: $(MY_POD_NAME) ETCD_DATA_DIR: /bitnami/etcd/data ETCD_LOG_LEVEL: info ALLOW_NONE_AUTHENTICATION: no ETCD_ROOT_PASSWORD: <set to the key 'etcd-root-password' in secret 'my-release-etcd' > Optional: false ETCD_AUTH_TOKEN: jwt,priv-key=/opt/bitnami/etcd/certs/token/jwt-token.pem,sign-method=RS256,ttl=10m ETCD_ADVERTISE_CLIENT_URLS: http://$(MY_POD_NAME).my-release-etcd-headless.default.svc.cluster.local:2379,http://my-release-etcd.default.svc.cluster.local:2379 ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:2379 ETCD_INITIAL_ADVERTISE_PEER_URLS: http://$(MY_POD_NAME).my-release-etcd-headless.default.svc.cluster.local:2380 ETCD_LISTEN_PEER_URLS: http://0.0.0.0:2380 ETCD_CLUSTER_DOMAIN: my-release-etcd-headless.default.svc.cluster.local Mounts: /bitnami/etcd from data (rw) /opt/bitnami/etcd/certs/token/ from etcd-jwt-token (ro) /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-bz6gj (ro) Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: etcd-jwt-token: Type: Secret (a volume populated by a Secret) SecretName: my-release-etcd-jwt-token Optional: false data: Type: EmptyDir (a temporary directory that shares a pod·s lifetime) Medium: SizeLimit: <unset > kube-api-access-bz6gj: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: <nil> DownwardAPI: true QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m36s default-scheduler Successfully assigned default/my-release-etcd-0 to arm Normal Created 101s (x4 over 2m35s) kubelet Created container etcd Normal Started 101s (x4 over 2m35s) kubelet Started container etcd Warning BackOff 70s (x12 over 2m33s) kubelet Back-off restarting failed container Normal Pulled 57s (x5 over 2m35s) kubelet Container image "docker.io/bitnami/etcd:3.5.6-debian-11-r10" already present on machine [root@arm download] exec /opt/bitnami/scripts/etcd/entrypoint.sh: exec format error[root@arm download]
发现得到同样的错误,然后去网上查找发现一个issue: Running the container fails with ‘exec /opt/bitnami/scripts/zookeeper/entrypoint.sh: exec format error’
I’m afraid we currently don’t have support for ARM architecture in our containers. It’s something that we have in our backlog, but there are no immediate plans to work on it. As soon as there are news, we will let you know.
原来bitnami不支持ARM架构的服务器…….我吐血了