我们最初使用静态清单安装了cert-manager。现在我们需要自定义设置(webhook 超时,请参阅 digitalocean/clusterlint#167),所以我认为最好的选择是迁移到 helm 安装,但我不确定如何最好地做到这一点,非常感谢您的帮助。
我已阅读卸载说明,但不想删除证书或(集群/)颁发者。我可以跳过删除步骤吗?因为我知道稍后我会使用 Helm 重新安装,还是我需要遵循其他流程?
任何帮助都太棒了。谢谢🙏
我们最初使用静态清单安装了cert-manager。现在我们需要自定义设置(webhook 超时,请参阅 digitalocean/clusterlint#167),所以我认为最好的选择是迁移到 helm 安装,但我不确定如何最好地做到这一点,非常感谢您的帮助。
我已阅读卸载说明,但不想删除证书或(集群/)颁发者。我可以跳过删除步骤吗?因为我知道稍后我会使用 Helm 重新安装,还是我需要遵循其他流程?
任何帮助都太棒了。谢谢🙏
我们正在使用 Helm 将我们的应用程序部署到 K8s。在 4 个不同的部署文件(每个服务一个)和一个用于迁移的作业文件中,我们必须有一组相同的env
变量。每当我们需要添加一个新文件时,我们都需要将它添加到所有 5 个文件中。有没有办法共享这些,所以新的环境变量只需要添加一次,所有 5 个文件都会选择它们(并且永远不会不同步)?
这是部署文件的示例(已编辑可能的敏感值)。
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "helm-chart.fullname" . }}-celery
labels:
app.kubernetes.io/name: {{ include "helm-chart.name" . }}-celery
helm.sh/chart: {{ include "helm-chart.chart" . }}
app.kubernetes.io/instance: {{ .Release.Name }}-celery
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/component: worker-celery
spec:
replicas: {{ .Values.replicaCountCelery }}
selector:
matchLabels:
app.kubernetes.io/name: {{ include "helm-chart.fullname" . }}-celery
app.kubernetes.io/instance: {{ .Release.Name }}-celery
template:
metadata:
labels:
app.kubernetes.io/name: {{ include "helm-chart.fullname" . }}-celery
app.kubernetes.io/instance: {{ .Release.Name }}-celery
spec:
imagePullSecrets:
- name: {{ .Values.imagePullSecretsName }}
containers:
- name: {{ .Chart.Name }}-celery
image: "{{ .Values.appImage.repository }}:{{ .Values.imageTag }}"
imagePullPolicy: {{ .Values.appImage.pullPolicy }}
command: ["celery"]
args: [REDACTED]
env:
- name: DJANGO_DEBUG
value: "{{ .Values.djangoDebug }}"
- name: DATABASE_NAME
value: "{{ .Values.databaseName }}"
- name: DATABASE_USER
valueFrom:
secretKeyRef:
name: [REDACTED]
key: [REDACTED]
- name: DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: [REDACTED]
key: [REDACTED]
- name: DATABASE_HOST
value: "myapp-haproxy.{{ .Release.Namespace }}.svc.cluster.local"
- name: MEMCACHED_HOST
value: "myapp-memcached.{{ .Release.Namespace }}.svc.cluster.local"
- name: SENDGRID_USER
valueFrom:
secretKeyRef:
name: [REDACTED]
key: [REDACTED]
- name: SENDGRID_PASSWORD
valueFrom:
secretKeyRef:
name: [REDACTED]
key: [REDACTED]
- name: STRIPE_LIVE_PUBLIC_KEY
valueFrom:
secretKeyRef:
name: [REDACTED]
key: [REDACTED]
- name: STRIPE_LIVE_SECRET_KEY
valueFrom:
secretKeyRef:
name: [REDACTED]
key: [REDACTED]
- name: OBJECT_STORE_ENDPOINT_URL
value: [REDACTED]
- name: OBJECT_STORE_REGION_NAME
value: [REDACTED]
- name: OBJECT_STORE_KEY_ID
valueFrom:
secretKeyRef:
name: [REDACTED]
key: [REDACTED]
- name: OBJECT_STORE_ACCESS_KEY
valueFrom:
secretKeyRef:
name: [REDACTED]
key: [REDACTED]
- name: OBJECT_STORE_CDN_URL
value: [REDACTED]
- name: QUICKBOOKS_CLIENT_ID
valueFrom:
secretKeyRef:
name: [REDACTED]
key: [REDACTED]
- name: QUICKBOOKS_CLIENT_SECRET
valueFrom:
secretKeyRef:
name: [REDACTED]
key: [REDACTED]
- name: QUICKBOOKS_ENVIRONMENT
value: production
- name: XERO_CONSUMER_KEY
valueFrom:
secretKeyRef:
name: [REDACTED]
key: [REDACTED]
- name: XERO_CONSUMER_SECRET
valueFrom:
secretKeyRef:
name: [REDACTED]
key: [REDACTED]
- name: SAGE_CLIENT_ID
valueFrom:
secretKeyRef:
name: [REDACTED]
key: [REDACTED]
- name: SAGE_CLIENT_SECRET
valueFrom:
secretKeyRef:
name: [REDACTED]
key: [REDACTED]
- name: ACCOUNTANCY_REDIRECT_URI_PREFIX
value: [REDACTED]
resources:
{{- toYaml .Values.celeryResources | nindent 12 }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
我不确定它是否会增加任何复杂性,但您可以看到有些使用来自values.yaml
(例如{{ .Values.djangoDebug }}
)的变量,有些是指 Kubernetes 机密,有些使用该{{ .Release.Namespace }}
变量。
deployment
此外,这 4 个文件所需的缩进是相同的,但文件不同job
。
我正在尝试共享一堆env
值,但也可以选择向某些文件添加一些额外内容。
我希望这是有道理的?并提前感谢您的帮助。
我本来以为以前有人问过这个问题,但是我已经做了很多谷歌搜索,找不到简单的答案,如果已经回答了,很抱歉。
本质上,我打算提供一项服务,允许用户在我的 docker 主机上运行 docker 容器。用户可以选择我提供的容器之一或提供自己的容器(未经审核)。他们还可以在容器中运行他们选择的 bash 命令。我需要将它们限制为仅在其容器中运行代码,并且无法访问主机或任何其他同时运行的容器。应允许容器完全访问 Internet,并且主机将需要与容器具有共享目录。我最初将向 docker 容器提供一些数据文件,一旦容器完成了用户想要的任何操作,我将需要再次访问这些数据文件。
从安全的角度来看,我需要注意什么?谢谢你的帮助。
我正在开发一个想要以原子方式更新符号链接的部署脚本。我打算使用类似的命令
$ ln -s new current_tmp && mv -Tf current_tmp current
(归功于此处以获取有关此工作原理的详细信息)。
但是,并非所有版本都mv
支持该-T
选项。如何在使用之前可靠地确定系统是否支持它?
是否比创建不同的文件并尝试mv
使用该-T
选项(并检查是否成功)来尝试该文件更好的方法,以便我可以知道当前系统是否支持该选项?然后我可以为该系统运行正确的命令。
谢谢你的帮助。
我正在寻找一种让 MySQL(实际上是 MariaDB)阻止所有新连接但尊重现有连接的方法。我打算在关闭服务器进行维护之前实施此限制。我设想的过程如下:
我在想可能可以完成,max_connections
但我仍然需要能够连接以确定所有进程都已完成。或者您可以更改服务器将在不重新启动的情况下侦听的 IP?或者也许可以通过阻止用户来完成,但这是使用 Galera 复制的集群,所以我只希望这影响单个节点。
谢谢你的帮助。
我们有一些 PHP-FPM 服务器,当它们需要数据库连接时,它们会连接到 HAProxy 服务器,该服务器会选择要使用的数据库服务器并打开连接。然后,当我们想要对 HAProxy 服务器进行一些维护时(例如需要重新启动 HAProxy 的配置更改),过程如下:
当第 2 步发生时,此时打开的 mysql 连接会发生什么情况?根据这个 TCP Sessions and IP Changes question,连接将被丢弃。真的是这样吗?如果是这样,如果有的话,可以做些什么来防止这种情况发生?是否可以以某种方式强制连接使用服务器的主(非浮动)IP?
我们也有类似的设置,两台 Nginx 服务器运行 Keepalived,我们正计划执行相同的过程。如果我们这样做,同样的问题也适用 - 当 IP 移动到另一台服务器时,现有的 http 连接会发生什么情况?
我感谢您的帮助。
我们有一个网站,我们的部署过程大致如下(排除了许多不相关的步骤)
echo "Remove previous, if it exists, we don't need that anymore"
rm -rf /home/[XXX]/php_code/previous
echo "Create the current dir if it doesn't exist (just in case this is the first deploy to this server)"
mkdir -p /home/[XXX]/php_code/current
echo "Create the var_www dir if it doesn't exist (just in case this is the first deploy to this server)"
mkdir -p /home/[XXX]/var_www
echo "Copy current to previous so we can use temporarily"
cp -R /home/[XXX]/php_code/current/* /home/[XXX]/php_code/previous/
echo "Atomically swap the symbolic link to use previous instead of current"
ln -s /home/[XXX]/php_code/previous /home/[XXX]/var_www/live_tmp && mv -Tf /home/[XXX]/var_www/live_tmp /home/[XXX]/var_www/live
# Rsync latest code into the current dir, code not shown here
echo "Atomically swap the symbolic link to use current instead of previous"
ln -s /home/[XXX]/php_code/current /home/[XXX]/var_www/live_tmp && mv -Tf /home/[XXX]/var_www/live_tmp /home/[XXX]/var_www/live
我们遇到并希望得到帮助的问题是,任何网站页面加载所做的第一件事就是计算出应用程序的基本目录并将其定义为常量(我们使用 PHP)。如果在该页面加载期间发生部署,系统会尝试include()
使用原始完整路径访问文件,并将获取该文件的新版本。我们需要它从旧目录中获取旧目录,该目录现在已移动,如下所示:
系统开始页面加载并确定SYSTEM_ROOT_PATH
常量是/home/[XXX]/var_www/live
或使用 PHP 的realpath()
它可能是/home/[XXX]/php_code/current
.
用于/home/[XXX]/var_www/live
获取更新的符号链接指向/home/[XXX]/php_code/previous
而不是/home/[XXX]/php_code/current
它最初的位置。
系统尝试加载/home/[XXX]/var_www/live/something.php
并获取/home/[XXX]/php_code/current/something.php
而不是/home/[XXX]/php_code/previous/something.php
如果没有很好地解释,我很抱歉。如果有人可以的话,我真的很感激一些关于如何解决这个问题的想法。谢谢你。
我很确定以前会问过这个问题,我发现了类似的问题,但我不完全了解如何将它们应用于我的情况。所以,很抱歉再次询问。
我们有许多位于数据中心的服务器,它们的防火墙规则只允许从我们的工作外部 IP 到它们的 SSH 连接。他们也只接受使用 SSH 密钥的身份验证。我可以通过工作中的另一台机器连接到其中一台服务器,并让我的机器(在家)传递密钥以进行身份验证吗?
这是一个 SSH 隧道,还是别的什么?
谢谢你的帮助。
抱歉,如果以前有人问过这个问题,但我似乎找不到太多关于它的信息。
我们将使用 HAProxy 来平衡我们的 MariaDB Galera 集群。我在这方面看到的所有文章/教程都使用 Keepalived(或类似的东西)来进行主动/被动 HAProxy 设置。
是否有充分的理由说明您不应该进行主动/主动设置?
每个 HAProxy 节点可以有一个固定 IP,也可以有一个浮动 IP。正常情况下,请求是在两个 HAProxy 节点之间共享的,如果一个节点宕机,另一个会使用它的浮动 IP 并处理两个 IP 下的请求。当另一个重新启动时,它会重新获取其浮动 IP 和负载份额。
我很感激你对此的意见。
卢克