尝试在本地环境中使用Pod安装示例容器应用程序 我正在使用Docker桌面随附的kubernates集群。
我正在使用带有YML文件的bellow命令创建Pod kubectl创建-f test_image_pull.yml
apiVersion: v1
kind: Pod
metadata:
# value must be lower case
name: sample-python-web-app
spec:
containers:
- name: sample-hello-world
image: local/sample:latest
imagePullPolicy: Always
command: ["echo", "SUCCESS"]
用于构建映像的docker文件,并且如果您与docker run一起运行,则该容器可以正常运行
# Use official runtime python
FROM python:2.7-slim
# set work directory to app
WORKDIR /app
# Copy current directory
COPY . /app
# install needed packages
RUN pip install --trusted-host pypi.python.org -r requirement.txt
# Make port 80 available to outside container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python" , "app.py"]
from flask import Flask
from redis import Redis, RedisError
import os
import socket
#connect to redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
try:
visits = redis.incr("counter")
except RedisError:
visits = "<i>cannot connect to Redis, counter disabled</i>"
html = "<h3>Hello {name}!</h3>" \
"<b>Hostname:</b> {hostname}<br/>" \
"<b>Visits:</b> {visits}"
return html.format (
name=os.getenv("NAME", "world"),
hostname=socket.gethostname(),
visits=visits
)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=80)
Flask
Redis
一旦我描述了Pod,它就会向我显示以下错误
kubectl描述了pod sample-python-web-app
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 3m25s default-scheduler Successfully assigned default/sample-python-web-app to docker-desktop
Normal Pulling 97s (x4 over 3m22s) kubelet, docker-desktop Pulling image "local/sample:latest"
Warning Failed 94s (x4 over 3m17s) kubelet, docker-desktop Failed to pull image "local/sample:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for local/sample, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
Warning Failed 94s (x4 over 3m17s) kubelet, docker-desktop Error: ErrImagePull
Normal BackOff 78s (x6 over 3m16s) kubelet, docker-desktop Back-off pulling image "local/sample:latest"
Warning Failed 66s (x7 over 3m16s) kubelet, docker-desktop Error: ImagePullBackOff
答案 0 :(得分:0)
如果要为Kubernetes集群设置本地存储库,则可以遵循this指南。
我建议使用Trow.io(一种Kubernetes的映像管理)来快速创建一个运行Kubernetes的注册表,并提供一种安全快速的方法来使容器在集群上运行。
我们正在为Kubernetes(以及其他协调器)构建图像管理解决方案。它的核心是运行在集群内部的Trow注册表,它易于设置并且与Kubernetes完全集成,包括对审计和RBAC的支持。
为什么“拖曳”
“ Trow”是一个具有多种不同含义的词。在设得兰群岛的民间传说中,一条拖网是一种小型的调皮的生物,类似于斯堪的纳维亚的巨魔。在英格兰,这是一种古老的货船,在河上运输货物。最后,它是一个古老的词,意为“思考,相信或信任”。读者可以自由选择他们最喜欢的解释,但应以“眉”押韵。
here中描述了整个安装过程。
答案 1 :(得分:0)
Kubernetes从Docker注册表中提取容器映像。根据{{3}}:
您创建Docker映像并将其推送到注册表之前, 在Kubernetes窗格中引用它。
此外:
容器的
image
属性支持与 docker命令执行此操作,包括私有注册表和标签。
因此,在pod的规范中引用映像的方式-“ image:local / sample:latest”-Kubernetes在Docker Hub上查找名为 “ local”的存储库中的映像。 >
您可以将映像推送到Docker Hub或其他公共或私有Docker外部注册表;您可以在Kubernetes集群上托管Docker Registry;或者,您可以在容器中本地运行Docker Registry。
致doc:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
接下来,找到主机的IP地址是什么-下面,我将以10.0.2.1
为例。
然后,假设图像名称为“ local / sample:latest”,则标记图像:
docker tag local/sample:latest 10.0.2.1:5000/local/sample:latest
...并将图像推送到本地注册表:
docker push 10.0.2.1:5000/local/sample:latest
接下来,更改pod的配置YAML中如何引用图像-从
image: local/sample:latest
到
image: 10.0.2.1:5000/local/sample:latest
重新启动广告连播。
编辑:很有可能必须将本地Docker守护程序配置为将本地Docker注册表视为run a Docker registry locally。 insecure描述了一种配置方式-只需用主机的IP(例如10.0.2.1
)替换“ myregistrydomain.com”即可。 Docker Desktop还允许编辑守护程序的配置文件here。