728x90
<Kubernetes 실습 :: imperative syntax 포드 명령형 실습 1>
1. 명령어로 yaml 파일 제작
- 이름이 myweb2이고 Nginx 이미지를 사용하는 새로운 Pod를 생성
- Pod에 라벨 app=myweb1을 부여한 다음, 해당 Pod를 YAML 파일로 출력
- 포트 80을 지정
- --dry-run=client: Pod를 생성하기 전에 시뮬레이션을 수행
ubuntu@k8s-master:~$ kubectl run myweb2 --image=nginx:1.25.3-alpine --port=80 --labels "app=myweb1" --dry=run=client -o yaml > myweb2-pod.yaml
2. yaml 파일 제작 확인
<myweb2-pod.yaml 내용>
- Nginx 컨테이너를 실행하며, 포트 8000을 열어서 클라이언트의 요청을 수신
- Pod는 항상 실행되며, 클러스터의 DNS 구성을 사용하여 DNS를 해결
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
app: myweb1
name: myweb1
spec:
containers:
- image: nginx:1.25.3-alpine
name: myweb2
ports:
- containerPort: 8000
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
3. pod 파일 실행
PS C:\Users\admin\Desktop\k8s-pods> kubectl apply -f myweb2-pod.yaml
pod/myweb2 created
<확인> kubectl get po -o wide
4. 서비스 생성
- 클러스터의 다른 서비스나 외부 클라이언트가 이 서비스를 사용하여 Pod에 액세스 가능
- Pod의 포트 8002를 통해 노출되며, 이 포트는 Pod의 포트 80으로 전달
PS C:\Users\admin\Desktop\k8s-pods> kubectl expose pod myweb2 --name=myweb2-svc --port-8002 --target-port=80
sverice/myweb2-svc exposed
<확인> kubectl get po,svc -o wide로 확인
- (다른 실습) 선언한 서비스를 파일로도 저장
PS C:\Users\admin\Desktop\k8s-pods> kubectl expose pod myweb2 --name=myweb2-svc --port-8002 --target-port=80 -o yaml > myweb2-svc.yaml
sverice/myweb2-svc exposed
<myweb2-svc.yaml>
apiVersion: v1
kind: Service
metadate:
creationTimestamp: "2024-02-19T03:25:02Z"
labels:
app: myweb1
name: myweb3-svc
namespace: default
resourceVersion: "174623"
uid: 758f57a1-b396-4c48-d93d-45fc204b6061
spec:
clusterIP: 10.108.161.226
clusterIPs:
- 10.108.131.226
internalTrafficPolicy: SingleStack
ports:
- port: 8002
protocol: TCP
targetPort: 80
selector:
app: myweb1
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
<imperative syntax 포드 명령형 실습 2>
1. MySQL 포드 파일 제작
<mysql56-pod.yaml>
- MySQL 5.7 버전의 Pod를 정의
- 포트 3306을 열어 MySQL 데이터베이스에 액세스
- 루트 비밀번호: k8spass#으로 설정
apiVersion: v1
kind: Pod
metadata:
name: mysql57-pod
labels:
type: mysql57
spec:
containers:
- name: mysql57-container
image: mysql:5.7
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "k8spass#"
<제작 확인>
2. mysql56-pod.yaml 적용
PS C:\Users\admin\Desktop\k8s-pods> kubectl apply -f mysql-pod.yaml
pod/mysql57-pod created
- kubectl get po -o wide로 제작 확인
3. 포드 실행
- 컨테이너에서 대화형 셸을 실행
PS C:\Users\admin\Desktop\k8s-pods> kubectl exec -it mysql57-pod --bash
bash-4.2# mysql -u root -p
<MySQL 연결 확인 간단 실습>
- 테이블을 만들어 정보를 입력한 후, 연동이 되었는지 확인
mysql> create database k8sdb;
Query OK, 1 row affected (0.00 sec)
>> k8sdb라는 이름의 데이터 베이스 생성
mysql> create table products (prod_id int, prod_name varchar(20));
Query OK, 0 rows affected (0.03 sec)
>> products라는 이름의 테이블을 생성하고
칼럼 prod_id 생성 (정수형)
칼럼 prod_name 생성 (길이가 20인 문자열)
mysql> insert into products values (100, 'kubernetes');
Query OK, 1 rows affected (0.02 sec)
>> prod_id가 100이고 prod_name이 'kubernetes'인 레코드 생성
mysql> insert into products values (200, 'hangaram');
Query OK, 1 rows affected (0.01 sec)
>> prod_id가 200이고 prod_name이 'hangaram'인 레코드 생성
mysql> select * from products;
<결과 확인>
4. MySQL 서비스 선언
<mysql-svc.yaml 제작>
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
spec:
selector:
type: mysql57
ports:
- port: 13306
targetPort: 3306
externalIPs:
- 192.168.56.103
- externalIPs는 kubectl po -o wide로 포드가 생성된 노드 확인 후 작성
5. mysql-svc.yaml 서비스 선언
PS C:\Users\admin\Desktop\k8s-pods> kubectl apply -f mysql-svc.yaml
service/mysql-svc created
<mysql 포드 및 서비스 생성 확인>
<VsCode로 MySQL 접속 확인해서 연동 확인>
- ssh와 MySQL에 모두 정보 입력해야 함
A. SSH 서버 타입 입력
- Host: 포드가 생성된 노드 IP 입력
- password: ubuntu
B. MySQL 서버 타입 입력
- Host: 192.168.56.103
- Password: k8spass#
>> Connet 버튼 누르면 성공 팝업 표시
SHOW DATABAES;
USE k8sdb;
SELECT * FROM products;
'클라우드 + DevOps > Kubernetes (k8s)' 카테고리의 다른 글
Kubernetes :: 런타임 컨테이너 runtime container 실습 (1) | 2024.04.20 |
---|---|
Kubernetes 쿠버네티스 :: workload resources (1) | 2024.04.20 |
Kubernetes 쿠버네티스 :: 동적 Volume, StorageClass (1) | 2024.04.19 |
Kubernetes 실습 :: 포드(pod) 관리 - declarative syntax 포드 선언형 (0) | 2024.04.18 |
Kubernetes 쿠버네티스 :: PV, PVC 이해와 활용 (1) | 2024.04.18 |