-1

如何将我的应用程序(使用 python-flask + redis)推送到 gcr.io 并部署到 google kubernetes(通过 yaml 文件)?我想为我的应用程序设置环境变量

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', 0, -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)
4

1 回答 1

1

将此答案作为社区 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 中使用新建的镜像

要运行前面提到的图像,您可以:

  • DeploymentCloud 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

其他资源:

于 2021-06-21T07:26:37.903 回答