我有一个应用程序,它使用每次新安装所需的安装令牌(令牌不能多次使用(。我创建了一个可以卷曲到的api,当我运行它时,它将用新的安装令牌重新创建我的secret.yaml
文件
当我运行时,有没有办法触发curl命令执行
kubectl scale deployment --replicas=x
以便CCD_ 2在创建新吊舱之前进行更新?
我知道我可以每分钟运行一个cronjob,但我希望它最终能够自动扩展,所以如果我能在从部署yaml创建新pod之前更新秘密文件,那将是理想的选择。
由于@Lei Yang已经提出了这个问题的解决方案,我决定提供一个社区Wiki答案,以便更好地为其他社区成员提供可见性。
每次扩展部署时,使用init容器是触发curl
命令的好方法。如文档中所述,init容器可以包含应用程序映像中不存在的实用程序或设置脚本。
我创建了一个简单的示例来说明init容器如何使用curl
命令。
首先,我创建了一个包含init-curl
init容器的app-1
部署:
注意:我使用了curlimages/ccurl映像,它是curl docker团队生成的官方curl映像。
$ cat app-1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: app-1
name: app-1
spec:
selector:
matchLabels:
app: app-1
template:
metadata:
labels:
app: app-1
spec:
initContainers:
- name: init-curl
image: curlimages/curl
command: ['sh', '-c', 'curl example.com']
containers:
- image: nginx
name: nginx
创建部署后,我们可以检查init-curl
是否正常工作:
$ kubectl apply -f app-1.yaml
deployment.apps/app-1 created
$ kubectl get pods | grep app-1
app-1-f6d7cdd68-hfp78 1/1 Running 0 12s
$ kubectl logs -f app-1-f6d7cdd68-hfp78 init-curl
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
现在让我们尝试扩展app-1
部署:
$ kubectl scale deployment app-1 --replicas=2
deployment.apps/app-1 scaled
$ kubectl get pods | grep app-1
app-1-f6d7cdd68-hfp78 1/1 Running 0 6m1s
app-1-f6d7cdd68-wbchx 1/1 Running 0 5s
$ kubectl logs -f app-1-f6d7cdd68-wbchx init-curl
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1256 100 1256 0 0 2043 0 --:--:-- --:--:-- --:--:-- 2042
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
正如我们所看到的,它按预期工作,每次扩展部署时都会执行curl
命令。