container 는 배포 / 가상머신은 provisioning 이다!
kubectl get node
kubectl get pod -n kube-system # calico, api, 스케줄러, controller
kubectl get pod -n metallb-system # controller, speaker
docker login
- 만약, 위 명령어 조차 실행이 안된다면, 현재 계정은 K8S 환경에 대한 Service Account 가 없는 상태다. /etc/kubernets/admin.conf 를 지정해주어야 한다
- 관리자는 포드 구성 및 포드내에 저장소의 위치 ( IP ), 디렉토리 명등을 정확히 알고 있어야 한다
pod 의 pvc 를 확인하여, 해당 요청에 맞는 볼륨을 자동으로 pod 와 bond 시킨다
apiVersion: v1
kind: Pod
metadata:
name: nfs-pod2
spec:
containers:
- name: nfs-mount-container
image: busybox
args: [ "tail", "-f", "/dev/null" ]
volumeMounts:
- name: nfs-volume
mountPath: /mnt # 포드 컨테이너 내부의 /mnt 디렉터리에 마운트합니다.
volumes:
- name : nfs-volume
nfs: # NFS 서버의 볼륨을 포드의 컨테이너에 마운트합니다.
path: /root/shared
server: 211.183.3.100
metallb 가 동작하고 있어야 한다
- namespace 와 controller, speaker Pod 가 동작중인지 확인하자
metallb 는 on-premise 환경에서 사용하기 어려운 service type LB 를 Pod 형태로 제공할 수 있는 방법으로, 각 LB 별로 필요한 구성 값을 추가햐여 배포해야 한다
생성된 Pod 에 Volume 을 연결할 계획이므로 master 에 nfs 서버가 구축되어 있어야 한다
상태확인, 마운트 가능 여부를 확인하기 위해, worker node 에서 showmount -e 211.183.3.100 을 했을 때, 확인 가능해야 한다
우리는 kia, sk 의 서비스 ( 서비스, deployment, volume ) 을 관리해주는 업체이다. 각 기업은 별도의 ns, address-pool on LB, Mount point ( Mount 하는 디렉토리 ) 를 가져야 한다
- R 옵션은 디렉토리에 들어있는 모든 것에 권한을 부여해주는 옵션이다
apiVersion: v1
kind: Namespace
metadata:
name: kia
default : 211.183.3.201 ~ 211.183.3.210
kia : 211.183.3.211 ~ 211.183.3.220
sk : 211.183.3.221 ~ 211.183.3.230
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 211.183.3.201-211.183.3.210
- name: kia
protocol: layer2
addresses:
- 211.183.3.211-211.183.3.220
- name: sk
protocol: layer2
addresses:
- 211.183.3.221-211.183.3.230
리스트 형태로 작성했을 때는 각 줄이 구분된다. 허나, 리스트 형태가 아니라면, 여러 줄로 작성하여도 하나의 줄로 인식된다. 이를 | 를 사용하면, 각 줄을 구분해준다. | - 를 사용하면, 각 줄을 구분해주며, 마지막에 빈 줄이 있다면 삭제해준다
우리는 Calico 에드온을 추가했기에 BGP 를 사용할 수 있다. 이는 주로 규모가 큰 프로젝트에서 ISP 와 직접 연결하여 사용한다. 우리는 그럴 필요가 없으므로 그냥 flat Network 를 구성하는 Protocol 을 layer2 로 설정하자
각 ns 별로 Ip 주소 대역을 지정해주자
각 회사별 deploy & svc 배포하기
apiVersion: apps/v1
kind: Deployment
metadata: #deployment
namespace: kia
name: kia-deploy
spec: #replicaset
replicas: 3
strategy:
type: Recreate
selector:
matchLabels:
app: kia
template: #pod
metadata:
labels:
app: kia
spec: #container
containers:
- name: kia-nginx
image: nginx
ports:
- containerPort: 80 # 컨테이너에서 연 포트 = 포드에서 연 포트 ( 자동 매핑된다 )
---
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: kia
annotations:
metallb.universe.tf/address-pool: kia # 사용할 address-pool 이름
spec:
ports:
- port: 80
targetPort: 80
selector:
app: kia
type: LoadBalancer
- Pod 에 대한 default Strategy 는 Rolling Update 이다
ex)
targetport : 85
containerport : 85
nginx
의 경우 서비스가 접속할 Port 와 Contianer 에서 오픈한 Port 가 85 로 연결되므로, 80 번인 nginx 에 접속이 불가능하다. 위 두 가지는 nginx 의 경우 80 번으로 모두 동일하게 설정해야 한다
apiVersion: apps/v1
kind: Deployment
metadata: #deployment
namespace: sk
name: sk-deploy
spec: #replicaset
replicas: 3
strategy:
type: Recreate
selector:
matchLabels:
app: sk
template: #pod
metadata:
labels:
app: sk
spec: #container
containers:
- name: sk-nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: sk
annotations:
metallb.universe.tf/address-pool: sk
spec:
ports:
- port: 80
targetPort: 80
selector:
app: sk
type: LoadBalancer
- 파일을 각각의 디렉토리에 생성하자
- 이를 통헤 exec 로 Pod 에 ls 명령을 내렸을 때, 해당 파일을 확인할 수 있어야 한다
apiVersion: apps/v1
kind: Deployment
metadata: #deployment
namespace: sk
name: sk-deploy
spec: #replicaset
replicas: 3
strategy:
type: Recreate
selector:
matchLabels:
app: sk
template: #pod
metadata:
labels:
app: sk
spec: #container
containers:
- name: sk-nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: sk-vol
mountPath: /test
volumes:
- name: sk-vol
nfs:
path: /sk
server: 211.183.3.100
---
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: sk
annotations:
metallb.universe.tf/address-pool: sk
spec:
ports:
- port: 80
targetPort: 80
selector:
app: sk
type: LoadBalancer
apiVersion: apps/v1
kind: Deployment
metadata: #deployment
namespace: kia
name: kia-deploy
spec: #replicaset
replicas: 3
strategy:
type: Recreate
selector:
matchLabels:
app: kia
template: #pod
metadata:
labels:
app: kia
spec: #container
containers:
- name: kia-nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: kia-vol
mountPath: /test
volumes:
- name: kia-vol
nfs:
path: /kia
server: 211.183.3.100
---
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: kia
annotations:
metallb.universe.tf/address-pool: kia
spec:
ports:
- port: 80
targetPort: 80
selector:
app: kia
type: LoadBalancer
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: sk
annotations:
metallb.universe.tf/address-pool: sk
spec:
ports:
- port: 80
targetPort: 80
selector:
app: sk
type: LoadBalancer
loadBalancerIP: 211.183.3.225
- 이는 위에서 사용하는 address-pool 의 Ip 범위 내에서 지정해야 한다