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 互动学习

相关推荐
tiger从容淡定是人生13 小时前
可审计性:AI时代自动化测试的核心指标
人工智能·自动化·项目管理·策略模式·可用性测试·coo
都说名字长不会被发现1 天前
模版方法 + 策略模式在库存增加/扣减场景下的应用
策略模式·模板方法模式·宏命令·策略聚合·库存设计
默|笙1 天前
【Linux】进程概念与控制(2)_进程控制
java·linux·策略模式
枫叶林FYL3 天前
Agent/Teakenote 系统(Swarm 架构)深度技术报告
架构·策略模式
苏渡苇4 天前
枚举的高级用法——用枚举实现策略模式和状态机
java·单例模式·策略模式·枚举·状态机·enum
harder3216 天前
Swift 面向协议编程的 RMP 模式
开发语言·ios·mvc·swift·策略模式
skywalk81636 天前
esxi8 虚拟机中怎么安装mac os(纯AI回答,未实践)
策略模式·esxi
廖圣平7 天前
从零开始,福袋直播间脚本研究【八】《策略模式》
开发语言·python·bash·策略模式
爱学习 爱分享10 天前
简单工厂模式和策略模式的区别
简单工厂模式·策略模式
xcntime13 天前
Python中print函数如何实现不换行输出?
策略模式