본문 바로가기

K8S

K8S: 생성/삭제/접근

1. 생성
2. 확인
3. 삭제
4. Manifest file
5. 접근
6. 특정 Node에 Pod 생성

 

1. 생성


1.1. namespace

kubectl create namespace [NAMESPACE]

namespace 1team 생성

1.2. pod

 - 옵션의 값은 '=' 또는 공백으로 모두 표현 가능

 - namespace 옵션을 생략하는 경우 default namespace로 자동 지정

kubectl run [POD] --image=[IMAGE] --port=[PORT]
kubectl run [POD] --image [IMAGE] --port [PORT] --namespace [NAMESPACE]

default namespace의 nginx pod와 1team namespace의 apache pod 생성

 

2. 확인


2.1. get

# namespace 목록 조회
kubectl get namespace

# namespace 내 pod 목록 조회
# -o wide 옵션으로 상세 내용 확인 가능
kubectl get pod [POD] -n [NAMESPACE]

namespace 목록
pod 목록 (IP는 내부에서만 접근 가능)
service도 정상 작동

 

2.2. describe

# namespace 상세정보 확인
kubectl describe namespace [NAMESPACE]

# pod 상세정보 확인
kubectl describe pod [POD]


3. 삭제


삭제 전 namespace와 pod 현황

3.1. pod > namespace

# namespace 내 pod 삭제
kubectl delete pod [POD] -n [NAMESPACE]

# namespace 삭제
kubectl delete namespace [NAMESPACE]

# 전체 삭제
--all 옵션 사용

pod 삭제 후 namespace 삭제

3.2. namespace

pod가 있는 namespace를 통째로 삭제
결과는 동일


4. Manifest file


4.1. 기존 image의 내용 보기 (yaml/json)

kubectl run [POD] --image [IMAGE] --dry-run -o yaml/json

yaml
json

4.2. 생성
 4.2.1. namespace

# namespace manifest 파일 생성
vi name.yml

# 내용 입력
apiVersion: v1			# K8S 버전 명세 (v1: pod, service / apps/v1: replica set, deploy 등)
kind: namespace			# Resource Type
metadata:
  name: 1team			# 생성할 Resource 이름 지정
---
apiVersion: v1
kind: namespace
metadata:
  name: 2team
  
# name.yml 파일 적용
kubectl apply -f name.yml

 

manifest 파일 생성
내용 입력
name.yml 파일 적용

 4.2.2. pod

# pod manifest 파일 생성
vi pod.yml

# 내용 입력
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: 1team
spec:					# Pod의 구체적인 사양 정의
  containers:					
  - name: n1				# Container 이름 지정
    image: nginx:1.14.2			# Container Image 지정
    ports:
    - containerPort: 80			# Container Port 지정

manifest 파일 생성
내용 입력
pod.yml 파일 적용

4.3. 확인

정상 생성 확인

 4.4. 수정

kubectl describe으로 생성 과정 확인
pod.yml 파일의 image 수정
수정한 pod.yml 파일 재적용
nginx:1.14.2를 kill하고 nginx:1.15로 다시 가져오는 모습

4.5. 삭제

kubectl delete 명령에서 -f 옵션으로 yml 파일을 지정하여 삭제


5. 접근


5.1. Pod 생성

# pod.yml 파일
apiVersion: v1
kind: Pod
metadata:
  name: apache
spec:
  containers:				# httpd와 mysql Container 생성
  - name: h1
    image: httpd:latest
    ports:
    - containerPort: 80
  - name: m1
    image: mysql:5.7
    ports:
    - containerPort: 3306
    env:				# 환경 변수
    - name: MYSQL_ROOT_PASSWORD
      value: It12345!

5.2. Container 접근

# Container가 1개인 경우 POD로 접근 가능
kubectl exec -it [POD] -n [NAMESPACE] -- /bin/bash

# Container가 2개 이상인 경우 -c 옵션으로 특정 Container 접근 가능
kubectl exec -it [POD] -c [CONTAINER] -n [NAMESPACE] --/bin/bash

기본 container가 h1로 지정되어 있어 httpd container로 접근
-c 옵션을 사용하여 mysql container로 접근

5.3. container 내부 작업

index.html 내용 수정
apache pod의 IP로 내용 변경 확인

 

6. 특정 Node에 Pod 생성


[Label 관련 포스팅 보러가기]

6.1. Label 생성

kubectl label node node1 disk=ssd
kubectl label node node2 disk=hdd

6.2. manifest 파일 생성

apiVersion: v1
kind: Pod
metadata:
  name: apachepv
  labels:
    app: apache
spec:
  containers:
  - name: apachepv
    image: httpd
    ports:
    - containerPort: 80
    volumeMounts:
    - name: apashare
      mountPath: /usr/local/apache2/htdocs/
  volumes:
  - name: apashare
    hostPath:
      path: /html
      type: DirectoryOrCreate
  nodeSelector:			# Node 특정
    disk: hdd			# label이 disk=hdd인 node2에 생성하겠다는 의미

manifest 파일 생성
내용 입력
manifest 파일 적용
disk=hdd Label이 있는 node2에 Pod가 생성된 모습

'K8S' 카테고리의 다른 글

K8S: 컨테이너 인프라 환경과 쿠버네티스  (0) 2022.09.14
K8S: 테스트 환경 구성하기  (2) 2022.09.13
K8S: Deploy/종합 실습  (0) 2022.08.10
K8S: Label/Volume/Service/Replica Set  (0) 2022.08.08
K8S: 설치 및 설정  (0) 2022.08.03