zoukankan      html  css  js  c++  java
  • k8s+rancher+阿里云镜像简单部署flask项目

    k8s+rancher+阿里云镜像简单部署flask项目

    • k8s简单部署一个flask项目示例,镜像从阿里镜像仓库拉取。首先搭建一个k8s集群,用kubeadm,二进制都可以。

    1.示例项目准备

    • 项目目录:
    simpleweb
    	|—————Dockerfile# 镜像构建文件
    	|_____gunicorn.conf# gunicorn启动项目
    	|_____run.py# 项目代码
    
    • Dockerfile
    FROM python:3.6.8
    ADD ./requirements.txt /requirements
    RUN pip3 install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
    ADD . /simpleweb
    
    • gunicorn.conf
    workers = 1
    threads = 1
    bind = "0.0.0.0:9005"
    worker_connections = 1000
    accesslog = "-"
    errorlog = "-"
    loglevel = "debug"
    
    • run.py
    from flask import Flask
    import os
    
    app = Flask(__name__)
    
    @app.route("/index/")
    def index():
        user = os.environ.get("USER")
        password = os.environ.get("PASS")
        return f"{user}_{password}"
        
    @app.route("/version/")
    def index():
        env = os.environ.get("ENV")
        version = os.environ.get("WEBVERSION")
        return f"{env}_{version}"
    

    2.镜像上传阿里镜像管理

    • 打包镜像
    docker build -t simpleweb:lastest .
    
    • 登陆镜像仓库
    docker login --username=xujunkai123 registry.cn-hangzhou.aliyuncs.com
    # 然后输入密码
    
    • 给镜像打tag
    docker tag <Image Id> registry.cn-hangzhou.aliyuncs.com/webproject/simpleweb:lastest
    # webproject 为镜像仓库创建命名空间,需要在阿里云镜像仓库创建
    
    • 推送镜像到镜像仓库
    docker push registry.cn-hangzhou.aliyuncs.com/webproject/simpleweb:lastest
    

    3.rancher添加阿里云镜像仓库凭证

    • k8s在default 命名空间点击资源选择密文,镜像仓库凭证,添加凭证
    1.填写名称
    2.点击自定义
    3.输入用户名密码
    
    • 添加配置项:simpleweb-configmap.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: simpleweb-configmap
    data:
      env: "dev"
      webVersion: "v1" 
    
    • 添加要配置密码:simpleweb-secret.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: db-user-pass
    type: Opaque
    data:
      username: YWRtaW4=
      password: MWYyZDFlMmU2N2Rm
    # 注意Secret主要存储敏感数据,被base64加密
    
    • 编写部署yaml:simpleweb.yaml
    apiVersion: apps/v1
    kind: Deployment# 采用deployment部署
    metadata:
      name: simpleweb
      namespace: default# 默认命名空间
      labels:
        app: simpleweb
    spec:
      replicas: 1# 副本设置1个
      selector:
        matchLabels:
          app: simpleweb
      strategy:# 升级策略,这里副本是一个
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 0
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: simpleweb
        spec:
          containers:#容器相关配置
            - args:# 启动命令
                - gunicorn
                - -c
                - gunicorn.conf
                - run:app
              env:# 这里通过变量注入的方式配置相关参数,你也可以通过数据挂载的方式将配置挂载到容器指定目录下
                - name: USER
                  valueFrom:
                    secretKeyRef:
                      name: db-user-pass
                      key: username
                - name: PASS
                  valueFrom:
                    secretKeyRef:
                      name: db-user-pass
                      key: password
                - name: ENV
                  valueFrom:
                    configMapKeyRef:
                      name: simpleweb-configmap
                      key: env
                - name: WEBVERSION
                  valueFrom:
                    configMapKeyRef:
                      name: simpleweb-configmap
                      key: webVersion
              image: registry.cn-hangzhou.aliyuncs.com/webproject/simpleweb:lastest# 镜像地址
              imagePullPolicy: Always
              name: simpleweb
              ports:# 暴漏端口
                - containerPort: 9005
                  name: 9005tcp01
                  protocol: TCP
              workingDir: /simpleweb
          imagePullSecrets:# 添加密钥凭据
            - name: aliyun
          restartPolicy: Always
          terminationGracePeriodSeconds: 5
    
    • 添加service暴漏应用:simplewebsvc.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: simplewebsvc
      namespace: default
      labels:
        app: simplewebsvc
    spec:
      ports:
        - name: 9005tcp01
          port: 9005
          protocol: TCP
          targetPort: 9005# 容器端口
      selector:
        app: simpleweb# 指向pod
      type: NodePort
    
    • 执行部署
    kubectl create -f simpleweb-secret.yaml
    kubectl create -f simpleweb-configmap.yaml
    kubectl create -f simpleweb.yaml
    kubectl create -f simplewebsvc.yaml
    
    • 验证
    http://192.168.1.8:30566/index/
    # 30566ß为暴漏随机端口
    
  • 相关阅读:
    CALayer3层的属性
    CALayer1简介
    网络处理2异步POST请求和同步请求
    网络处理1异步GET请求
    【ObjectiveC】05第一个OC的类
    CALayer4自定义层
    .Net网站不能预编译以及不能请求的调试过程
    (源码)WinForm TextBox 实现自动索引功能
    分享一个WinForm里面自定义的MessageBox
    C#操作十六进制数据以及十进制与十六进制互相转换
  • 原文地址:https://www.cnblogs.com/xujunkai/p/14854241.html
Copyright © 2011-2022 走看看