ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

在OpenShift上导出应用YAML配置并重新部署应用

2020-12-07 13:57:37  阅读:580  来源: 互联网

标签:yaml object oc YAML 应用 yq OpenShift delete


文章目录

在OpenShift上导出应用YAML配置并重新部署应用

文章目录

前言

在之前的文章中介绍了如何在OpenShift上部署Spring Boot应用:

本文描述了如何在OpenShift中导出应用的YAML配置,并重新部署应用。通过本文也展示了OpenShift (或Kubernetes)的Infrastructure as Code的特点。

示例项目:https://github.com/cookcodeblog/spring-db-demo

导出OpenShift YAML

spring-db-demo项目下创建templates目录。

templates/目录下执行:

# use william-spring-demo project
oc project william-spring-demo

# 列出项目的资源
oc get all -o name

# 列出不属于项目但是项目需要用到的资源,比如configmap, secret, volume, pvc, rolebinding等
oc get configmap
oc get secret
oc get pvc
oc get rolebinding

导出OpenShift YAML文件:

# spring-db-demo
oc get imagestream/spring-db-demo -o yaml > image-stream.yaml
oc get buildconfig/spring-db-demo -o yaml > build-config.yaml
oc get deploymentconfig/spring-db-demo -o yaml > deployment-config.yaml
oc get route/spring-db-demo -o yaml > route.yaml
oc get service/spring-db-demo -o yaml > service.yaml
oc get configmap/spring-db-demo -o yaml > config-map.yaml
oc get rolebinding/view -o yaml > role-binding-view.yaml

# mysql
oc get deploymentconfig/mysql -o yaml > deployment-config-mysql.yaml
oc get service/mysql -o yaml > service-mysql.yaml
oc get secret/mysql -o yaml > secret-mysql.yaml

删除导出的Yaml中多余的字段

删除多余的字段:

  • OpenShift自动生成的字段
  • namespace 支持在任意namespace上部署
  • host 不硬编码route的Host
  • clusterIP 不硬编码service的clusterIP
for object in $(find . -name '*.yaml')
do 
  yq delete -i $object metadata.managedFields
  yq delete -i $object metadata.creationTimestamp
  yq delete -i $object metadata.resourceVersion
  yq delete -i $object metadata.selfLink
  yq delete -i $object metadata.uid
  yq delete -i $object metadata.generation
  yq delete -i $object 'metadata.annotations."app.openshift.io/vcs-ref"'
  yq delete -i $object 'metadata.annotations."app.openshift.io/vcs-uri"'
  yq delete -i $object 'metadata.annotations."openshift.io/generated-by"'
  yq delete -i $object 'metadata.annotations."openshift.io/host.generated"'
  yq delete -i $object 'metadata.labels."template.openshift.io/template-instance-owner"'
  yq delete -i $object 'metadata.annotations."template.openshift.io/expose-*"'
  yq delete -i $object metadata.namespace
  yq delete -i $object status
  yq delete -i $object spec.host
  yq delete -i $object spec.clusterIP
  yq delete -i $object 'subjects[0].namespace'
done

或执行脚本:

bash ../scripts/clean_openshift_yaml.sh

说明:

  • 需要本地安装yq Yaml命令行工具,Mac OS上可以用brew install yq来安装。

去掉Build Config的triggers(可选)

去掉以下triggers:

  • generic
  • github
  • imageChange

保留一下triggers:

  • configChange
for object in $(find . -name 'build-config*.yaml')
do 
  yq delete -i $object 'spec.triggers.(type==Generic)'
  yq delete -i $object 'spec.triggers.(type==GitHub)'
  yq delete -i $object 'spec.triggers.(type==ImageChange)'
done

或执行脚本:

bash ../scripts/clean_openshift_build_config.sh

说明:

  • 去掉GitHub trigger后,需要手工构建,或配置CICD pipeline来在代码变更时自动触发构建。

修改DeploymentConfig

spec.spec.containers.image的值设置为' '

删除ImageChange trigger的from.namespacelastTriggeredImage

注意:不要修改MySQL数据库的DeploymentConfig,不然会导致数据库无法启动。

for object in $(find . -name 'deployment-config.yaml')
do 
  yq write -i $object 'spec.template.spec.containers[0].image' ' '
  yq delete -i $object 'spec.triggers.(type==ImageChange).imageChangeParams.from.namespace'
  yq delete -i $object 'spec.triggers.(type==ImageChange).imageChangeParams.lastTriggeredImage'
done

或执行脚本:

bash ../scripts/clean_openshift_deployment_config.sh

在一个新的项目中测试

templates/目录下:

# Create a new openshift project and switch to it
oc new-project william-spring-temp
oc project

# Apply YAML files to create OpenShift resources
oc apply -f .

打开OpenShift web console,查看重新部署后的应用程序和数据库是否工作正常。

参考从零开始在OpenShift上开发和部署Spring Boot应用,在数据库上创建表结构和初始化数据,然后进行测试。

参考文档

标签:yaml,object,oc,YAML,应用,yq,OpenShift,delete
来源: https://blog.csdn.net/nklinsirui/article/details/110817206

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有