오늘은 쿠버네티스 명령어에 익숙해지기 위해서 몇가지 명령을 학습해 보고, 컨터이너를 만들어서 잘 동작 하는지 확인해 보는 작업을 해보기로 하겠습니다.
1. node 확인
- 쿠버네티스에 join되어 있는 노드를 확인 하는 방법을 확인해 보겠습니다
- 아래와 같이 간단하게 한줄의 명령어로 확인 할 수 있습니다.
root@master:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 2d13h v1.26.0
node-1 Ready <none> 2d13h v1.26.0
node-2 Ready <none> 2d13h v1.26.0
헌데 조금 부족한 내용입니다. 아이피도 확인이 안되고 OS 확인도 안되고 아주 간략한 정보만 제공 합니다. 그럼 조금더 많은 정보를 보기위한 명령어를 살펴보겠습니다. -o wide라고 추가해서 입력하면 아래와 같이 CONTAINER-RUNTIME 정보 IP, OS-IMAGE 등 많은 정보들이 더 보이게 됩니다.
root@master:~# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
master Ready control-plane 2d13h v1.26.0 10.0.1.180 <none> Ubuntu 20.04.5 LTS 5.4.0-135-generic cri-o://1.25.1
node-1 Ready <none> 2d13h v1.26.0 10.0.1.181 <none> Ubuntu 20.04.5 LTS 5.4.0-135-generic cri-o://1.25.1
node-2 Ready <none> 2d13h v1.26.0 10.0.1.182 <none> Ubuntu 20.04.5 LTS 5.4.0-135-generic cri-o://1.25.1
하지만 우린 이거보다 더 많은 정보를 확인해야 할 경우도 있습니다.
kubectl get nodes master -o yaml
kubectl get nodes master -o json
위 명령어 내용은 너무 길어서 첨부하지 않겠습니다. 다들 한번씩 명령어를 사용해 보신다면 어렵지 않다는 것을 이해하실 수 있습니다.
그럼 이제 pod 하나를 만들어 보도록 하겠습니다.
root@master:~# kubectl run nginx-web-1 --image=nginx --port 8081
pod/nginx-web-1 created
잘 실행 되었다고 나오네요 그럼 이제 잘 생성 되었는지 확인하는 pod 확인 명령어를 실행해 보겠습니다.
위에서 node 확인할때와 비슷하죠? -o wide 를 사용하면 pod 역시 조금더 많은 정보를 확인할 수 있습니다. 그리고 pod 역시 yaml, json으로 확인 가능 합니다.
root@master:~# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-web-1 1/1 Running 0 58s
root@master:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-web-1 1/1 Running 0 62s 192.168.247.14 node-2 <none> <none>
아래와 같은 명령어로 yaml형태의 정보를 확인 할 수 있습니다.
root@master:~# kubectl get pod nginx-web-1 -o yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
cni.projectcalico.org/containerID: a19683974f805708bc5e39a7339bd6ff742a7094cf125fee580ad0c4c4eb4696
cni.projectcalico.org/podIP: 192.168.247.14/32
cni.projectcalico.org/podIPs: 192.168.247.14/32
creationTimestamp: "2022-12-14T02:44:23Z"
labels:
run: nginx-web-1
name: nginx-web-1
namespace: default
resourceVersion: "336944"
uid: 88b075fc-b7d0-47e6-b9c3-79b5b920d2c0
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx-web-1
ports:
- containerPort: 8081
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-d6lxd
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
nodeName: node-2
preemptionPolicy: PreemptLowerPriority
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
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-d6lxd
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
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2022-12-14T02:44:23Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2022-12-14T02:44:34Z"
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2022-12-14T02:44:34Z"
status: "True"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2022-12-14T02:44:23Z"
status: "True"
type: PodScheduled
containerStatuses:
- containerID: cri-o://aa2ad8432fab43cf578cad2a6d1ca87fbe5e4fe95674423c4d73ad2367d9b626
image: docker.io/library/nginx:latest
imageID: docker.io/library/nginx@sha256:75263be7e5846fc69cb6c42553ff9c93d653d769b94917dbda71d42d3f3c00d3
lastState: {}
name: nginx-web-1
ready: true
restartCount: 0
started: true
state:
running:
startedAt: "2022-12-14T02:44:33Z"
hostIP: 10.0.1.182
phase: Running
podIP: 192.168.247.14
podIPs:
- ip: 192.168.247.14
qosClass: BestEffort
startTime: "2022-12-14T02:44:23Z"
정말 많은 정보가 나오죠? 나중에 저 정보를 활용해서 yaml 파일을 만들어 보겠습니다.
그럼 이 많은 정보들을 이렇게 보는게 힘들고, 우리는 보고 싶은 정보만 보고 싶을 때도 있으니 아래와 같은 명령어로 확인해 보겠습니다
우선 jq 를 설치 해서 사용해 보도록 하겠습니다
apt install -y jq
get pod nginx-web-1 -o json
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"annotations": {
"cni.projectcalico.org/containerID": "a19683974f805708bc5e39a7339bd6ff742a7094cf125fee580ad0c4c4eb4696",
"cni.projectcalico.org/podIP": "192.168.247.14/32",
"cni.projectcalico.org/podIPs": "192.168.247.14/32"
},
"creationTimestamp": "2022-12-14T02:44:23Z",
"labels": {
"run": "nginx-web-1"
},
"name": "nginx-web-1",
"namespace": "default",
"resourceVersion": "336944",
"uid": "88b075fc-b7d0-47e6-b9c3-79b5b920d2c0"
},
"spec": {
"containers": [
{
"image": "nginx",
"imagePullPolicy": "Always",
"name": "nginx-web-1",
"ports": [
{
"containerPort": 8081,
"protocol": "TCP"
}
],
"resources": {},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"volumeMounts": [
{
"mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
"name": "kube-api-access-d6lxd",
"readOnly": true
}
]
}
],
"dnsPolicy": "ClusterFirst",
"enableServiceLinks": true,
"nodeName": "node-2",
"preemptionPolicy": "PreemptLowerPriority",
"priority": 0,
"restartPolicy": "Always",
"schedulerName": "default-scheduler",
"securityContext": {},
"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-d6lxd",
"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"
}
]
}
}
]
}
}
]
},
"status": {
"conditions": [
{
"lastProbeTime": null,
"lastTransitionTime": "2022-12-14T02:44:23Z",
"status": "True",
"type": "Initialized"
},
{
"lastProbeTime": null,
"lastTransitionTime": "2022-12-14T02:44:34Z",
"status": "True",
"type": "Ready"
},
{
"lastProbeTime": null,
"lastTransitionTime": "2022-12-14T02:44:34Z",
"status": "True",
"type": "ContainersReady"
},
{
"lastProbeTime": null,
"lastTransitionTime": "2022-12-14T02:44:23Z",
"status": "True",
"type": "PodScheduled"
}
],
"containerStatuses": [
{
"containerID": "cri-o://aa2ad8432fab43cf578cad2a6d1ca87fbe5e4fe95674423c4d73ad2367d9b626",
"image": "docker.io/library/nginx:latest",
"imageID": "docker.io/library/nginx@sha256:75263be7e5846fc69cb6c42553ff9c93d653d769b94917dbda71d42d3f3c00d3",
"lastState": {},
"name": "nginx-web-1",
"ready": true,
"restartCount": 0,
"started": true,
"state": {
"running": {
"startedAt": "2022-12-14T02:44:33Z"
}
}
}
],
"hostIP": "10.0.1.182",
"phase": "Running",
"podIP": "192.168.247.14",
"podIPs": [
{
"ip": "192.168.247.14"
}
],
"qosClass": "BestEffort",
"startTime": "2022-12-14T02:44:23Z"
}
}
엄청 길죠? 우린 여기서 status안에 있는 containerStatuses정보 중 imageID의 값을 보려 합니다. 어떻게 사용하는지 확인해 봅시다.
root@master:~# kubectl get pod nginx-web-1 -o json | jq .status.containerStatuses
[
{
"containerID": "cri-o://aa2ad8432fab43cf578cad2a6d1ca87fbe5e4fe95674423c4d73ad2367d9b626",
"image": "docker.io/library/nginx:latest",
"imageID": "docker.io/library/nginx@sha256:75263be7e5846fc69cb6c42553ff9c93d653d769b94917dbda71d42d3f3c00d3",
"lastState": {},
"name": "nginx-web-1",
"ready": true,
"restartCount": 0,
"started": true,
"state": {
"running": {
"startedAt": "2022-12-14T02:44:33Z"
}
}
}
]
root@master:~# kubectl get pod nginx-web-1 -o json | jq .status.containerStatuses[].imageID
"docker.io/library/nginx@sha256:75263be7e5846fc69cb6c42553ff9c93d653d769b94917dbda71d42d3f3c00d3"
root@master:~#
위와 같이 다들 나오셨나요. 위 내용을 잘 활용하시면 다양하게 확인 가능 합니다.
'서버인프라 > kubernetes' 카테고리의 다른 글
[제 4강] ReplicaSet (0) | 2022.12.21 |
---|---|
[제 3강] Resource Management (0) | 2022.12.19 |
[제 2강] 컨테이너 생성을 조금더 깊이있게 (4) | 2022.12.16 |
쿠버네티스 설치 (0) | 2022.12.13 |
쿠버네티스를 공부해요~ (6) | 2022.12.12 |
댓글