1. nginx 파드를 만들고 해당 파드에 bash를 실행해 파드에 접속합니다.

#nginx 생성 

kubectl run nginx --image=nginx

 

#nginx bash 접속

kubect exec -it nignx -- bash

 

#ps command

apt -y update && apt -y install procps

 

2. nginx 디플로이먼트를 실행하고 파드의 개수를 10개 -> 0개 -> 1개 순으로 변경합니다.

파드의 개수를 변경하려면 오브젝트 타입을 파드가 아닌 디플로이먼트로 실행해야 한다.

 

#디플로이먼트 생성

kubectl create deployment httpd --image=httpd

 

create: 만들다

deployment: 디플로이먼트 오브젝트를

httpd: httpd라는 이름으로

--image=httpd: 이미지는 httpd로 지정

NAME           READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
httpd          1/1     1            1           22s   httpd        httpd          app=httpd

 

#조회

kubectl get pod -o wide

NAME                            READY   STATUS    RESTARTS       AGE   IP              NODE           NOMINATED NODE   READINESS GATES
httpd-975f8444c-q55zq           1/1     Running   0              27s   10.10.180.214   worker-node1   <none>           <none>

 

 

3. default01이라는 이름의 네임스페이스를 생성합니다. kube-ns 도구를 사용해 네임스페이스를 변경하면서 파드, 디플로이먼트 등의 리소를 생성합니다. 네임스페이스가 다른 경우 명령어가 어떻게 달라지는지 확인합니다.

 

# --replicas 파드 수량을 입력

kubectl scale deployment httpd --replicas 10

NAME                            READY   STATUS    RESTARTS       AGE     IP              NODE           NOMINATED NODE   READINESS GATES
httpd-975f8444c-4s49d           1/1     Running   0              2m50s   10.10.180.217   worker-node1   <none>           <none>
httpd-975f8444c-bl5tg           1/1     Running   0              2m50s   10.10.180.221   worker-node1   <none>           <none>
httpd-975f8444c-fqsbp           1/1     Running   0              2m50s   10.10.180.223   worker-node1   <none>           <none>
httpd-975f8444c-g4cxb           1/1     Running   0              2m50s   10.10.180.220   worker-node1   <none>           <none>
httpd-975f8444c-ntl8m           1/1     Running   0              2m50s   10.10.180.215   worker-node1   <none>           <none>
httpd-975f8444c-q55zq           1/1     Running   0              60m     10.10.180.214   worker-node1   <none>           <none>
httpd-975f8444c-rpnsf           1/1     Running   0              2m50s   10.10.180.222   worker-node1   <none>           <none>
httpd-975f8444c-w5lz6           1/1     Running   0              2m50s   10.10.180.218   worker-node1   <none>           <none>
httpd-975f8444c-wzjjs           1/1     Running   0              2m50s   10.10.180.219   worker-node1   <none>           <none>
httpd-975f8444c-xvtzx           1/1     Running   0              2m50s   10.10.180.216   worker-node1   <none>           <none>

kubectl scale deployment httpd --replicas 0

kubectl scale deployment httpd --replicas 1

1장 MySQL과 MariaDB 개요

목표: 쿠버네티스에 nignx를 위한 deployment, service를 배포

Deployment

kubectl create -f nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-server
  labels:
    app: server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: server
  template:
    metadata:
      name: nginx-server
      labels:
        app: server
    spec:
      containers:
        - name: server
          image: nginx:1.23.3
          ports:
            - containerPort: 80
 

Service

kubectl create -f nginx-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    app: server
spec:
  selector:
    app: server
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort

#type에 노드포트 설정하면 노드 아이피:포트로 외부에서 접근 가능함
#port = 외부에서 Service에 접근하는 포트
#targetPort = Service와 연결된 pod의  포트
 

kubectl get deploy,pod,svc,ep
NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-server   1/1     1            1           69m
NAME                                READY   STATUS    RESTARTS   AGE
pod/nginx-server-6c775c46d5-pkmxg   1/1     Running   0          69m
NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/kubernetes      ClusterIP   10.96.0.1       <none>        443/TCP   148m
service/nginx-service   ClusterIP   10.110.212.55   <none>        80/TCP    68m
NAME                      ENDPOINTS           AGE
endpoints/kubernetes      192.168.0.27:6443   148m
endpoints/nginx-service   10.10.180.194:80    68m
  • ClusterIP: 서비스를 클러스터-내부 IP에 노출시킨다. 이 값을 선택하면 클러스터 내에서만 서비스에 도달할 수 있다. 이것은 ServiceTypes의 기본 값이다.
  • NodePort: 고정 포트 (NodePort)로 각 노드의 IP에 서비스를 노출시킨다. NodePort 서비스가 라우팅되는 ClusterIP 서비스가 자동으로 생성된다. <NodeIP>:<NodePort>를 요청하여, 클러스터 외부에서 NodePort 서비스에 접속할 수 있다.
  • LoadBalancer: 클라우드 공급자의 로드 밸런서를 사용하여 서비스를 외부에 노출시킨다. 외부 로드 밸런서가 라우팅되는 NodePort와 ClusterIP 서비스가 자동으로 생성된다.
  • ExternalName: 값과 함께 CNAME 레코드를 리턴하여, 서비스를 externalName 필드의 콘텐츠 (예:foo.bar.example.com)에 매핑한다. 어떤 종류의 프록시도 설정되어 있지 않다.

kubectl get nodes -o wide
NAME           STATUS   ROLES           AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
master-node    Ready    control-plane   18h   v1.26.5   192.168.0.27   <none>        Ubuntu 22.04.3 LTS   5.15.0-86-generic   containerd://1.7.2
worker-node1   Ready    <none>          18h   v1.26.5   192.168.0.62   <none>        Ubuntu 22.04.3 LTS   5.15.0-86-generic   containerd://1.7.2

kubectl get svc
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.96.0.1       <none>        443/TCP        18h
nginx-service   NodePort    10.106.46.122   <none>        80:30662/TCP   29m
 

 

192.168.0.62의 공인 ip인 133.186.244.84의 NodePort 30662로 접근 가능하다.

 

http://133.186.244.84:30662

+ Recent posts