https://github.com/kubernetes/kubernetes/blob/master/docs/user-guide/connecting-applications.md
사전 Docker Registry 를 만든 다음에
http://www.ahnseungkyu.com/206
1. tomcat RC 생성
$ cd Documents/registry/tomcat
$ vi tomcat8-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: tomcat8
labels:
name: tomcat8
spec:
replicas: 1
selector:
name: tomcat8
template:
metadata:
labels:
name: tomcat8
spec:
containers:
- name: tomcat8
image: privateregistry.com:5000/tomcat-jre8:8.0.30
ports:
- containerPort: 8080
$ kubectl -s 192.168.230.211:8080 create -f tomcat8-rc.yaml
$ kubectl -s 192.168.230.211:8080 get rc tomcat8 # 조회
2. tomcat service 생성
$ vi tomcat8-svc.yaml
apiVersion: v1
kind: Service
metadata:
labels:
name: tomcat8
name: tomcat8
spec:
ports:
# the port that this service should serve on
- port: 8088 # Service 자신의 포트
targetPort: 8080 # pod 내 컨테이너 포트
nodePort: 30001
# label keys and values that must match in order to receive traffic for this service
selector: # 뒷단의 pod 와 연계
name: tomcat8
type: NodePort
$ kubectl create -f tomcat8-svc.yaml
[ 서비스 확인 ]
http://192.168.75.212:30001/
http://192.168.75.213:30001/
$ kubectl describe pod tomcat8-5pchl
$ kubectl get rc
$ kubectl describe rc tomcat8
$ kubectl get service
$ kubectl describe service tomcat8
$ kubectl get endpoints
$ $ kubectl get event
[ label 로 조회하기 ]
$ kubectl get service -a -l name=tomcat8
$ kubectl get pods -l name=tomcat8 -o json | grep podIP
[ 전체 조회하기 ]
$ kubectl get --all-namespaces -a service
[ container 안으로 들어가기 ]
$ kubectl exec [ pod 명 ] -c [ Container 명 ] -i -t -- bash -il
$ kubectl exec tomcat8-5pchl -c tomcat8 -i -t -- bash -il
[ Built-in 서비스 확인 ]
$ kubectl cluster-info
[ 어떻게 접근하는지 ]
$ kubectl describe svc tomcat8
Name: tomcat8
Namespace: default
Labels: name=tomcat8
Selector: name=tomcat8
Type: NodePort
IP: 192.168.230.17 # Service ip
Port: <unnamed> 8088/TCP # Service port
NodePort: <unnamed> 30001/TCP
Endpoints: 172.16.84.4:8080 # Pod ip, port
Session Affinity: None
No events.
# node01 혹은 node02 에서 서비스 IP 포트로 접속 가능
$ curl -k http://192.168.230.17:8088
# node01 혹은 node02 에서 pod 에 직접 호출
$ kubectl get pods -o json | grep -i podip
$ curl -k http://172.16.84.4:8080
$ kubectl exec tomcat8-5pchl -- printenv | grep SERVICE
KUBERNETES_SERVICE_HOST=192.168.230.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
$ kubectl scale rc tomcat8 --replicas=0; kubectl scale rc tomcat8 --replicas=2
$ kubectl get pods -l name=tomcat8 -o wide
NAME READY STATUS RESTARTS AGE NODE
tomcat8-dqvcu 1/1 Running 0 35s 192.168.75.212
tomcat8-sppk6 1/1 Running 0 35s 192.168.75.212
$ kubectl exec tomcat8-dqvcu -- printenv | grep SERVICE
KUBERNETES_SERVICE_PORT=443
TOMCAT8_SERVICE_PORT=8088
KUBERNETES_SERVICE_HOST=192.168.230.1
KUBERNETES_SERVICE_PORT_HTTPS=443
TOMCAT8_SERVICE_HOST=192.168.230.17
3. DNS 확인
$ vi curlpod.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
name: curlpod
name: curlpod
spec:
containers:
- image: radial/busyboxplus:curl
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
name: curlcontainer
restartPolicy: Always
$ kubectl create -f curlpod.yaml
$ kubectl describe pod curlpod
[ DNS 확인 ]
$ kubectl exec curlpod -- nslookup tomcat8
$ kubectl exec curlpod -- curl http://tomcat8:8088
$ kubectl exec curlpod -c curlcontainer -it -- /bin/sh -il
4. 각 인스턴스 pod 에 접속
https://github.com/kubernetes/kubernetes/blob/master/docs/user-guide/accessing-the-cluster.md#accessing-services-running-on-the-cluster
$ kubectl get pods
http://192.168.75.211:8080/api/v1/proxy/namespaces/default/pods/tomcat8-dqvcu/
# docker id 조회
$ docker ps -l -q