ingress
l7 스위치(alb)과 유사
백엔드 구성-> pod에 접근
서비스 : 외부사용자가 pod에 접근할 수 있도록
nginx에서 만들어놓은 ingress 모듈 -> yaml파일로 실행
경로기반으로 끝의 url로 경로 달라짐
docker volume과 비슷
pv를 먼저 구성
pvc를 통해 pod와 pv를 연결(pv 쉽게 변경 가능)
# yum install -y nfs-utils.x86_64 # mount -t nfs
# mkdir /nfs_shared
# chmod 777 /nfs_shared
# echo '/nfs_shared 192.168.0.0/20(rw,sync,no_root_squash)' >> /etc/exports
# systemctl enable --now nfs
# vi nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 100Mi
accessModes:
- ReadWriteMany # RWX
persistentVolumeReclaimPolicy: Recycle
nfs:
server: 192.168.1.191
path: /nfs_shared
# kubectl apply -f nfs-pv.yaml
# kubectl get pv
# vi nfs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Mi
# kubectl apply -f nfs-pvc.yaml
[root@master1 nfs-pv-pvc-pod]# kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/nfs-pv 100Mi RWX Recycle Bound default/nfs-pvc 7m47s
persistentvolume/task-pv-volume 10Mi RWO Retain Bound default/task-pv-claim manual 3d15h
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/nfs-pvc Bound nfs-pv 100Mi RWX 15s
persistentvolumeclaim/task-pv-claim Bound task-pv-volume 10Mi RWO manual 3d15h
# 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
# 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.1.191 --port=80
[root@master1 nfs-pv-pvc-pod]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d23h
nfs-pvc-deploy-svc1 LoadBalancer 10.109.189.236 192.168.1.191 80:30739/TCP 5s
[root@master1 nfs-pv-pvc-pod]# curl 192.168.1.191:30739
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.23.0</center>
</body>
</html>
--- All Node ---
# cat <<EOF >> /etc/hosts
192.168.56.104 master1
192.168.56.105 worker1
192.168.56.106 worker2
EOF
# kubeadm reset
# kubeadm init --apiserver-advertise-address=192.168.56.104 --pod-network-cidr=10.244.0.0/16
# 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
kubeadm join 192.168.56.104:6443 --token p89f25.gy1vtxodt4cg4ep3 \
--discovery-token-ca-cert-hash sha256:49d0531aa70f26e4c3b2b400e4692c3575daf6f5fcb5e3536d794d44fb4f2bff
[root@master1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master1 Ready master 4m41s v1.19.16
worker1 Ready <none> 50s v1.19.16
worker2 Ready <none> 46s v1.19.16
[root@master1 ~]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-6mw5f 1/1 Running 0 3m19s
kube-flannel kube-flannel-ds-lg2n7 1/1 Running 0 82s
kube-flannel kube-flannel-ds-m95zq 1/1 Running 0 78s
kube-system coredns-f9fd979d6-fg6rs 1/1 Running 0 4m54s
kube-system coredns-f9fd979d6-fs5r2 1/1 Running 0 4m54s
kube-system etcd-master1 1/1 Running 0 5m4s
kube-system kube-apiserver-master1 1/1 Running 0 5m4s
kube-system kube-controller-manager-master1 1/1 Running 0 5m4s
kube-system kube-proxy-4fdvc 1/1 Running 0 82s
kube-system kube-proxy-9qpc7 1/1 Running 0 4m54s
kube-system kube-proxy-mn9hk 1/1 Running 0 78s
kube-system kube-scheduler-master1 1/1 Running 0 5m3s
# vi /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"insecure-registries":["192.168.56.104:5000"] //master1 ip 입력
}
# systemctl restart docker
# poweroff
# kubectl run nginx-pod --image=nginx //nginx 이미지를 가지고 nginx-pod라는 이름의 pod 생성
pod/nginx-pod created
[root@master1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 46s
[root@master1 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-pod 1/1 Running 0 53s 10.244.2.2 worker2 <none> <none>
[root@master1 ~]# curl 10.244.2.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
# docker tag nginx:latest 192.168.56.104:5000/nginx:latest
# docker push 192.168.56.104:5000/nginx:latest
# kubectl run nginx-pod2 --image=192.168.56.104:5000/nginx:latest
pod/nginx-pod2 created
[root@master1 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-pod 1/1 Running 0 5m45s 10.244.2.2 worker2 <none> <none>
nginx-pod2 1/1 Running 0 14s 10.244.1.2 worker1 <none> <none>
# kubectl expose pod nginx-pod --name loadbalancer --type=LoadBalancer --external-ip 192.168.56.104 --port 80
service/loadbalancer exposed
[root@master1 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 45m
loadbalancer LoadBalancer 10.102.146.62 192.168.56.104 80:32081/TCP 28s
[root@master1 ~]# curl 192.168.56.104
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@master1 ~]# echo '/nfs_shared 192.168.56.0/24(rw,sync,no_root_squash)' > /etc/exports
[root@master1 ~]# cat /etc/exports
/nfs_shared 192.168.56.0/24(rw,sync,no_root_squash)
[root@master1 ~]# systemctl restart nfs
[root@master1 nfs-pv-pvc-pod]# vi nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 100Mi
accessModes:
- ReadWriteMany # RWX
persistentVolumeReclaimPolicy: Recycle
nfs:
server: 192.168.56.104
path: /nfs_shared
[root@master1 nfs-pv-pvc-pod]# kubectl apply -f nfs-pv.yaml
persistentvolume/nfs-pv created
[root@master1 nfs-pv-pvc-pod]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
nfs-pv 100Mi RWX Recycle Available 5s
[root@master1 nfs-pv-pvc-pod]# kubectl apply -f nfs-pvc.yaml
persistentvolumeclaim/nfs-pvc created
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: 192.168.56.104:5000/nginx:latest
volumeMounts:
- name: nfs-vol
mountPath: /usr/share/nginx/html
volumes:
- name: nfs-vol
persistentVolumeClaim:
claimName: nfs-pvc
# kubectl apply -f nfs-pvc-deploy.yaml
deployment.apps/nfs-pvc-deploy created
[root@master1 nfs-pv-pvc-pod]# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/nfs-pvc-deploy-5d47bcf6f-g6tnr 1/1 Running 0 33s
pod/nfs-pvc-deploy-5d47bcf6f-rxwkg 1/1 Running 0 33s
pod/nfs-pvc-deploy-5d47bcf6f-v2jvf 1/1 Running 0 33s
pod/nfs-pvc-deploy-5d47bcf6f-xj4nr 1/1 Running 0 33s
pod/nginx-pod 1/1 Running 0 118m
pod/nginx-pod2 1/1 Running 0 113m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 156m
service/loadbalancer LoadBalancer 10.102.146.62 192.168.56.104 80:32081/TCP 111m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nfs-pvc-deploy 4/4 4 4 33s
NAME DESIRED CURRENT READY AGE
replicaset.apps/nfs-pvc-deploy-5d47bcf6f 4 4 4 33s
# kubectl expose deployment nfs-pvc-deploy --type=LoadBalancer --name=nfs-pvc-deploy-svc1 --external-ip=192.168.56.104 --port=80
service/nfs-pvc-deploy-svc1 exposed
[root@master1 nfs-pv-pvc-pod]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 158m
nfs-pvc-deploy-svc1 LoadBalancer 10.109.46.97 192.168.56.104 80:30392/TCP 3s
[root@master1 nfs-pv-pvc-pod]# echo "HELLO" > /nfs_shared/index.html
[root@master1 nfs-pv-pvc-pod]# curl 192.168.56.104
HELLO
-> 로드밸런서 비슷하게 되고 있는것
[root@master1 test]# docker pull centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:c73f515d06b0fa07bb18d8202035e739a494ce760aa73129f60f4bf2bd22b407
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
[root@master1 test]# docker tag centos:7 192.168.56.104:5000/centos:7
[root@master1 test]# docker push 192.168.56.104:5000/centos:7
The push refers to repository [192.168.56.104:5000/centos]
174f56854903: Pushed
7: digest: sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f size: 529
[root@master1 test]# vi multipod.yaml
apiVersion: v1
kind: Pod
metadata:
name: multipod
spec:
containers:
- name: nginx-container #1번째 컨테이너
image: 192.168.56.104:5000/nginx:latest
ports:
- containerPort: 80
- name: centos-container #2번째 컨테이너
image: 192.168.56.104:5000/centos:7
command:
- sleep
- "10000" # 큰 따옴표 안에:
[root@master1 test]# kubectl apply -f multipod.yaml
pod/multipod created
[root@master1 test]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
multipod 2/2 Running 0 45s 10.244.2.5 worker2 <none> <none>
nfs-pvc-deploy-5d47bcf6f-g6tnr 1/1 Running 0 15m 10.244.2.3 worker2 <none> <none>
nfs-pvc-deploy-5d47bcf6f-rxwkg 1/1 Running 0 15m 10.244.1.4 worker1 <none> <none>
nfs-pvc-deploy-5d47bcf6f-v2jvf 1/1 Running 0 15m 10.244.2.4 worker2 <none> <none>
nfs-pvc-deploy-5d47bcf6f-xj4nr 1/1 Running 0 15m 10.244.1.3 worker1 <none> <none>
nginx-pod 1/1 Running 0 134m 10.244.2.2 worker2 <none> <none>
nginx-pod2 1/1 Running 0 128m 10.244.1.2 worker1 <none> <none>
[root@master1 test]# kubectl describe pod multipod
Name: multipod
Namespace: default
Priority: 0
Node: worker2/192.168.56.106
Start Time: Tue, 19 Jul 2022 14:28:22 +0900
Labels: <none>
Annotations: <none>
Status: Running
IP: 10.244.2.5
IPs:
IP: 10.244.2.5
Containers:
nginx-container:
Container ID: docker://c9d22d73670faa7ef031ef22ff29dfd40bb2f4401aadf025f58e55880e0e2640
Image: 192.168.56.104:5000/nginx:latest
Image ID: docker-pullable://192.168.1.191:5000/nginx@sha256:33cef86aae4e8487ff23a6ca16012fac28ff9e7a5e9759d291a7da06e36ac958
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 19 Jul 2022 14:28:23 +0900
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-8zt2f (ro)
centos-container:
Container ID: docker://8d2ff766f844bc6380fa4546b20bfc3e014f51a41ab0f6fa356489132aa2616f
Image: 192.168.56.104:5000/centos:7
Image ID: docker-pullable://192.168.56.104:5000/centos@sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f
Port: <none>
Host Port: <none>
Command:
sleep
10000
State: Running
Started: Tue, 19 Jul 2022 14:28:33 +0900
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-8zt2f (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-8zt2f:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-8zt2f
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 79s default-scheduler Successfully assigned default/multipod to worker2
Normal Pulling 79s kubelet Pulling image "192.168.56.104:5000/nginx:latest"
Normal Pulled 79s kubelet Successfully pulled image "192.168.56.104:5000/nginx:latest" in 25.446279ms
Normal Created 79s kubelet Created container nginx-container
Normal Started 79s kubelet Started container nginx-container
Normal Pulling 79s kubelet Pulling image "192.168.56.104:5000/centos:7"
Normal Pulled 69s kubelet Successfully pulled image "192.168.56.104:5000/centos:7" in 9.588495465s
Normal Created 69s kubelet Created container centos-container
Normal Started 69s kubelet Started container centos-container
[root@master1 test]# kubectl exec -it multipod -c nginx-container -- bash //c는 컨테이너
root@multipod:/#
- nginx 확인
yum 명령어 x
apt-get 명령어 o
cd /usr/share/nginx 명령어 실행되면 nginx라는 것
[root@master1 test]# kubectl exec -it multipod -c centos-container -- bash
[root@multipod /]#
- centos 확인
yum 명령어 o
[root@master1 test]# docker pull mysql:5.7
[root@master1 test]# docker pull wordpress
[root@master1 test]# docker tag mysql:5.7 192.168.56.104:5000/mysql:5.7
[root@master1 test]# docker push 192.168.56.104:5000/mysql:5.7
[root@master1 test]# docker tag wordpress:latest 192.168.56.104:5000/wordpress:latest
[root@master1 test]# docker push 192.168.56.104:5000/wordpress:latest
# vi wordpress-pod-svc.yaml
apiVersion: v1
kind: Pod
metadata:
name: wordpress-pod # 127.0.0.1
labels:
app: wordpress-pod
spec:
containers:
- name: mysql-container
image: 192.168.56.104:5000/mysql:5.7
env:
- name: MYSQL_ROOT_HOST
value: '%' # wpuser@% # 0.0.0.0/0
- 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
- "60" # 위 컨테이너 만들고 60초 후 아래 컨테이너 만듦
- name: wordpress-container
image: 192.168.56.104:5000/wordpress:latest
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.56.105
selector:
app: wordpress-pod
ports:
- protocol: TCP
port: 80
[root@master1 test]# kubectl apply -f wordpress-pod-svc.yaml
pod/wordpress-pod created
service/loadbalancer-service-deployment-wordpress unchanged
[root@master1 test]# kubectl describe pod wordpress-pod
Name: wordpress-pod
Namespace: default
Priority: 0
Node: worker1/192.168.56.105
Start Time: Tue, 19 Jul 2022 15:20:53 +0900
Labels: app=wordpress-pod
Annotations: <none>
Status: Running
IP: 10.244.1.6
IPs:
IP: 10.244.1.6
Containers:
mysql-container:
Container ID: docker://f9009386a0a6ac29229d5bf0cd0053ce45d5ea5ad8f09417aed53a8548207978
Image: 192.168.56.104:5000/mysql:5.7
Image ID: docker-pullable://192.168.56.104:5000/mysql@sha256:f6f459b960b1c09270dcf6a0b48130ce321754ed85f91340a38bfd0a2bfaa9fd
Port: 3306/TCP
Host Port: 0/TCP
Command:
sleep
60
State: Running
Started: Tue, 19 Jul 2022 15:21:55 +0900
Last State: Terminated
Reason: Completed
Exit Code: 0
Started: Tue, 19 Jul 2022 15:20:54 +0900
Finished: Tue, 19 Jul 2022 15:21:54 +0900
Ready: True
Restart Count: 1
Environment:
MYSQL_ROOT_HOST: %
MYSQL_ROOT_PASSWORD: kosa0401
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-8zt2f (ro)
wordpress-container:
Container ID: docker://a20b82d439cfc4181ecd3a9a82cb05969dd03760a71cbb9fd959ac6d1f372ea9
Image: 192.168.56.104:5000/wordpress:latest
Image ID: docker-pullable://192.168.56.104:5000/wordpress@sha256:db62907a6e0da1c8037bbff4a332e7b43b09045751a3f50986e54c69485d2ac3
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 19 Jul 2022 15:20:55 +0900
Ready: True
Restart Count: 0
Environment:
WORDPRESS_DB_HOST: wordpress-pod:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
WORDPRESS_DB_NAME: wordpress
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-8zt2f (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-8zt2f:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-8zt2f
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 74s default-scheduler Successfully assigned default/wordpress-pod to worker1
Normal Pulling 75s kubelet Pulling image "192.168.56.104:5000/mysql:5.7"
Normal Pulled 75s kubelet Successfully pulled image "192.168.56.104:5000/mysql:5.7" in 24.746477ms
Normal Pulling 75s kubelet Pulling image "192.168.56.104:5000/wordpress:latest"
Normal Pulled 75s kubelet Successfully pulled image "192.168.56.104:5000/wordpress:latest" in 29.221776ms
Normal Created 74s kubelet Created container wordpress-container
Normal Started 74s kubelet Started container wordpress-container
Normal Created 14s (x2 over 75s) kubelet Created container mysql-container
Normal Started 14s (x2 over 75s) kubelet Started container mysql-container
Normal Pulled 14s kubelet Container image "192.168.56.104:5000/mysql:5.7" already present on machine
192.168.56.105로 접속
컨테이너 진입
[root@master1 test]# kubectl exec -it wordpress-pod -c mysql-container -- bash
bash-4.2#
[root@master1 test]# kubectl exec -it wordpress-pod -c wordpress-container -- bash
root@wordpress-pod:/var/www/html#
[root@master1 test]# kubectl delete svc loadbalancer-service-deployment-wordpress
service "loadbalancer-service-deployment-wordpress" deleted
[root@master1 test]# vi wordpress-pod-svc.yaml
externalIPs:
- 192.168.56.200 //으로 변경
-> 안됨
[root@master1 test]# vi wordpress-pod-svc.yaml
# externalIPs:
# - 192.168.56.200 // 주석처리
-> metallb가 처리하도록.
# kubectl apply -f /root/_Book_k8sInfra/ch3/3.3.4/metallb.yaml
[root@master1 test]# kubectl delete deploy,pod,svc --all
deployment.apps "nfs-pvc-deploy" deleted
pod "multipod" deleted
pod "nfs-pvc-deploy-5d47bcf6f-g6tnr" deleted
pod "nfs-pvc-deploy-5d47bcf6f-rxwkg" deleted
pod "nfs-pvc-deploy-5d47bcf6f-v2jvf" deleted
pod "nfs-pvc-deploy-5d47bcf6f-xj4nr" deleted
pod "nginx-pod" deleted
pod "nginx-pod2" deleted
pod "wordpress-pod" deleted
service "kubernetes" deleted
service "nfs-pvc-deploy-svc1" deleted
[root@master1 test]# kubectl describe configmaps -n metallb-system
Name: config
Namespace: metallb-system
Labels: <none>
Annotations: <none>
Data
====
config:
----
address-pools:
- name: nginx-ip-range
protocol: layer2
addresses:
- 192.168.56.104-192.168.56.106
Events: <none>
[root@master1 test]# kubectl apply -f wordpress-pod-svc.yaml
pod/wordpress-pod created
service/loadbalancer-service-deployment-wordpress created
[root@master1 test]# docker pull metallb/controller:v0.8.2
[root@master1 test]# docker pull metallb/speaker:v0.8.2
[root@master1 test]# docker tag metallb/controller:v0.8.2 192.168.56.104:5000/controller:v0.8.2
[root@master1 test]# docker tag metallb/speaker:v0.8.2 192.168.56.104:5000/speaker:v0.8.2
[root@master1 test]# docker push 192.168.56.104:5000/controller:v0.8.2
[root@master1 test]# docker push 192.168.56.104:5000/speaker:v0.8.2
[root@master1 test]# vi /root/_Book_k8sInfra/ch3/3.3.4/metallb.yaml
image: 192.168.56.104:5000/speaker:v0.8.2
image: 192.168.56.104:5000/controller:v0.8.2
[root@master1 test]# kubectl apply -f /root/_Book_k8sInfra/ch3/3.3.4/metallb.yaml
[root@master1 test]# vi metallb-l2config.yaml
addresses:
- 192.168.56.104-192.168.56.106
[root@master1 test]# kubectl apply -f metallb-l2config.yaml
[root@master1 test]# kubectl describe configmaps -n metallb-system
Name: config
Namespace: metallb-system
Labels: <none>
Annotations: <none>
Data
====
config:
----
address-pools:
- name: nginx-ip-range
protocol: layer2
addresses:
- 192.168.56.104-192.168.56.106
Events: <none>
[root@master1 test]# kubectl delete svc loadbalancer-service-deployment-wordpress
[root@master1 test]# kubectl apply -f wordpress-pod-svc.yaml
[root@master1 test]# kubectl delete -f metallb-l2config.yaml
[root@master1 test]# kubectl delete svc loadbalancer-service-deployment-wordpress
service "loadbalancer-service-deployment-wordpress" deleted
[root@master1 test]# kubectl apply -f metallb-l2config.yaml
configmap/config created
[root@master1 test]# kubectl apply -f wordpress-pod-svc.yaml
pod/wordpress-pod unchanged
service/loadbalancer-service-deployment-wordpress created
[root@master1 test]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 43m
loadbalancer-service-deployment-wordpress LoadBalancer 10.101.251.212 192.168.56.104 80:30024/TCP 22s
# vi metallb-test.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx-pod
spec:
containers:
- name: nginx-pod-container
image: 192.168.56.104:5000/nginx:latest
---
apiVersion: v1
kind: Service
metadata:
name: loadbalancer-service-pod
spec:
type: LoadBalancer
# externalIPs:
# -
selector:
app: nginx-pod
ports:
- protocol: TCP
port: 80
targetPort: 80
[root@master1 test]# kubectl apply -f metallb-test.yaml
pod/nginx-pod created
service/loadbalancer-service-pod created
[root@master1 test]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 48m
loadbalancer-service-deployment-wordpress LoadBalancer 10.101.251.212 192.168.56.104 80:30024/TCP 5m45s
loadbalancer-service-pod LoadBalancer 10.100.202.208 192.168.56.105 80:32161/TCP 16s
[root@master1 ~]# mkdir configmap && cd $_
# 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
[root@master1 configmap]# kubectl apply -f configmap-dev.yaml
configmap/config-dev created
[root@master1 configmap]# kubectl describe configmaps config-dev
Name: config-dev
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
DB_PASS:
----
mypass
DB_URL:
----
localhost
DB_USER:
----
myuser
DEBUG_INFO:
----
debug
Events: <none>