《OpenShift 4.x HOL教程汇总》
说明:本文已经在OpenShift 4.10环境中验证

文章目录

  • 说明
  • 客户端环境
  • 配置Knative环境
    • 安装OpenShift Serverless Operator
    • 用控制台创建Knative Serving应用运行环境
    • 用脚本创建Knative Serving应用运行环境
  • 部署并测试Hello的Serverless应用

说明

OpenShift Serverless Operator为无服务器应用提供提供了Knative Serving和Knative Eventing的运行环境。只需要以下步骤就可以在OpenShift上运行Knative应用:安装所需的Operator和配置Knative Serving运行环境。

客户端环境

从以下地址下载对OpenShift Client和Knative Client。

$ curl -L https://mirror.openshift.com/pub/openshift-v4/clients/serverless/latest/kn-linux-amd64.tar.gz | tar -xzf -
$ curl -L https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-client-linux.tar.gz | tar -xzf -
$ sudo mv kn oc kubectl /usr/local/bin

执行命令下载以下客户端程序,它们会在后面操作中使用到。

$ curl -Lo stern https://github.com/wercker/stern/releases/download/1.9.0/stern_linux_amd64
$ curl -Lo hey https://hey-release.s3.us-east-2.amazonaws.com/hey_linux_amd64
$ curl -Lo yq https://github.com/mikefarah/yq/releases/download/3.2.1/yq_linux_amd64
$ chmod +x stern hey yq
$ sudo mv stern hey yq /usr/local/bin

配置Knative环境

我们可以用OpenShift控制台或OpenShift命令行创建Knative及其所需的运行环境。

安装OpenShift Serverless Operator

注意:通过OpenShift Console安装OpenShift Serverless Operator时候,OpenShift会自动安装OpenShift Serverless Operator所依赖的Service Mesh Operator,因此Operator的安装过程非常简单。

  1. 用集群管理员登录 OpenShift Console。
  2. 在Administrator视图中进入Operators->OperatorHub,然后找到“Red Hat OpenShift Serverless”,点击进入。
  3. 在右滑窗口中接受所有缺省配置,然后在“Install Operator”页面中接受默认选项,再点击Install。。
  4. 完后上一步后,可以在Operators->Installed Operators中看到安装好的Red Hat OpenShift Serverless。此时就完成了OpenShift Serverless Operator安装。

用控制台创建Knative Serving应用运行环境

Knative Serving提供了Serverless应用的支撑运行环境。Knative Serving必须安装在knative-serving项目中。

  1. 确认已经有了knative-serving项目。
$ oc get project knative-serving
  1. 切换到knative-serving项目,再次进入Operators->Installed Operators,然后进入OpenShift Serverless的配置。
  2. 在Overview页面中点击Knative Serving区域的Create Instance链接。
  3. 在Create Knative Serving界面中接受缺省配置,然后点击Create。
  4. 然后进入名为knative-serving的Knative Serving配置。需要等一段时间,直到下图中5个状态全部为True,此时就成功创建了Knative Serving环境。

用脚本创建Knative Serving应用运行环境

  1. 创建knative-serving.yaml文件,内容为以下部分:
apiVersion: v1
kind: Namespace
metadata:name: knative-serving
---
apiVersion: operator.knative.dev/v1alpha1
kind: KnativeServing
metadata:name: knative-servingnamespace: knative-serving
  1. 执行命令创建项目和KnativeServing资源
$ oc apply -f knative-serving.yaml
  1. 查看knative-serving的状态,成功完成后显示以下内容。
$ oc get knativeserving.operator.knative.dev/knative-serving -n knative-serving --template='{{range .status.conditions}}{{printf "%s =%s\n" .type .status}}{{end}}'
DependenciesInstalled =True
DeploymentsAvailable =True
InstallSucceeded =True
Ready =True
VersionMigrationEligible =True

部署并测试Hello的Serverless应用

  1. 创建knative-demo项目。
$ oc new-project knative-demo
  1. 部署Knative的Hello应用。其中“–env TARGET=Knative”是将字符串传给TARGET环境变量。
$ kn service create hello --image gcr.io/knative-samples/helloworld-go --env TARGET=Knative
Creating service 'hello' in namespace 'knative-demo':0.061s The Route is still working to reflect the latest desired specification.0.094s ...0.131s Configuration "hello" is waiting for a Revision to become ready.21.853s ...21.913s Ingress has not yet been reconciled.21.999s Waiting for load balancer to be ready22.245s Ready to serve.Service 'hello' created to latest revision 'hello-00001' is available at URL:
https://hello-knative-demo.apps.cluster-jzmgb.jzmgb.sandbox866.opentlc.com
  1. 查看Knative的Service列表。
$ kn service list
NAME    URL                                                                          LATEST        AGE   CONDITIONS   READY   REASON
hello   https://hello-knative-demo.apps.cluster-jzmgb.jzmgb.sandbox866.opentlc.com   hello-00001   80s   3 OK / 3     True
  1. 查看knative-demo项目中的所有资源,其中包括Knative的configuration、service、revision、route对象,还有OpenShift的service、deployment、rs对象。注意:当前项目中还没有pod资源。
$ oc get all -n knative-demo
NAME                            TYPE           CLUSTER-IP       EXTERNAL-IP                                                       PORT(S)                             AGE
service/hello                   ExternalName   <none>           cluster-local-gateway.knative-serving-ingress.svc.cluster.local   <none>                              10m
service/hello-nvhqs-1           ClusterIP      172.30.69.130    <none>                                                            80/TCP                              10m
service/hello-nvhqs-1-private   ClusterIP      172.30.125.146   <none>                                                            80/TCP,9090/TCP,9091/TCP,8022/TCP   10mNAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/hello-nvhqs-1-deployment   0/0     0            0           10mNAME                                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/hello-nvhqs-1-deployment-66db57b95f   0         0         0       10mNAME                                         CONFIG NAME   K8S SERVICE NAME   GENERATION   READY   REASON
revision.serving.knative.dev/hello-nvhqs-1   hello         hello-nvhqs-1      1            TrueNAME                                      LATESTCREATED   LATESTREADY     READY   REASON
configuration.serving.knative.dev/hello   hello-nvhqs-1   hello-nvhqs-1   TrueNAME                              URL                                                                                      READY   REASON
route.serving.knative.dev/hello   http://hello.knative-demo.apps.cluster-shanghai-3d3e.shanghai-3d3e.example.opentlc.com   TrueNAME                                URL                                                                                      LATESTCREATED   LATESTREADY     READY   REASON
service.serving.knative.dev/hello   http://hello.knative-demo.apps.cluster-shanghai-3d3e.shanghai-3d3e.example.opentlc.com   hello-nvhqs-1   hello-nvhqs-1   True
  1. 在OpenShift Console中进入knative-demo项目的Developer视图,可以看到和hello应用相关的资源。
  2. 访问hello应用的地址,确认可以返回“Hello Knative!”,其中“Knative”为传进去的环境变量。
$ curl $(kn route list hello --no-headers | awk 'NR==1 {print $2}')
Hello Knative!
  1. 此时立即执行以下命令,确认此时可以查看项目在运行的Pod资源。不过在一分钟以后会又看不到Pod了。
$ oc get pod
NAME                                          READY   STATUS    RESTARTS   AGE
hello-00001-1-deployment-a0cd0125-cfvny   2/2     Running   0          22s
  1. 更新名为hello的service的环境变量内容。
$ kn service update hello --env TARGET=Kn
Updating Service 'hello' in namespace 'knative-demo':10.760s Traffic is not yet migrated to the latest revision.10.871s Ingress has not yet been reconciled.12.231s Ready to serve.Service 'hello' updated with latest revision 'hello-00002' and URL:
https://hello-knative-demo.apps.cluster-jzmgb.jzmgb.sandbox866.opentlc.com
  1. 访问hello应用的地址,确认可以返回结果已经变化。
$  curl $(kn route list hello --no-headers | awk 'NR==1 {print $2}')
Hello Kn!
  1. 查看项目所有资源,确认OpenShift的deployment、rs对象和Knative的revision对象都已经有了一个新版的配置。
$ oc get all
NAME                                            READY   STATUS    RESTARTS   AGE
pod/hello-00002-deployment-7db4b4c569-cgxdx   2/2     Terminating   0          82s
pod/hello-00002-deployment-7db4b4c569-xswjf   2/2     Running       0          11sNAME                          TYPE           CLUSTER-IP       EXTERNAL-IP                                                  PORT(S)                                      AGE
service/hello                 ExternalName   <none>           kourier-internal.knative-serving-ingress.svc.cluster.local   80/TCP                                       28m
service/hello-00001           ClusterIP      172.30.92.110    <none>                                                       80/TCP                                       28m
service/hello-00001-private   ClusterIP      172.30.39.193    <none>                                                       80/TCP,9090/TCP,9091/TCP,8022/TCP,8012/TCP   28m
service/hello-00002           ClusterIP      172.30.239.246   <none>                                                       80/TCP                                       82s
service/hello-00002-private   ClusterIP      172.30.250.245   <none>                                                       80/TCP,9090/TCP,9091/TCP,8022/TCP,8012/TCP   82sNAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/hello-00001-deployment   0/0     0            0           28m
deployment.apps/hello-00002-deployment   1/1     1            1           82sNAME                                                DESIRED   CURRENT   READY   AGE
replicaset.apps/hello-00001-deployment-69ff74646c   0         0         0       28m
replicaset.apps/hello-00002-deployment-7db4b4c569   1         1         1       82sNAME                                URL                                                                          LATESTCREATED   LATESTREADY   READY   REASON
service.serving.knative.dev/hello   https://hello-knative-demo.apps.cluster-jzmgb.jzmgb.sandbox866.opentlc.com   hello-00002     hello-00002   TrueNAME                                       CONFIG NAME   K8S SERVICE NAME   GENERATION   READY   REASON   ACTUAL REPLICAS   DESIRED REPLICAS
revision.serving.knative.dev/hello-00001   hello                            1            True             0                 0
revision.serving.knative.dev/hello-00002   hello                            2            True             1                 1NAME                                      LATESTCREATED   LATESTREADY   READY   REASON
configuration.serving.knative.dev/hello   hello-00002     hello-00002   TrueNAME                              URL                                                                          READY   REASON
route.serving.knative.dev/hello   https://hello-knative-demo.apps.cluster-jzmgb.jzmgb.sandbox866.opentlc.com   True
  1. 查看名为hello的service详细信息。确认最新的revision(hello-cfvny-2)接收了100%的请求。
$ kn service describe hello
Name:       hello
Namespace:  knative-demo
Age:        29m
URL:        https://hello-knative-demo.apps.cluster-jzmgb.jzmgb.sandbox866.opentlc.comRevisions:100%  @latest (hello-00002) [2] (2m)Image:     gcr.io/knative-samples/helloworld-go (pinned to 5ea96b)Replicas:  0/0Conditions:OK TYPE                   AGE REASON++ Ready                   2m++ ConfigurationsReady     2m++ RoutesReady             2m
  1. 查看Knative的revision对象。确认结果和(10)看到的项目包括的revision一样。
$ kn revision list
NAME          SERVICE   TRAFFIC   TAGS   GENERATION   AGE     CONDITIONS   READY   REASON
hello-00002   hello     100%             2            2m52s   3 OK / 4     True
hello-00001   hello                      1            30m     3 OK / 4     True
  1. 执行命令,将请求平均发给以上2个revision。其中“hello-00001”是GENERATION=1的revision名称。
$ kn service update hello --traffic @latest=50 --traffic hello-00001=50
Updating Service 'hello' in namespace 'knative-demo':0.066s The Route is still working to reflect the latest desired specification.0.090s Ingress has not yet been reconciled.1.450s Ready to serve.Service 'hello' with latest revision 'hello-00002' (unchanged) is available at URL:
https://hello-knative-demo.apps.cluster-jzmgb.jzmgb.sandbox866.opentlc.com
  1. 查看Knative的service对象,确认配置已被修改为2个revision各自接收50%的请求。
$ kn service describe hello
Name:       hello
Namespace:  knative-demo
Age:        3h
URL:        https://hello-knative-demo.apps.cluster-jzmgb.jzmgb.sandbox866.opentlc.comRevisions:50%  @latest (hello-00002) [2] (2h)Image:     gcr.io/knative-samples/helloworld-go (pinned to 5ea96b)Replicas:  0/050%  hello-00001 [1] (3h)Image:     gcr.io/knative-samples/helloworld-go (pinned to 5ea96b)Replicas:  0/0Conditions:OK TYPE                   AGE REASON++ Ready                   2h++ ConfigurationsReady     2h++ RoutesReady             2h
  1. 在OpenShift控制台的Developer视图中可以看到hello应用的Toplogy。
  2. 点击上图的“设置流量分配”按钮,可以在弹出窗口中可以为不同的Revision分配流量比例。
  3. 多次访问hello应用,确认返回结果部分是“Hello Knative!”、部分是“Hello Kn!”。
$ curl $(kn route list hello --no-headers | awk 'NR==1 {print $2}')
Hello Knative!
$ curl $(kn route list hello --no-headers | awk 'NR==1 {print $2}')
Hello Kn!

OpenShift 4 - Knative教程 (1) 创建Serverless运行环境相关推荐

  1. 使用CentOS7创建Docker运行环境

    使用CentOS7创建Docker运行环境 目录: 一.网络基础设置: 1.1 IP地址.网关 1.2 hostname.DNS 1.3 Host主机列表文件 1.4检查IP地址配置 二.安全及其他设 ...

  2. OpenShift 4 - Knative教程 (3) 了解Knative Serving的核心对象

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.10环境中验证 文章目录 Knative Serving的核心对象 创建Knative Servin ...

  3. OpenShift 4 之通过命令创建Service Mesh环境

    <OpenShift 4.x HOL教程汇总> 本文使用命令行方式在OpenShift 4上创建Service Mesh运行环境,然后进行验证. 图形化方式创建Service Mesh运行 ...

  4. Ubuntu安装Eclipse-cpp教程(含java运行环境搭建)

    转自:http://blog.csdn.net/u010333084/article/details/69568849 网络上各种相关的博客教程不胜枚举,都写的很好很详细,但是正因为太详细了,反而让许 ...

  5. JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载](一)

    (一).概述 现在有好多比较优秀的客户端脚本语言组件, 如: Prototype.YUI.jQuery.mootools.Bindows, Scriptaculous, FCKEditor 等, 都非 ...

  6. python教程是什么-python运行环境是什么

    1.准备好安装包 1)上python官网下载python运行环境(https://www.python.org/downloads/),目前比较稳定的是python-3.5.2 2)上pycharm官 ...

  7. OpenShift 4 - Knative教程 (5) Eventing之Source和Sink

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.10环境中验证 文章目录 创建 Knative Eventing 环境 配置Source和Sink ...

  8. OpenShift 4 - Knative教程 (7) Eventing之Broker和Trigger

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.10环境中验证 文章目录 概念 操作说明 部署Broker 部署Service作为Sink 部署Ev ...

  9. OpenShift 4 - Knative教程 (6) Eventing之Channel和Subscription

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.10环境中验证 文章目录 概念 操作 参考 概念 Knative Eventing中的Channel ...

最新文章

  1. GRDB自定义的纯函数
  2. 编译原理视角下的 c c 语言左值教学,西安交通大学18年3月课程考试《编译原理》作业考核试题...
  3. android 中文api 在线测试,android webview测试方法
  4. 剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)
  5. 用户信息填写web代码_Web前端常见问题汇总
  6. 前端面试题汇总(jQuery)
  7. 算法笔记_面试题_11.正则表达式匹配
  8. C++ boost::upgrade_lock upgrade_to_unique_lock 升级锁 是什么 怎么用
  9. 微信小程序模板(template)小程序免费模板平台
  10. Oracle Coherence中文教程三:配置
  11. 优盘扩容修复 u盘工具
  12. 证件照怎么制作?怎样自己在线制作2寸照片?
  13. android 中文冒号,Kotlin中双冒号::使用方法
  14. 性能测试LoadRunner
  15. 杂记-----------
  16. 苏如是:香港中鼎资本与您分享“数实共生世界”和“后人类社会”
  17. 软件测试工程师简历项目经验怎么写?--1000个已成功入职的软件测试工程师简历范文模板(真实简历)
  18. mongodb数据迁移设置方法
  19. Java 提取PDF图片(pdfbox)Extract PDF document images
  20. 腾讯编程比赛的试题,喜欢企鹅和编程的要进!

热门文章

  1. python数据分析多久能学会_周末深夜,学妹说她想做Python数据分析师....
  2. autoreconnect mysql true_使用’autoReconnect = true’即使MySql JDBC超时
  3. 接口做的好怎么形容_匠品美缝知识之接口美缝如何做?
  4. 云原生的本质_云原生2.0的逻辑之辩,如何让每个企业都成为新云原生企业
  5. 高炉计算机控制,一高炉计算机控制系统升级.pdf
  6. 登峰连接程式改坐标软件_数控仿真软件CIMCOEdit常用的操作,新手必看
  7. 设计灵感|怎么设计渐变海报更有趣味性?
  8. 浪漫七夕节丨中国情人节营销海报模板
  9. gc:C语言的垃圾回收库-英文
  10. 使用“/proc”系统调试多线程程序挂死的问题: