×

准备工作

  • 查看 关于 OpenShift 命令行界面

  • 您必须能够访问正在运行的 OpenShift Container Platform 实例。如果您没有访问权限,请联系您的集群管理员。

  • 您必须已下载并安装 OpenShift 命令行界面 (oc)。

登录到命令行

您可以登录到 OpenShift 命令行界面 (oc) 以访问和管理您的集群。

先决条件
  • 您必须能够访问 OpenShift Container Platform 集群。

  • 您必须已安装 OpenShift 命令行界面 (oc)。

步骤
  • 使用用户名和密码、OAuth 令牌或 Web 浏览器从命令行登录到 OpenShift Container Platform

    • 使用用户名和密码

      $ oc login -u=<username> -p=<password> --server=<your-openshift-server> --insecure-skip-tls-verify
    • 使用 OAuth 令牌

      $ oc login <https://api.your-openshift-server.com> --token=<tokenID>
    • 使用 Web 浏览器

      $ oc login <cluster_url> --web

您现在可以创建项目或发出其他命令来管理您的集群。

其他资源

创建新项目

项目使用户社区能够隔离地组织和管理其内容。项目是 OpenShift Container Platform 对 Kubernetes 命名空间的扩展。项目具有启用用户自助配置的其他功能。

用户必须由管理员授予项目访问权限。集群管理员可以允许开发者创建他们自己的项目。在大多数情况下,用户可以自动访问他们自己的项目。

每个项目都有自己的一套对象、策略、约束和服务账号。

先决条件
  • 您必须能够访问 OpenShift Container Platform 集群。

  • 您必须已安装 OpenShift 命令行界面 (oc)。

步骤
  • 要创建一个新项目,请输入以下命令

    $ oc new-project user-getting-started --display-name="Getting Started with OpenShift"
    示例输出
    Now using project "user-getting-started" on server "https://openshift.example.com:6443".
其他资源

授予查看权限

OpenShift Container Platform会在每个项目中自动创建一些特殊的服务账号。默认服务账号负责运行 Pod。OpenShift Container Platform使用并将其注入到启动的每个Pod中。

以下步骤将为默认的ServiceAccount对象创建一个RoleBinding对象。服务账号与OpenShift Container Platform API通信,以了解项目中的Pod、服务和资源。

先决条件
  • 您必须能够访问 OpenShift Container Platform 集群。

  • 您必须已安装 OpenShift 命令行界面 (oc)。

  • 您已部署了一个镜像。

  • 您必须具有cluster-adminproject-admin权限。

步骤
  • 要将查看角色添加到user-getting-started项目中的默认服务帐户,请输入以下命令

    $ oc adm policy add-role-to-user view -z default -n user-getting-started

部署您的第一个镜像

在OpenShift Container Platform中部署应用程序最简单的方法是运行现有的容器镜像。以下步骤部署名为national-parks-app应用程序的前端组件。该Web应用程序显示一个交互式地图。地图显示全球主要国家公园的位置。

先决条件
  • 您必须能够访问 OpenShift Container Platform 集群。

  • 安装OpenShift CLI(oc)。

步骤
  • 要部署应用程序,请输入以下命令

    $ oc new-app quay.io/openshiftroadshow/parksmap:latest --name=parksmap -l 'app=national-parks-app,component=parksmap,role=frontend,app.kubernetes.io/part-of=national-parks-app'
    示例输出
    --> Found container image 0c2f55f (12 months old) from quay.io for "quay.io/openshiftroadshow/parksmap:latest"
    
        * An image stream tag will be created as "parksmap:latest" that will track this image
    
    --> Creating resources with label app=national-parks-app,app.kubernetes.io/part-of=national-parks-app,component=parksmap,role=frontend ...
        imagestream.image.openshift.io "parksmap" created
        deployment.apps "parksmap" created
        service "parksmap" created
    --> Success
其他资源

创建路由

外部客户端可以通过路由层访问在OpenShift Container Platform上运行的应用程序,其背后的数据对象是路由。默认的OpenShift Container Platform路由器(HAProxy)使用传入请求的HTTP标头来确定将连接代理到哪里。

可以选择为路由定义安全策略,例如TLS。

先决条件
  • 您必须能够访问 OpenShift Container Platform 集群。

  • 您必须已安装 OpenShift 命令行界面 (oc)。

  • 您已部署了一个镜像。

  • 您必须具有cluster-adminproject-admin权限。

步骤
  1. 要检索已创建的应用程序服务,请输入以下命令

    $ oc get service
    示例输出
    NAME      TYPE       CLUSTER-IP         EXTERNAL-IP    PORT(S)   AGE
    parksmap  ClusterIP  <your-cluster-IP>  <123.456.789>  8080/TCP  8m29s
  2. 要创建路由,请输入以下命令

    $ oc create route edge parksmap --service=parksmap
    示例输出
    route.route.openshift.io/parksmap created
  3. 要检索已创建的应用程序路由,请输入以下命令

    $ oc get route
    示例输出
    NAME        HOST/PORT                                                   PATH   SERVICES   PORT       TERMINATION   WILDCARD
    parksmap    parksmap-user-getting-started.apps.cluster.example.com             parksmap   8080-tcp   edge          None

检查Pod

OpenShift Container Platform利用Kubernetes的Pod概念,Pod是在一台主机上一起部署的一个或多个容器,是可定义、部署和管理的最小计算单元。Pod大致相当于容器的物理或虚拟机实例。

您可以查看集群中的Pod,并确定这些Pod和整个集群的健康状况。

先决条件
  • 您必须能够访问 OpenShift Container Platform 集群。

  • 您必须已安装 OpenShift 命令行界面 (oc)。

  • 您已部署了一个镜像。

步骤
  1. 要列出所有包含节点名称的Pod,请输入以下命令

    $ oc get pods
    示例输出
    NAME                       READY   STATUS    RESTARTS   AGE
    parksmap-5f9579955-6sng8   1/1     Running   0          77s
  2. 要列出所有Pod详细信息,请输入以下命令

    $ oc describe pods
    示例输出
    Name:         parksmap-848bd4954b-5pvcc
    Namespace:    user-getting-started
    Priority:     0
    Node:         ci-ln-fr1rt92-72292-4fzf9-worker-a-g9g7c/10.0.128.4
    Start Time:   Sun, 13 Feb 2022 14:14:14 -0500
    Labels:       app=national-parks-app
                  app.kubernetes.io/part-of=national-parks-app
                  component=parksmap
                  deployment=parksmap
                  pod-template-hash=848bd4954b
                  role=frontend
    Annotations:  k8s.v1.cni.cncf.io/network-status:
                    [{
                        "name": "ovn-kubernetes",
                        "interface": "eth0",
                        "ips": [
                            "10.131.0.14"
                        ],
                        "default": true,
                        "dns": {}
                    }]
                  k8s.v1.cni.cncf.io/network-status:
                    [{
                        "name": "ovn-kubernetes",
                        "interface": "eth0",
                        "ips": [
                            "10.131.0.14"
                        ],
                        "default": true,
                        "dns": {}
                    }]
                  openshift.io/generated-by: OpenShiftNewApp
                  openshift.io/scc: restricted
    Status:       Running
    IP:           10.131.0.14
    IPs:
      IP:           10.131.0.14
    Controlled By:  ReplicaSet/parksmap-848bd4954b
    Containers:
      parksmap:
        Container ID:   cri-o://4b2625d4f61861e33cc95ad6d455915ea8ff6b75e17650538cc33c1e3e26aeb8
        Image:          quay.io/openshiftroadshow/parksmap@sha256:89d1e324846cb431df9039e1a7fd0ed2ba0c51aafbae73f2abd70a83d5fa173b
        Image ID:       quay.io/openshiftroadshow/parksmap@sha256:89d1e324846cb431df9039e1a7fd0ed2ba0c51aafbae73f2abd70a83d5fa173b
        Port:           8080/TCP
        Host Port:      0/TCP
        State:          Running
          Started:      Sun, 13 Feb 2022 14:14:25 -0500
        Ready:          True
        Restart Count:  0
        Environment:    <none>
        Mounts:
          /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-6f844 (ro)
    Conditions:
      Type              Status
      Initialized       True
      Ready             True
      ContainersReady   True
      PodScheduled      True
    Volumes:
      kube-api-access-6f844:
        Type:                    Projected (a volume that contains injected data from multiple sources)
        TokenExpirationSeconds:  3607
        ConfigMapName:           kube-root-ca.crt
        ConfigMapOptional:       <nil>
        DownwardAPI:             true
        ConfigMapName:           openshift-service-ca.crt
        ConfigMapOptional:       <nil>
    QoS Class:                   BestEffort
    Node-Selectors:              <none>
    Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
    Events:
      Type    Reason          Age   From               Message
      ----    ------          ----  ----               -------
      Normal  Scheduled       46s   default-scheduler  Successfully assigned user-getting-started/parksmap-848bd4954b-5pvcc to ci-ln-fr1rt92-72292-4fzf9-worker-a-g9g7c
      Normal  AddedInterface  44s   multus             Add eth0 [10.131.0.14/23] from ovn-kubernetes
      Normal  Pulling         44s   kubelet            Pulling image "quay.io/openshiftroadshow/parksmap@sha256:89d1e324846cb431df9039e1a7fd0ed2ba0c51aafbae73f2abd70a83d5fa173b"
      Normal  Pulled          35s   kubelet            Successfully pulled image "quay.io/openshiftroadshow/parksmap@sha256:89d1e324846cb431df9039e1a7fd0ed2ba0c51aafbae73f2abd70a83d5fa173b" in 9.49243308s
      Normal  Created         35s   kubelet            Created container parksmap
      Normal  Started         35s   kubelet            Started container parksmap

扩展应用程序

在Kubernetes中,Deployment对象定义了应用程序如何部署。在大多数情况下,用户会一起使用PodServiceReplicaSetsDeployment资源。在大多数情况下,OpenShift Container Platform会为您创建这些资源。

部署national-parks-app镜像时,会创建一个部署资源。在此示例中,只部署了一个Pod

以下步骤将national-parks-image扩展为使用两个实例。

先决条件
  • 您必须能够访问 OpenShift Container Platform 集群。

  • 您必须已安装 OpenShift 命令行界面 (oc)。

  • 您已部署了一个镜像。

步骤
  • 要将您的应用程序从一个Pod实例扩展到两个Pod实例,请输入以下命令

    $ oc scale --current-replicas=1 --replicas=2 deployment/parksmap
    示例输出
    deployment.apps/parksmap scaled
验证
  1. 要确保您的应用程序已正确扩展,请输入以下命令

    $ oc get pods
    示例输出
    NAME                       READY   STATUS    RESTARTS   AGE
    parksmap-5f9579955-6sng8   1/1     Running   0          7m39s
    parksmap-5f9579955-8tgft   1/1     Running   0          24s
  2. 要将您的应用程序缩减回一个Pod实例,请输入以下命令

    $ oc scale --current-replicas=2 --replicas=1 deployment/parksmap
其他资源

部署Python应用程序

以下步骤部署parksmap应用程序的后端服务。Python应用程序对MongoDB数据库执行二维地理空间查询,以查找并返回全球所有国家公园的地图坐标。

已部署的后端服务是nationalparks

先决条件
  • 您必须能够访问 OpenShift Container Platform 集群。

  • 您必须已安装 OpenShift 命令行界面 (oc)。

  • 您已部署了一个镜像。

步骤
  1. 要创建一个新的Python应用程序,请输入以下命令

    $ oc new-app python~https://github.com/openshift-roadshow/nationalparks-py.git --name nationalparks -l 'app=national-parks-app,component=nationalparks,role=backend,app.kubernetes.io/part-of=national-parks-app,app.kubernetes.io/name=python' --allow-missing-images=true
    示例输出
    --> Found image 0406f6c (13 days old) in image stream "openshift/python" under tag "3.9-ubi9" for "python"
    
        Python 3.9
        ----------
        Python 3.9 available as container is a base platform for building and running various Python 3.9 applications and frameworks. Python is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python's elegant syntax and dynamic typing, together with its interpreted nature, make it an ideal language for scripting and rapid application development in many areas on most platforms.
    
        Tags: builder, python, python39, python-39, rh-python39
    
        * A source build using source code from https://github.com/openshift-roadshow/nationalparks-py.git will be created
          * The resulting image will be pushed to image stream tag "nationalparks:latest"
          * Use 'oc start-build' to trigger a new build
    
    --> Creating resources with label app=national-parks-app,app.kubernetes.io/name=python,app.kubernetes.io/part-of=national-parks-app,component=nationalparks,role=backend ...
        imagestream.image.openshift.io "nationalparks" created
        buildconfig.build.openshift.io "nationalparks" created
        deployment.apps "nationalparks" created
        service "nationalparks" created
    --> Success
  2. 要创建一个路由来公开您的应用程序nationalparks,请输入以下命令

    $ oc create route edge nationalparks --service=nationalparks
    示例输出
    route.route.openshift.io/parksmap created
  3. 要检索已创建的应用程序路由,请输入以下命令

    $ oc get route
    示例输出
    NAME             HOST/PORT                                                           PATH   SERVICES        PORT       TERMINATION   WILDCARD
    nationalparks    nationalparks-user-getting-started.apps.cluster.example.com                nationalparks   8080-tcp   edge          None
    parksmap         parksmap-user-getting-started.apps.cluster.example.com                     parksmap        8080-tcp   edge          None
其他资源

连接到数据库

部署并连接一个MongoDB数据库,national-parks-app应用程序在其中存储位置信息。将national-parks-app应用程序标记为地图可视化工具parksmap的后端后,parksmap部署将使用OpenShift Container Platform发现机制自动显示地图。

先决条件
  • 您必须能够访问 OpenShift Container Platform 集群。

  • 您必须已安装 OpenShift 命令行界面 (oc)。

  • 您已部署了一个镜像。

步骤
  • 要连接到数据库,请输入以下命令

    $ oc new-app quay.io/centos7/mongodb-36-centos7:master --name mongodb-nationalparks -e MONGODB_USER=mongodb -e MONGODB_PASSWORD=mongodb -e MONGODB_DATABASE=mongodb -e MONGODB_ADMIN_PASSWORD=mongodb -l 'app.kubernetes.io/part-of=national-parks-app,app.kubernetes.io/name=mongodb'
    示例输出
    --> Found container image dc18f52 (3 years old) from quay.io for "quay.io/centos7/mongodb-36-centos7:master"
    
        MongoDB 3.6
        -----------
        MongoDB (from humongous) is a free and open-source cross-platform document-oriented database program. Classified as a NoSQL database program, MongoDB uses JSON-like documents with schemas. This container image contains programs to run mongod server.
    
        Tags: database, mongodb, rh-mongodb36
    
        * An image stream tag will be created as "mongodb-nationalparks:master" that will track this image
    
    --> Creating resources with label app.kubernetes.io/name=mongodb,app.kubernetes.io/part-of=national-parks-app ...
        imagestream.image.openshift.io "mongodb-nationalparks" created
        deployment.apps "mongodb-nationalparks" created
        service "mongodb-nationalparks" created
    --> Success
其他资源

创建密钥

Secret对象提供了一种机制来保存敏感信息,例如密码、OpenShift Container Platform客户端配置文件、私有源代码库凭据等。密钥将敏感内容与Pod分离。您可以使用卷插件将密钥挂载到容器中,或者系统可以使用密钥代表Pod执行操作。以下步骤添加密钥nationalparks-mongodb-parameters并将其挂载到nationalparks工作负载。

先决条件
  • 您必须能够访问 OpenShift Container Platform 集群。

  • 您必须已安装 OpenShift 命令行界面 (oc)。

  • 您已部署了一个镜像。

步骤
  1. 要创建一个密钥,请输入以下命令

    $ oc create secret generic nationalparks-mongodb-parameters --from-literal=DATABASE_SERVICE_NAME=mongodb-nationalparks --from-literal=MONGODB_USER=mongodb --from-literal=MONGODB_PASSWORD=mongodb --from-literal=MONGODB_DATABASE=mongodb --from-literal=MONGODB_ADMIN_PASSWORD=mongodb
    示例输出
    secret/nationalparks-mongodb-parameters created
  2. 要更新环境变量以将mongodb密钥附加到nationalpartks工作负载,请输入以下命令

    $ oc set env --from=secret/nationalparks-mongodb-parameters deploy/nationalparks
    示例输出
    deployment.apps/nationalparks updated
  3. 要显示nationalparks部署的状态,请输入以下命令

    $ oc rollout status deployment nationalparks
    示例输出
    deployment "nationalparks" successfully rolled out
  4. 要显示mongodb-nationalparks部署的状态,请输入以下命令

    $ oc rollout status deployment mongodb-nationalparks
    示例输出
    deployment "nationalparks" successfully rolled out
    deployment "mongodb-nationalparks" successfully rolled out

加载数据并显示国家公园地图

您已部署parksmapnationalparks应用程序,然后部署了mongodb-nationalparks数据库。但是,尚未将数据加载数据库中。

先决条件
  • 您必须能够访问 OpenShift Container Platform 集群。

  • 您必须已安装 OpenShift 命令行界面 (oc)。

  • 您已部署了一个镜像。

步骤
  1. 要加载国家公园数据,请输入以下命令

    $ oc exec $(oc get pods -l component=nationalparks | tail -n 1 | awk '{print $1;}') -- curl -s https://127.0.0.1:8080/ws/data/load
    示例输出
    "Items inserted in database: 2893"
  2. 要验证您的数据是否已正确加载,请输入以下命令

    $ oc exec $(oc get pods -l component=nationalparks | tail -n 1 | awk '{print $1;}') -- curl -s https://127.0.0.1:8080/ws/data/all
    示例输出(已截断)
    , {"id": "Great Zimbabwe", "latitude": "-20.2674635", "longitude": "30.9337986", "name": "Great Zimbabwe"}]
  3. 要向路由添加标签,请输入以下命令

    $ oc label route nationalparks type=parksmap-backend
    示例输出
    route.route.openshift.io/nationalparks labeled
  4. 要检索您的路由以查看地图,请输入以下命令

    $ oc get routes
    示例输出
    NAME            HOST/PORT                                                      PATH   SERVICES        PORT       TERMINATION   WILDCARD
    nationalparks   nationalparks-user-getting-started.apps.cluster.example.com           nationalparks   8080-tcp   edge          None
    parksmap        parksmap-user-getting-started.apps.cluster.example.com                parksmap        8080-tcp   edge          None
  5. 将您在上一步中获取的HOST/PORT路径复制并粘贴到您的网页浏览器中。您的浏览器应该会显示一张世界各地国家公园的地图。

    A map of the national parks across the world is displayed with location tracking.
    图1. 世界各地的国家公园
其他资源