kubernetes

simple application 배포

목씨 2020. 2. 27. 14:06

1. nginx deployment

nginx 배포

$ kubectl create deployment nginx --image=nginx

 

$ kubectl get pod

NAME READY STATUS RESTARTS AGE

nginx-554b9c67f9-5cqwf  1/1 Running 0 7s

 

$ kubectl describe deployment nginx

Name:                   nginx

Namespace:              default

CreationTimestamp:      Thu, 27 Feb 2020 12:15:25 +0000

Labels:                 app=nginx

Annotations:            deployment.kubernetes.io/revision: 1

Selector:               app=nginx

Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable

StrategyType:           RollingUpdate

MinReadySeconds:        0

RollingUpdateStrategy:  25% max unavailable, 25% max surge

Pod Template:

  Labels:  app=nginx

  Containers:

   nginx:

    Image:        nginx

    Port:         <none>

    Host Port:    <none>

    Environment:  <none>

    Mounts:       <none>

  Volumes:        <none>

Conditions:

  Type           Status  Reason

  ----           ------  ------

  Available      True    MinimumReplicasAvailable

  Progressing    True    NewReplicaSetAvailable

OldReplicaSets:  <none>

NewReplicaSet:   nginx-554b9c67f9 (1/1 replicas created)

Events:

  Type    Reason             Age   From                   Message

  ----    ------             ----  ----                   -------

  Normal  ScalingReplicaSet  58s   deployment-controller  Scaled up replica set nginx-554b9c67f9 to 1

 

deployment yaml형식으로 보기 및 파일로 만들기

$ kubectl get deployment nginx -o yaml

$ kubectl get deployment nginx -o yaml > nginx_first.yaml

 

nginx_first.yaml 파일로 deployment 재 배포

$ kubectl delete deployment nginx

deployment.extensions "nginx" deleted

 

$ kubectl create -f nginx_first.yaml 

deployment.extensions/nginx created

 

$ kubectl get deployment nginx -o yaml > nginx_second.yaml

$ kubectl get deployment nginx --export -o yaml > nginx_export.yaml

--export 옵션은 상세 명세를 제외하고 yaml을 출력한다. 곧 없어질 옵션이다.

 

 

dry-run 옵션kubernetes api에 전송하는 대신 YAML형식으로 stdout에 출력한다.

$ kubectl create deployment nginx --image=nginx --dry-run -o yaml

apiVersion: apps/v1

kind: Deployment

metadata:

  creationTimestamp: null

  labels:

    app: nginx

  name: nginx

spec:

  replicas: 1

  selector:

    matchLabels:

      app: nginx

  strategy: {}

  template:

    metadata:

      creationTimestamp: null

      labels:

        app: nginx

    spec:

      containers:

      - image: nginx

        name: nginx

        resources: {}

status: {}

 

2. Nginx 외부로 노출시키기

$ kubectl expose deployment nginx

error: couldn't find port via --port flag or introspection

See 'kubectl expose -h' for help and exmlple

 

nginx_first.yaml 파일 수정하여 아래와 같이 port 추가한다.

      containers:

      - image: nginx

         imagePullPolicy: Always

         name: nginx

         resources: {}

         terminationMessagePath: /dev/termination-log

         terminationMessagePolicy: File

         ports:

         - containerPort: 80

            protocol: TCP

 

$ kubectl replace -f nginx_first.yaml

$ kubectl expose deployment nginx

service/nginx exposed

 

$ kubectl get svc

NAME                          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE

nginx                         ClusterIP   10.98.111.207   <none>        80/TCP         44s

 

nginx endpoint 확인

$ kubectl get ep nginx

NAME    ENDPOINTS       AGE

nginx   192.168.1.81:80   9m59

 

Node Ip 확인

$ kubectl describe pod nginx-7bffc778db-9nr89 | grep Node:

Node:           kube-worker1/10.128.0.3

 

$ curl 10.128.0.3

 

3. Scale up & down

$ kubectl scale deployment nginx --replicas=3

deployment.extensions/nginx scaled

 

$ kubectl get ep nginx

NAME    ENDPOINTS                                        AGE

nginx   192.168.0.33:80,192.168.1.81:80,192.168.2.6:80   21m

 

$ kubectl get po -o wide

NAME                          READY   STATUS    RESTARTS   AGE.       IP                NODE       NOMINATED NODE   READINESS GATES

nginx-7bffc778db-5mslk           1/1     Running   0         35s   192.168.2.6      kube-secondmaster   <none>           <none>

nginx-7bffc778db-77v9b          1/1     Running   0          35s   192.168.0.33   kube-master              <none>           <none>

nginx-7bffc778db-9nr89          1/1     Running   0          22m  192.168.1.81    kube-worker1             <none>           <none>

 

pod를 삭제해도 새로운 pod가 생성된다.

$ kubectl delete pod nginx-7bffc778db-5mslk

pod "nginx-7bffc778db-5mslk" deleted

 

$ kubectl get po -o wide

NAME                          READY   STATUS    RESTARTS   AGE.       IP                NODE       NOMINATED NODE   READINESS GATES

nginx-7bffc778db-gxxkz         1/1     Running   0         35s   192.168.2.7      kube-secondmaster   <none>           <none>

nginx-7bffc778db-77v9b          1/1     Running   0          35s   192.168.0.33   kube-master              <none>           <none>

nginx-7bffc778db-9nr89          1/1     Running   0          22m  192.168.1.81    kube-worker1             <none>           <none>

 

$ kubectl get ep nginx

NAME    ENDPOINTS                                        AGE

nginx   192.168.0.33:80,192.168.1.81:80,192.168.2.7:80   27m

 

$ kubectl scale deployment nginx --replicas=0

 

4. Pod 접근 및 LB SVC 생성

$ kubectl exec nginx-7bffc778db-77v9b -- printenv 

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

HOSTNAME=nginx-7bffc778db-77v9b

SAUCY_CRICKET_MARIADB_SERVICE_PORT=3306

SAUCY_CRICKET_MARIADB_SERVICE_PORT_MYSQL=3306

SAUCY_CRICKET_MARIADB_PORT_3306_TCP=tcp://10.98.250.175:3306

SAUCY_CRICKET_MARIADB_PORT_3306_TCP_PROTO=tcp

SAUCY_CRICKET_MARIADB_PORT_3306_TCP_PORT=3306

NGINX_SERVICE_HOST=10.98.111.207

SAUCY_CRICKET_MARIADB_SLAVE_SERVICE_PORT=3306

SAUCY_CRICKET_MARIADB_SERVICE_HOST=10.98.250.175

SAUCY_CRICKET_MARIADB_SLAVE_PORT=tcp://10.109.46.23:3306

KUBERNETES_PORT=tcp://10.96.0.1:443

KUBERNETES_PORT_443_TCP_PORT=443

SAUCY_CRICKET_MARIADB_PORT=tcp://10.98.250.175:3306

NGINX_PORT=tcp://10.98.111.207:80

NGINX_PORT_80_TCP_PORT=80

NGINX_PORT_80_TCP_ADDR=10.98.111.207

SAUCY_CRICKET_MARIADB_SLAVE_SERVICE_HOST=10.109.46.23

SAUCY_CRICKET_MARIADB_SLAVE_PORT_3306_TCP_PROTO=tcp

SAUCY_CRICKET_MARIADB_SLAVE_PORT_3306_TCP_PORT=3306

KUBERNETES_SERVICE_PORT=443

KUBERNETES_PORT_443_TCP_PROTO=tcp

KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1

NGINX_PORT_80_TCP=tcp://10.98.111.207:80

SAUCY_CRICKET_MARIADB_SLAVE_PORT_3306_TCP_ADDR=10.109.46.23

KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443

NGINX_PORT_80_TCP_PROTO=tcp

SAUCY_CRICKET_MARIADB_SLAVE_SERVICE_PORT_MYSQL=3306

KUBERNETES_SERVICE_HOST=10.96.0.1

SAUCY_CRICKET_MARIADB_PORT_3306_TCP_ADDR=10.98.250.175

NGINX_SERVICE_PORT=80

SAUCY_CRICKET_MARIADB_SLAVE_PORT_3306_TCP=tcp://10.109.46.23:3306

KUBERNETES_SERVICE_PORT_HTTPS=443

NGINX_VERSION=1.17.8

NJS_VERSION=0.3.8

PKG_RELEASE=1~buster

HOME=/root

 

 

loadbalancer service 생성

$ kubectl delete svc nginx

service "nginx" deleted

 

$ kubectl expose deployment nginx --type=LoadBalancer

 

 

$ kubectl delete deployment nginx

$ kubectl delete ep nginx

$ kubectl delete svc nginx