o 서버 스펙
- 멀티 Master 구성을 작업을 위한 최소 스펙
| 호스트명 | cpu | mem |
|---|
| proxy_lb | 1core | 1GB |
| master1 | 2core | 4GB |
| master2 | 2core | 4GB |
| worker1 | 1core | 2GB |
| worker2 | 1core | 2GB |
o 구성도
proxy 구성
- proxy_lb 서버를 이용하여 LB 환경을 구축하였다.
구성은 docker를 이용하였다.
- master 6443포트 통신을 위한 proxy container
- 외부 서비스 제공을 위한 LB
# proxy용 LB container
docker run --name proxy -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro --restart=always -p 6443:6443 -d nginx
# 서비스 LB container
docker run --name httpd_lb -v /root/nginx.conf:/etc/nginx/nginx.conf:ro --restart=always -p 80:80 -d nginx
Master 구성
- crio k8s 설치가 완료되었다는 가정하에 아래 진행
proxy 설정하여 master 분산작업 진행
#lb, master1,2 worker 1,2 모두 호스트 등록
cat /etc/hosts
127.0.0.1 localhost
192.168.10.10 master1
192.168.10.11 master2
192.168.10.12 worker1
192.168.10.13 worker2
192.168.10.134 lb proxy.lb.com dame.yoo.com
## master1에서 proxy:6443 으로 init 한다.
sudo kubeadm init --control-plane-endpoint "lb:6443" --upload-certs --pod-network-cidr "10.244.0.0/16"
## master2 조인
kubeadm join 192.168.100.10:26443 --token t69wl1.6iq2xfgp8thiz9bb \
--discovery-token-ca-cert-hash sha256:b94dc94f3a249c237f39808a6ff2d1f68cbe058b9d4aef6d54173b5523976238 \
--control-plane --certificate-key 91295ae74b07d78d46b4bdc29e62615d50b5644a97ff6f4453c39a574c1f9bb6
## worker1,2 조인
kubeadm join 192.168.100.10:26443 --token t69wl1.6iq2xfgp8thiz9bb \
--discovery-token-ca-cert-hash sha256:b94dc94f3a249c237f39808a6ff2d1f68cbe058b9d4aef6d54173b5523976238
ingress, svc, deployment,pod 생성
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: dame.yoo.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: hello-node-svc
port:
number: 80
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
apiVersion: v1
kind: Service
metadata:
name: hello-node-svc
spec:
selector:
app: nginx
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
결과 보기
- 2개의 pod에 나누어서 전달 되는 것을 볼 수 있다.
