OpenShift CLI(oc)の使い方
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コマンドは、次のいずれかの方法でインストールできます。
- ①:稼働中のOCPのWebコンソールからバイナリをダウンロード
- ②:RedHat OpenShift Cluster Managerサイトからバイナリをダウンドード
- ③:https://mirror.openshift.com/ からバイナリを取得
②のやり方が簡単です。詳細なインストール方法は以下サイトが参考なりますので是非。
バージョン間の互換性の詳細は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