我有麻烦重新启动dockerized postgres数据库(我使用Core OS).使用该命令在bash脚本中启动数据库
# boot.sh
sudo -i -u postgres /usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file=/etc/postgresql/9.3/main/postgresql.conf
Run Code Online (Sandbox Code Playgroud)
哪个有效.我有另一个由confd调用的脚本,当一些etcd键改变时运行(这部分没问题,文件被正确调用)并且必须重启postgres(不重新加载,因为一些配置更改需要重启).以下是我尝试的主要选项,但失败了...
# restart.sh
sudo -u postgres /usr/lib/postgresql/9.3/bin/pg_ctl --pgdata=/var/lib/postgresql/9.3/main restart
Run Code Online (Sandbox Code Playgroud)
系统地引发错误:
%FATAL: lock file "postmaster.pid" already exists
%HINT: Is another postmaster (PID 273) running in data directory "/var/lib/postgresql/9.3/main"?
Run Code Online (Sandbox Code Playgroud)
此外,
# restart.sh
rm /var/lib/postgresql/9.3/main/postmaster.pid
sudo -i -u postgres /usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file=/etc/postgresql/9.3/main/postgresql.conf
Run Code Online (Sandbox Code Playgroud)
,
rm /var/lib/postgresql/9.3/main/postmaster.pid
/etc/init.d/postgresql start
Run Code Online (Sandbox Code Playgroud)
,
/etc/init.d/postgresql restart
Run Code Online (Sandbox Code Playgroud)
和
exec su postgres -c "/usr/lib/postgresql/9.3/bin/postgres -D /var/lib/postgresql/9.3/main -c config_file=/etc/postgresql/9.3/main/postgresql.conf"
Run Code Online (Sandbox Code Playgroud)
失败了
ERROR exit status 1
Run Code Online (Sandbox Code Playgroud)
任何想法?先感谢您!
我有一个运行容器的容器,需要访问API密钥和数据库密码等敏感信息.现在,这些敏感值嵌入在控制器定义中,如下所示:
env:
- name: DB_PASSWORD
value: password
Run Code Online (Sandbox Code Playgroud)
然后在Docker容器中作为$DB_PASSWORD环境变量可用.一切都相当容易.
但是,阅读他们关于Secrets的文档,他们明确表示将敏感配置值放入您的定义中会违反最佳实践,并且可能是一个安全问题.我能想到的唯一其他策略如下:
这似乎相当复杂,但更安全和灵活,因为值不再是静态的并以明文形式存储.
所以我的问题,我知道这不是一个完全客观的问题,这是否完全是必要的?只有管理员才能首先查看和执行RC定义; 所以,如果有人违反了kubernetes大师,你还有其他问题需要担心.我看到的唯一好处是没有明文提交到文件系统的秘密的危险......
有没有其他方法以安全的方式使用秘密信息填充Docker容器?
我有两个独立的Kubernetes集群,分别用于登台和生产环境.我希望我将向每个集群提交Kubernetes API对象的YAML清单,但是某些对象在两个环境之间的配置会略有不同.
想象一下,在每个集群上运行一个内部Docker注册表,一个使用S3作为存储后端,一个使用GCS后端.注册表容器可以接受这些配置值作为环境变量或从文件中读取,这两个Kubernetes都表示支持,但是我应该如何为每个环境填充这些值?
基本上我想要的是一种让清单看起来像这样的方法,其中$()语法是在提交清单时在服务器上发生的变量插值:
---
apiVersion: v1
kind: Pod
metadata:
name: foo
spec:
containers:
- name: foo
image: foo
env:
- name: bar
value: $(etcdctl get /path/to/bar)
Run Code Online (Sandbox Code Playgroud)
我可以编写使用占位符作为值的模板,然后处理模板,从一些外部源中提取实际值,以生成实际提交给集群的最终清单.但是,我想我先问一个这样做的工具已经存在,或者有一些我不知道的Kubernetes祝福方式.这似乎是许多人为了使用Kubernetes而需要做的事情.
我曾经有过的其他想法包括在主机节点上使用etcd,confd和scripts的某些组合,但是这开始进入主机配置管理领域,我想以几乎所有成本避免这些领域.我正在使用CoreOS,主机完全通过coreos-cloudinit进行配置.换句话说,在创建节点时未定义的主机系统上没有任何操作,因此像Ansible这样的传统配置管理工具已经完成.
我知道Kubernetes的秘密系统,但其中一些变量值可能非常大,而且大多数都不是秘密.
已成功使用 Kubernetes 实施 Vault,并且在 K8s 中运行的应用程序正在从 HashicorpVault 获取环境变量。一切都很好!但是,想要向前迈出一步,每当对 Vault 中的密钥进行更改时都希望重新启动 pod,到目前为止,每当我们对 Vault 密钥进行更改时,我们都必须手动重新启动 pod 以重置环境变量。如何实现这一目标?听说过confd,但不知道如何实现它!