일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Podman
- 힐링
- 자전거
- Linux
- 하체
- zabbix
- 소모임
- Grafana
- 오답노트
- Shell
- Run The Bridge
- 뚝섬유원지
- Kubernetes
- 달리기
- GitHub
- 성수대교
- 2021
- 한강
- 대전
- DSEC
- 대구
- 정보처리기사
- 유산소
- 러닝
- 건대입구역
- 맛집
- docker
- Python
- 10km
- 중식
- Today
- Total
Run The Bridge
k8s 1일차 본문
0. kubernetes 설치하기
컨테이너 오케스트레이션
- 컨테이너 자동 배치 및 복제
- 컨테이너 그룹에 대한 로드 밸런싱
- 컨테이너 장애 복구
- 클러스터 외부에 서비스 노출
- 컨테이너 추가 또는 제거로 확장 및 축소
- 컨테이너 서비스간의 인터페이스를 통한 연결 및 네트워크 포트 노출 제어
새로운 vmware 3대를 준비해준다.(2core, 4GB RAM, 40~50GB HDD)
1. k8s_manager
2. k8s_worker01
3. k8s_worker02
1. kubernetes 시작하기
여러 개의 컴포넌트로 구성
- API서버, 컨트롤 매니저, 스케줄러, DNS, 네트워크 플러그인
- kubelet : 모든 노드에서 실행되어 컨테이너의 생성, 삭제 등 마스터와 워커 노드 간의 통신 역할
- 도커 : 쿠버네티스는 토커를 이용하여 이미지를 컨테이너화 한다(OCI, CRI)
왼쪽이 control부, 오른쪽이 data부로 나누어진다.
다음 명령을 통해 Container를 볼 수 있다.
kubectl get pod -A
kube- : k8s에서 핵심적인 역할을 맡는다.
etcd-kube-master1(etcd): k8s에 대한 모든 정보를 저장하고 있다.
coredns-: k8s 내부에서 컨테이너끼리의 통신에 사용하는 DNS
calico-: k8s만 설치하면 컨테이너끼리 통신을 할 수 없다. 컨테이너의 네트워크 인터페이스라고 하는 것이 별도로 설치해야 한다 그래서 calico 라는 네트워크 인터페이스를 사용한다.
포드: 컨테이너를 다루는 기본 단위
- 포드는 쿠버네티스에서 애플리케이션의 기본 단위
- 1개 이상의 컨테이너로 구성된 컨테이너의 집합
- 도커 스웜 모드에서 서비스와 유사
READY에서 상태가 서로 똑같이 마춰져있어야 한다. ex) 1/1, 2/2
(실습) 포드 사용하기
# vi nginx-pod.yaml
apiVersion: v1 # pod에 맞는 api버전이 존재한다.
kind: Pod
metadata:
name: my-nginx-pod
spec:
containers:
- name: my-nginx-container
image: nginx:latest
ports:
- containerPort: 80
protocol: TCP
0. RUN 하는 방법
kubectl [create || apply] -f nginx-pod.yaml
kubectl get pods # docker run과 동일하다
1. 상세설명
kubectl get pod -o wide
2. describe 사용법
kubectl describe pod my-nginx-pod
3. 한 개의 컨테이너에 해당 pod로 접속하는 방법
kubectl exec -it my-nginx-pod bash
4. pod에 접속하지 않고 명령하는 방법(하이픈 2개를 써주고 명령을 쓴다. 없는 명령은 되지 않는다)
kubectl exec -it my-nginx-pod -- ls -l
5. k8s에서 로그 보는 방법(-f 옵션 존재)
kubectl logs my-nginx-pod
6. pod 삭제하는 방법
kubectl delete -f nginx-pod.yaml
kubectl delete [NAME]
(실습) 컨테이너가 두 개인 Pod
cp nginx-pod.yaml nginx-pod-with-ubuntu.yaml
--------------------------------------------------
apiVersion: v1
kind: Pod
metadata:
name: my-nginx-pod
spec:
containers:
- name: my-nginx-container
image: nginx:latest
ports:
- containerPort: 80
protocol: TCP
- name: ubuntu-sidecar-container
image: alicek106/rr-test:curl
command: ["tail"]
args: ["-f", "/dev/null"]
--------------------------------------------------
kubectl apply -f nginx-pod-with-ubuntu.yaml
7. 컨테이너가 2개 이상일 때 bash 접근 방법
kubectl exec -it my-nginx-pod -c ubuntu-sidecar-container -- bash
※ pod는 k8s가 만든 가상의 컨테이너, 즉 개념적으로만 존재한다 → 실제로는 컨테이너에 붙는다
※ -c: connection 으로 추정
컨테이너도 개별 IP를 가지고, Pod도 IP를 가진다 또 컨테이너는 Pod 전체에 네트워크에 속한다 그러므로 하나의 Pod에 속한 컨테이너는 localhost로 통신이 가능하다.
레플리카셋(ReplicaSet): 일정 개수의 포드를 유지하는 컨트롤러
YAML에 포드만 정의해서 사용할 경우
- 포드 삭제 시 포드는 영원히 사라진다 -> 포드를 사용자가 계속 관리해야 한다는 문제점…
- 포드 1개로는 서비스가 어려워 여러 개로 늘려야 하는 경우 -> 사용자가 포드를 늘려줘야
레플리카셋 컨트롤러는
- 정해진 수의 동일한 포드가 항상 실행되도록 관리
- 노드 장애 등의 이유로 포드를 사용할 수 없다면 다른 노드에서 포드를 다시 생성
→ 안정적인 서버 다중화를 위한 방법
(실습) ReplicaSet 사용하기
# vi replicaset-nginx.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: replicaset-nginx
spec:
replicas: 3
selector:
matchLabels:
app: my-nginx-pods-label
template:
metadata:
name: my-nginx-pod
labels:
app: my-nginx-pods-label
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
'Cloud > k8s' 카테고리의 다른 글
k8s 4일차 (0) | 2021.08.11 |
---|---|
wordpess-mysql 환경변수를 configmap으로 올리기, nginx 관련 실습 (0) | 2021.08.10 |
mysql, wordpress, tomcat, python/flask를 pod, replicaset, deployment로 올리고 서비스 생성하기 (0) | 2021.08.10 |
k8s 3일차 (0) | 2021.08.10 |
k8s 2일차 (0) | 2021.08.06 |