0719-Kubernetes

hyejin·2022년 7월 19일
0

ingress

  • l7 스위치(alb)과 유사

  • 백엔드 구성-> pod에 접근

  • 서비스 : 외부사용자가 pod에 접근할 수 있도록

  • nginx에서 만들어놓은 ingress 모듈 -> yaml파일로 실행

  • 경로기반으로 끝의 url로 경로 달라짐

  • docker volume과 비슷

  • pv를 먼저 구성

  • pvc를 통해 pod와 pv를 연결(pv 쉽게 변경 가능)

volume

- 환경설정

# 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

- nfs-pv.yaml

# 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

- nfs-pvc.yaml

# 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

- pv와 pvc 연결 확인

[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

- nfs-pvc-deploy.yaml

# 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>

- 192.168.1.191:30739 로 접속

vm 환경설정 변경

  • 파일 > 환경설정 > 네트워크 > NateNetwork 더블클릭 > 10.0.2.0/24 확인
  • 파일 > 호스트 네트워크 관리자 > 192.168.56.1/24 확인
  • master1 설정 > 네트워크 > 어댑터1:NAT네트워크, 어댑터2:호스트 전용 어댑터

mobaxterm으로 접속

  • 각 IP 추가
--- All Node ---
# cat <<EOF >> /etc/hosts
192.168.56.104 master1
192.168.56.105 worker1
192.168.56.106 worker2
EOF
# kubeadm reset

--- Master ---

# 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

worker1 / worker2에 붙여넣기

kubeadm join 192.168.56.104:6443 --token p89f25.gy1vtxodt4cg4ep3 \
    --discovery-token-ca-cert-hash sha256:49d0531aa70f26e4c3b2b400e4692c3575daf6f5fcb5e3536d794d44fb4f2bff
  • 확인1 (get node)
[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
  • 확인2 (-all-namespaces)
[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

daemon.json 변경

# 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

스냅샷 찍기

  • master1 / worker1 / worker2

pod 생성

# 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>
  • expose
# 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
  • nfs-pv.yaml 변경
[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
  • nfs-pvc.yaml 은 변경할 게 없으므로 apply 바로
[root@master1 nfs-pv-pvc-pod]# kubectl apply -f nfs-pvc.yaml
persistentvolumeclaim/nfs-pvc created
  • nfs-pvc-deploy.yaml 변경 (image 부분)
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

-> 로드밸런서 비슷하게 되고 있는것

multi-container

- centos7 이미지 다운

[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
  • 컨테이너 진입(exec -it)
[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라는 것
  • 컨테이너 진입(exec -it)
[root@master1 test]# kubectl exec -it multipod -c centos-container -- bash
[root@multipod /]#
  • centos 확인
    yum 명령어 o

wordpress 설치

  • pod안에 dbserver와 webserver같이 둠
  • mysql:5.7 / wordpress 이미지 다운
[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
  • wordpress-pod-svc.yaml
# 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#

metallb (범위 내에서 ip할당받음)

[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가 처리하도록.

  • apply
# 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
  • metallb-l2config.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>
  • 삭제하고 다시 apply
[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
  • 192.168.56.104로 접속

범위 내에서 로드밸런서 이용

metallb-test.yaml 작성

# 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
  • 192.168.56.105로 접속 (새로 할당받은)

configMap

  • 키와 값을 쌍으로
  • 기밀이 아닌 데이터 저장
  • 파드는 볼륨에서 환경 변수, 커맨드-라인 인수 또는 구성 파일로 컨피그맵을 사용 가능
  • 컨테이너 이미지에서 환경별 구성을 분리하여, 애플리케이션을 쉽게 이식
[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>

0개의 댓글

관련 채용 정보