我计划在我的Kubernetes集群基础设施中部署一个应用程序。 我将镜像推送到DockerHub仓库。如何从DockerHub拉取镜像?
我计划在我的Kubernetes集群基础设施中部署一个应用程序。 我将镜像推送到DockerHub仓库。如何从DockerHub拉取镜像?
创建Docker注册表secret的一行命令
kubectl create secret docker-registry regcred --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email> -n <your-namespace>
然后您可以在 spec 下使用它在部署文件中。
spec:
containers:
- name: private-reg-container-name
image: <your-private-image>
imagePullSecrets:
- name: regcred
kubectl
在节点内运行Docker?这样我就可以手动尝试镜像拉取(我似乎无法通过SSH登录到我的节点)。 - ekkisKubernetes在幕后运行docker pull pseudo/your-image:latest
。Kubernetes资源中的image
字段只是要运行的docker镜像。
spec:
containers:
- name: app
image: pseudo/your-image:latest
[...]
由于Docker镜像名称中不包含特定的Docker注册表网址,因此默认为docker.io。实际上,您的镜像是docker.io/pseudo/your-image:latest
如果您的镜像托管在私有Docker hub仓库中,则需要在spec字段中指定镜像拉取密钥。
spec:
containers:
- name: app
image: pseudo/your-image:latest
imagePullSecrets:
- name: dockerhub-credential
这里是创建包含您的Docker Hub登录信息的密钥的文档:https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
kubectl run my-new-pod --image=<一个 DockerHub 镜像名称>
命令来构建 Pod。那么有没有类似于 docker pull
的命令呢? - ekkisdocker pull
或 kubectl set image
示例 YAML 部署apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
启动容器并使用 kubectl get deployments
命令显示部署状态。
结果
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 18s
现在使用set image
在Kubernetes中更新图像
kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1
并使用 rollout
显示状态更新图像
kubectl rollout status deployment/nginx-deployment
ngnix
是容器的名称->name
。 containers:
- name: nginx
image: nginx:1.14.2
nginx:1.16.1
是 Docker Hub 中的镜像版本,建议更改版本以进行更新。
如果您决定删除更新并回滚到先前的版本,请使用 rollout undo
命令。
kubectl rollout undo deployment/nginx-deployment
欲了解更多信息,请使用文档。
#!/bin/bash
for ns in $(kubectl get namespaces |grep -v NAME|awk '{print $1}')
do
kubectl create secret docker-registry docker.registry \
--docker-username=<MyAccountName> \
--docker-password='MyDockerHubPassword' -n $ns
done
for ns in $(kubectl get namespaces|grep -v NAME|awk '{print $1}')
do
for sa in $(kubectl -n $ns get sa|grep -v SECRETS|awk '{print $1}')
do
kubectl patch serviceaccount $sa -p '{"imagePullSecrets": [{"name": "docker.registry"}]}' -n $ns
if [ $? -eq 0 ]; then
echo $ns $sa patched
else
echo Error patching $ns $sa
fi
done
done
如果您希望,可以仅修补特定的命名空间。
让我知道进展如何。
[RepoHost]/[ProjectID]/[RrepoName]:[Tag]
组成。如果省略[RepoHost]
,则Docker会将dockerhub(docker.io)作为默认值。关于TLS握手t/o,我不确定在您的情况下是什么原因导致了这个问题。 - fishi0x01Pod
上运行kubectl -n <namespace> describe po <pod>
命令输出可能会有所帮助。 - Konstantin Vustin