Home [kubernetes-실습] 좀더 복잡한 deployment 배포해보기
Post
Cancel

[kubernetes-실습] 좀더 복잡한 deployment 배포해보기

좀더 복잡한 deployment

  • microservice 관련 demo 를 이용하여 배포해본다.
1
ps0107@k8smaster1:~$ wget https://raw.githubusercontent.com/microservices-demo/microservices-demo/master/deploy/kubernetes/complete-demo.yaml -O complete-demo.yaml    

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: carts-db
  labels:
    name: carts-db
  namespace: sock-shop
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: carts-db
    spec:
      containers:
      - name: carts-db
        image: mongo
        ports:
        - name: mongo
          containerPort: 27017
        securityContext:
          capabilities:
            drop:
              - all
            add:
              - CHOWN
              - SETGID
              - SETUID
          readOnlyRootFilesystem: true
        volumeMounts:
        - mountPath: /tmp
          name: tmp-volume
      volumes:
        - name: tmp-volume
          emptyDir:
            medium: Memory
      nodeSelector:
        beta.kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
  name: carts-db
  labels:
    name: carts-db
  namespace: sock-shop
spec:
  ports:
    # the port that this service should serve on
  - port: 27017
    targetPort: 27017
  selector:
    name: carts-db
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: carts
  labels:
    name: carts
  namespace: sock-shop
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: carts
    spec:
      containers:
      - name: carts
        image: weaveworksdemos/carts:0.4.8
        ports:
         - containerPort: 80
        env:
         - name: ZIPKIN
           value: zipkin.jaeger.svc.cluster.local
         - name: JAVA_OPTS
           value: -Xms64m -Xmx128m -XX:PermSize=32m -XX:MaxPermSize=64m -XX:+UseG1GC -Djava.security.egd=file:/dev/urandom
        securityContext:
          runAsNonRoot: true
          runAsUser: 10001
          capabilities:
            drop:
              - all
            add:
              - NET_BIND_SERVICE
          readOnlyRootFilesystem: true
        volumeMounts:
        - mountPath: /tmp
          name: tmp-volume
      volumes:
        - name: tmp-volume
          emptyDir:
            medium: Memory
      nodeSelector:
        beta.kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
  name: carts
  labels:
    name: carts
  namespace: sock-shop
spec:
  ports:
    # the port that this service should serve on
  - port: 80
    targetPort: 80
  selector:
    name: carts
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: catalogue-db
  labels:
    name: catalogue-db
  namespace: sock-shop
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: catalogue-db
    spec:
      containers:
      - name: catalogue-db
        image: weaveworksdemos/catalogue-db:0.3.0
        env:
          - name: MYSQL_ROOT_PASSWORD
            value: fake_password
          - name: MYSQL_DATABASE
            value: socksdb
        ports:
        - name: mysql
          containerPort: 3306
      nodeSelector:
        beta.kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
  name: catalogue-db
  labels:
    name: catalogue-db
  namespace: sock-shop
spec:
  ports:
    # the port that this service should serve on
  - port: 3306
    targetPort: 3306
  selector:
    name: catalogue-db
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: catalogue
  labels:
    name: catalogue
  namespace: sock-shop
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: catalogue
    spec:
      containers:
      - name: catalogue
        image: weaveworksdemos/catalogue:0.3.5
        ports:
        - containerPort: 80
        securityContext:
          runAsNonRoot: true
          runAsUser: 10001
          capabilities:
            drop:
              - all
            add:
              - NET_BIND_SERVICE
          readOnlyRootFilesystem: true
      nodeSelector:
        beta.kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
  name: catalogue
  labels:
    name: catalogue
  namespace: sock-shop
spec:
  ports:
    # the port that this service should serve on
  - port: 80
    targetPort: 80
  selector:
    name: catalogue
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: front-end
  namespace: sock-shop
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: front-end
    spec:
      containers:
      - name: front-end
        image: weaveworksdemos/front-end:0.3.12
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 8079
        securityContext:
          runAsNonRoot: true
          runAsUser: 10001
          capabilities:
            drop:
              - all
          readOnlyRootFilesystem: true
      nodeSelector:
        beta.kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
  name: front-end
  labels:
    name: front-end
  namespace: sock-shop
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 8079
    nodePort: 30001
  selector:
    name: front-end
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: orders-db
  labels:
    name: orders-db
  namespace: sock-shop
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: orders-db
    spec:
      containers:
      - name: orders-db
        image: mongo
        ports:
        - name: mongo
          containerPort: 27017
        securityContext:
          capabilities:
            drop:
              - all
            add:
              - CHOWN
              - SETGID
              - SETUID
          readOnlyRootFilesystem: true
        volumeMounts:
        - mountPath: /tmp
          name: tmp-volume
      volumes:
        - name: tmp-volume
          emptyDir:
            medium: Memory
      nodeSelector:
        beta.kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
  name: orders-db
  labels:
    name: orders-db
  namespace: sock-shop
spec:
  ports:
    # the port that this service should serve on
  - port: 27017
    targetPort: 27017
  selector:
    name: orders-db
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: orders
  labels:
    name: orders
  namespace: sock-shop
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: orders
    spec:
      containers:
      - name: orders
        image: weaveworksdemos/orders:0.4.7
        env:
         - name: ZIPKIN
           value: zipkin.jaeger.svc.cluster.local
         - name: JAVA_OPTS
           value: -Xms64m -Xmx128m -XX:PermSize=32m -XX:MaxPermSize=64m -XX:+UseG1GC -Djava.security.egd=file:/dev/urandom
        ports:
        - containerPort: 80
        securityContext:
          runAsNonRoot: true
          runAsUser: 10001
          capabilities:
            drop:
              - all
            add:
              - NET_BIND_SERVICE
          readOnlyRootFilesystem: true
        volumeMounts:
        - mountPath: /tmp
          name: tmp-volume
      volumes:
        - name: tmp-volume
          emptyDir:
            medium: Memory
      nodeSelector:
        beta.kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
  name: orders
  labels:
    name: orders
  namespace: sock-shop
spec:
  ports:
    # the port that this service should serve on
  - port: 80
    targetPort: 80
  selector:
    name: orders
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: payment
  labels:
    name: payment
  namespace: sock-shop
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: payment
    spec:
      containers:
      - name: payment
        image: weaveworksdemos/payment:0.4.3
        ports:
        - containerPort: 80
        securityContext:
          runAsNonRoot: true
          runAsUser: 10001
          capabilities:
            drop:
              - all
            add:
              - NET_BIND_SERVICE
          readOnlyRootFilesystem: true
      nodeSelector:
        beta.kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
  name: payment
  labels:
    name: payment
  namespace: sock-shop
spec:
  ports:
    # the port that this service should serve on
  - port: 80
    targetPort: 80
  selector:
    name: payment
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: queue-master
  labels:
    name: queue-master
  namespace: sock-shop
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: queue-master
    spec:
      containers:
      - name: queue-master
        image: weaveworksdemos/queue-master:0.3.1
        ports:
        - containerPort: 80
      nodeSelector:
        beta.kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
  name: queue-master
  labels:
    name: queue-master
  annotations:
    prometheus.io/path: "/prometheus"
  namespace: sock-shop
spec:
  ports:
    # the port that this service should serve on
  - port: 80
    targetPort: 80
  selector:
    name: queue-master
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: rabbitmq
  labels:
    name: rabbitmq
  namespace: sock-shop
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: rabbitmq
    spec:
      containers:
      - name: rabbitmq
        image: rabbitmq:3.6.8
        ports:
        - containerPort: 5672
        securityContext:
          capabilities:
            drop:
              - all
            add:
              - CHOWN
              - SETGID
              - SETUID
              - DAC_OVERRIDE
          readOnlyRootFilesystem: true
      nodeSelector:
        beta.kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
  labels:
    name: rabbitmq
  namespace: sock-shop
spec:
  ports:
    # the port that this service should serve on
  - port: 5672
    targetPort: 5672
  selector:
    name: rabbitmq
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: shipping
  labels:
    name: shipping
  namespace: sock-shop
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: shipping
    spec:
      containers:
      - name: shipping
        image: weaveworksdemos/shipping:0.4.8
        env:
         - name: ZIPKIN
           value: zipkin.jaeger.svc.cluster.local
         - name: JAVA_OPTS
           value: -Xms64m -Xmx128m -XX:PermSize=32m -XX:MaxPermSize=64m -XX:+UseG1GC -Djava.security.egd=file:/dev/urandom
        ports:
        - containerPort: 80
        securityContext:
          runAsNonRoot: true
          runAsUser: 10001
          capabilities:
            drop:
              - all
            add:
              - NET_BIND_SERVICE
          readOnlyRootFilesystem: true
        volumeMounts:
        - mountPath: /tmp
          name: tmp-volume
      volumes:
        - name: tmp-volume
          emptyDir:
            medium: Memory
      nodeSelector:
        beta.kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
  name: shipping
  labels:
    name: shipping
  namespace: sock-shop
spec:
  ports:
    # the port that this service should serve on
  - port: 80
    targetPort: 80
  selector:
    name: shipping
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: user-db
  labels:
    name: user-db
  namespace: sock-shop
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: user-db
    spec:
      containers:
      - name: user-db
        image: weaveworksdemos/user-db:0.4.0
        ports:
        - name: mongo
          containerPort: 27017
        securityContext:
          capabilities:
            drop:
              - all
            add:
              - CHOWN
              - SETGID
              - SETUID
          readOnlyRootFilesystem: true
        volumeMounts:
        - mountPath: /tmp
          name: tmp-volume
      volumes:
        - name: tmp-volume
          emptyDir:
            medium: Memory
      nodeSelector:
        beta.kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
  name: user-db
  labels:
    name: user-db
  namespace: sock-shop
spec:
  ports:
    # the port that this service should serve on
  - port: 27017
    targetPort: 27017
  selector:
    name: user-db
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: user
  labels:
    name: user
  namespace: sock-shop
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: user
    spec:
      containers:
      - name: user
        image: weaveworksdemos/user:0.4.7
        ports:
        - containerPort: 80
        env:
        - name: MONGO_HOST
          value: user-db:27017
        securityContext:
          runAsNonRoot: true
          runAsUser: 10001
          capabilities:
            drop:
              - all
            add:
              - NET_BIND_SERVICE
          readOnlyRootFilesystem: true
      nodeSelector:
        beta.kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
  name: user
  labels:
    name: user
  namespace: sock-shop
spec:
  ports:
    # the port that this service should serve on
  - port: 80
    targetPort: 80
  selector:
    name: user
    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# 먼저 해당 파일에서 namespace를 조회하여 생성해 준다.
ps0107@k8smaster1:~$ grep namespace complete-demo.yaml                                                                                      
namespace: sock-shop 
.....

# namespace 생성 (sock-shop)
ps0107@k8smaster1:~$ kubectl create namespace sock-shop
namespace/sock-shop created

# 생성된 namespace 확인
ps0107@k8smaster1:~$ kubectl get namespaces 
NAME              STATUS   AGE
default           Active   41h
kube-node-lease   Active   41h
kube-public       Active   41h
kube-system       Active   41h
sock-shop         Active   4s

# 어떤 이미지를 사용하는지 조회해본다.
ps0107@k8smaster1:~$ grep image complete-demo.yaml                                                                                                
image: mongo
image: weaveworksdemos/carts:0.4.8
image: weaveworksdemos/catalogue-db:0.3.0
image: weaveworksdemos/catalogue:0.3.5
image: weaveworksdemos/front-end:0.3.12 
image: mongo
image: weaveworksdemos/orders:0.4.7
image: weaveworksdemos/payment:0.4.3
image: weaveworksdemos/queue-master:0.3.1
image: rabbitmq:3.6.8
image: weaveworksdemos/shipping:0.4.8
image: weaveworksdemos/user-db:0.4.0
image: weaveworksdemos/user:0.4.7                                                                                                 

# yaml파일을 가지고 오브젝트들을 생성한다.
ps0107@k8smaster1:~$ kubectl apply -n sock-shop -f complete-demo.yaml 
deployment.extensions/carts-db created
service/carts-db created
deployment.extensions/carts created
service/carts created
deployment.extensions/catalogue-db created
service/catalogue-db created
deployment.extensions/catalogue created
service/catalogue created
deployment.extensions/front-end created
service/front-end created
deployment.extensions/orders-db created
service/orders-db created
deployment.extensions/orders created
service/orders created
deployment.extensions/payment created
service/payment created
deployment.extensions/queue-master created
service/queue-master created
deployment.extensions/rabbitmq created
service/rabbitmq created
deployment.extensions/shipping created
service/shipping created
deployment.extensions/user-db created
service/user-db created
deployment.extensions/user created
service/user created

# default namespace이기 때문에 원하는 pod 조회 안됨.
ps0107@k8smaster1:~$ kubectl get pods
No resources found.

# namespace 지정하여 pod 조회  (현재 이미지 다운로드로 creating 인 pod 들도 보임)
ps0107@k8smaster1:~$ kubectl -n sock-shop get pods
NAME                            READY   STATUS              RESTARTS   AGE
carts-56c6fb966b-d26pm          0/1     ContainerCreating   0          26s
carts-db-5678cc578f-rkjw2       1/1     Running             0          27s
catalogue-644549d46f-6dm9l      0/1     ContainerCreating   0          26s
catalogue-db-6ddc796b66-fz4rb   0/1     ContainerCreating   0          26s
front-end-5594987df6-7z8bq      0/1     ContainerCreating   0          26s
orders-749cdc8c9-28ck4          0/1     ContainerCreating   0          26s
orders-db-5cfc68c4cf-m27dn      0/1     ContainerCreating   0          26s
payment-54f55b96b9-gnr9j        0/1     ContainerCreating   0          26s
queue-master-6fff667867-7qdvb   1/1     Running             0          26s
rabbitmq-bdfd84d55-47jnq        0/1     ContainerCreating   0          26s
shipping-78794fdb4f-btdf6       0/1     ContainerCreating   0          26s
user-77cff48476-6xs4q           1/1     Running             0          25s
user-db-99685d75b-vn4nb         0/1     ContainerCreating   0          25s

# 전체 pod들이 정상적으로 running 중임
ps0107@k8smaster1:~$ kubectl -n sock-shop get pods
NAME                            READY   STATUS    RESTARTS   AGE
carts-56c6fb966b-d26pm          1/1     Running   0          128m
carts-db-5678cc578f-rkjw2       1/1     Running   0          128m
catalogue-644549d46f-6dm9l      1/1     Running   0          128m
catalogue-db-6ddc796b66-fz4rb   1/1     Running   0          128m
front-end-5594987df6-7z8bq      1/1     Running   0          128m
orders-749cdc8c9-28ck4          1/1     Running   0          128m
orders-db-5cfc68c4cf-m27dn      1/1     Running   0          128m
payment-54f55b96b9-gnr9j        1/1     Running   0          128m
queue-master-6fff667867-7qdvb   1/1     Running   0          128m
rabbitmq-bdfd84d55-47jnq        1/1     Running   0          128m
shipping-78794fdb4f-btdf6       1/1     Running   0          128m
user-77cff48476-6xs4q           1/1     Running   0          128m
user-db-99685d75b-vn4nb         1/1     Running   0          128m

# service 오브젝트 정보도 확인, nodeport 도 열려 있는것 확인
ps0107@k8smaster1:~$ kubectl get svc -n sock-shop -o wide                                                                                 
NAME           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE    SELECTOR
carts          ClusterIP   10.102.194.127   <none>        80/TCP         128m   name=carts
carts-db       ClusterIP   10.97.167.191    <none>        27017/TCP      128m   name=carts-db
catalogue      ClusterIP   10.99.201.219    <none>        80/TCP         128m   name=catalogue
catalogue-db   ClusterIP   10.109.211.97    <none>        3306/TCP       128m   name=catalogue-db
front-end      NodePort    10.103.52.241    <none>        80:30001/TCP   128m   name=front-end
orders         ClusterIP   10.96.109.73     <none>        80/TCP         128m   name=orders
orders-db      ClusterIP   10.98.40.151     <none>        27017/TCP      128m   name=orders-db
payment        ClusterIP   10.111.222.131   <none>        80/TCP         128m   name=payment
queue-master   ClusterIP   10.97.112.129    <none>        80/TCP         128m   name=queue-master
rabbitmq       ClusterIP   10.99.108.228    <none>        5672/TCP       128m   name=rabbitmq
shipping       ClusterIP   10.96.188.9      <none>        80/TCP         128m   name=shipping
user           ClusterIP   10.105.20.37     <none>        80/TCP         128m   name=user
user-db        ClusterIP   10.109.61.22     <none>        27017/TCP      128m   name=user-db

# docker 컨테이너들도 확인해 본다
ps0107@k8smaster1:~$ sudo docker ps                                                                                                       
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS               NAMES
8b7e15d810f6        weaveworksdemos/user           "/user -port=80"         2 hours ago         Up 2 hours                              k8s_user_user-77cff48476-6xs4q_sock-shop_68776733-5d43-4a4d-9806-1e4ece7e7c0c_0
37c63d58a542        weaveworksdemos/queue-master   "/usr/local/bin/java…"   2 hours ago         Up 2 hours                              k8s_queue-master_queue-master-6fff667867-7qdvb_sock-shop_02523db0-37ad-4a5b-a742-111723c28c32_0
a591ac7e683f        k8s.gcr.io/pause:3.1           "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_user-77cff48476-6xs4q_sock-shop_68776733-5d43-4a4d-9806-1e4ece7e7c0c_0
64d2cf93e3bc        k8s.gcr.io/pause:3.1           "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_queue-master-6fff667867-7qdvb_sock-shop_02523db0-37ad-4a5b-a742-111723c28c32_0
5b255b61a93e        eb516548c180                   "/coredns -conf /etc…"   44 hours ago        Up 44 hours                             k8s_coredns_coredns-5c98db65d4-fvz2k_kube-system_a4208d56-10d2-4958-b345-01603d5aa57b_0
df13b1015f61        k8s.gcr.io/pause:3.1           "/pause"                 44 hours ago        Up 44 hours                             k8s_POD_coredns-5c98db65d4-fvz2k_kube-system_a4208d56-10d2-4958-b345-01603d5aa57b_0
....


# deployment 도 조회 해본다.
ps0107@k8smaster1:~$ kubectl get deployment --all-namespaces                                                                              
NAMESPACE     NAME           READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   calico-typha   0/0     0            0           43h
kube-system   coredns        2/2     2            2           43h
sock-shop     carts          1/1     1            1           129m
sock-shop     carts-db       1/1     1            1           129m
sock-shop     catalogue      1/1     1            1           129m
sock-shop     catalogue-db   1/1     1            1           129m
sock-shop     front-end      1/1     1            1           129m
sock-shop     orders         1/1     1            1           129m
sock-shop     orders-db      1/1     1            1           129m
sock-shop     payment        1/1     1            1           129m
sock-shop     queue-master   1/1     1            1           129m
sock-shop     rabbitmq       1/1     1            1           129m
sock-shop     shipping       1/1     1            1           129m
sock-shop     user           1/1     1            1           129m
sock-shop     user-db        1/1     1            1           129m
This post is licensed under CC BY 4.0 by the author.

[kubernetes-실습] namespace 를 위한 resource limit 설정

[kubernetes-실습] 기본 Node 의 maintenance (유지보수)