본문 바로가기
멀티 클라우드 인프라(DKR & K8S)

도커 & 쿠버네티스 5

by 윤라경 2024. 11. 2.

[2024.11.02]

 

 

7) 'cluster.yml' 파일을 이용한 앤서블 플레이

 

ansible-playbook \
-i inventory/mycluster/hosts.yaml \
--become --become-user=root \
cluster.yml

 

앤서블 플레이북을 이용하여 쿠버네티스트를 설치한다

설치 시간은 평균 20~30분 정도 소요된다

 

8) 설치 정보 확인

 

 

만약, kubectl version 명령어 진행 시 kubuctl 명령어가 없다고

출력되면 다시 설치(5번 과정) 해야 한다

 

 

또한, kubectl 명령어는 실행되는데,

다음과 같이 master, node1, node2, node3의 상태가

Ready가 아니라 NotReady로 출력되면 다시 설치(5번 과정) 해야 한다

 

9) 정보 확인 실시

 

 

10) Git Hub로부터 실습 파일 복제

 

 

11) 쿠버네티스에서 도커 허브 로그인을 위한 secret 생성

 

kubectl create secret docker-registry mysecret \
--docker-username='도커 허브 아이디' \
--docker-password='도커 허브 패스워드' \
--docker-email='도커 허브 이메일'

 

12) 서비스 어카운트에 imagePullSecrets, mysecret 시크릿 추가

 

 

13) 컨테이너 이미지 다운로드 및 쿠버네티스 클러스터 동작 확인

 

 

 

04. Kubernetes 컨테이너 실행하기

 

1. kubectl 명령 사용법

 

1) kubectl 명령 사용법

 

- https://kubernetes.io/ko/docs/reference/kubectl

 

명령줄 도구 (kubectl)

쿠버네티스는 다음을 제공한다: 쿠버네티스 API를 사용하여 쿠버네티스 클러스터의 컨트롤 플레인과 통신하기 위한 커맨드라인 툴 이 툴의 이름은 kubectl이다. 구성을 위해, kubectl 은 config 파일을

kubernetes.io

 

# kubectl [CMD] [TYPE] [NAME] [flags]

 

[CMD]: 자원에 실행할 명령 
 - 
https://kubernetes.io/ko/docs/reference/kubectl/#명령어
 - Ex) run, create, apply, get, describe, edit, delete

 

명령줄 도구 (kubectl)

쿠버네티스는 다음을 제공한다: 쿠버네티스 API를 사용하여 쿠버네티스 클러스터의 컨트롤 플레인과 통신하기 위한 커맨드라인 툴 이 툴의 이름은 kubectl이다. 구성을 위해, kubectl 은 config 파일을

kubernetes.io

 

[TYPE]: 자원의 타입
https://kubernetes.io/ko/docs/reference/kubectl/#리소스-타입
- Ex) nodes, pods, replicationcontrollers, replicasets, deployments, daemonsets, statefulsets, services

 

명령줄 도구 (kubectl)

쿠버네티스는 다음을 제공한다: 쿠버네티스 API를 사용하여 쿠버네티스 클러스터의 컨트롤 플레인과 통신하기 위한 커맨드라인 툴 이 툴의 이름은 kubectl이다. 구성을 위해, kubectl 은 config 파일을

kubernetes.io

 

[NAME]: 자원의 이름
- Ex) 자원의 이름

 

[flags]: 옵션
- Ex) --help, -o options
- Ex) # kubectl get pod webserver -o wide

 

2) kubectl 명령 사용법 예시

 

 

 

2. kubectl 명령 사용법

 

1) kubectl CMD 사용시 약자 확인

 

 

2) [TAB] 자동 완성 기능

 

# kubectl get d[TAB][TAB] 
# kubectl get de[TAB] 
# kubectl get deployments.apps

 

# kubectl [TAB][TAB]

 

 

[TAB][TAB]을 두 번 누르게되면 자동 완성 기능을 사용할 수 있다 

 

3) 도움말 기능

 

# kubectl --help

 

4) 다른 명령어에 대한 sub 명령 사용법 확인

 

# kubectl get --help

 

5) 노드 정보 확인

 

 

 

# kubectl describe nodes master

위 명령어 입력 시 나오는 노드 정보로

현재 master에서 관리하는 노드 정보를 확인할 수 있다

kubectl describe nodes node1 명령을 실시하면 node1에 대한 정보를 상세하게 확인할 수 있다

 

 

 

3. kubectl 명령을 이용한 파드 생성

 

파드는 하나 이상의 컨테이너를 구성하고 있는 쿠버네티스 리소스이다

 

1) kubectl 명령을 이용하여 'webserver1' 파드 생성 및 확인

 

 

먼저 kubectl 명령을 이용하여 webserver1이라는 파드를 생성한다

 

 

쿠버네티스에서는 파드 단위로 나뉘게 된다

화면과 같이 watch라는 옵션을 사용하게 되면 파드에 대한 정보 확인을 실시간으로 출력된다

처음에는 아무것도 뜨지 않지만, mobaXterm으로 실행시키면

CentOS에서 확인 시 node1이 파드가 생긴 것을 확인할 수 있다

파드가 생기는 것은 node1이 될지 2, 3번이 될지 모르기 때문에

 

 

이런 식으로 확인할 때에는 본인에게 지정된 파드에서 확인해야 된다

나의 경우 현재 CentOS에서 확인 시 node1번으로 파드가 생겼기 때문에

확인은 node1번에서 진행했다 

 

 

현재 노드 정보를 확인했을 때 나오는 IP 주소는 파드의 IP이다

해당 IP 주소로 curl로 확인했을 때 현재 생성된 이미지의 nginx를 확인할 수 있다 

 

2) kubectl 명령을 이용하여 'webserver2' 디플로이먼트 3개 생성 및 확인

 

 

이번에는 kubectl 명령을 이용하여 webserver2 디플로이먼트 3개를 생성했다

 

 

그렇게 되었을 때 현재 실시간으로 Running 상태가 되는 것이 확인된다

 

 

describe 명령을 통해

webserver2의 디플로이먼트 3개가 생성된 것도 확인한다

 

 

현재 MobaXterm에서도 Running 상태를 확인할 수 있다

 

3) 파드 정보 확인

 

 

curl을 이용하여 다른 파드로 HTTP접속이 되는지 확인한다  

 

 

직접 node1에서 확인 시 세 개의 파드가 생성되어 있는 상태다

 

 

4) 출력 형식 지정

 

# kubectl get pods webserver1 
# kubectl get pods webserver1 -o wide 
# kubectl get pods webserver1 -o yaml 
# kubectl get pods webserver1 -o json

 

5) 파드의 컨테이너를 접속하여 웹페이지 변경 및 확인

 

# kubectl exec 파드_이름 [-c 컨테이너_이름] [flags] -- 컨테이너_명령어 [인자] [옵션]

 

 

6) 파드 로그 확인

 

MobaXterm
CentOS

 

*-f 옵션을 사용하면 실시간으로 로그를 확인할 수 있음

 

 

실시간으로 바뀌는지 확인하기 위해 curl을 통해 다시 접속한다

 

 

그럼 CentOS에서 시간 간격을 두고 하나가 더 생긴 것을 확인할 수 있다

 

7) 포트 포워딩을 이용한 파드 컨테이너 접속

 

 

curl을 이용하여 'localhost:8080'으로 HTTP 접속이 되는지 확인한다

 

 

확인이 완료되었으면, kubectl port-forward webserver1 8080:80 프로세스를 강제 종료한다

 

8) deployments.app/webserver2 설정 편집

 

 

현재 디플로이먼트의 갯수를 3이 아닌 5로 변경한 상태다 

 

 

그렇기 때문에 현재 구동 중인 파드의 경우 다섯 개가 된다

 

 

실시간 확인 시에도 Running 상태가 되어 있으며

 

 

마지막으로 curl을 이용하여 새로 추가된

webserver2 파드로 HTTP 접속이 되는지 확인한다

 

 

4. Yaml 파일을 이용한 pod 생성 및 확인

 

1) 동일한 이름의 파드는 동시에 생성되지 않는다

 

 

2) '--dry-run' 옵션과 '-o yaml' 옵션을 이용하여 yaml 파일 생성

 

 

 

3) 'webserver3.yml' 파일 편집

 

 

4) 'webserver3.yml' 파일을 이용한 파드 생성 및 확인

 

 

5. 쿠버네티스 컨테이너 실행 예제

 

1) 'kubectl run' 명령을 이용하여 다음 조건에 맞게 Pod를 생성한다

 

 

 

2) 'myweb2.yml' 파일을 제작하여 다음 조건에 맞게 Pod를 생성한다

 

 

 

05. Kubermetes 아키텍처

 

1. 쿠버네티스 아키텍쳐

 

출처 - 쿠버네티스 컴포넌트 홈페이지

 

 

 

1) Control Plane 구성요소

 

- https://kubernetes.io/docs/concepts/overview/components/#control-plane-components

 

Kubernetes Components

An overview of the key components that make up a Kubernetes cluster.

kubernetes.io

 

 

 

2) Node 구성 요소

 

노드는 동작 중인 파드를 유지시키고

쿠버네티스 런타임 환경을 제공하며, 모든 노드 상에서 동작한다

 

 

 

3) 애드온

 

- https://kubernetes.io/docs/concepts/overview/components/#addons

 

Kubernetes Components

An overview of the key components that make up a Kubernetes cluster.

kubernetes.io

 

 

4) 클러스터에서 API 서버 동작 단계

 

 

 

2. 네임스페이스

 

네임스페이스는 쿠버네티스 클러스터 하나를

여러 개의 논리적인 단위로 분리하여 사용하는 기능이다

 

https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/namespaces
https://kubernetes.io/docs/tasks/administer-cluster/namespace

 

 

1) 여러 개의 네임스페이스를 사용하는 경우

 

 

 

2) 네임스페이스 사용하기

 

 

3) 네임스페이스 확인

 

① 기본적인 네임스페이스를 확인한다

 

 

② default 네임스페이스에 존재하는 파드를 확인한다

 

 

'kubectl get pods' 명령에서 -n 옵션을 이용하여

네임스페이스를 지정하지 않으면

default 네임스페이스의 리소스를 출력한다

 

*namespace를 생략하면 'default' namespace가 기본값

 

③ 'web1-pod.yml' 파일을 제작하여 web1-pod 파드를 생성하고 네임스페이스를 확인한다

 

apiVersion: v1
kind: Pod 
metadata:
  name: web1-pod 
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
      protocol: TCP

 

파드 생성 시 네임스페이스를 별도로 지정하지 않으면 default 네임스페이스로 생성된다

 

④ kube-system 네임스페이스로 동작 중인 파드를 확인한다

 

 

kube-system 네임스페이스에 포함된 파드들은

쿠버네티스를 운용할 때 필요한 기본적인 파드들이다

 

4) 네임스페이스 생성

 

① kubectl 명령을 이용하여 'myns1' 네임스페이스를 생성한다

 

② yaml 파일을 이용하여 'myns2' 네임스페이스를 생성한다

 

 

 

③ 'web2-pod.yml' 파일을 제작하고 파드 생성시 'myns2' 네임스페이스로 적용한다

 

apiVersion: v1
kind: Pod 
metadata:
  name: web2-pod 
spec:
  containers:
  - image: nginx
    name: nginx 
    ports:
    - containerPort: 80

 

④ 파드를 생성할때 'myns3' 네임스페이스가 적용되는 'web3-pod.yml' 파일을 제작한다

 

apiVersion: v1
kind: Pod 
metadata:
  name: web3-pod 
  namespace: myns3
spec:
  containers:
  - image: nginx
    name: nginx
    ports:
    - containerPort: 80

 

⑤ 'myns4' 네임스페이스와 파드를 동시에 생성 및 적용하는 'web4-pod.yml' 파일을 제작한다

 

apiVersion: v1
kind: Namespace
metadata:
  name: myns4

---
apiVersion: v1
kind: Pod 
metadata:
  name: web4-pod 
  namespace: myns4
spec:
  containers:
  - image: nginx
    name: nginx
    ports:
    - containerPort: 80

 

 

 

5) 기본 네임스페이스 변경

 

 

기본 네임스페이스를 변경하기 위한 context 사용법을 확인한다

 

 

kubeconfig 기본 정보 확인을 실시한다

 

 

새로운 context을 생성하고 확인한다

cluster와 user는 기본값으로 사용해야 권한에 문제가 발생되지 않는다

 

 

기본 정보를 다시 확인 후

 

 

기본 context를 새로 생성한 kubernetes-user@cluster.local으로 변경한다

 

 

기본 정보를 다시 확인하게 되면

새로 생성된 2개의 context를 발견할 수 있다 

 

 

kubectl 명령을 이용하여 myns5 네임스페이스를 생성한다

 

 

기본 네임스페이스가 myns5으로 변경되었기 때문에

파드를 생성하면 myns5 네임스페이스로 적용된다

 

 

-n 옵션 없이 파드 정보를 확인하면,

기본 네임스페이스가 myns5인 파드 정보가 출력된다

 

 

default 네임스페이스를 사용하는 파드를 확인할 경우,

-n 옵션을 이용하여 네임스페이스를 지정해야 된다

 

 

확인이 완료되었다면,

기존에 사용하던 kubernetes-admin@cluster.local

context로 복원한다

 

 

context가 kubernetes-admin@cluster.local으로

복원되면 기본 네임스페이스는 다시 default로 된다

 

6) 네임스페이스 및 파드 삭제

 

 

네임스페이스 목록을 확인하기 전에 myns를 지워 버렸다

 

 

default 네임스페이스를 사용하는 파드는

-n 옵션을 사용하지 않고 삭제가 가능하다

하지만, web2-pod, web3-pod 파드를 삭제할 경우에는

-n 옵션과 네임스페이스 이름을 지정해야 된다

 

 

web4-pod 파드는 web4-pod.yml 파일을 이용하여

삭제하면 네임스페이스와 파드 리소스를 삭제한다

 

 

myns5 네임스페이스를 삭제하면,

네임스페이스에 속해 있는 모든 파드(web5-pod)들이 삭제된다

 

 

devns, testns, userns 네임스페이스를 모두 삭제한다 

 

 

3. 네임스페이스 예제

 

1) 'kubectl' 명령을 이용하여 다음 조건에 맞게 파드를 생성한다

 

 

 

 

2) 'yaml' 파일을 제작하여 다음 조건에 맞게 파드를 생성한다

 

 

 

sublime text로 미리 적어 둔 코드를 복사하여

 

 

httpd-web1, 2, 3.yaml 파일을 생성한다

 

 

그런 다음 네임스페이스를 httpd-ns로 지정하고 httpd-web1, 2, 3를 생성한다

 

 

마지막으로 확인하게 되면 세 개의 파드가 생성된 것을 확인할 수 있다

 

 

4. YAML 파일

 

 

 

1) YAML 문법

 

2) JSON 형식과 YAML 형식 비교

 

- https://www.json2yaml.com/convert-yaml-to-json

 

JSON to YAML Online Converter

Convert JSON to YAML and slim down your data with the json2yaml online editor

www.bairesdev.com

 

3) YAML 파일의 기본 문법

 

종류 설명
주석 #은 주석이다

# POD EXAMPLE

apiVersion: v1
kind: Pod              #리소스 타입
metadata:
들여쓰기 들여쓰기는 일반적으로 2칸 또는 4칸으로 한다

spec:
    containers:
    - name: nginx     #컨테이너 이름
      image: nginx    #컨테이너 이미지
데이터 정의
(Scalar 형식)
Key: Value 형식으로 정의한다

metadata:
   name: mypod            #파드 이름
   namespace: devns   #네임스페이스 이름
배열 정의
(Array 형식)
배열은 하이픈(-) 로 표시한다
반드시 하이픈(-) 다음은 공백이 한 칸 존재해야 된다

참/거짓 참/거짓: yes/no, true/false 소문자 형식을 권장한다

study_hard: yes
give_up: no
hello: Ture
world: TRUE
manual: False
숫자 표현 정수 또는 실수를 따옴표(") 없이 사용하면 숫자로 인식한다

# Number
version: 3.1

# String
version: "3.1"
줄바꿈 "|": 지시어는 마지막 줄바꿈(\n)을 포함
"|-": 지시어는 마지막 줄바꿈(\n)을 포함
">": 지시어는 중간에 들어간 줄바꿈을 제외
">-": 지시어는 중간 및 마지막 줄바꿈을 제외

아래 내용에 마지막 줄이 한 줄(빈 공백 라인) 더 있으므로 복사해서 사용한다


 

 

5. API 버전

 

- https://kubernetes.io/docs/reference/using-api

 

API Overview

This section provides reference information for the Kubernetes API. The REST API is the fundamental fabric of Kubernetes. All operations and communications between components, and external user commands are REST API calls that the API Server handles. Conse

kubernetes.io

 

1) API Version

 

alpha -> beta -> stable 
kubernetes Object 정의시 apiVersion 필요하다. 
kubernetes가 update하는 API가 있으면 새로운 API가 생성된다.

 

2) API Ojbect 종류 및 버전

 

# kubectl api-resources

 

3) API 확인

 

 

apiVersion: apps/v1
kind: Pod 
metadata:
  name: web 
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
      protocol: TCP

 

 

06. Kubernetes 파드

 

1. 파드 생성 및 삭제

 

파드는 컨테이너를 구현하는 쿠버네티스 최소 단위이며,

파드에는 하나 또는 여러개의 컨테이너가 포함된다

 

1) kubectl 명령을 이용한 파드 생성

 

 

2) yaml 파일을 이용한 파드 생성

 

apiVersion: v1
kind: Pod
metadata:
  name: web2

spec:
  containers:
  - name: nginx-container
    image: nginx:1.14
    ports:
    - containerPort: 80
      protocol: TCP

 

3) 파드 삭제

 

 

 

2. Multi-Container 파드 생성

 

멀티 컨테이너 파드를 이용하면 하나의 파드에

여러 개의 컨테이너들을 생성 및 관리할 수 있다

Ex) MySQL & MySQL-Express, Mongo & Mongo-Express, WebServer & WebCache

 

1) multi-container 파드 생성

 

 

 

nginx-container에 셸을 실행하여 index.html 파일 내용을 수정한다

 

 

root@multipod:/# apt-get update root@multipod:/

# apt-get -y install curl net-tools

 

ubuntu-container에 셸을 실행하여 command로 지정한

sleep 86400 프로세스를 확인한다

이후에 위의 명령어를 실행하고

 

 

ifconfig를 이용하여 IP 주소를 확인한다

 

 

IP 주소로 변경된 메시지 출력 여부를 확인한다

파드의 모든 컨테이너들은 파드의 IP 주소를 사용한다

그렇기 때문에 ubuntu-container에는 웹 서버가 없지만,

파드의 IP:80으로 HTTP 서비스 요청을 실시하게 되면

nginx-container의 80번 포트로 HTTP 서비스 요청을 실시하는 것을 확인할 수 있다 

 

 

nginx-container에 셸을 실행하여

nginx-container의 IP 주소가 파드의 IP 주소인지 확인한다

 

 

IP 주소가 같은 것을 확인했다면,

다음 실습을 위해 현재 multipod를 삭제한다

 

 

3. 파드 생명 주기(Pod Lifecycle)

 

1) 파드 생명 주기

 

 

 

2) 파드 생명 주기 단계

 

 

3) 컨테이너 상태

 

 

4) 파드 생명 주기 단계 및 컨테이너 상태 확인

 

 

윈도우 터미널에서 파드 상태를 모니터링하기 위한 명령을 실행한다

 

apiVersion: v1
kind: Pod
metadata:
  name: web3

spec:
  containers:
  - name: nginx-container
    image: nginx:1.14
    ports:
    - containerPort: 80
      protocol: TCP

 

기존 터미널에서 web3.yml을 제작하여 web3 파드를 생성한다 

 

 

CentOS에서 파드 상태 단계를 확인한다

 

 

다음으로 파드 생명 주기 단계 및 컨테이너 상태를 확인한다

현재 빨간색 박스를 보면 알 수 있듯이 모두 Running 상태다

 

 

동시에 이벤트 부분까지 확인한다

 

 

기존 터미널에서 web3 파드를 삭제하고

 

 

CentOS에서 파드 상태 단계를 확인하고 Ctrl+C로 종료한다

 

 

4. livenessProbe를 이용한 Self-healing Pod 구성

 

1) Self-healing 기능(Heath Check)

 

 

 

2) Liveness Probe를 이용하여 컨테이너 진단

 

 

3) Liveness Probe 동작 3가지 유형

 

 

4) LivenessProbe 매개변수

 

 

5) Liveness Probe 파드 구성

 

apiVersion: v1
kind: Pod
metadata:
  name: nginx-liveness-pod

spec:
  containers:
  - name: nginx-container
    image: nginx:1.14
    ports:
    - containerPort: 80
      protocol: TCP
    livenessProbe:
      httpGet:
        path: /
        port: 80 

 

nginx-liveness-pod.yml 파일을 제작하여

nginx-liveness-pod 파드를 생성한다

 

- livenessProbe 매개 변수는 별도로 설정하지 않으면 기본값으로 설정된다

- livenessProbe 기본값은 kubectl describe pods 파드_이름 명령을 통해 확인할 수 있다 

 

 

livenessProbe 설정 내용 및 매개 변수 기본 값을 확인한다

 

 

현재 매개 변수 기본 값을 변경하려고 한다

 

      failureThreshold: 3
      periodSeconds: 30
      successThreshold: 1
      timeoutSeconds: 23

 

매개 변수의 기본 값을 변경했다면

 

 

nginx-liveness-pod 파드를 삭제한다

 

6) smlinux/unhealthy 이미지를 사용한 livenessProbe 파드 구성

 

CentOS에서 'kubectl get pods -o wide --watch'를 실행하여 실시간으로 상태를 확인한다

apiVersion: v1
kind: Pod
metadata:
  name: unhealthy-liveness-pod

spec:
  containers:
  - name: unhealthy-container
    image: smlinux/unhealthy
    ports:
    - containerPort: 8000
      protocol: TCP
    livenessProbe:
      httpGet:
        path: /
        port: 8080

 

먼저 smlinux/unhealthy 이미지를 사용하는

unhealthy-liveness-pod.yml 파일을 제작한다

 

[참고] smlinux/unhealthy 이미지

- HTTP connection 있을 때마다 내부 서버 오류로

HTTP 500 ERROR를 발생시키는 컨테이너 이미지

 

 

smlinux/unhealthy 이미지를 사용하는 파드를 생성한다

 

 

CentOS에서도 실시간으로 확인을 진행하고

 

 

컨테이너의 liveness 설정 값을 확인한다

 

60초 정도 후에 파드 상태를 점검하고 윈도우에서 파드의 상태를 실시간으로 확인한다

 

 

10~13분 정도 후에 뒤 파드 상태를 점검하고 윈도우에서 파드의 상태를 실시간으로 확인한다

 

 

CentOS에서도 확인하게 되면 CrashLoopBackOff가 확인된다

CrashLoopBackOff의 경우 파드 시작과 비정상 종료가 여러 번

반복하여 강제로 종료된 상태다

 

 

5. 초기화 컨테이너(init container) 파드 구성

 

 

1) 다음 사이트를 참조하여 'init-container-pod.yml' 파일을 제작한다

 

- https://kubernetes.io/ko/docs/concepts/workloads/pods/init-containers

 

초기화 컨테이너

이 페이지는 초기화 컨테이너에 대한 개요를 제공한다. 초기화 컨테이너는 파드의 앱 컨테이너들이 실행되기 전에 실행되는 특수한 컨테이너이다. 초기화 컨테이너는 앱 이미지에는 없는 유틸

kubernetes.io

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
  - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]

 

2) 빨간색 부분 동작 내용은 다음과 같다

 

 

3) 파랑색 부분 동작내용은 다음과 같다

 

 

4) 'init-container-pod.yml' 파일을 이용하여 myapp-pod 파드를 생성한다

 

 

 

5) 'init-container-myservice.yml' 파일을 제작하여 myservice 서비스를 생성한다

 

apiVersion: v1
kind: Service
metadata:
  name: myservice

spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376

 

 

6) myapp-pod 파드 정보를 확인한다

 

 

7) 'init-container-myservice.yml' 파일을 제작하여 mydb 서비스를 생성한다

 

apiVersion: v1
kind: Service
metadata:
  name: mydb

spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9377

 

 

 

8) myapp-pod 파드 정보를 확인한다

 

 

초기화 컨테이너 2개가 완료되었기 때문에

메인 컨테이너 'myapp-pod가 생성된 것을 확인할 수 있다

 

 

9) myapp-pod 파드와 myserver, mydb 서비스를 삭제한다

 

 

 

6. 인프라 컨테이너(infra/pause container)

 

 

1) myweb 파드를 실행하고 확인한다

 

 

2) node1에서 컨테이너를 확인한다

 

 

myweb의 경우 pod를 사용하기 위한 역할이라고 보면 된다

현재 myweb 컨테이너와 myweb의 pause container가 생성되고 동작 중이다

 

3) master에서 myweb 파드를 삭제한다

 

 

master에서 myweb 파드를 삭제하게 되면

 

4) node1에서 컨테이너를 확인한다

 

 

node1에서는 myweb 컨테이너뿐만 아니라

myweb의 pause container도 같이 삭제된 걸 볼 수 있다

 

 

7. Static 파드 구성

 

 

1) node1에서 /var/lib/kubelet/config.yaml 파일을 확인한다

 

[root@node1 /root]# ls -l /var/lib/kubelet/config.yaml
-rw-r--r--. 1 root root 1002 2024-10-27 17:51 /var/lib/kubelet/config.yaml

 

 

 

3) node1에서 'nginx.yml' 파일을 생성한다

apiVersion: v1
kind: Pod
metadata:
  name: nginx-static-pod

spec:
  containers:
  - name: nginx-container
    image: nginx:1.14
    ports:
    - containerPort: 80
      protocol: TCP

 

 

4) master에서 nginx-static-pod 파드가 생성되었는지 확인한다

 

 

5) node1에서 'nginx.yml' 파일을 삭제한다

 

 

6) master에서 nginx-static-pod 파드가 삭제되었는지 확인한다

 

 

 

 

 

강의 소감

오늘은 쿠버네티스의 설치 마무리를 시작으로

순서대로 컨테이너 실행과 아키텍처, 파드를 배우게 되었다

도커를 배울 때는 명령어가 아는 게 조금 있었지만,

현재 쿠버네티스를 배우기 시작하면서 리눅스를 알고 있어도

명령어가 생소해서 익숙해지기까지 오래 걸릴 것 같다

진도를 따라 가는 게 힘들지만 그래도 열심히 복습해야 될 것 같다

 

출처 -  코리아it아카데미 김정우 강사님 제공

 

*중간에 나오는 교재의 단편적인 면이 아닌

MobaXterm으로 실행하여 캡처한 것은 모두 본인이 직접 실행해 보고

캡처하여 블로그에 작성하는 것입니다

'멀티 클라우드 인프라(DKR & K8S)' 카테고리의 다른 글

도커 & 쿠버네티스 6  (2) 2024.11.11
도커 & 쿠버네티스 4  (0) 2024.10.28
도커 & 쿠버네티스 3  (0) 2024.10.28
도커 & 쿠버네티스 2  (2) 2024.10.20
도커 & 쿠버네티스 1  (1) 2024.10.20