⌨️

OpenShift CLI(oc)の使い方

2024/09/22に公開

0.はじめに

OpenShift Container Platform(以下、OCP)入門者向けに、OpenShift CLI(oc)の使い方を解説します。

本記事の内容に沿って、ハンズオンいただくと以下を習得できます。

  • OpenShiftのCLI(oc)とは何か
  • ocコマンドのインストール方法
  • ocコマンドの使い方

では、次の章から具体的な解説を進めます!

1.OpenShiftのCLI(oc)について

OCPのCLIは「oc」というコマンドです。

ocを使ってOCPの管理、プロジェクやアプリケーションの作成・管理を行うことができます。

次章で、ocコマンドのインストール方法をみていきます。

2.ocコマンドのインストール方法

ocコマンドは、次のいずれかの方法でインストールできます。

②のやり方が簡単です。詳細なインストール方法は以下サイトが参考なりますので是非。

https://www.ibm.com/docs/ja/guardium-insights/3.x?topic=mia-install-openshift-command-line-interface-cli

バージョン間の互換性の詳細はOCPのオンラインドキュメントをご参照ください。

次章で、ocコマンドの使い方をみていきます。

3.ocコマンドの使い方

ocコマンドの使い方をみていきます。

  • CLI(oc)へのログイン
  • CLI(oc)の基本的な使い方
  • CLI(oc)からのログアウト

3.1.CLI(oc)へのログイン

まず、以下コマンドを実行しログイン情報を取得します。

$ crc console --credentials

パスワード情報が表示されると思うので、kubeadminのoc login -u kubeadmin〜をコピーしましょう。

To login as a regular user, run 'oc login -u developer -p developer https://api.crc.testing:6443'.
To login as an admin, run 'oc login -u kubeadmin -p <password> https://api.crc.testing:6443'

コピーしたコマンド(oc login)を実行します。

$ oc login -u kubeadmin -p <password> https://api.crc.testing:6443

以下のようなメッセージが表示されれば、ログイン成功です!

Login successful.

You have access to 66 projects, the list has been suppressed. You can list all projects with 'oc projects'

Using project "default".

3.2.CLI(oc)の基本的な使い方

CLI(oc)を使用して、一般的なタスクを実行する方法をみていきます。

プロジェクト作成

以下形式で、新規プロジェクトを作成可能です。

$ oc new-project <projectname>

試しに、「lesson」というプロジェクトを作成してみましょう。

$ oc new-project lesson

以下のようなメッセージが出力されれば、プロジェクト作成完了です!

Now using project "lesson" on server "https://api.crc.testing:6443".

You can add applications to this project with the 'new-app' command. For example, try:

    oc new-app rails-postgresql-example

to build a new example application in Ruby. Or use kubectl to deploy a simple Kubernetes application:

    kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.43 -- /agnhost serve-hostname

プロジェクトのステータスの概要取得

次に、以下コマンドで作成した「lesson」プロジェクトの情報を取得してみましょう。

$ oc status

すると以下ようなメッセージが出力されると思います。

In project lesson on server https://api.crc.testing:6443

You have no services, deployment configs, or build configs.
Run 'oc new-app' to create an application.

簡単に説明すると、現状「lesson」というプロジェクトにいる。何もリソースが作成されていないのでアプリケーションデプロイなどしてみてねという感じです。

全プロジェクトをリスト表示

他にプロジェクトがないか気になると思います。そういった時は、以下コマンドでリスト表示できます。

$ oc projects

以下のようにリスト表示されるはずです。色々なプロジェクトがインストール時から存在することがわかります。

You have access to the following projects and can switch between them with ' project <projectname>':

    default
    hostpath-provisioner
    kube-node-lease
    kube-public
    kube-system
  * lesson
    lesson2
    openshift
    openshift-apiserver
    openshift-apiserver-operator
    openshift-authentication
    openshift-authentication-operator
    openshift-cloud-network-config-controller
    openshift-cloud-platform-infra
    openshift-cluster-machine-approver
    openshift-cluster-samples-operator
    openshift-cluster-storage-operator
    openshift-cluster-version
    openshift-config
    openshift-config-managed
    openshift-config-operator
    openshift-console
    openshift-console-operator
    openshift-console-user-settings
    openshift-controller-manager
    openshift-controller-manager-operator
    openshift-dns
    openshift-dns-operator
    openshift-etcd
    openshift-etcd-operator
    openshift-host-network
    openshift-image-registry
    openshift-infra
    openshift-ingress
    openshift-ingress-canary
    openshift-ingress-operator
    openshift-kni-infra
    openshift-kube-apiserver
    openshift-kube-apiserver-operator
    openshift-kube-controller-manager
    openshift-kube-controller-manager-operator
    openshift-kube-scheduler
    openshift-kube-scheduler-operator
    openshift-kube-storage-version-migrator
    openshift-kube-storage-version-migrator-operator
    openshift-machine-api
    openshift-machine-config-operator
    openshift-marketplace
    openshift-monitoring
    openshift-multus
    openshift-network-diagnostics
    openshift-network-node-identity
    openshift-network-operator
    openshift-node
    openshift-nutanix-infra
    openshift-oauth-apiserver
    openshift-openstack-infra
    openshift-operator-lifecycle-manager
    openshift-operators
    openshift-ovirt-infra
    openshift-ovn-kubernetes
    openshift-route-controller-manager
    openshift-service-ca
    openshift-service-ca-operator
    openshift-user-workload-monitoring
    openshift-vsphere-infra
    test

Using project "lesson" on server "https://api.crc.testing:6443".

ちなみに、現在のプロジェクトのみ知りたい場合は、以下コマンドで確認できます。

$ oc project

以下のように出力され、「lesson」プロジェクトにいることがわかります。

Using project "lesson" on server "https://api.crc.testing:6443".

プロジェクトのステータスの概要取得(全プロジェクト指定(namespace))

他にプロジェクトがないか気になると思います。そういった時は、以下コマンドでリスト表示できます。

$ oc status -A

プロジェクトのステータスの概要取得(プロジェクト指定)

プロジェクトを指定して、ステータスを表示させることもできます。

$ oc status -n <projectname>

アプリケーションデプロイ(ソースコードの場所を指定して新しいアプリケーションを作成可)

アプリケーションをデプロイするには、oc new-appコマンドを使います。

試しに、以下の通り「first-app」というアプリケーションを「hello-openshift」イメージをもとにデプロイしてみます。

$ oc new-app --name=first-app --image=openshift/hello-openshift

以下メッセージが出力すれば、デプロイ成功です!

--> Found container image 7af3297 (6 years old) from Docker Hub for "openshift/hello-openshift"

    * An image stream tag will be created as "first-app:latest" that will track this image

--> Creating resources ...
    imagestream.image.openshift.io "first-app" created
    deployment.apps "first-app" created
    service "first-app" created
--> Success
    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
     'oc expose service/first-app' 
    Run 'oc status' to view your app.

プロジェクトで実行されているポッドに関する情報を取得。

しばらくすると、Podが起動されるので以下コマンドを実行してPodの状態を確認してみましょう。

$ oc get pods -o wide

以下の通り、Podの情報が表示され「first-app」のPodが起動状態できあることが確認できます。

NAME                         READY   STATUS    RESTARTS   AGE   IP            NODE   NOMINATED NODE   READINESS GATES
first-app-6858b8457d-8b82m   1/1     Running   0          46s   10.217.0.42   crc    <none>           <none>

特定のポッドまたはデプロイメントのログを表示。

oc logsコマンドを使うとデプロイメントのログを表示させることができます。

$ oc logs deployment/<app>

下記コマンドを実行し、「first-app」のログを表示させてみましょう。

$ oc logs deployment/first-app

以下の通り、ログが表示されました。

serving on 8080
serving on 8888

このログメッセージから、first-app はポート「8080」と「8888」でサービスを提供していることがわかります。

つまり、アプリケーションは正常に起動し、指定されたポートでリクエストを受け付けている状態です。

クラスター内で利用可能なAPIリソースを表示。

クラスター内で利用可能なAPIリソースを表示させるには、以下コマンドを実行します。

$ oc api-resources

以下のように、APIが表示されます。

NAME                                  SHORTNAMES                                                                             APIVERSION                                    NAMESPACED   KIND
bindings                                                                                                                     v1                                            true         Binding
componentstatuses                     cs                                                                                     v1                                            false        ComponentStatus
configmaps                            cm                                                                                     v1                                            true         ConfigMap
endpoints                             ep                                                                                     v1                                            true         Endpoints
events                                ev                                                                                     v1                                            true         Event
limitranges                           limits                                                                                 v1                                            true         LimitRange
namespaces                            ns                                                                                     v1                                            false        Namespace
nodes                                 no                                                                                     v1                                            false        Node
〜省略〜

ocコマンドについてカテゴリ別にグループ化された使用可能なコマンドの包括的なリストを表示。

すべのocコマンドを覚えることは現実的ではないため、oc helpコマンドを利用しましょう。

$ oc help

以下の通り、使用可能なコマンドを包括的に表示してくれます。

OpenShift Client

This client helps you develop, build, deploy, and run your applications on any
OpenShift or Kubernetes cluster. It also includes the administrative
commands for managing a cluster under the 'adm' subcommand.

Basic Commands:
  login             Log in to a server
  new-project       Request a new project
  new-app           Create a new application
  status            Show an overview of the current project
  project           Switch to another project
  projects          Display existing projects
  explain           Get documentation for a resource

Build and Deploy Commands:
  rollout           Manage a Kubernetes deployment or OpenShift deployment config
  rollback          Revert part of an application back to a previous deployment
  new-build         Create a new build configuration
  start-build       Start a new build
  cancel-build      Cancel running, pending, or new builds
  import-image      Import images from a container image registry
  tag               Tag existing images into image streams

Application Management Commands:
  create            Create a resource from a file or from stdin
  apply             Apply a configuration to a resource by file name or stdin
  get               1つまたは複数のリソースを表示する
  describe          Show details of a specific resource or group of resources
  edit              Edit a resource on the server
  set               Commands that help set specific features on objects
  label             リソースのラベルを更新する
  annotate          リソースのアノテーションを更新する
  expose            Expose a replicated application as a service or route
  delete            Delete resources by file names, stdin, resources and names, or by resources and label selector
  scale             Set a new size for a deployment, replica set, or replication controller
  autoscale         Autoscale a deployment config, deployment, replica set, stateful set, or replication controller
  secrets           Manage secrets

Troubleshooting and Debugging Commands:
  logs              Print the logs for a container in a pod
  rsh               Start a shell session in a container
  rsync             Copy files between a local file system and a pod
  port-forward      Forward one or more local ports to a pod
  debug             Launch a new instance of a pod for debugging
  exec              Execute a command in a container
  proxy             Run a proxy to the Kubernetes API server
  attach            Attach to a running container
  run               Run a particular image on the cluster
  cp                Copy files and directories to and from containers
  wait              Experimental: Wait for a specific condition on one or many resources
  events            List events

Advanced Commands:
  adm               Tools for managing a cluster
  replace           Replace a resource by file name or stdin
  patch             Update fields of a resource
  process           Process a template into list of resources
  extract           Extract secrets or config maps to disk
  observe           Observe changes to resources and react to them (experimental)
  policy            Manage authorization policy
  auth              Inspect authorization
  image             Useful commands for managing images
  registry          Commands for working with the registry
  idle              Idle scalable resources
  api-versions      Print the supported API versions on the server, in the form of "group/version"
  api-resources     Print the supported API resources on the server
  cluster-info      Display cluster information
  diff              Diff the live version against a would-be applied version
  kustomize         Build a kustomization target from a directory or URL

Settings Commands:
  get-token         Experimental: Get token from external OIDC issuer as credentials exec plugin
  logout            End the current server session
  config            kubeconfigを変更する
  whoami            Return information about the current session
  completion        Output shell completion code for the specified shell (bash, zsh, fish, or powershell)

Other Commands:
  plugin            Provides utilities for interacting with plugins
  version           Print the client and server version information

Usage:
  oc [flags] [options]

Use "oc <command> --help" for more information about a given command.
Use "oc options" for a list of global command-line options (applies to all commands).

特定のコマンドに関する詳細情報が必要な場合。(例:createコマンドの場合)

oc helpで使いたいコマンドを見つけたら、--helpをつけて該当コマンドの具体的な使い方を調べましょう。

$ oc create --help

以下のように詳細な使い方が表示されます。

Create a resource from a file or from stdin.

 JSON and YAML formats are accepted.

Examples:
  # Create a pod using the data in pod.json
  oc create -f ./pod.json
  
  # Create a pod based on the JSON passed into stdin
  cat pod.json | oc create -f -
  
  # Edit the data in registry.yaml in JSON then create the resource using the edited data
  oc create -f registry.yaml --edit -o json

Available Commands:
  build                  Create a new build
  clusterresourcequota   Create a cluster resource quota
  clusterrole            Create a cluster role
  clusterrolebinding     Create a cluster role binding for a particular cluster role
  configmap              Create a config map from a local file, directory or literal value
  cronjob                Create a cron job with the specified name
  deployment             Create a deployment with the specified name
  deploymentconfig       Create a deployment config with default options that uses a given image
  identity               Manually create an identity (only needed if automatic creation is disabled)
  imagestream            Create a new empty image stream
  imagestreamtag         Create a new image stream tag
  ingress                Create an ingress with the specified name
  job                    Create a job with the specified name
  namespace              Create a namespace with the specified name
  poddisruptionbudget    Create a pod disruption budget with the specified name
  priorityclass          Create a priority class with the specified name
  quota                  Create a quota with the specified name
  role                   Create a role with single rule
  rolebinding            Create a role binding for a particular role or cluster role
  route                  Expose containers externally via secured routes
  secret                 Create a secret using a specified subcommand
  service                Create a service using a specified subcommand
  serviceaccount         Create a service account with the specified name
  token                  Request a service account token
  user                   Manually create a user (only needed if automatic creation is disabled)
  useridentitymapping    Manually map an identity to a user

Options:
    --allow-missing-template-keys=true:
	If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to
	golang and jsonpath output formats.

    --dry-run='none':
	Must be "none", "server", or "client". If client strategy, only print the object that would be sent, without
	sending it. If server strategy, submit server-side request without persisting the resource.

    --edit=false:
	Edit the API resource before creating

    --field-manager='kubectl-create':
	Name of the manager used to track field ownership.

    -f, --filename=[]:
	Filename, directory, or URL to files to use to create the resource

    -k, --kustomize='':
	Process the kustomization directory. This flag can't be used together with -f or -R.

    -o, --output='':
	Output format. One of: (json, yaml, name, go-template, go-template-file, template, templatefile, jsonpath,
	jsonpath-as-json, jsonpath-file).

    --raw='':
	Raw URI to POST to the server.  Uses the transport specified by the kubeconfig file.

    -R, --recursive=false:
	Process the directory used in -f, --filename recursively. Useful when you want to manage related manifests
	organized within the same directory.

    --save-config=false:
	If true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will
	be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.

    -l, --selector='':
	Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2). Matching
	objects must satisfy all of the specified label constraints.

    --show-managed-fields=false:
	If true, keep the managedFields when printing objects in JSON or YAML format.

    --template='':
	Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format
	is golang templates [http://golang.org/pkg/text/template/#pkg-overview].

    --validate='ignore':
	Must be one of: strict (or true), warn, ignore (or false). 		"true" or "strict" will use a schema to validate
	the input and fail the request if invalid. It will perform server side validation if ServerSideFieldValidation
	is enabled on the api-server, but will fall back to less reliable client-side validation if not. 		"warn" will
	warn about unknown or duplicate fields without blocking the request if server-side field validation is enabled
	on the API server, and behave as "ignore" otherwise. 		"false" or "ignore" will not perform any schema
	validation, silently dropping any unknown or duplicate fields.

    --windows-line-endings=false:
	Only relevant if --edit=true. Defaults to the line ending native to your platform.

Usage:
  oc create -f FILENAME [options]

Use "oc create <command> --help" for more information about a given command.
Use "oc options" for a list of global command-line options (applies to all commands).

3.3.CLI(oc)からのログアウト

oc logoutコマンドを実行すればログアウトできます。

$ oc logout

以下のようなメッセージが表示されれば、ログアウト完了です。

Logged "kubeadmin" out on "https://api.crc.testing:6443"

4.おわりに

今回はOpenShift CLI(oc)の理解を深めるために、以下を学びました。

  • OpenShiftのCLI(oc)について理解できる(「oc」というコマンド)
  • ocコマンドのインストール方法(バイナリでインストール)
  • ocコマンドの使い方(プロジェクトの作成やアプリケーションの作成など)

一回で覚えるのは難しいと思うので、何度かトライして覚えるで全然大丈夫です。

今後もOpenShiftについて解説していきます。

おわりっ!

参考サイト

Red Hat Documentation 第1章 OpenShift CLI (oc)
Red Hat Documentation OpenShift Container Platform 4.16

Discussion