티스토리 뷰
○ yaml 파일 생성하기 전에 편리한 설정 확인
[vagrant@ms work]$ cat $HOME/.vimrc
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab autoindent
○ pod version 확인
[vagrant@ms ~]$ kubectl api-resources | grep -i -w pod
pods po v1 true Pod
○ kind 는 대문자로 등록되어 있다 >> yaml 에는 kind 로 적었다
[vagrant@ms ~]$ kubectl api-resources | head -n 1
NAME SHORTNAMES APIVERSION NAMESPACED KIND
● apache.yml 파일 생성
# kubernetes 는 syntax-check 없다..
>> 파일 형식 기억하자 ( 순서 등등.. )
>> 거의 90 % 이상은 apiVersion / kind / metadata 까지는 들어간다
>> Pod 는 spec 이 꼭 들어가줘야 한다
>>> 컨테이너의 정보가 들어간다
>> label 은 없어도 된다
---
apiVersion: v1
kind: Pod
metadata:
name: apache-pod
# labels:
# app: myweb
spec:
containers:
- name: myweb-container
image: httpd:2.4
ports:
- containerPort: 80
▩ 문제 있으면 에러 뜸
○ 문제가 없으면 바로 에러가 뜨지 않는다
[vagrant@ms work]$ kubectl apply -f apache.yml
pod/apache-pod created
kubectl get pods
# wide 를 쓰면 주소를 알 수 있다
[vagrant@ms work]$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
apache-pod 1/1 Running 0 2m35s 10.244.1.3 wk1.example.com <none> <none>
● 컨테이너에 접속
# 컨테이너 명이 아니라 파드 명으로 들어간다
[vagrant@ms work]$ kubectl exec -it apache-pod /bin/bash
>> 접속은 됐으나 다음 버전부터는 안 될테니 새로운 방법을 알려주었다
○ 정상 접속하여 index.html 생성
[vagrant@ms work]$ kubectl exec -it apache-pod -- /bin/bash
root@apache-pod:/usr/local/apache2# echo "hello kububububub" > htdocs/index.html
root@apache-pod:/usr/local/apache2# exit
[vagrant@ms work]$ curl 10.244.1.3
hello kububububub
● 포트포워딩으로 windows 에서 접속 가능하도록 설정
# kind 는 항상 첫 글자가 대문자이다
# targetPort 에서 P 대문자 주의
[vagrant@ms work]$ cat myweb-service.yml
---
apiVersion: v1
kind: Service
metadata:
name: myweb-service
spec:
ports:
- port: 8001
targetPort: 80
selector:
myapp: myweb
○ service 는 pod 가 아니다
>> 바로 올라간다
▷ ClusterIP 는 ms 와 wk1 , 2 가 하나로 묶어서 쓰는 IP 를 의미한다 ( 컴퓨터 3대가 묶여있는 IP )
[vagrant@ms work]$ kubectl apply -f myweb-service.yml
service/myweb-service created
[vagrant@ms work]$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myweb-service ClusterIP 10.101.11.242 <none> 8001/TCP 5s
>> 문제를 해결해야한다
◎
# Cluster IP 를 지나서 Entdpoint 에서 나눠져야 한다
# Endpoint IP 는 Pod의 주소이다 >> Pod 가 여러개가 있으면 원하는 pod 로 보내줘야 한다
>> 찾는 방법을 이해해야 한다
>> Endpoints 가 모르는 상태이다
[vagrant@ms work]$ kubectl describe svc myweb-service
>> 라벨 확인
[vagrant@ms work]$ kubectl get pods --show-labels
>> 추가로 더 pod 를 올렸다
[vagrant@ms work]$ kubectl run mynginx --image
apache.yml myweb-service.yml ns.yml
[vagrant@ms work]$ kubectl run mynginx --image nginx
pod/mynginx created
[vagrant@ms work]$ kubectl run myapache --image httpd
pod/myapache created
[vagrant@ms work]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
apache-pod 1/1 Running 0 13m
myapache 1/1 Running 0 4s
mynginx 1/1 Running 0 22s
왼쪽이 키 오른쪽이 value?
>> service 는 라벨을 보고 찾는다
>> label 주석 제거
[vagrant@ms work]$ cat apache.yml
---
apiVersion: v1
kind: Pod
metadata:
name: apache-pod
labels:
app: myweb
spec:
containers:
- name: myweb-container
image: httpd:2.4
ports:
- containerPort: 80
○ create 는 같은 이름이 있으면 생성 안되나 / apply 는 업데이트 해준다
[vagrant@ms work]$ kubectl create -f apache.yml
Error from server (AlreadyExists): error when creating "apache.yml": pods "apache-pod" already exists
[vagrant@ms work]$ kubectl apply -f
apache.yml myweb-service.yml ns.yml
[vagrant@ms work]$ kubectl apply -f apache.yml
pod/apache-pod configured
[vagrant@ms work]$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
apache-pod 1/1 Running 0 17m app=myweb
myapache 1/1 Running 0 3m16s run=myapache
mynginx 1/1 Running 0 3m34s run=mynginx
>>> 위에서는 apache-pod 의 LABELS 가 app=myweb 이다
>> apache.yml 의 LABELS 을 myweb-service.yml 의 selector 와 맞춰주면, Endpoints 를 찾을 수 있다
>> service 가 pod 보다 더 상위에 위치하고 있다
>> 위 그림처럼 서로 맞춰주고 apache.yml 적용
[vagrant@ms work]$ kubectl apply -f apache.yml
[vagrant@ms work]$ kubectl describe svc myweb-service
○ 아주 잘 된다
# Endpoints 는 포트번호 안 써도 됐다
# CLUSTER-IP 는 포트번호를 붙여야 접속된다
● service 는 selector 이며, selector 는 pods 의 Label 만 찾는다
◎ pod IP
◎ service 의 CLUSTER-IP
# 출력은 되지 않으나, 8001 포트로 지정하면 설정이 된다
# proxy 처리...?
sudo iptables -t nat -L -n | grep 8001
# 하나의 파드 내부에 있는 container 들은 파드의 IP 를 사용하는데, 컨테이너 구별은 PortNumber 로 구별한다
● 하지만, 아직 Host ms Windows 에서 접속이 안된다
>> type 을 지정해줘야한다
>> NodePort 대소문자 구별하기
▶ apply 로 바뀌거나 안바뀌거나 알 수 있다
>> TYPE 이 Cluster-IP 에서 NodePort 로 변경됨
>> NodePort 는 32183 으로 지정되었다
>> 32183 의 NodePort 로 패킷이 들어오면 8001 포트면서, Cluster-IP 10.101.11.242 로 보낸다
>>> 그리고 Endpoints 로 보내진다
# Cluster IP 는 서비스가 쓰는 IP 이다
# NodePort 는 가장 상층부에 뚫린다고 생각하자
▷ cluster 로 묶여있기 때문에 3개의 IP 중에 한개로 접속한다
'Kubernetes [ 쿠버네티스 ]' 카테고리의 다른 글
Kubernetes - replica 설정 변경 3가지 방법 (0) | 2024.03.08 |
---|---|
Kubernetes ReplicaSet (0) | 2024.03.07 |
Kubernetes 기본 개념 / namespace (0) | 2024.03.07 |
Kubernetes - 일반 계정 admin 권한 주기 [ 참조 치트시트 ] (0) | 2024.03.07 |
Kubernetes 정상 작동 확인 (0) | 2024.03.07 |