OpenShift Container Platform(OCP) 概述
OpenShift Container Platform 是一个基于云的 Kubernetes 容器平台。OpenShift Container Platform 的基础基于 Kubernetes,因此共享相同的技术。旨在允许支持的应用程序和数据中心从少量机器和应用程序扩展到为数百万客户端服务的数千台机器。OpenShift Container Platform 功能特点:为开发人员和 IT 组织
参考:OpenShift Container Platform 概述
一、概述
OpenShift Container Platform 是一个基于云的 Kubernetes 容器平台。
OpenShift Container Platform 的基础基于 Kubernetes,因此共享相同的技术。
旨在允许支持的应用程序和数据中心从少量机器和应用程序扩展到为数百万客户端服务的数千台机器。
OpenShift Container Platform 功能特点:
为开发人员和 IT 组织提供可用于在安全、可扩展资源上部署应用程序的云应用平台。
需要最少的配置和管理开销。
将 Kubernetes 平台带到客户数据中心和云。
满足安全、隐私、合规性和管理要求。
OpenShift Container Platform 以 Kubernetes 为基础,为大规模电信、流视频、游戏、银行和其他应用提供引擎技术。借助红帽开放技术中的实现,您可以将容器化应用程序从单一云扩展到内部和多云环境。
1.1. OpenShift Container Platform 常用术语表
Kubernetes
Kubernetes 是一个开源容器编配引擎,用于自动化容器化应用程序的部署、扩展和管理。
容器
容器是 worker 节点上以 OCI 兼容容器中运行的应用程序实例和组件。容器是开放容器项目(OCI)兼容镜像的运行时。镜像是二进制应用。worker 节点可以运行多个容器。节点容量与底层资源的内存和 CPU 功能相关,无论它们是云、硬件还是虚拟化。
Pod
pod 是共同部署在同一主机上的一个或多个容器。包含一组有共享资源(如卷和 IP 地址)的容器。pod 也是定义、部署和管理的最小计算单元。
在 OpenShift Container Platform 中,pod 替代了独立的应用程序容器作为最小的可部署单元。
Pod 是 OpenShift Container Platform 中编配的单元。OpenShift Container Platform 在同一个节点上的一个 pod 中调用并运行所有容器。复杂的应用由多个 pod 组成,每个 pod 都有自己的容器。它们与外部进行交互,也在 OpenShift Container Platform 环境中相互交互。
副本集和复制控制器
Kubernetes 副本集和 OpenShift Container Platform 复制控制器,可同时使用,确保在所有时间都有指定数量的 pod 副本在运行。如果 pod 退出或被删除,副本集或复制控制器会启动其他 pod 也保证运行的数量。如果运行的 pod 数量超过了指定值,副本集将根据需要删除以匹配指定的副本数。
部署(Deployment)和部署配置(DeploymentConfig)
OpenShift Container Platform 可以使用 Kubernetes Deployment 对象和 OpenShift Container Platform DeploymentConfig 对象,用户可以选择其中的一个。
Deployment 对象控制应用程序用于 pod的部署,首先从 registry 中获取的容器镜像的名称,并作为 pod 部署到节点上, 并设置要部署的 pod 的副本数,创建副本集来管理该进程。
Deployment 对象可以根据 Deployment 对象版本和各种 rollout 策略来更新部署到 worker 节点上的 pod,以管理应用程序的可用性。
OpenShift Container Platform DeploymentConfig 对象添加了更改触发器的额外功能,这些触发器可以在容器镜像的新版本或其他更改时自动创建 Deployment 对象的新版本。
服务(Service)
Service定义了一组逻辑的 pod 和访问策略,为其他应用程序提供永久内部 IP 地址和主机名,供其他用作 pod 的创建和销毁。
Service层将应用程序组件连接在一起。例如,前端 Web 服务通过与其服务通信连接到数据库实例。服务支持跨应用程序组件简单的内部负载平衡。OpenShift Container Platform 会自动将服务信息注入到正在运行的容器中,以简化发现过程。
路由(Route)
路由是通过为服务提供一个外部可访问主机名(如 www.example.com )来公开服务的方法。每个路由都包含路由名称、服务选择器和可选的安全配置。路由器可以使用定义的路由和由服务标识的端点,提供允许外部客户端到达应用程序的名称。尽管易于部署完整的多层应用程序,但从 OpenShift Container Platform 环境以外的任何位置的流量在没有路由层的情况下无法访问应用程序。
Build
构建 (build) 是将输入参数转换为结果对象的过程。此过程最常用于将输入参数或源代码转换为可运行的镜像。BuildConfig 对象是整个构建过程的定义。OpenShift Container Platform 通过从构建镜像创建容器并将它们推送到集成的 registry 来利用 Kubernetes。
project
OpenShift Container Platform 使用project来允许一组用户或开发人员一起工作,实现一个隔离单位和协作单位。定义资源范围,允许项目管理员和协作者管理资源,并使用配额和限制跟踪用户的资源。
project是带有额外注解的 Kubernetes 命名空间, 是管理常规用户对资源访问的一个中央点。通过project,一组用户可以在与其他用户隔离的前提下组织和管理其内容。用户需要通过管理员获得项目的访问权限。集群管理员也可以允许开发人员创建自己的项目,在这种情况下,用户会自动获得自己项目的访问权限。
每个项目都有自己的一组对象、策略、约束和服务帐户的集合。
项目也称为命名空间(namespaces)。
Operator
Operator 是一个 Kubernetes 原生应用程序。Operator 的目标是将相关的知识融入到软件来实现各种操作。之前,这些知识存在于管理员的头脑中,以及各种 shell 脚本或自动化软件(如 Ansible)中。它们都在您的 Kubernetes 集群之外,很难集成。但是,Operators 改变了这个情况。
Operator 专门用于应用程序的构建。
Operator 是在 Kubernetes 集群内运行、且原生集成了 Kubernetes 概念和 API 的一个软件,可以实施和自动化常见的第 1 天操作,如安装和配置,以及第 2 天活动,如扩展和缩减、重新配置、更新、备份、故障转移以及恢复,Operator称为 Kubernetes 原生应用程序。
使用 Operator 时,应用程序不能被视为原语的集合,如 pod、部署、服务或配置映射。相反,Operator 应被视为单个对象,它公开了对应用程序有意义的选项。
二、OpenShift Container Platform概念概述
OpenShift Container Platform 是一个 Kubernetes 环境,用于管理基于容器的应用程序及其对各种计算平台的依赖,如裸机、虚拟化、内部云等。
OpenShift Container Platform 部署、配置和管理容器。
OpenShift Container Platform 为其组件提供可用性、稳定性和自定义。
OpenShift Container Platform 利用多个计算资源,称为节点。节点有一个基于 Red Hat Enterprise Linux (RHEL)的轻量级、安全的操作系统,称为 Red Hat Enterprise Linux CoreOS (RHCOS)。
引导并配置节点后,它会获取容器运行时,如 CRI-O 或 Docker,用于管理和运行调度到其中的容器工作负载的镜像。Kubernetes 代理或 kubelet 会在节点上调度容器工作负载。kubelet 负责将节点注册到集群并接收容器工作负载的详情。
OpenShift Container Platform 配置并管理集群的网络、负载均衡和路由。OpenShift Container Platform 添加了集群服务来监控集群健康和性能、日志记录和管理升级。
容器镜像 registry 和 OperatorHub 提供红帽认证的产品和社区构建的软件,用于在集群中提供各种应用程序服务。这些应用程序和服务管理集群中部署的应用程序、数据库、前端和用户界面、应用程序运行时和业务自动化,以及用于开发和测试容器应用的开发人员服务。
可以通过配置从预构建镜像运行的容器部署或通过称为 Operator 的资源来手动管理集群中的应用程序。您可以从预先构建镜像和源代码构建自定义镜像,并将这些自定义镜像存储在本地内部、私有或公共注册表中。
多集群管理层可以管理多个集群,包括在单个控制台中的部署、配置、合规和分布工作负载。
三、使用 Web 控制台创建并构建应用程序
3.1. 登录到 Web 控制台
登录到 OpenShift Container Platform Web 控制台来访问和管理集群。
先决条件
有访问 OpenShift Container Platform 集群的权限。
流程
使用您的登录凭证登录到 OpenShift Container Platform web 控制台。
您将被重定向到 Projects 页面。对于非管理员用户,默认视图是 Developer 视角。对于集群管理员,默认的视图是 Administrator 视角。如果没有 cluster-admin 权限,则无法在 web 控制台中看到 Administrator 视角。
Web 控制台提供两个视角: Administrator 视角和 Developer 视角。Developer 视角提供特定于开发人员用例的工作流。
使用视角切换功能把它切换到 Developer 视角。带有创建应用程序选项的 Topology 视图会被显示。
3.2. 创建新项目
在 +Add 视图中,选择 Project → Create Project。
在 Name 字段中输入 user-getting-started。
可选:在 Display name 字段中输入 Getting Started with OpenShift。
3.3. 授予查看权限
从 Administrator 视角,进行 User Management,然后点 RoleBindings。
点 Create binding。
选择 Namespace 角色绑定(RoleBinding)。
在 Name 字段中,输入 sa-user-account。
在 Namespace 字段中,搜索并选择 user-getting-started。
在 Role name 字段中,搜索 view 并选择 view。
在 Subject 字段中,选择 ServiceAccount。
在 Subject namespace 字段中,搜索并选择 user-getting-started。
在 Subject name 字段中,输入 default。
点击 Create。
3.4. 部署镜像
从 Developer 视角中的 +Add 视图,点 Container images 来打开一个对话框。
在 Image Name 字段中,输入以下内容: quay.io/openshiftroadshow/parksmap:latest
确保具有以下内容的当前值:
应用程序:national-parks-app
名称:parksmap
选择 Deployment 作为 资源。
选择 Create route to the application。
在 Advanced Options 部分中,点 Labels 并添加标签以更好地识别此部署。标签可帮助识别和过滤 web 控制台和命令行中的组件。添加以下标签:
app=national-parks-app
component=parksmap
role=frontend
点击 Create。
重定向到 Topology 页面,您可以在其中查看 national-parks-app 应用程序中的 parksmap 部署。
3.4.1 检查 pod
点 Topology 视图中的 D parksmap 打开 Overview 面板。
Overview 面板包括 Details, Resources, 和 Observe 标签页。Details 选项卡可能会默认显示。
概述面板选项卡定义
标签页 | 定义 |
详情 | 允许您扩展应用程序并查看应用程序的状态,如标签、注解和应用程序状态。 |
Resources | 显示与部署关联的资源。 |
Pod 是 OpenShift Container Platform 应用程序的基本单元。您可以查看已使用多少个 pod,以及它们的状态,您可以查看日志。 | |
为 pod 和分配的端口创建的服务列在 Services 标题下。 | |
通过路由可以允许从外部访问 pod,并使用一个 URL 来访问它们。 | |
观察 | 查看各种事件和指标信息,因为它与您的 pod 相关。 |
3.4.2. 扩展应用程序
在 Topology 视图中,单击 national-parks-app 应用。
点 Details 标签页。
使用向上箭头将容器集扩展到两个实例。
注意
应用程序的扩展会快速发生,因为 OpenShift Container Platform 正在启动现有镜像的一个新实例。
使用向下箭头键将 pod 缩减为一个实例。
3.5. 部署 Python 应用程序
从 Developer 视角中的 +Add 视图,点 Import from Git 来打开一个对话框。
在 Git Repo URL 字段中输入以下 URL:https://github.com/openshift-roadshow/nationalparks-py.git
构建器(builder)镜像会被自动探测。
注意
如果检测到的构建器镜像是 Dockerfile,请选择 Edit Import Strategy。选择 Builder Image,然后点 Python。
滚动到 General 部分。
确保具有以下内容的当前值:
应用程序:national-parks-app
名称:nationalparks
选择 Deployment 作为 资源。
选择 Create route to the application。
在 Advanced Options 部分中,点 Labels 并添加标签以更好地识别此部署。标签可帮助识别和过滤 web 控制台和命令行中的组件。添加以下标签:
app=national-parks-app
component=nationalparks
role=backend
type=parksmap-backend
点击 Create。
在 Topology 视图中,选择 nationalparks 应用。
注意
单击 Resources 选项卡。在 Builds 部分中,您可以看到构建正在运行。
3.6. 连接到数据库
从 Developer 视角中的 +Add 视图,点 Container images 来打开一个对话框。
在 Image Name 字段中,输入 quay.io/centos7/mongodb-36-centos7。
在 Runtime 图标 字段中,搜索 mongodb。
向下滚动到 General 部分。
确保具有以下内容的当前值:
应用程序:national-parks-app
名称: mongodb-nationalparks
选择 Deployment 作为 资源。
取消选择 Create route to the application 旁边的复选框。
在 Advanced Options 部分中,点 Deployment 添加环境变量,以添加以下环境变量:
名称 | 值 |
MONGODB_USER | mongodb |
MONGODB_PASSWORD | mongodb |
MONGODB_DATABASE | mongodb |
MONGODB_ADMIN_PASSWORD | mongodb |
表 3.2. 环境变量名称和值
点击 Create。
3.6.1. 创建 secret
secret 对象提供了一种机制来保存敏感信息,如密码、OpenShift Container Platform 客户端配置文件和私有源存储库凭证等。
secret 将敏感内容与 Pod 分离。使用卷插件将 secret 挂载到容器中,或者系统可以使用 secret 代表 pod 执行操作。
以下流程添加了 secret nationalparks-mongodb-parameters ,并将它挂载到 nationalparks 工作负载中。
从 Developer 视角中,导航到左侧导航上的 Secret,再单击 Secrets。
点 Create → Key/value secret。
在 Secret name 字段中,输入 nationalparks-mongodb-parameters。
输入 Key 和 Value 的以下值:
键 | 值 |
MONGODB_USER | mongodb |
DATABASE_SERVICE_NAME | mongodb-nationalparks |
MONGODB_PASSWORD | mongodb |
MONGODB_DATABASE | mongodb |
MONGODB_ADMIN_PASSWORD | mongodb |
表 3.3. Secret 键和值
点击 Create。
点 Add Secret to workload。
从下拉菜单中,选择 nationalparks 作为要添加的工作负载。
点击 Save。
这个配置的更改会触发一个新的 nationalparks 部署推出部署,并正确注入环境变量。
3.6.2. 载入数据并显示国家公园地图
从 Topology 视图中,进入到 nationalparks 部署,再单击 Resources 并检索您的路由信息。
将 URL 复制并粘贴到您的网页浏览器中,并在 URL 的末尾添加以下内容:
/ws/data/load
输出示例
Items inserted in database: 2893
在 Topology 视图中,导航到 parksmap 部署,再单击 Resources 并检索您的路由信息。
浏览器URL查看国家公园。
图 3.4. 跨世界的国家公园
四、使用 CLI 创建并构建应用程序
4.1. 准备
您需要可以访问运行的 OpenShift Container Platform 实例。如果没有访问权限,请联络您的集群管理员。
您已下载并安装 OpenShift CLI(oc)。
4.2. CLI登录
通过 CLI 使用您的用户名和密码或 OAuth 令牌登录到 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>
oc login:
# Log in interactively
oc login --username=myuser
# Log in to the given server with the given certificate authority file
oc login localhost:8443 --certificate-authority=/path/to/cert.crt
# Log in to the given server with the given credentials (will not prompt interactively)
oc login localhost:8443 --username=myuser --password=mypass
oc logout:
# Log out
oc logout
4.3. 创建新项目
$ 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".
4.4. 授予查看权限
将 view 角色添加到 user-get-started 项目中的 default 服务帐户:
$ oc adm policy add-role-to-user view -z default -n user-getting-started
4.5. 部署镜像
4.5.1部署应用程序命令:
$ 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
创建新的app
# List all local templates and image streams that can be used to create an app
oc new-app --list
# Create an application based on the source code in the current git repository (with a public remote) and a container image
oc new-app . --image=registry/repo/langimage
# Create an application myapp with Docker based build strategy expecting binary input
oc new-app --strategy=docker --binary --name myapp
# Create a Ruby application based on the provided [image]~[source code] combination
oc new-app centos/ruby-25-centos7~https://github.com/sclorg/ruby-ex.git
# Use the public container registry MySQL image to create an app. Generated artifacts will be labeled with db=mysql
oc new-app mysql MYSQL_USER=user MYSQL_PASSWORD=pass MYSQL_DATABASE=testdb -l db=mysql
# Use a MySQL image in a private registry to create an app and override application artifacts' names
oc new-app --image=myregistry.com/mycompany/mysql --name=private
# Create an application from a remote repository using its beta4 branch
oc new-app https://github.com/openshift/ruby-hello-world#beta4
# Create an application based on a stored template, explicitly setting a parameter value
oc new-app --template=ruby-helloworld-sample --param=MYSQL_USER=admin
# Create an application from a remote repository and specify a context directory
oc new-app https://github.com/youruser/yourgitrepo --context-dir=src/build
# Create an application from a remote private repository and specify which existing secret to use
oc new-app https://github.com/youruser/yourgitrepo --source-secret=yoursecret
# Create an application based on a template file, explicitly setting a parameter value
oc new-app --file=./example/myapp/template.json --param=MYSQL_USER=admin
# Search all templates, image streams, and container images for the ones that match "ruby"
oc new-app --search ruby
# Search for "ruby", but only in stored templates (--template, --image-stream and --image
# can be used to filter search results)
oc new-app --search --template=ruby
# Search for "ruby" in stored templates and print the output as YAML
oc new-app --search --template=ruby --output=yaml
4.5.2 创建路由
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
oc create route edge
# Create an edge route named "my-route" that exposes the frontend service
oc create route edge my-route --service=frontend
# Create an edge route that exposes the frontend service and specify a path
# If the route name is omitted, the service name will be used
oc create route edge --service=frontend --path /assets
oc get
# List all pods in ps output format
oc get pods
# List all pods in ps output format with more information (such as node name)
oc get pods -o wide
# List a single replication controller with specified NAME in ps output format
oc get replicationcontroller web
# List deployments in JSON output format, in the "v1" version of the "apps" API group
oc get deployments.v1.apps -o json
# List a single pod in JSON output format
oc get -o json pod web-pod-13je7
# List a pod identified by type and name specified in "pod.yaml" in JSON output format
oc get -f pod.yaml -o json
# List resources from a directory with kustomization.yaml - e.g. dir/kustomization.yaml
oc get -k dir/
# Return only the phase value of the specified pod
oc get -o template pod/web-pod-13je7 --template={{.status.phase}}
# List resource information in custom columns
oc get pod test-pod -o custom-columns=CONTAINER:.spec.containers[0].name,IMAGE:.spec.containers[0].image
# List all replication controllers and services together in ps output format
oc get rc,services
# List one or more resources by their type and names
oc get rc/web service/frontend pods/web-pod-13je7
# List status subresource for a single pod.
oc get pod web-pod-13je7 --subresource status
4.5.3 检查 pod
1. 列出带有节点名称的所有pod:
$ oc get pods
#输出示例
NAME READY STATUS RESTARTS AGE
parksmap-5f9579955-6sng8 1/1 Running 0 77s
2. 要列出所有 pod 详情:
$ oc describe pods
# 输出示例
Expand
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": "openshift-sdn",
"interface": "eth0",
"ips": [
"10.131.0.14"
],
"default": true,
"dns": {}
}]
k8s.v1.cni.cncf.io/networks-status:
[{
"name": "openshift-sdn",
"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 openshift-sdn
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
其它资源
4.5.4 扩展应用程序
1. 将应用程序从一个 pod 实例扩展到两个 pod 实例:
$ oc scale --current-replicas=1 --replicas=2 deployment/parksmap
# 输出示例
deployment.apps/parksmap scaled
2. 验证应用程序是否正确扩展:
$ oc get pods
# 输出示例
NAME READY STATUS RESTARTS AGE
parksmap-5f9579955-6sng8 1/1 Running 0 7m39s
parksmap-5f9579955-8tgft 1/1 Running 0 24s
3. 将应用程序缩减至一个pod实例:
$ oc scale --current-replicas=2 --replicas=1 deployment/parksmap
其它资源
4.6. 部署 Python 应用程序
4.6.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-ubi8" 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
4.6.2 创建公开应用程序 nationalparks 的路由:
$ oc create route edge nationalparks --service=nationalparks
输出示例
route.route.openshift.io/parksmap created
4.6.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
其它资源
4.7. 连接到数据库
4.7.1 连接到数据库命令:
$ oc new-app quay.io/centos7/mongodb-36-centos7 --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 (8 months old) from quay.io for "quay.io/centos7/mongodb-36-centos7"
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:latest" 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
其它资源
4.8 创建 secret
secret 对象提供了一种机制来保存敏感信息,如密码、OpenShift Container Platform 客户端配置文件和私有源存储库凭证等。
secret 将敏感内容与 Pod 分离。您可以使用卷插件将 secret 挂载到容器中,或者系统可以使用 secret 代表 pod 执行操作。
以下流程添加了 secret nationalparks-mongodb-parameters ,并将它挂载到 nationalparks 工作负载中。
4.8.1 创建 secret:
$ 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
4.8.2 更新环境变量将 mongodb secret 附加到 nationalpartks 工作负载:
$ oc set env --from=secret/nationalparks-mongodb-parameters deploy/nationalparks
输出示例
deployment.apps/nationalparks updated
4.8.3 显示 nationalpartks 部署的状态:
$ oc rollout status deployment nationalparks
输出示例
deployment "nationalparks" successfully rolled out
4.8.4 要显示 mongodb-nationalparks 部署的状态,请输入以下命令:
$ oc rollout status deployment mongodb-nationalparks
输出示例
deployment "nationalparks" successfully rolled out
deployment "mongodb-nationalparks" successfully rolled out
其它资源
4.9 载入数据并显示国家公园地图
4.9.1加载国家公园数据
$ oc exec $(oc get pods -l component=nationalparks | tail -n 1 | awk '{print $1;}') -- curl -s http://localhost:8080/ws/data/load
输出示例
"Items inserted in database: 2893"
4.9.2 验证数据加载是否正确
$ oc exec $(oc get pods -l component=nationalparks | tail -n 1 | awk '{print $1;}') -- curl -s http://localhost:8080/ws/data/all
输出示例(修剪)
, {"id": "Great Zimbabwe", "latitude": "-20.2674635", "longitude": "30.9337986", "name": "Great Zimbabwe"}]
4.9.3 为路由添加标签
$ oc label route nationalparks type=parksmap-backend
输出示例
route.route.openshift.io/nationalparks labeled
4.9.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
4.9.5 浏览地图
将上面检索到的 HOST/PORT 路径复制并粘贴到您的网页浏览器中。您的浏览器应当显示全球的国家公园地图。
图 4.1. 跨世界的国家公园
其它资源
更多推荐
所有评论(0)