1. 컨테이너의 실행
student@master:~$ kubectl run mynginx --image nginx
pod/mynginx created
student@master:~$
mynginx 라는 이름의 컨테이너를 nginx라는 이미지를 이용하여 생성하라는 의미이다. |
2. 컨테이너의 조회
student@master:~$ kubectl get pod
NAME READY STATUS RESTARTS AGE
mynginx 1/1 Running 0 2m
student@master:~$
쿠버네티스에서는 프로세스를 실행할 때 단순히 컨테이너를 사용하지 않고 Pod라는 리소스를 사용한다. 쿠버네티스의 최소 단위는 Pod이다.
특정 Pod의 상태 정보를 더 자세히 보고 싶다면
student@master:~$ kubectl get pod mynginx -o yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2022-08-16T13:32:17Z"
labels:
run: mynginx
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:labels:
.: {}
f:run: {}
f:spec:
f:containers:
k:{"name":"mynginx"}:
.: {}
f:image: {}
f:imagePullPolicy: {}
f:name: {}
f:resources: {}
f:terminationMessagePath: {}
f:terminationMessagePolicy: {}
f:dnsPolicy: {}
f:enableServiceLinks: {}
f:restartPolicy: {}
f:schedulerName: {}
f:securityContext: {}
f:terminationGracePeriodSeconds: {}
manager: kubectl
operation: Update
time: "2022-08-16T13:32:17Z"
- apiVersion: v1
~~~~
생략
간단하게 Pod의 IP를 바로 확인하려면
student@master:~$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mynginx 1/1 Running 0 13m 10.42.1.2 worker <none> <none>
student@master:~$
3. 컨테이너 상세 정보 확인
get 명령어와는 조금 다르게 Pod에 대한 Events 기록까지 확인할 수 있다. Pod에 문제가 발생하였을 때 get 명령어와 함께 디버깅 용도로 자주 사용된다.
student@master:~$ kubectl describe pod mynginx
Name: mynginx
Namespace: default
Priority: 0
Node: worker/192.168.187.12
Start Time: Tue, 16 Aug 2022 22:32:17 +0900
Labels: run=mynginx
Annotations: <none>
Status: Running
IP: 10.42.1.2
IPs:
IP: 10.42.1.2
Containers:
mynginx:
Container ID: docker://a42121cc0e9a01ec193011872996721a07d5a0837d8e70d5ab195ef57ac2f24b
Image: nginx
Image ID: docker-pullable://nginx@sha256:790711e34858c9b0741edffef6ed3d8199d8faa33f2870dea5db70f16384df79
Port: <none>
Host Port: <none>
State: Running
Started: Tue, 16 Aug 2022 22:32:37 +0900
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-56zrv (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-56zrv:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-56zrv
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned default/mynginx to worker
Normal Pulling 15m kubelet, worker Pulling image "nginx"
Normal Pulled 15m kubelet, worker Successfully pulled image "nginx"
Normal Created 15m kubelet, worker Created container mynginx
Normal Started 15m kubelet, worker Started container mynginx
student@master:~$
4. 컨테이너 로깅
컨테이너에서 발생하는 로그 정보를 확인할 수 있다. -f, --follow 옵션을 사용하면 로그의 출력 스트림이 종료되지 않고, 지속적으로 로그를 출력하게 된다.
student@master:~$ kubectl logs -f mynginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/08/16 13:32:37 [notice] 1#1: using the "epoll" event method
2022/08/16 13:32:37 [notice] 1#1: nginx/1.23.1
2022/08/16 13:32:37 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/08/16 13:32:37 [notice] 1#1: OS: Linux 5.15.0-46-generic
2022/08/16 13:32:37 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/08/16 13:32:37 [notice] 1#1: start worker processes
2022/08/16 13:32:37 [notice] 1#1: start worker process 32
2022/08/16 13:32:37 [notice] 1#1: start worker process 33
5. 컨테이너로 명령을 전달
실행중인 컨테이너 안으로 실행할 명령어를 전달한다. docker exec 명령과 유사하다. 한가지 차이점이 있다면 컨테이너에 실행할 명령을 전달할 때 구분자( -- )로 전달할 명령을 구분한다.
student@master:~$ kubectl exec mynginx -- apt-get update
Get:1 http://deb.debian.org/debian bullseye InRelease [116 kB]
Get:2 http://deb.debian.org/debian-security bullseye-security InRelease [48.4 kB]
Get:3 http://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]
Get:4 http://deb.debian.org/debian bullseye/main amd64 Packages [8182 kB]
Get:5 http://deb.debian.org/debian-security bullseye-security/main amd64 Packages [176 kB]
Get:6 http://deb.debian.org/debian bullseye-updates/main amd64 Packages [2592 B]
Fetched 8569 kB in 2s (4512 kB/s)
Reading package lists...
student@master:~$
만약 컨테이너 내부의 Shell로 진입하려면 -it 옵션을 이용한다. 아래 예에서 mynginx 로 들어가서 hostname 명령어를 입력하면, 호스트 이름이 출력됨을 확인할 수 있다.
student@master:~$ kubectl exec -it mynginx -- bash
root@mynginx:/# hostname
mynginx
root@mynginx:/#
6. 컨테이너/호스트간에 파일의 복사
컨테이너에서 호스트로 또는 호스트에서 컨테이너로 파일을 복사할 때 사용한다
<HOST> --> <Container>
kubectl cp /etc/passwd mynginx:/tmp/passwd
student@master:~$ kubectl cp /etc/passwd mynginx:/tmp/passwd
student@master:~$ kubectl exec mynginx -- ls /tmp/passwd
/tmp/passwd
student@master:~$ kubectl exec mynginx -- cat /tmp/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
~~~
~~~
~~~
7. 컨테이너 정보 수정
실행된 컨테니어의 정보를 수정한다. edit 명령을 수행하면, 실제로는 VIM이 실행되어 관련된 yaml 파일을 수정하는 모드로 진입하게 된다.
student@master:~$ kubectl edit pod mynginx
vim 이 실행되어 Pod 관련 yaml 파일을 수정하기 위한 모드로 진입
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2022-08-16T13:32:17Z"
labels:
run: mynginx
hello: world <==== 추가한 부분
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:labels:
.: {}
f:run: {}
f:spec:
수정이 되었는지 확인
student@master:~$ kubectl get pod mynginx -o yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2022-08-16T13:32:17Z"
labels:
hello: world
run: mynginx
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:status:
f:conditions:
8. 컨테이너 삭제
student@master:~$ kubectl delete pod mynginx
pod "mynginx" deleted
student@master:~$ kubectl get pod
No resources found in default namespace.
student@master:~$
'DevOps > DockerKubernetes' 카테고리의 다른 글
리소스 별 Kubernetes 명령어 (0) | 2022.08.20 |
---|---|
YAML 파일을 이용하여 컨테이너의 생성 (0) | 2022.08.20 |
Kubernetes 설치 (0) | 2022.08.16 |
Ubuntu에 Minikube 설치하기 (0) | 2022.08.16 |
컨테이너와 Docker Host간의 파일 복사 (0) | 2022.08.11 |