zoukankan      html  css  js  c++  java
  • openshift 容器云从入门到崩溃之五《部署应用》

    1、配置部署模板

    配置好用户权限之后就可以部署应用了oc常用的两种部署方式:

    Deploy Image方式

    优点:这种方式是最简单的部署方式,你只需要有一个容器镜像就行了或者公开的docker hub 镜像

    缺点:但是这种方式的确定是不能随时变更,也不能提前定义其他配置

    比较适合部署那些不经常变更的第三方服务

    catalog方式(template)

    优点:可以基于模板提前定义各种配置包括build、service、deployments等

    缺点:一个类型的应用需要独立的模板

    比较适合自己开发的应用使用,使用template可以省去上线新应用的时间

    oc的catalog里面包括大量的模板常用的一些数据库一些开发环境都有

    下面主要说一下自定义个模板怎么创建

    # vim nginx-openresty.yaml
    
    apiVersion: template.openshift.io/v1
    kind: Template
    metadata:
      annotations:
        description: OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台,由中国人章亦春发起,提供了很多高质量的第三方模块。
        tags: nodejs
      creationTimestamp: 2018-10-10T07:17:57Z
      name: nginx-openresty
      namespace: openshift
      resourceVersion: "71699318"
      selfLink: /apis/template.openshift.io/v1/namespaces/openshift/templates/nginx-openresty
      uid: 9d1b5626-cc5c-11e8-a187-00163e0e008f
    objects:
    - apiVersion: v1
      kind: Route
      metadata:
        name: ${APP_NAME}
      spec:
        host: ${DOMAIN_NAME}
        to:
          kind: Service
          name: ${APP_NAME}
    - apiVersion: v1
      kind: Service
      metadata:
        name: ${APP_NAME}
      spec:
        ports:
        - name: ${APP_NAME}
          port: 8080
          targetPort: 8080
        selector:
          name: ${APP_NAME}
        type: ClusterIP
    - apiVersion: v1
      kind: ImageStream
      metadata:
        name: ${APP_NAME}
    - apiVersion: v1
      kind: BuildConfig
      metadata:
        labels:
          name: ${APP_NAME}
        name: ${APP_NAME}
      spec:
        output:
          to:
            kind: ImageStreamTag
            name: ${APP_NAME}:latest
        postCommit: {}
        resources: {}
        runPolicy: Serial
        source:
          contextDir: /
          git:
            ref: ${APP_SOURCE_REPOSITORY_REF}
            uri: ${APP_SOURCE_REPOSITORY_URL}
          sourceSecret:
            name: gitlab-user
          type: Git
        strategy:
          sourceStrategy:
            env:
            - name: env
              value: ${ENV}
            - name: Project_Name
              value: ${APP_NAME}
            from:
              kind: ImageStreamTag
              name: ${APP_BUILDER_IMAGE}
              namespace: openshift
          type: Source
        triggers:
        - imageChange: {}
        - type: ImageChang
    - apiVersion: v1
      kind: DeploymentConfig
      metadata:
        labels:
          name: ${APP_NAME}
        name: ${APP_NAME}
      spec:
        replicas: 1
        selector:
          name: ${APP_NAME}
        strategy:
          customParams:
            command:
            - /bin/sh
            - -c
            - sleep 5; echo slept for 5; /usr/bin/openshift-deploy
          type: Rolling
        template:
          metadata:
            labels:
              name: ${APP_NAME}
          spec:
            containers:
            - env:
              - name: ETCD_URL
                value: ${ETCD_URL}
              - name: env
                value: ${ENV}
              - name: NODE_ENV
                value: container
              image: ${APP_NAME}:latest
              livenessProbe:
                failureThreshold: 3
                httpGet:
                  path: /status
                  port: 80
                  scheme: HTTP
                initialDelaySeconds: 20
                periodSeconds: 10
                successThreshold: 1
                timeoutSeconds: 3
              name: ${APP_NAME}
              ports:
              - containerPort: 8080
                protocol: TCP
              readinessProbe:
                failureThreshold: 3
                httpGet:
                  path: /status
                  port: 80
                  scheme: HTTP
                initialDelaySeconds: 10
                periodSeconds: 10
                successThreshold: 1
                timeoutSeconds: 3
              resources:
                limits:
                  cpu: ${CPU_LIMIT}
                  memory: ${MEMORY_LIMIT}
                requests:
                  cpu: 50m
                  memory: 64Mi
              volumeMounts:
              - mountPath: /opt/configration
                name: configration
              - mountPath: /etc/localtime
                name: localtime
              - mountPath: /etc/timezone
                name: timezone
            volumes:
            - configMap:
                defaultMode: 420
                name: configration
              name: configration
            - hostPath:
                path: /etc/localtime
              name: localtime
            - hostPath:
                path: /etc/timezone
              name: timezone
        test: false
        triggers:
        - imageChangeParams:
            automatic: true
            containerNames:
            - ${APP_NAME}
            from:
              kind: ImageStreamTag
              name: ${APP_NAME}:latest
          type: ImageChange
        - type: ConfigChange
    parameters:
    - description: 项目名
      displayName: Name
      name: APP_NAME
      required: true
    - description: 对外暴露域名
      displayName: Project domain name
      name: DOMAIN_NAME
      required: true
    - description: 请输入Git地址.仅支持HTTP方式.
      displayName: Source Repository URL
      name: APP_SOURCE_REPOSITORY_URL
      required: true
      value: http://git.xxx.cn/ops/nginx-config.git
    - description: git仓库的默认分支或者版本号
      displayName: Git Reference
      name: APP_SOURCE_REPOSITORY_REF
      required: true
      value: config-a
    - description: git仓库的路径
      displayName: Context Directory
      name: CONTEXT_DIR
      value: /
    - description: 设定当前环境,比如test、bts
      displayName: ENV
      name: ENV
      required: true
    - description: build 时使用的基础镜像
      displayName: Base builder image of your app
      name: APP_BUILDER_IMAGE
      required: true
      value: openresty:1.11.2.3
    - description: 超过此请求额度会被强制重启.单位Mi/Gi.
      displayName: Memory Limits
      name: MEMORY_LIMIT
      required: true
      value: 64Mi
    - description: 超过此请求额度会被强制重启.单位m/g.
      displayName: CPU Limits
      name: CPU_LIMIT
      required: true
      value: 50m

     下一步导入到oc catalog里面

    # oc project openshift
    # oc oc create -f nginx-openresty.yaml

    在登陆oc的web console 就可以使用nginx-openresty模板部署应用了

    2、deployment策略

    deployment顾名思义是最终部署应用的重要环节,包括了变更策略、最终POD的运行配置等关键信息

    Deployment Strategy:

    这个是部署应用是的变更策略一共有三种策略

    Rolling(滚动升级)

    spec:
      strategy:
        rollingParams:
          intervalSeconds: 1
          maxSurge: 25%
          maxUnavailable: 25%
          timeoutSeconds: 600
          updatePeriodSeconds: 1
        type: Rolling

    Recreate(重新创建)

    spec:
      strategy:
        type: Recreate

     Custom(自定义)

     不常用

    Deployment Triggers:

    这个配置决定了什么情况下Deployment 才会触发

    ImageChange 镜像变更

    ConfigChange Deployment 配置变更

     
    spec:
       triggers:
        - imageChangeParams:
            automatic: true
            containerNames:
              - nginx-template
            from:
              kind: ImageStreamTag
              name: 'nginx-template:latest'
              namespace: test
          type: ImageChange
        - type: ConfigChange
      triggers:
        - imageChangeParams:
            automatic: true
            containerNames:
              - nginx-template
            from:
              kind: ImageStreamTag
              name: 'nginx-template:latest'
              namespace: test
          type: ImageChange   #镜像更新
        - type: ConfigChange   #Deployment 配置更新
  • 相关阅读:
    主机不能访问虚拟机CentOS中的站点
    linux安装redis
    java获去json所有对象
    Java nio和io
    [shell基础]——if/for/while/until/case 语句
    [shell基础]——整数比较;字符串比较;文件测试;逻辑测试符
    [shell基础]——数组
    [shell基础]——I/O重定向
    [shell基础]——tr命令
    [shell基础]——split命令
  • 原文地址:https://www.cnblogs.com/37yan/p/10412461.html
Copyright © 2011-2022 走看看