OpenShift CLI (oc)客户端安装以及常用命令

oc 是 OpenShift 的命令行客户端,基于 Kubernetes 的 kubectl 构建,并扩展了许多 OpenShift 特有的功能(如构建、部署配置、路由、镜像流等)。无论你是开发人员还是集群管理员,oc 都是与 OpenShift 交互的核心工具

1. 安装 oc 客户端
1.1 从红帽官网下载

访问 OpenShift 下载页面,选择对应操作系统的客户端:

复制代码
   Linux:openshift-client-linux.tar.gz

   macOS:openshift-client-mac.tar.gz

   Windows:openshift-client-windows.zip

解压后,将 oc 二进制文件放到 PATH 环境变量包含的目录中(如 /usr/local/bin)。

1.2 使用包管理器(Linux/macOS)

macOS Homebrew:

bash 复制代码
brew install openshift-cli

Linux (RHEL/CentOS):

bash 复制代码
sudo yum install openshift-clients

1.3 验证安装

java 复制代码
oc version

输出示例:

markup 复制代码
Client Version: 4.14.0-202403150918
Kubernetes Version: v1.27.6

2. 登录集群
2.1 使用 kubeadmin 登录(集群安装后)

bash 复制代码
oc login -u kubeadmin -p <password> https://api.ocp4.example.com:6443

密码可在安装目录的 auth/kubeadmin-password 文件中找到。

2.2 使用 OAuth 用户登录

通过浏览器登录 OpenShift Web 控制台后,可在右上角用户菜单中点击 "Copy Login Command",获得一个带有令牌的 oc login 命令,直接粘贴执行即可。

2.3 检查当前上下文

bash 复制代码
oc whoami          # 显示当前用户
oc whoami --show-server  # 显示当前集群 API 地址
oc config view     # 查看 kubeconfig 配置

3. 基础概念与常用命令

OpenShift 资源类型与 Kubernetes 基本一致,但多了 BuildConfig、DeploymentConfig、Route、ImageStream 等专有资源。oc 命令格式一般为:

bash 复制代码
oc <动作> <资源类型> <资源名称> [选项]

3.1 命名空间/项目

OpenShift 中用 项目 (Project) 表示 Kubernetes 的命名空间,但增加了额外的注解。

bash 复制代码
# 查看所有项目
oc get projects

# 切换到指定项目
oc project my-project

# 创建项目
oc new-project my-project --display-name="My Project" --description="Test project"

# 查看当前项目
oc project

3.2 查看资源

bash 复制代码
# 查看所有 Pod
oc get pods

# 查看所有 Deployment
oc get deploy

# 查看所有 Service
oc get svc

# 查看所有 Route(OpenShift 的 Ingress 替代)
oc get route

# 查看所有资源(包括自定义资源)
oc get all

# 查看特定 Pod 的详细信息
oc describe pod <pod-name>

# 以 YAML 格式输出资源
oc get pod <pod-name> -o yaml

3.3 创建资源

bash 复制代码
# 通过 YAML 文件创建
oc apply -f my-resource.yaml

# 直接运行一个 Pod(快速测试)
oc run test-pod --image=nginx --restart=Never

# 暴露一个 Deployment 创建 Service
oc expose deployment my-app --port=8080
3.4 删除资源
bash
oc delete pod <pod-name>
oc delete deployment <deploy-name>
# 根据标签删除
oc delete pods -l app=myapp

3.5 编辑资源

bash 复制代码
oc edit deployment my-app

会打开默认编辑器,保存后自动更新。

4. 应用部署与管理

OpenShift 提供了强大的构建和部署功能,oc 对此有专门的支持。

4.1 从源代码部署(S2I)

bash 复制代码
# 使用 Java S2I 构建器从 Git 仓库部署应用
oc new-app registry.access.redhat.com/ubi8/openjdk-11~https://github.com/your/repo.git --name=my-java-app

此命令会自动:

创建 BuildConfig 和 ImageStream

触发构建,生成镜像

创建 DeploymentConfig 和 Service

4.2 查看构建和部署状态

bash 复制代码
# 查看构建
oc get builds
oc logs build/<build-name>

# 查看部署
oc get deploymentconfigs
oc rollout status dc/my-java-app
	
# 触发新的部署(修改镜像或配置后)
oc rollout latest dc/my-java-app

4.3 暴露服务供外部访问

bash 复制代码
# 为 Service 创建 Route
oc expose service my-java-app --hostname=myapp.apps.ocp4.example.com
# 如果不指定 hostname,会自动生成域名(*.apps 通配符)
oc expose service my-java-app
# 查看 Route 地址
oc get route

4.4 扩缩容

bash 复制代码
# 手动扩缩 Deployment
oc scale deployment my-java-app --replicas=5

# 扩缩 DeploymentConfig
oc scale dc my-java-app --replicas=5

4.5 更新镜像

bash 复制代码
# 直接修改 Deployment 的镜像
oc set image deployment/my-java-app my-java-app=myregistry/myimage:latest

# 对于 DeploymentConfig,使用 `oc tag` 触发新构建
oc tag my-image-stream:latest my-java-app:latest

5. 配置与存储
5.1 ConfigMap 管理

bash 复制代码
# 从字面值创建
oc create configmap app-config --from-literal=key1=value1 --from-literal=key2=value2

# 从文件创建
oc create configmap app-properties --from-file=application.properties

# 查看 ConfigMap
oc get configmap app-config -o yaml

# 在 Pod 中挂载 ConfigMap(通过修改 Deployment 添加卷)
oc set volumes deployment/my-app --add --name=config --mount-path=/config --configmap-name=app-config

5.2 Secret 管理

bash 复制代码
# 创建通用 Secret
oc create secret generic db-secret --from-literal=password=mypassword

# 创建镜像拉取 Secret
oc create secret docker-registry myregistrykey --docker-server=myregistry.com --docker-username=user --docker-password=pass

# 在 ServiceAccount 中使用镜像拉取 Secret
oc patch serviceaccount default -p '{"imagePullSecrets": [{"name": "myregistrykey"}]}'

5.3 PersistentVolumeClaim

bash 复制代码
# 创建 PVC
cat <<EOF | oc apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
EOF

# 在 Pod 中挂载 PVC
oc set volumes deployment/my-app --add --name=data --mount-path=/data --claim-name=my-pvc

6. 日志与调试
6.1 查看容器日志

bash 复制代码
# 查看 Pod 日志
oc logs my-pod

# 持续跟踪日志
oc logs -f my-pod

# 查看特定容器的日志(多容器 Pod)
oc logs my-pod -c my-container

# 查看前一个实例的日志(容器重启后)
oc logs --previous my-pod

6.2 进入容器执行命令

bash 复制代码
# 启动交互式 Shell
oc exec -it my-pod -- /bin/bash

# 执行单条命令
oc exec my-pod -- ls -l

6.3 端口转发

将本地端口转发到 Pod 的端口,便于调试:

bash 复制代码
oc port-forward pod/my-pod 8080:80

访问 http://localhost:8080 即可连接到 Pod 的 80 端口。

6.4 复制文件到/从 Pod

bash 复制代码
# 从本地复制到 Pod
oc cp /local/file my-pod:/remote/path

# 从 Pod 复制到本地
oc cp my-pod:/remote/file /local/path

7. 高级功能
7.1 使用模板 (Template)

OpenShift 模板允许你将多个资源定义打包,通过参数化快速部署。

bash 复制代码
# 从模板实例化应用
oc new-app --template=postgresql-persistent --param DATABASE_SERVICE_NAME=mydb --param POSTGRESQL_USER=user

# 查看可用模板
oc get templates -n openshift

7.2 镜像流 (ImageStream)

镜像流是 OpenShift 特有的抽象,用于跟踪镜像更新。

bash 复制代码
# 创建镜像流
oc create imagestream myapp

# 标记外部镜像到镜像流
oc tag docker.io/library/nginx:latest myapp:latest

# 查看镜像流标签
oc describe is myapp

7.3 角色与权限管理

bash 复制代码
# 给用户添加查看权限
oc policy add-role-to-user view myuser -n myproject

# 给 ServiceAccount 添加权限
oc policy add-role-to-user edit system:serviceaccount:myproject:default

# 查看当前用户的权限
oc policy can-i create pods
7.4 监控与指标
bash
# 查看节点资源使用情况
oc adm top nodes

# 查看 Pod 资源使用
oc adm top pods

# 需要先部署 Metrics Server 或 Heapster

8. 常用快捷命令与技巧

目的 命令
查看所有资源(包含路由) oc get all
持续观察资源变化 oc get pods -w
根据标签筛选 oc get pods -l app=myapp
显示 Pod 的 IP 和节点 oc get pods -o wide
输出 YAML 并编辑 oc get pod mypod -o yaml
导出资源到文件 oc get pod mypod -o yaml
删除所有失败 Pod oc delete pods --field-selector status.phase=Failed
查看 API 资源列表 oc api-resources
查看某个资源的字段说明 oc explain pod.spec.containers

9. oc 与 kubectl 的关系

oc 是 kubectl 的超集,所有 kubectl 命令都可以用 oc 执行(oc get pods 等同于 kubectl get pods)。

oc 增加了 OpenShift 特有资源(如 BuildConfig、DeploymentConfig、Route、ImageStream)的支持。

oc 提供了更简洁的应用部署命令(如 oc new-app),适合开发人员快速上手。

在纯 Kubernetes 环境中,oc 依然可用,但部分 OpenShift 特有命令会报错。

如果你习惯 kubectl,可以继续使用,但建议在 OpenShift 环境中使用 oc 以获得完整体验。

10. 实战演练:部署一个 Java 应用

结合之前的私有云场景,用 oc 部署一个 Spring Boot 应用:

bash 复制代码
# 1. 登录集群
oc login -u kubeadmin -p <pass> https://api.ocp4.example.com:6443

# 2. 创建项目
oc new-project my-java-demo

# 3. 使用 S2I 从 Git 仓库部署
oc new-app registry.access.redhat.com/ubi8/openjdk-11~https://github.com/your/spring-boot-app.git --name=spring-app

# 4. 查看构建日志
oc logs -f bc/spring-app

# 5. 暴露服务
oc expose service spring-app

# 6. 获取访问地址
oc get route spring-app

# 7. 测试
curl http://spring-app-my-java-demo.apps.ocp4.example.com/hello

# 8. 扩缩容
oc scale deployment/spring-app --replicas=3

# 9. 查看 Pod 状态
oc get pods -w

# 10. 清理
oc delete project my-java-demo

11. 进一步学习

内置帮助:oc help、oc --help

OpenShift 官方文档:CLI 工具

红帽开发者教程: OpenShift 互动学习

相关推荐
C+++Python2 小时前
C++ 策略模式实战:从原理到落地
开发语言·c++·策略模式
CS创新实验室2 小时前
从硬件抽象到意图对齐:论 AI 时代操作系统演进的逻辑必然与 OpenClaw 的范式价值
人工智能·操作系统·策略模式
柏木乃一1 天前
Linux线程(7)基于策略模式的日志模块
linux·运维·服务器·c++·线程·策略模式
_OP_CHEN2 天前
【Linux系统编程】(四十五)线程池基础:日志系统设计与策略模式的优雅落地
linux·操作系统·线程池·进程·策略模式·c/c++·日志系统
像少年啦飞驰点、2 天前
Java策略模式从入门到实战:小白也能看懂的设计模式指南
java·设计模式·策略模式·编程入门·小白教程
乌萨奇也要立志学C++2 天前
【Linux】线程池(一)C++ 手写线程池:基于策略模式实现高性能日志模块
linux·c++·策略模式
JTCC3 天前
Java 设计模式西游篇 - 第三回:策略模式换法宝 三打白骨精变招
java·设计模式·策略模式
头发还在的女程序员16 天前
【免费下载】企业能源管理系统
小程序·策略模式·能源管理
前端 贾公子16 天前
React 和 Vue 都离不开的表单验证库 async-validator 之策略模式的应用 (上)
vue.js·react.js·策略模式