如何解决如何将应用程序 (flask-python + redis) docker push 到 gcr.io 并将应用程序部署到 google kubernetes 构建映像并将其发送到 GCR在 GKE 中使用新建的镜像
如何将我的应用(使用 python-flask + redis)推送到 gcr.io 并部署到 google kubernetes(通过 yaml 文件)? 我想为我的应用设置 env 变量
import os
import redis
from flask import Flask
from flask import request,redirect,render_template,url_for
from flask import Response
app = Flask(__name__)
redis_host = os.environ['REdis_HOST']
app.redis = redis.StrictRedis(host=redis_host,port=6379,charset="utf-8",decode_responses=True)
# Be super aggressive about saving for the development environment.
# This says save every second if there is at least 1 change. If you use
# redis in production you'll want to read up on the redis persistence
# model.
app.redis.config_set('save','1 1')
@app.route('/',methods=['GET','POST'])
def main_page():
if request.method == 'POST':
app.redis.lpush('entries',request.form['entry'])
return redirect(url_for('main_page'))
else:
entries = app.redis.lrange('entries',-1)
return render_template('main.html',entries=entries)
#Router my app by post and redirect to mainpage
@app.route('/clear',methods=['POST'])
def clear_entries():
app.redis.ltrim('entries',1,0)
return redirect(url_for('main_page'))
#use for docker on localhost
if __name__ == "__main__":
app.run(host='0.0.0.0',port=5000)
解决方法
将此答案作为社区 wiki 发布,以便为问题设置更多基线方法,而不是针对问题中包含的代码提供具体的解决方案。
随意编辑/扩展。
考虑到它可以通过许多不同的方式(如问题中所述,使用 Cloud Build 等)来解决这一事实,该主题可能相当广泛。
专门针对以下方面解决这个问题:
- 构建映像并将其发送到
GCR
。 - 在
GKE
中使用新建的映像。
构建映像并将其发送到 GCR
。
假设您的代码和整个 Docker 映像正确运行,您可以按以下方式构建/标记它,然后将其发送到 GCR
:
gcloud auth configure-docker
将 Docker credHelper 条目添加到 Docker 的 配置文件,如果文件不存在,则创建该文件。这会 将 gcloud 注册为所有 Google 支持的凭据帮助程序 Docker 注册表。
docker tag YOUR_IMAGE gcr.io/PROJECT_ID/IMAGE_NAME
docker push gcr.io/PROJECT_ID/IMAGE_NAME
之后你可以去:
-
GCP Cloud Console
(网络用户界面)->Container Registry
并查看您上传的图片。
在 GKE 中使用新建的镜像
要运行前面提到的图像,您可以:
- 在
Deployment
中创建Cloud Console
(Kubernetes Engine
->Workloads
->Deploy
)
附注!
您还可以在其中添加您选择的环境变量(如问题中所述)
- 使用与以下类似的
YAML
清单创建它:
apiVersion: apps/v1
kind: Deployment
metadata:
name: amazing-app
labels:
app: amazing-app
spec:
replicas: 3
selector:
matchLabels:
app: amazing-app
template:
metadata:
labels:
app: amazing-app
spec:
containers:
- name: amazing-app
image: gcr.io/PROJECT-ID/IMAGE-NAME # <-- IMPORTANT!
env:
- name: DEMO_GREETING
value: "Hello from the environment"
请具体看以下部分:
env:
- name: DEMO_GREETING
value: "Hello from the environment"
这部分将在每个容器内创建一个环境变量:
$ kubectl exec -it amazing-app-6db8d7478b-4gtxk -- /bin/bash -c 'echo $DEMO_GREETING'
Hello from the environment
其他资源:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。