我一直试图使用kubectl创建一个简单的"run"命令,但没有成功。通过该命令,容器将启动并传入(部分(参数,以最初创建我的证书(我最初将通过PowerShell手动创建(,并可以通过社区的一些输入来完成。
我的环境:
- (本地(带PowerShell的Windows 10
- (远程(Azure Kubernetes群集
我的工作由两个关键命令组成,第一个是为容器创建覆盖(以JSON形式((主要是为了安装我希望存储证书的Azure文件共享(:
$override= '{ "spec": { "template": { "spec": { "containers": [ { "name": "certbot", "image": "certbot/certbot", "stdin": true, "tty": true, "volumeMounts": [{ "name": "certdata", "mountPath": "/etc/letsencrypt" }] } ], "volumes": [{ "name": "certdata", "persistentVolumeClaim": { "claimName": "azure-fileshare" } }] } } } }' | ConvertTo-Json
第二个是kubectl run命令,它将被用作CronJob的基础(一旦我正确地完成了创建CronJob本身就是我的下一个任务(:
kubectl run -i --rm --tty certbot --namespace=prod --overrides=$override --image=certbot/certbot -- certonly --manual
我已经尝试了许多变体,这种方法似乎是最干净的。然而,我目前收到了来自Kubernetes的以下回复:
Error attaching, falling back to logs: unable to upgrade connection: container certbot not found in pod certbot-9df67bd65-w96rq_prod
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Certbot doesn't know how to automatically configure the web server on this system. However, it can still get a certificate for you. Please run "certbot certonly" to do so. You'll need to manually configure your web server to use the resulting certificate.
警告的后一部分表明certbot没有接收到任何参数(在本例中为"certonly"one_answers"--manual"(,但我不清楚哪里出了问题。我觉得我已经用Kubernetes&certbot文档,看不到任何明显的问题。
有人能指出这里的小妖精吗?
注意:我已经成功地在本地使用Docker测试了这种方法,现在正试图在Azure中重新创建它。
你不需要从图像中创建一个图像就可以了,只需要创建一个这样的pod:
apiVersion: v1
kind: Pod
metadata:
name: certbot
spec:
containers:
- name: certbot
image: certbot/certbot
command: ["/bin/sh"] << this overrides entrypoint
restartPolicy: Never
https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/