在 Linux 桌面环境中使用 OKD 入门

通过本教程试用 OpenShift 容器平台的社区版 OKD。
363 位读者喜欢这篇文章。

OKD 是 Red Hat OpenShift 容器平台的开源上游社区版。OKD 是一个基于 DockerKubernetes 的容器管理和编排平台。

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 命令行工具添加规则。对于其他发行版,您可以使用提供的防火墙管理器,例如 UFWiptables

在添加防火墙规则之前,获取 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 Console

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;第一个(状态为 Completed)是用于构建应用程序的 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 sample web application

OKD 示例 Web 应用程序

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

OKD sample application status

OKD 示例应用程序状态

了解更多信息

您可以在 官方网站 上找到有关 OKD 的更多信息,其中包括指向 OKD 文档 的链接。

如果这是您第一次使用 OKD/OpenShift,您可以通过 交互式学习门户 学习平台的基础知识,包括如何构建和部署容器化应用程序。另一个很好的资源是官方 OpenShift YouTube 频道

标签
Avatar
Ricardo Gerardi 是 Enable Sysadmin 和 Enable Architect 的技术社区倡导者。他之前是 Red Hat Canada 的首席顾问,专注于使用 Ansible 和 OpenShift 进行 IT 自动化。

5 条评论

我想知道是否可以使用 podman 代替 docker...

假设使用 rpm-ostree 而不是 dnf 进行安装,这是否适用于 Silverblue 29?

© . All rights reserved.