*리뷰*
- ingress : L7 로드밸런서와 유사
=> 경로 기반 라우팅이 가능하다는 면에서 ALB와 유사한 기능 제공
=> 타깃그룹과 유사한 백앤드의 pod들이 컨테이너를 담고 있음
=> nginx에서 만든 일종의 모듈
# vi nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 100Mi
accessModes:
- ReadWriteMany
=> ReadWriteMany(RWX)
persistentVolumeReclaimPolicy: Recycle
=> pod를 지울 때 pod의 데이터를 지우려면 retain 같이 지우려면 recycle 로 설정
nfs:
server: 192.168.0.186
path: /nfs_shared
# kubectl apply -f nfs-pv.yaml
# kubectl get pvkubectl get pv를 통해 생성된 persistent volume 확인, 추후 recycle이므로 100Mi의 데이터가 지워지는 것을 확인
# vi nfs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Milabel로 연결하기도 하지만 이것을 기준으로 pv의 storage 중 가장 근접한 크기로 연결
# kubectl apply -f nfs-pvc.yaml
# kubectl get pvc
# kubectl get pv
# vi nfs-pvc-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-pvc-deploy
spec:
replicas: 4
selector:
matchLabels:
app: nfs-pvc-deploy
template:
metadata:
labels:
app: nfs-pvc-deploy
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: nfs-vol
mountPath: /usr/share/nginx/html
volumes:
- name: nfs-vol
persistentVolumeClaim:
claimName: nfs-pvc
=> claimName에는 pvc 셋팅 시 metadata 필드에서 지정했던 이름을 정확히 기입해줘야 함
# kubectl apply -f nfs-pvc-deploy.yaml
# kubectl get pod
# kubectl exec -it nfs-pvc-deploy-76bf944dd5-6j9gf -- /bin/bash
# kubectl expose deployment nfs-pvc-deploy --type=LoadBalancer --name=nfs-pvc-deploy-svc1 --external-ip 192.168.0.186 --port=80
=> --external-ip를 통해 만들어 놓은 nginx에 접속할 수 있는 ip를 지정하는 것(master1, worker1, worker2 임의로 넣기)external ip로 접속
--- metallb(DHCP)
# kubectl apply -f /root/_Book_k8sInfra/ch3/3.3.4/metallb.yaml
# kubectl get pods -n metallb-system -o wide
# vi metallb-l2config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: nginx-ip-range
protocol: layer2
addresses:
- 192.168.2.0-192.168.2.3
# kubectl apply -f metallb-l2config.yaml
# kubectl describe configmaps -n metallb-system
# metallb 들어가기 전 virtualBox 설정
=> 네트워크를 Bridged로 설정했을 때 발생할 수 있는 강의장 내 IP 충돌을 방지하기 위함
=> NAT네트워크와 HostOnly 어댑터로 설정하면 프라이빗 서브넷이 생성되어 장소에 구애받지 않고 실습 가능
--- Master ---
# kubeadm init --apiserver-advertise-address=192.168.56.103 --pod-network-cidr=10.244.0.0/16
=> API 서버를 설정해주는 명령어
# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config
# kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
# kubectl get pods --all-namespaces
# source <(kubectl completion bash)
# echo "source <(kubectl completion bash)" >> ~/.bashrc
# exit
# vi metallb-test.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx-pod
spec:
containers:
- name: nginx-pod-container
image: nginx
---
apiVersion: v1
kind: Service
metadata:
name: loadbalancer-service-pod
spec:
type: LoadBalancer
# externalIPs:
# -
selector:
app: nginx-pod
ports:
- protocol: TCP
port: 80
targetPort: 80
# kubectl apply -f metallb-test.yaml
--- multi-container
# vi multipod.yaml
apiVersion: v1
kind: Pod
metadata:
name: multipod
spec:
containers:
- name: nginx-container #1번째 컨테이너
image: nginx:1.14
ports:
- containerPort: 80
- name: centos-container #2번째 컨테이너
image: centos:7
command:
- sleep
- "10000"
# vi wordpress-pod-svc.yaml
apiVersion: v1
kind: Pod
metadata:
name: wordpress-pod
labels:
app: wordpress-pod
spec:
containers:
- name: mysql-container
image: mysql:5.7
env:
- name: MYSQL_ROOT_HOST
value: '%' # wpuser@%
- name: MYSQL_ROOT_PASSWORD
value: kosa0401
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wpuser
- name: MYSQL_PASSWORD
value: wppass
ports:
- containerPort: 3306
command:
- sleep
- "10000"
- name: wordpress-container
image: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wordpress-pod:3306
- name: WORDPRESS_DB_USER
value: wpuser
- name: WORDPRESS_DB_PASSWORD
value: wppass
- name: WORDPRESS_DB_NAME
value: wordpress
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: loadbalancer-service-deployment-wordpress
spec:
type: LoadBalancer
externalIPs:
- 192.168.0.10
selector:
app: wordpress-pod
ports:
- protocol: TCP
port: 80
--- metallb(DHCP)
# kubectl apply -f /root/_Book_k8sInfra/ch3/3.3.4/metallb.yaml
=> metallb.yaml 파일에 namespace를 만드는 내용 들어가 있음
# kubectl get pods -n metallb-system -o wide
# vi metallb-l2config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: nginx-ip-range
protocol: layer2
addresses:
- 192.168.56.200-192.168.56.250
--- configMap
컨피그맵은 키-값 쌍으로 기밀이 아닌 데이터를 저장하는 데 사용하는 API 오브젝트입니다.
파드는 볼륨에서 환경 변수, 커맨드-라인 인수 또는 구성 파일로 컨피그맵을 사용할 수 있습니다.
컨피그맵을 사용하면 컨테이너 이미지에서 환경별 구성을 분리하여, 애플리케이션을 쉽게 이식할 수 있습니다.
vi configmap-dev.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: config-dev
namespace: default
data:
DB_URL: localhost
DB_USER: myuser
DB_PASS: mypass
DEBUG_INFO: debug
vi deployment-config01.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: configapp
labels:
app: configapp
spec:
replicas: 1
selector:
matchLabels:
app: configapp
template:
metadata:
labels:
app: configapp
spec:
containers:
- name: testapp
image: nginx
ports:
- containerPort: 8080
env:
- name: DEBUG_LEVEL
valueFrom:
configMapKeyRef:
name: config-dev
key: DEBUG_INFO
---
apiVersion: v1
kind: Service
metadata:
labels:
app: configapp
name: configapp-svc
namespace: default
spec:
ports:
- nodePort: 30800
port: 8080
protocol: TCP
targetPort: 80
selector:
app: configapp
kubectl exec -it configapp-64d4554b68-v55g5 -- bash
'KOSA 클라우드 솔루션즈 아키텍트 양성과정' 카테고리의 다른 글
[7.21] kubernetes(ECR, EKS) (0) | 2022.07.21 |
---|---|
[7.20] kubernetes(도커 이미지 pull 횟수 제한, ResourceQuota, taint, labels) (0) | 2022.07.20 |
[7.18]kubernetes(deployment, volume) (0) | 2022.07.18 |
[7.15] 쿠버네티스(minikube, Deployment 롤링 업데이트) (0) | 2022.07.15 |
[7.14] Kubernetes (ECS, ad-hoc, yaml, Node, Cluster) (0) | 2022.07.14 |