在pod/deployment
中设置imagePullSecrets
。
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: <your-private-image>
imagePullSecrets:
- name: registry
将以下代码块添加到你的init容器部分。
command: ["/bin/sh","-c"]
args: ["wget -O /jdbc-jar/ojdbc8-19.3.0.0.jar https://repo1.maven.org/maven2/com/oracle/ojdbc/ojdbc8/19.3.0.0/ojdbc8-19.3.0.0.jar"]
命令[["/bin/sh", "-c"]
意思是 "运行一个shell,并执行以下指令"。然后将args作为命令传递给shell。在shell脚本中,命令之间用分号隔开。在wget命令中,我添加了-O
标志,从指定的url下载jar,并将其保存为/jdbc-jar/ojdbc8-19.3.0.0.jar。要检查jar是否在容器中持久化。只需执行命令。
$ kubectl exec -it web-service-test -- /bin/bash
然后进入文件夹/jdbc-jar
(cd jdbc-jar
)并列出其中的文件(ls -al
)。你应该可以在那里看到你的jar。
使用stringData
可以使用纯文本值创建一个secret。
apiVersion: v1
kind: Secret
metadata:
name: big-secrets
type: Opaque
stringData:
secret-password: "secretMeow"
secret-key: "angryWoof"
database-password: "happyWhale"
但是,值得注意的是,它为方便起见提供了更多信息,并且文档说:
它是作为一种只写的方便方法提供的。所有key和value在写入时都会被合并到数据字段中(覆盖现有的值)。当从API读取时,它不会被输出。
对于如何读取secret的问题,如果您希望以编程方式进行使用,可以使用jq
之类的工具来解析Kubernetes
的输出并进行base64
解码:
kubectl get secret big-secrets -o json | jq -r '.data["secret-password"] | @base64d'
这将以JSON形式获取创建的secret(-o yaml
也可以选择),读取给定secret的数据字段(在这种情况下为secret-password
),然后对它进行base64
解码。
你可以使用shell的exec
将控制权从你最初的"外层"bash(负责完成你想要的初始化步骤)移交给一个新的bash(新的意思是它没有-c
,可以选择是一个登录的shell),它在你的预步骤之后运行,如下。
kubectl run sample -it --image=ubuntu:20.04 -- \
bash -c "apt update; apt install -y zip; exec bash -il"