在Kubernetes缩放期间触发curl命令



我有一个应用程序,它使用每次新安装所需的安装令牌(令牌不能多次使用(。我创建了一个可以卷曲到的api,当我运行它时,它将用新的安装令牌重新创建我的secret.yaml文件

当我运行时,有没有办法触发curl命令执行

kubectl scale deployment --replicas=x

以便CCD_ 2在创建新吊舱之前进行更新?

我知道我可以每分钟运行一个cronjob,但我希望它最终能够自动扩展,所以如果我能在从部署yaml创建新pod之前更新秘密文件,那将是理想的选择。

由于@Lei Yang已经提出了这个问题的解决方案,我决定提供一个社区Wiki答案,以便更好地为其他社区成员提供可见性。

每次扩展部署时,使用init容器是触发curl命令的好方法。如文档中所述,init容器可以包含应用程序映像中不存在的实用程序或设置脚本。


我创建了一个简单的示例来说明init容器如何使用curl命令。

首先,我创建了一个包含init-curlinit容器的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命令。

相关内容

  • 没有找到相关文章

最新更新