OKD 是 Red Hat OpenShift 容器平台的开源上游社区版。OKD 是一个基于 Docker 和 Kubernetes 的容器管理和编排平台。
OKD 是一个完整的解决方案,用于管理、部署和操作容器化应用程序,它(除了 Kubernetes 提供的功能外)还包括易于使用的 Web 界面、自动化构建工具、路由功能以及监控和日志聚合功能。
OKD 提供了多种部署选项,旨在满足不同需求,包括单节点或多节点主节点、高可用性功能、日志记录、监控等等。您可以根据需要创建任意大小的 OKD 集群。
除了这些部署选项外,OKD 还提供了一种使用 oc 命令行工具在您自己的机器上创建本地一体化集群的方法。如果您想在本地试用 OKD,而无需投入资源来创建更大的多节点集群,或者如果您想在机器上拥有本地集群作为工作流程或开发过程的一部分,这是一个很好的选择。在这种情况下,您可以使用与在更大规模上部署应用程序所需的相同 API 和接口在本地创建和部署应用程序。此过程确保了无缝集成,从而防止应用程序在开发人员环境中工作但在生产环境中不工作的问题。
本教程将向您展示如何在 Linux 机器中使用 oc cluster up 创建 OKD 集群。
1. 安装 Docker
oc cluster up 命令使用 Docker 容器在您的机器上创建一个本地 OKD 集群。为了使用此命令,您需要在机器上安装 Docker。对于 OKD 3.9 及更高版本,建议的最低 Docker 版本为 1.13。如果您的系统上未安装 Docker,请使用您的发行版软件包管理器进行安装。例如,在 CentOS 或 RHEL 上,使用以下命令安装 Docker
$ sudo yum install -y docker
在 Fedora 上,使用 dnf
$ sudo dnf install -y docker
这将安装 Docker 和所有必需的依赖项。
2. 配置 Docker 不安全注册表
安装 Docker 后,您需要将其配置为允许与地址 172.30.0.0/16 上的不安全注册表通信。此不安全注册表将稍后与您的本地 OKD 集群一起部署。
在 CentOS 或 RHEL 上,编辑文件 /etc/docker/daemon.json,添加以下行
{
"insecure-registries": ["172.30.0.0/16"]
}
在 Fedora 上,编辑文件 /etc/containers/registries.conf ,添加以下行
[registries.insecure]
registries = ['172.30.0.0/16']
3. 启动 Docker
在启动 Docker 之前,创建一个名为 docker 的系统组,并将此组分配给您的用户,以便您可以使用自己的用户运行 Docker 命令,而无需 root 或 sudo 访问权限。这允许您使用自己的用户创建 OKD 集群。
例如,以下是创建组并将其分配给我的本地用户 ricardo 的命令
$ sudo groupadd docker
$ sudo usermod -a -G docker ricardo
您需要注销并重新登录才能看到新的组关联。重新登录后,运行 id 命令并确保您是 docker 组的成员
$ id
uid=1000(ricardo) gid=1000(ricardo) groups=1000(ricardo),10(wheel),1001(docker)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
现在,像这样启动并启用 Docker 守护程序
$ sudo systemctl start docker
$ sudo systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
验证 Docker 是否正在运行
$ docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-75.git8633870.el7.centos.x86_64
Go version: go1.9.4
Git commit: 8633870/1.13.1
Built: Fri Sep 28 19:45:08 2018
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-75.git8633870.el7.centos.x86_64
Go version: go1.9.4
Git commit: 8633870/1.13.1
Built: Fri Sep 28 19:45:08 2018
OS/Arch: linux/amd64
Experimental: false
通过运行 docker info 并查找以下行,确保已启用不安全注册表选项
$ docker info
... Skipping long output ...
Insecure Registries:
172.30.0.0/16
127.0.0.0/8
4. 打开防火墙端口
接下来,打开防火墙端口以确保您的 OKD 容器可以与主 API 通信。默认情况下,某些发行版启用了防火墙,这会阻止从 OKD 容器到主 API 的必要连接。如果您的系统启用了防火墙,则需要添加规则以允许端口 8443/tcp 用于主 API 通信,端口 53/udp 用于 Docker 网桥子网上的 DNS 解析。
对于 CentOS、RHEL 和 Fedora,您可以使用 firewall-cmd 命令行工具添加规则。对于其他发行版,您可以使用提供的防火墙管理器,例如 UFW 或 iptables。
在添加防火墙规则之前,获取 Docker 网桥网络子网的地址,如下所示
$ docker network inspect bridge | grep Subnet
"Subnet": "172.17.0.0/16",
使用此子网启用防火墙规则。对于 CentOS、RHEL 和 Fedora,请使用 firewall-cmd 添加新区域
$ sudo firewall-cmd --permanent --new-zone okdlocal
success
将您之前获得的子网地址作为源包含到新区域中
$ sudo firewall-cmd --permanent --zone okdlocal --add-source 172.17.0.0/16
success
接下来,将所需的规则添加到 okdlocal 区域
$ sudo firewall-cmd --permanent --zone okdlocal --add-port 8443/tcp
success
$ sudo firewall-cmd --permanent --zone okdlocal --add-port 53/udp
success
$ sudo firewall-cmd --permanent --zone okdlocal --add-port 8053/udp
success
最后,重新加载防火墙以启用新规则
$ sudo firewall-cmd --reload
success
确保新区域和规则已就位
$ sudo firewall-cmd --zone okdlocal --list-sources
172.17.0.0/16
$ sudo firewall-cmd --zone okdlocal --list-ports
8443/tcp 53/udp 8053/udp
您的系统已准备好启动集群。现在是下载 OKD 客户端工具的时候了。
5. 下载 OKD 客户端工具
要使用 oc 部署本地 OKD 集群,您需要下载 OKD 客户端工具包。对于某些发行版(如 CentOS 和 Fedora),可以从官方存储库以 RPM 形式下载此软件包。请注意,这些软件包可能会遵循发行版更新周期,并且通常不是最新的可用版本。
对于本教程,请直接从官方 GitHub 存储库下载 OKD 客户端软件包,以便您可以获得最新的可用版本。在撰写本文时,这是 OKD v3.11。
转到 OKD 下载页面 获取 Linux 版 OKD 工具的链接,然后使用 wget 下载它
$ cd ~/Downloads/
$ wget https://github.com/openshift/origin/releases/download/v3.11.0/openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit.tar.gz
解压缩下载的软件包
$ tar -xzvf openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit.tar.gz
最后,为了更轻松地在系统范围内使用 oc 命令,请将其移动到包含在 $PATH 变量中的目录。一个好的位置是 /usr/local/bin
$ sudo cp openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit/oc /usr/local/bin/
oc 命令最棒的功能之一是它是一个静态单二进制文件。您无需安装即可使用它。
检查 oc 命令是否正常工作
$ oc version
oc v3.11.0+0cbc58b
kubernetes v1.11.0+d4cacc0
features: Basic-Auth GSSAPI Kerberos SPNEGO
6. 启动您的 OKD 集群
一旦您具备了所有先决条件,就可以通过运行以下命令来启动本地 OKD 集群
$ oc cluster up
此命令连接到您的本地 Docker 守护程序,从 Docker Hub 下载所有必需的镜像,并启动容器。首次运行时,需要几分钟才能完成。完成后,您将看到以下消息
... Skipping long output ...
OpenShift server started.
The server is accessible via web console at:
https://127.0.0.1:8443
You are logged in as:
User: developer
Password: <any value>
To login as administrator:
oc login -u system:admin
使用浏览器并导航到 https://127.0.0.1:8443: 访问 OKD Web 控制台

OKD Web 控制台登录界面
从命令行,您可以通过输入以下命令来检查集群是否正在运行
$ oc cluster status
Web console URL: https://127.0.0.1:8443/console/
Config is at host directory
Volumes are at host directory
Persistent volumes are at host directory /home/ricardo/openshift.local.clusterup/openshift.local.pv
Data will be discarded when cluster is destroyed
您还可以通过以 system:admin 用户身份登录并使用 oc 命令行工具检查可用节点来验证您的集群是否正常工作
$ oc login -u system:admin
Logged into "https://127.0.0.1:8443" as "system:admin" using existing credentials.
You have access to the following projects and can switch between them with 'oc project <projectname>':
default
kube-dns
kube-proxy
kube-public
kube-system
* myproject
openshift
openshift-apiserver
openshift-controller-manager
openshift-core-operators
openshift-infra
openshift-node
openshift-service-cert-signer
openshift-web-console
Using project "myproject".
$ oc get nodes
NAME STATUS ROLES AGE VERSION
localhost Ready <none> 52m v1.11.0+d4cacc0
由于这是一个本地一体化集群,您只能在节点列表中看到 localhost。
7. 冒烟测试您的集群
现在您的本地 OKD 集群正在运行,创建一个测试应用程序对其进行冒烟测试。使用 OKD 构建并启动示例应用程序,以便您可以确保不同的组件正常工作。
首先以 developer 用户身份登录
$ oc login -u developer
Logged into "https://127.0.0.1:8443" as "developer" using existing credentials.
You have one project on this server: "myproject"
Using project "myproject".
您将自动分配到一个名为 myproject 的新空项目。基于现有的 GitHub 存储库创建一个示例 PHP 应用程序,如下所示
$ oc new-app php:5.6~https://github.com/rgerardi/ocp-smoke-test.git
--> Found image 92ed8b3 (5 months old) in image stream "openshift/php" under tag "5.6" for "php:5.6"
Apache 2.4 with PHP 5.6
-----------------------
PHP 5.6 available as container is a base platform for building and running various PHP 5.6 applications and frameworks. PHP is an HTML-embedded scripting language. PHP attempts to make it easy for developers to write dynamically generated web pages. PHP also offers built-in database integration for several commercial and non-commercial database management systems, so writing a database-enabled webpage with PHP is fairly simple. The most common use of PHP coding is probably as a replacement for CGI scripts.
Tags: builder, php, php56, rh-php56
* A source build using source code from https://github.com/rgerardi/ocp-smoke-test.git will be created
* The resulting image will be pushed to image stream tag "ocp-smoke-test:latest"
* Use 'start-build' to trigger a new build
* This image will be deployed in deployment config "ocp-smoke-test"
* Ports 8080/tcp, 8443/tcp will be load balanced by service "ocp-smoke-test"
* Other containers can access this service through the hostname "ocp-smoke-test"
--> Creating resources ...
imagestream.image.openshift.io "ocp-smoke-test" created
buildconfig.build.openshift.io "ocp-smoke-test" created
deploymentconfig.apps.openshift.io "ocp-smoke-test" created
service "ocp-smoke-test" created
--> Success
Build scheduled, use 'oc logs -f bc/ocp-smoke-test' to track its progress.
Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
'oc expose svc/ocp-smoke-test'
Run 'oc status' to view your app.
OKD 启动构建过程,该过程克隆提供的 GitHub 存储库,编译应用程序(如果需要),并创建必要的镜像。您可以通过使用以下命令跟踪其日志来关注构建过程
$ oc logs -f bc/ocp-smoke-test
Cloning "https://github.com/rgerardi/ocp-smoke-test.git" ...
Commit: 391a475713d01ab0afab700bab8a3d7549c5cc27 (Create index.php)
Author: Ricardo Gerardi <ricardo.gerardi@gmail.com>
Date: Tue Oct 2 13:47:25 2018 -0400
Using 172.30.1.1:5000/openshift/php@sha256:f3c95020fa870fcefa7d1440d07a2b947834b87bdaf000588e84ef4a599c7546 as the s2i builder image
---> Installing application source...
=> sourcing 20-copy-config.sh ...
---> 04:53:28 Processing additional arbitrary httpd configuration provided by s2i ...
=> sourcing 00-documentroot.conf ...
=> sourcing 50-mpm-tuning.conf ...
=> sourcing 40-ssl-certs.sh ...
Pushing image 172.30.1.1:5000/myproject/ocp-smoke-test:latest ...
Pushed 1/10 layers, 10% complete
Push successful
构建过程完成后,OKD 通过运行基于创建的镜像的新 Pod 自动启动应用程序。您可以使用以下命令查看此新 Pod
$ oc get pods
NAME READY STATUS RESTARTS AGE
ocp-smoke-test-1-build 0/1 Completed 0 1m
ocp-smoke-test-1-d8h76 1/1 Running 0 7s
您可以看到创建了两个 Pod;第一个 Pod(状态为 Completed)是用于构建应用程序的 Pod。第二个 Pod(状态为 Running)是应用程序本身。
此外,OKD 为此应用程序创建了一个服务。使用以下命令进行验证
$ oc get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ocp-smoke-test ClusterIP 172.30.232.241 <none> 8080/TCP,8443/TCP 1m
最后,使用 OKD 路由在外部公开此服务,以便您可以从本地浏览器访问该应用程序
$ oc expose svc ocp-smoke-test
route.route.openshift.io/ocp-smoke-test exposed
$ oc get route
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
ocp-smoke-test ocp-smoke-test-myproject.127.0.0.1.nip.io ocp-smoke-test 8080-tcp None
通过在 Web 浏览器中导航到 http://ocp-smoke-test-myproject.127.0.0.1.nip.io 来验证您的新应用程序是否正在运行

OKD 示例 Web 应用程序
您还可以通过登录到 OKD Web 控制台来查看应用程序的状态

OKD 示例应用程序状态
了解更多
您可以在 官方网站 上找到有关 OKD 的更多信息,其中包括指向 OKD 文档 的链接。
如果这是您第一次使用 OKD/OpenShift,您可以通过 交互式学习门户 学习该平台的基础知识,包括如何构建和部署容器化应用程序。另一个不错的资源是官方 OpenShift YouTube 频道。
5 条评论