【OpenShift】ocコマンドによる効率的なリソース確認方法
0.はじめに
OpenShift Container Platform(以下、OCP)入門者向けに、ocコマンドでリソース状態を効率的に確認する方法を解説します。
本記事の内容に沿って、ハンズオンいただくと以下を習得できます。
- クエリの使い方
- フォーマットの使い方
- フィルターの使い方
では、次の章から具体的な解説を進めます!
1.クエリの使い方
クエリとは、OpenShiftリソースの情報を取得するためのコマンド操作です。
oc get
やoc describe
などのコマンドを使って、特定のリソースに関する情報を取得します。
例1: oc get pods
oc get pods
このコマンドは、現在のプロジェクト(namespace)内のすべてのPodのリストを表示します。
出力例👇
NAME READY STATUS RESTARTS AGE
first-app-6858b8457d-8b82m 1/1 Running 2 25h
例2: oc describe pod
oc describe pod first-app-6858b8457d-8b82m
oc describe
は、特定のリソース(この場合はPod)の詳細情報を表示します。リソースのイベントログや状態、設定内容が含まれます。
出力例👇
Name: first-app-6858b8457d-8b82m
Namespace: lesson
Priority: 0
Service Account: default
Node: crc/192.168.126.11
Start Time: Sun, 22 Sep 2024 13:54:28 +0900
Labels: deployment=first-app
pod-template-hash=6858b8457d
Annotations: k8s.ovn.org/pod-networks:
{"default":{"ip_addresses":["10.217.0.42/23"],"mac_address":"0a:58:0a:d9:00:2a","gateway_ips":["10.217.0.1"],"routes":[{"dest":"10.217.0.0...
k8s.v1.cni.cncf.io/network-status:
[{
"name": "ovn-kubernetes",
"interface": "eth0",
"ips": [
"10.217.0.42"
],
"mac": "0a:58:0a:d9:00:2a",
"default": true,
"dns": {}
}]
openshift.io/generated-by: OpenShiftNewApp
openshift.io/scc: restricted-v2
seccomp.security.alpha.kubernetes.io/pod: runtime/default
Status: Running
SeccompProfile: RuntimeDefault
IP: 10.217.0.42
IPs:
IP: 10.217.0.42
Controlled By: ReplicaSet/first-app-6858b8457d
Containers:
first-app:
Container ID: cri-o://012257994ad33043af3041bddbabbda9fdaf5852e8fcb9e6996d97675e483d20
Image: openshift/hello-openshift@sha256:aaea76ff622d2f8bcb32e538e7b3cd0ef6d291953f3e7c9f556c1ba5baf47e2e
Image ID: docker.io/openshift/hello-openshift@sha256:aaea76ff622d2f8bcb32e538e7b3cd0ef6d291953f3e7c9f556c1ba5baf47e2e
Ports: 8080/TCP, 8888/TCP
Host Ports: 0/TCP, 0/TCP
State: Running
Started: Mon, 23 Sep 2024 14:53:44 +0900
Ready: True
Restart Count: 2
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-qjfsw (ro)
Conditions:
Type Status
PodReadyToStartContainers True
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kube-api-access-qjfsw:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
ConfigMapName: openshift-service-ca.crt
ConfigMapOptional: <nil>
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 25h default-scheduler Successfully assigned lesson/first-app-6858b8457d-8b82m to crc
Normal AddedInterface 25h multus Add eth0 [10.217.0.42/23] from ovn-kubernetes
Normal Pulled 25h kubelet Container image "openshift/hello-openshift@sha256:aaea76ff622d2f8bcb32e538e7b3cd0ef6d291953f3e7c9f556c1ba5baf47e2e" already present on machine
Normal Created 25h kubelet Created container first-app
Normal Started 25h kubelet Started container first-app
Normal AddedInterface 70m multus Add eth0 [10.217.0.42/23] from ovn-kubernetes
Normal Pulled 70m kubelet Container image "openshift/hello-openshift@sha256:aaea76ff622d2f8bcb32e538e7b3cd0ef6d291953f3e7c9f556c1ba5baf47e2e" already present on machine
Normal Created 69m kubelet Created container first-app
Normal Started 69m kubelet Started container first-app
Normal AddedInterface 55m multus Add eth0 [10.217.0.42/23] from ovn-kubernetes
Normal Pulled 55m kubelet Container image "openshift/hello-openshift@sha256:aaea76ff622d2f8bcb32e538e7b3cd0ef6d291953f3e7c9f556c1ba5baf47e2e" already present on machine
Normal Created 55m kubelet Created container first-app
Normal Started 55m kubelet Started container first-app
2.フォーマットの使い方
フォーマットとは、取得したリソース情報を特定の形式で表示する手法です。
-o
オプションを使用して、YAMLやJSONなどのフォーマットで情報を出力できます。主に、スクリプトや自動化のために使用することが多いです。
例1: YAML形式で出力
oc get pods -o yaml
このコマンドは、PodリソースをYAML形式で表示します。
出力例👇
apiVersion: v1
items:
- apiVersion: v1
kind: Pod
metadata:
annotations:
k8s.ovn.org/pod-networks: '{"default":{"ip_addresses":["10.217.0.42/23"],"mac_address":"0a:58:0a:d9:00:2a","gateway_ips":["10.217.0.1"],"routes":[{"dest":"10.217.0.0/22","nextHop":"10.217.0.1"},{"dest":"10.217.4.0/23","nextHop":"10.217.0.1"},{"dest":"100.64.0.0/16","nextHop":"10.217.0.1"}],"ip_address":"10.217.0.42/23","gateway_ip":"10.217.0.1"}}'
k8s.v1.cni.cncf.io/network-status: |-
[{
"name": "ovn-kubernetes",
"interface": "eth0",
"ips": [
"10.217.0.42"
],
"mac": "0a:58:0a:d9:00:2a",
"default": true,
"dns": {}
}]
openshift.io/generated-by: OpenShiftNewApp
openshift.io/scc: restricted-v2
seccomp.security.alpha.kubernetes.io/pod: runtime/default
creationTimestamp: "2024-09-22T04:54:27Z"
generateName: first-app-6858b8457d-
labels:
deployment: first-app
pod-template-hash: 6858b8457d
name: first-app-6858b8457d-8b82m
namespace: lesson
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: first-app-6858b8457d
uid: 59e284f2-4dc0-4340-badc-5590c3cdf17a
resourceVersion: "178203"
uid: 7c2abf88-3642-4e1c-8e2b-8b465ad4931c
spec:
containers:
- image: openshift/hello-openshift@sha256:aaea76ff622d2f8bcb32e538e7b3cd0ef6d291953f3e7c9f556c1ba5baf47e2e
imagePullPolicy: IfNotPresent
name: first-app
ports:
- containerPort: 8080
protocol: TCP
- containerPort: 8888
protocol: TCP
resources: {}
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
runAsNonRoot: true
runAsUser: 1000660000
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-qjfsw
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
imagePullSecrets:
- name: default-dockercfg-5msff
nodeName: crc
preemptionPolicy: PreemptLowerPriority
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext:
fsGroup: 1000660000
seLinuxOptions:
level: s0:c26,c5
seccompProfile:
type: RuntimeDefault
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
volumes:
- name: kube-api-access-qjfsw
projected:
defaultMode: 420
sources:
- serviceAccountToken:
expirationSeconds: 3607
path: token
- configMap:
items:
- key: ca.crt
path: ca.crt
name: kube-root-ca.crt
- downwardAPI:
items:
- fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
path: namespace
- configMap:
items:
- key: service-ca.crt
path: service-ca.crt
name: openshift-service-ca.crt
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2024-09-23T05:53:46Z"
status: "True"
type: PodReadyToStartContainers
- lastProbeTime: null
lastTransitionTime: "2024-09-22T04:54:28Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2024-09-23T05:53:46Z"
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2024-09-23T05:53:46Z"
status: "True"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2024-09-22T04:54:28Z"
status: "True"
type: PodScheduled
containerStatuses:
- containerID: cri-o://012257994ad33043af3041bddbabbda9fdaf5852e8fcb9e6996d97675e483d20
image: docker.io/openshift/hello-openshift@sha256:aaea76ff622d2f8bcb32e538e7b3cd0ef6d291953f3e7c9f556c1ba5baf47e2e
imageID: docker.io/openshift/hello-openshift@sha256:aaea76ff622d2f8bcb32e538e7b3cd0ef6d291953f3e7c9f556c1ba5baf47e2e
lastState: {}
name: first-app
ready: true
restartCount: 2
started: true
state:
running:
startedAt: "2024-09-23T05:53:44Z"
hostIP: 192.168.126.11
hostIPs:
- ip: 192.168.126.11
phase: Running
podIP: 10.217.0.42
podIPs:
- ip: 10.217.0.42
qosClass: BestEffort
startTime: "2024-09-22T04:54:28Z"
kind: List
metadata:
resourceVersion: ""
例2: JSON形式で出力
oc get pod first-app-6858b8457d-8b82m -o json
このコマンドは、特定のPodリソースをJSON形式で表示します。
3.フィルターの使い方
フィルターは、特定の条件に合致するリソースだけを表示するために使用します。
-l
や--field-selector
オプションを使って、ラベルやフィールドに基づいてリソースを絞り込むことができます。
例1: ラベルでフィルタリング
oc get pods -l deployment=first-app
このコマンドは、ラベルdeployment=first-app
を持つPodのみを取得します。
出力例👇
NAME READY STATUS RESTARTS AGE
first-app-6858b8457d-8b82m 1/1 Running 2 26h
例2: 特定のフィールドでフィルタリング
oc get pods --field-selector status.phase=Running
このコマンドは、現在Running
状態のPodのみを表示します。
出力例👇
NAME READY STATUS RESTARTS AGE
first-app-6858b8457d-8b82m 1/1 Running 2 26h
例3: クエリ、フォーマット、フィルターを組み合わせる
oc get pods -o json --field-selector status.phase=Running --selector deployment=first-app
このコマンドは、ラベルapp=first-app
を持つ、現在Running
状態のPodをJSON形式で表示します。
4.おわりに
今回はocコマンドでリソース状態を効率的に確認する方法を理解するために、以下を学びました。
- クエリの使い方(
oc get
やoc describe
などのコマンドを使ってリソースの情報を取得) - フォーマットの使い方(
-o
オプションを使用して、リソースの情報をYAMLやJSON形式で出力) - フィルターの使い方(
-l
や--field-selector
で、特定の条件に基づいてリソースを絞り込む)
一回で覚えるのは難しいと思うので、何度かトライして覚えるで全然大丈夫です。
今後もOpenShiftについて解説していきます。
おわりっ!
参考サイト
Red Hat Documentation 第1章 OpenShift CLI (oc)
Red Hat Documentation OpenShift Container Platform 4.16
Discussion