tl;drPod
当镜像来自托管在同一 k8s 集群上的私有 docker 注册表且没有单独的注册表 DNS 条目时,如何在 Kubernetes 中引用该镜像?
在本地 Kubernetes 部署中,我使用stable/docker-registry helm 图表和自签名证书设置了一个私有 Docker 注册表。这是本地部署的,我无法设置 DNS 记录来为注册表提供其自己的 URL。我希望使用这些清单作为模板,因此我不想对任何特定于环境的配置进行硬编码。
docker 注册表服务的类型ClusterIP
如下所示:
apiVersion: v1
kind: Service
metadata:
name: docker-registry
labels:
app: docker-registry
spec:
type: ClusterIP
ports:
- port: 443
protocol: TCP
name: registry
targetPort: 5000
selector:
app: docker-registry
Run Code Online (Sandbox Code Playgroud)
如果我手动将图像推送到此注册表(或将来通过 Jenkins 构建管道),我将如何在规范中引用该图像Pod
?
我努力了:
containers:
- name: my-image
image: docker-registry.devops.svc.cluster.local/my-image:latest
imagePullPolicy: IfNotPresent
Run Code Online (Sandbox Code Playgroud)
但我收到了有关节点主机无法解析的错误docker-registry.devops.svc.cluster.local
。我认为 k8s 节点上的 Docker 守护进程无法解析该 URL,因为它是内部 k8s DNS 记录。
Warning Failed 20s …
Run Code Online (Sandbox Code Playgroud) 我需要将集群、命名空间和 pod 名称从我部署在 Kubernetes 集群中的容器传递给 AppDynamics 代理。
我尝试了以下内容,但这不起作用。
containers:
- env:
- name: JAVA_OPTS
value: -Dappdynamics.agent.nodeName=$HOST-$spec.nodeName-spec.PodName
Run Code Online (Sandbox Code Playgroud)
和
- name: appdynamics.agent.nodeName
value= $HOST-$spec.nodeName-spec.PodName
Run Code Online (Sandbox Code Playgroud)
任何人都可以在这里帮助我如何收集详细信息并传递给AppD。提前致谢。