simple application 배포
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