OpenShift 应用部署与模板使用指南
1. OpenShift 简单应用部署
1.1 验证镜像使用
首先,要确保使用了正确的镜像。可以使用以下命令来验证:
$ oc describe pod httpd-1-n7st4 | grep Image:
Image: centos/httpd-24-centos7@sha256:6da9085c5e7963efaae3929895b9730d7e76e937a7a0109a23015622f3e7156b
1.2 暴露服务
为了使应用程序可以从外部访问,需要暴露服务:
$ oc expose svc httpd
route "httpd" exposed
$ curl -s http://httpd-simpleappication.127.0.0.1.nip.io | head -n 4
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
1.3 高级部署
oc new-app
命令带有许多参数,允许根据需求修改部署过程。可以使用
oc new-app --help
查看高级选项:
$ oc new-app --help
Create a new application by specifying source code, templates, and/or
images
使用示例:
- 列出所有可用于创建应用的本地模板和镜像流:
oc new-app --list
- 根据当前 Git 仓库中的源代码(具有公共远程仓库)和 Docker 镜像创建应用:
oc new-app . --docker-image=repo/langimage
1.4 部署 MariaDB
1.4.1 删除先前创建的对象
$ oc delete all --all
1.4.2 创建 MariaDB 容器
创建一个数据库容器,允许名为
openshift
的数据库用户连接到名为
openshift
的数据库,使用
openshift
作为数据库密码:
$ oc new-app -e MYSQL_USER=openshift -e MYSQL_PASSWORD=openshift \
-e MYSQL_DATABASE=openshift mariadb
1.4.3 验证 MariaDB 是否运行
$ oc get all
NAME REVISION DESIRED CURRENT TRIGGERED BY
deploymentconfigs/mariadb 1 1 1 config,image(mariadb:10.1)
NAME READY STATUS RESTARTS AGE
po/mariadb-1-54h6x 1/1 Running 0 2m
NAME DESIRED CURRENT READY AGE
rc/mariadb-1 1 1 1 2m
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/mariadb 172.30.233.119 <none> 3306/TCP 2m
1.4.4 登录容器并验证数据库
$ oc exec -it mariadb-1-54h6x /bin/bash
bash-4.2$
$ mysql -uopenshift -popenshift -h127.0.0.1 openshift
MariaDB [openshift]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| openshift |
| test |
+--------------------+
3 rows in set (0.00 sec)
1.4.5 清理实验环境
$ oc delete all --all
deploymentconfig "mariadb" deleted
imagestream "mariadb" deleted
pod "mariadb-1-9qcsp" deleted
service "mariadb" deleted
$ oc delete project simpleappication
project "simpleappication" deleted
$ oc project myproject
Now using project "myproject" on server "https://localhost:8443".
1.5 相关问题解答
| 问题 | 答案 |
|---|---|
以下哪个 OpenShift 实体不会由
oc new-app
自动创建?
| Route |
| 为了在最小配置下使应用程序可从外部访问,应创建以下哪些实体(选择三个)? | Pod、Service、Route |
哪个命令可以创建具有自定义 URL
myservice.example.com
的路由?
|
oc expose svc httpd --hostname myservice.example.com
|
| 哪些命令可以显示所有 OpenShift 路由(选择两个)? |
oc get all
、
oc get route
|
2. OpenShift 模板使用
2.1 技术要求
本章对环境没有严格限制,支持任何 OpenShift 安装和开发环境,如 MinitShift、
oc cluster up
或基于 Ansible 的标准生产就绪部署。以下是使用
Vagrantfile
部署实验环境的示例:
$ cat Vagrantfile
Vagrant.configure(2) do |config|
config.vm.define "openshift" do |conf|
conf.vm.box = "centos/7"
conf.vm.network "private_network", ip: "172.24.0.11"
conf.vm.hostname = 'openshift.example.com'
conf.vm.network "forwarded_port", guest: 80, host: 1080
conf.vm.network "forwarded_port", guest: 443, host: 9443
conf.vm.network "forwarded_port", guest: 8080, host: 8080
conf.vm.network "forwarded_port", guest: 8443, host: 8443
conf.vm.provider "virtualbox" do |v|
v.memory = 4096
v.cpus = 2
end
conf.vm.provision "shell", inline: $lab_main
end
end
$lab_main = <<SCRIPT
cat <<EOF >> /etc/hosts
172.24.0.11 openshift.example.com openshift
172.24.0.12 storage.example.com storage nfs
EOF
systemctl disable firewalld
systemctl stop firewalld
yum update -y
yum install -y epel-release
yum install -y docker
cat << EOF >/etc/docker/daemon.json
{
"insecure-registries": [
"172.30.0.0/16"
]
}
EOF
systemctl restart docker
systemctl enable docker
yum -y install centos-release-openshift-origin39
yum -y install origin-clients
oc cluster up
SCRIPT
部署环境:
$ vagrant up
连接到虚拟机:
$ vagrant ssh
$ sudo -i
以开发者用户登录:
# oc login -u developer
Server [https://localhost:8443]:
The server uses a certificate signed by an unknown authority.
You can bypass the certificate check, but any data you send to the server
could be intercepted by others.
Use insecure connections? (y/n): y
Authentication required for https://localhost:8443 (openshift)
Username: developer
Password: <ANY PASSWORD>
Login successful.
You have one project on this server: "myproject"
Using project "myproject".
Welcome! See 'oc help' to get started.
2.2 OpenShift 模板概述
OpenShift 模板是一组可以参数化的 API 资源,经过处理后可以生成一系列供 OpenShift 创建的对象。模板可以用于创建任何所需的 OpenShift 对象,还可以定义一组标签应用到模板中定义的每个对象。可以使用 CLI 或 Web 控制台应用模板。例如,一个模板可能包含两个 Pod(一个应用程序和一个数据库)、一个服务和一个路由。模板开发完成后可以重复使用。
2.3 模板语法
模板可以从原始的 YAML 或 JSON 定义创建。示例如下:
# cat mytemplate.yaml
apiVersion: v1
kind: Template
metadata:
name: template1
objects:
- apiVersion: v1
kind: Pod
metadata:
name: app1
spec:
containers:
- env:
- name: SHOW_DATA
value: ${SHOW_DATA}
image: example/appimage
name: app1
ports:
- containerPort: 8080
protocol: TCP
parameters:
- description: Myapp configuration data
name: SHOW_DATA
required: true
labels:
mylabel: app1
参数可以有默认值,也可以根据特定模式生成值:
parameters:
- description: Myapp configuration data
name: SHOW_DATA
required: true
value: Example value
parameters:
- description: Password used for Redis authentication
from: '[A-Z0-9]{8}'
generate: expression
name: REDIS_PASSWORD
2.4 添加模板
使用
oc create
命令将模板添加到 OpenShift:
# oc create -f mytemplate.yaml
template "template1" created
# oc get template
NAME DESCRIPTION PARAMETERS OBJECTS
template1 1 (1 blank) 1
若要在
openshift
租户中创建模板,需要以
system:admin
用户登录:
# oc login -u system:admin
# oc create -f mytemplate.json -n openshift
template "template1" created
# oc get template -n openshift|grep temp
template1
2.5 显示模板参数
有两种方法列出模板的所有参数:
- 使用
oc process --parameters
命令:
# oc process --parameters -n openshift mariadb-persistent
NAME DESCRIPTION GENERATOR VALUE
...
VOLUME_CAPACITY Volume space available for data, e.g. 512Mi, 2Gi. 1Gi
-
查看模板定义中的
parameters部分:
# oc describe template template1
Name: template1
Namespace: myproject
...
Parameters:
Name: SHOW_DATA
Description: Myapp configuration data
Required: true
Value: <none>
...
2.6 处理模板
使用
oc new-app
命令从预定义模板部署应用程序的示例:
# oc new-app jenkins-persistent -p JENKINS_SERVICE_NAME=myjenkins
--> Deploying template "openshift/jenkins-persistent" to project myproject
...
--> Creating resources ...
route "myjenkins" created
deploymentconfig "myjenkins" created
serviceaccount "myjenkins" created
rolebinding "myjenkins_edit" created
service "jenkins-jnlp" created
service "myjenkins" created
--> Success
...
Access your application via route 'myjenkins-myproject.127.0.0.1.nip.io'
Run 'oc status' to view your app
查看创建的对象:
# oc get all
NAME REVISION DESIRED CURRENT TRIGGERED BY
deploymentconfigs/myjenkins 1 1 1
config,image(jenkins:latest)
NAME HOST/PORT PATH SERVICES PORT
TERMINATION
WILDCARD
routes/myjenkins myjenkins-templates.example.com myjenkins <all>
edge/Redirect
None
NAME READY STATUS RESTARTS AGE
po/myjenkins-1-h2mxx 1/1 Running 0 1m
NAME DESIRED CURRENT READY AGE
rc/myjenkins-1 1 1 1 1m
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/jenkins-jnlp 172.30.33.180 <none> 50000/TCP 1m
svc/myjenkins 172.30.107.99 <none> 80/TCP 1m
清理项目:
# oc delete all --all
deploymentconfig "myjenkins" deleted
route "myjenkins" deleted
pod "myjenkins-1-zg4km" deleted
service "jenkins-jnlp" deleted
service "myjenkins" deleted
2.7 创建自定义模板
2.7.1 开发 YAML/JSON 模板定义
如果熟悉模板布局,可以使用标准的 YAML 或 JSON 文件从头开始开发模板。
oc explain
命令可以帮助探索所有 OpenShift API 对象的语法:
# oc explain
You must specify the type of resource to explain. Valid resource types
include:
* all
* buildconfigs (aka 'bc')
* builds
* certificatesigningrequests (aka 'csr')
* clusterrolebindings
* clusterroles
...
error: Required resource not specified.
See 'oc explain -h' for help and examples.
# oc explain svc
...
FIELDS:
metadata <Object>
Standard object's metadata. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
...
# oc explain svc.metadata
RESOURCE: metadata <Object>
...
FIELDS:
...
uid <string>
UID is the unique in time and space value for this object. It is
typically generated by the server on successful creation of a resource and
is not allowed to change on PUT operations. Populated by the system. Read-
only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids
$ oc explain svc.metadata.uid
FIELD: uid <string>
DESCRIPTION:
UID is the unique in time and space value for this object. It is
typically generated by the server on successful creation of a resource and
is not allowed to change on PUT operations. Populated by the system. Read-
only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids
2.7.2 导出现有资源为模板
使用
oc export
命令将现有 OpenShift 资源导出为模板。首先使用
oc new-app
命令创建一个运行中的应用程序:
$ oc new-app httpd
--> Found image 9fd201d (10 days old) in image stream "openshift/httpd"
under tag "2.4" for "httpd"
...
--> Success
Application is not exposed. You can expose services to the outside
world by executing one or more of the commands below:
'oc expose svc/httpd'
Run 'oc status' to view your app.
$ oc get all
NAME READY STATUS RESTARTS AGE
httpd-1-dcm2d 1/1 Running 0 2s
httpd-1-deploy 1/1 Running 0 3s
通过以上步骤,我们可以在 OpenShift 中完成简单应用的部署,以及使用模板来部署更复杂的多组件应用程序。掌握这些技能可以帮助我们更高效地管理和部署应用。
3. 模板使用流程总结
为了更清晰地展示使用 OpenShift 模板部署应用的流程,我们可以用 mermaid 流程图来表示:
graph LR
A[准备环境] --> B[创建或获取模板]
B --> C{模板是否在本地}
C -- 是 --> D[添加模板到 OpenShift]
C -- 否 --> E[使用已有模板]
D --> F[显示模板参数]
E --> F
F --> G[处理模板并部署应用]
G --> H[验证应用部署]
H --> I[清理环境(可选)]
3.1 流程详细说明
-
准备环境
:根据前面提到的技术要求,使用
Vagrantfile部署实验环境,包括安装必要的软件和启动 OpenShift 集群。 - 创建或获取模板 :可以自己开发 YAML/JSON 模板定义,也可以使用 OpenShift 自带的模板或从社区获取。
-
添加模板到 OpenShift
:如果模板是本地的,使用
oc create命令将其添加到 OpenShift。 -
显示模板参数
:使用
oc process --parameters命令或查看模板定义中的parameters部分,了解模板需要的参数。 -
处理模板并部署应用
:使用
oc new-app命令,传入模板名称和必要的参数,部署应用。 -
验证应用部署
:使用
oc get all等命令查看创建的对象,确保应用正常运行。 -
清理环境
:如果实验结束,可以使用
oc delete all --all等命令清理项目。
3.2 不同场景下的模板使用
3.2.1 简单应用部署场景
在简单应用部署场景中,我们可以直接使用
oc new-app
命令结合 Docker 镜像来部署应用。例如部署一个
httpd
应用:
$ oc new-app httpd
然后根据需要暴露服务:
$ oc expose svc/httpd
3.2.2 复杂多组件应用部署场景
对于复杂的多组件应用,如包含数据库和应用服务器的应用,我们可以使用模板来一次性部署所有组件。例如部署一个带有持久化存储的 MariaDB 数据库:
# oc new-app mariadb-persistent -p VOLUME_CAPACITY=2Gi
4. 常见问题及解决方法
4.1 模板参数问题
- 问题描述 :在处理模板时,可能会遇到参数缺失或参数值不符合要求的问题。
-
解决方法
:使用
oc process --parameters命令查看模板需要的参数,确保传入正确的参数值。例如,如果模板需要MYSQL_USER参数,我们可以这样部署:
# oc new-app mariadb -p MYSQL_USER=myuser
4.2 网络访问问题
- 问题描述 :应用部署后,可能无法从外部访问。
-
解决方法
:确保创建了服务和路由。例如,对于一个
httpd应用,使用以下命令暴露服务和创建路由:
$ oc expose svc/httpd
$ oc expose svc/httpd --hostname myservice.example.com
4.3 资源创建失败问题
-
问题描述
:在使用
oc new-app命令部署应用时,可能会出现资源创建失败的情况。 - 解决方法 :查看命令输出的错误信息,通常错误信息会提示具体的问题。例如,如果是权限问题,可以检查当前用户是否有足够的权限来创建资源。
5. 总结
通过本文,我们详细介绍了在 OpenShift 中部署简单应用和使用模板部署多组件应用的方法。主要内容包括:
-
简单应用部署
:验证镜像使用、暴露服务、使用
oc new-app
命令部署应用,以及部署和验证 MariaDB 数据库。
-
模板使用
:模板概述、语法、添加模板、显示模板参数、处理模板和创建自定义模板。
-
流程总结
:用流程图展示了使用模板部署应用的流程,并详细说明了每个步骤。
-
常见问题解决
:针对模板参数、网络访问和资源创建失败等常见问题,提供了解决方法。
掌握这些知识和技能,可以帮助我们更高效地在 OpenShift 平台上部署和管理应用,满足不同场景下的应用部署需求。希望本文能对大家在 OpenShift 应用部署方面有所帮助。
超级会员免费看
34

被折叠的 条评论
为什么被折叠?



