끝내주는 사이트 찾음 

kubernetesbyexample.com/

 

Kubernetes By Example

This is a hands-on introduction to Kubernetes. Browse the examples: pods labels deployments services service discovery port forward health checks environment variables namespaces volumes persistent volumes secrets logging jobs stateful sets init containers

kubernetesbyexample.com

 

 

pod, service, deployment, PV 등을 직접 생성해보고, 수정해보고, 삭제해봄.

명령어들과 yaml 을 아래 주르륵 적어둠

 

 

kubernetes 버전 확인

kubectl version

 

 

 

어떤 필드가 있고 어떤 역할을 하는지 살펴보기

예를 들어 아래 명령어를 사용하면 pods 의 템플릿에서 사용하는 하위 필드로 무엇이 있는지,

각 필드의 데이터 타입이 뭔지 보여줌

kubectl explain pods
kubectl explain pods.metadata
kubectl explain pods.metadata.annotations
kubectl explain pods --recursive //파드 아래에 속한 모든 필드 설명 보기

 

 

 

오브젝트 및 컨트롤러 상황 보기

kubectl get deploy,rs,rc,pods,namespaces, statefulset, services
kubectl get pods --all-namespaces

 

 

 

템플릿 기본 형식

---
apiVersion: v1
kind: Pod
metadata: 
spec: 

apiVersion 을 위해 kubectl api-versions 명령으로

현재 클러스터에서 사용 가능한 API 버전을 확인 가능

 

 

 

 

yaml 파일 실행 및 업데이트

kubectl apply -f my-yaml-file.yaml

이후 kubectl get deploy,rs,rc,pods,namespaces 명령으로 STATUS 가 running 인지 확인

 

 

 

 

현재 실행중인 오브젝트 자세히 보기

kubectl describe pods [파드 이름]
kubectl describe pods my-pod
kubectl describe statefulsets [스테이트풀세트 이름]
kubectl describe services [서비스 이름]

비단 pods 외 deployments 등도 확인 가능

 

 

 

 

 

my-pod 라는 이름의 파드 안의 컨테이너에게 exec 를 사용하여 컨테이너 안에 접근 가능.

마치 docker container 접속시 docker exec -it my-container bash 명령어처럼.

만약 파드 안에 my-nginx라는 이름의 container 가 하나 실행중이라고 하자.

 

kubectl exec -it [pod 이름] sh

kubectl exec -it my-pod sh

 

만약 my-pod 라는 이름의 파드 안에

my-nginx 라는 이름의 컨테이너 하나와 your-nginx 라는 이름의 컨테이너 하나가 있다고 하자.

이 때는 -c 명령어를 통해 컨테이너 이름을 직접 지명해줌

 

kubectl exec -it my-pod sh -c my-nginx

kubectl exec -it my-pod sh -c your-nginx

 

 

파드 내 컨테이너의 로그를 보려면 아래 명령어를 사용

kubectl logs -f [pod 이름] -c [컨테이너 이름]

kubectl logs -f my-pod -c my-nginx

 

 

 

Deployment Yaml

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

결과 (bold 처리 된 부분)

 

 

 

Deployment 에서 컨테이너 이미지 정보 확인

kubectl get deploy [디플로이먼트이름] -o=jsonpath="{.spec.template.spec.containers[0] .image}{'\n'}"

$ kubectl get deploy nginx-deployment -o=jsonpath="{.spec.template.spec.containers[0] .image}{'\n'}"
nginx

 

 

 

Stateful Set Yaml

apiVersion: v1
kind: Service
metadata:
        name: statefulset-service
        labels:
                app: statefulset-service
spec:
        ports:
                - port: 80
                  name: web
        clusterIP: None
        selector:
                app: mystatefulset
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
        name: web
spec:
        selector:
                matchLabels:
                        app: mystatefulset
        serviceName: "statefulset-service"
        replicas: 3
        template:
                metadata:
                        labels:
                                app: mystatefulset
                spec:
                        terminationGracePeriodSeconds: 10
                        containers:
                                - name: mystatefulset
                                  image: nginx
                                  ports:
                                          - containerPort: 80
                                            name: web

결과

$ kubectl get statefulset,services,pods
NAME                   READY   AGE
statefulset.apps/web   3/3     11h

NAME                          TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes            ClusterIP   10.8.0.1     <none>        443/TCP   17h
service/statefulset-service   ClusterIP   None         <none>        80/TCP    11h

NAME        READY   STATUS    RESTARTS   AGE
pod/web-0   1/1     Running   0          11h
pod/web-1   1/1     Running   0          11h
pod/web-2   1/1     Running   0          11h

파드(web-0) 안의  들어가기

kubectl exec -it web-0 sh

//현재 web-0 내에 nginx container 하나만 구동되고 있기 때문에 위와 같이 해주어도 괜찮음
//만약 다른 container 가 돌고있다면 -c 옵션을 줘서 이름을 직접 넣어줘야 함

 

 

 

 

서비스 ip 보는 방법

kubectl get services

 

 

 

 

Service YAML (ClusterIP)

apiVersion: v1
kind: Service
metadata:
        name: my-service
spec:
        type: ClusterIP
        clusterIP: 10.0.10.10
        selector:
                app: MyApp
        ports:
                - protocol: TCP
                  port: 80
                  targetPort: 9376

 

Service YAML (NodePort)

apiVersion: v1
kind: Service
metadata:
        name: nodeport-service
spec:
        type: NodePort
        selector:
                app: MyApp
        ports:
                - protocol: TCP
                  port: 80
                  targetPort: 9376
                  nodePort: 30080

 

 

 

 

Service, Deployment 등 삭제하는 방법

kubectl delete services [서비스 이름]
kubectl delete deployment [디플로이먼트 이름]
....

 

 

 

pods IP 보는 법

kubectl get pods -o wide

혹은

kubectl get pods --selector=[라벨] -o jsonpath='{.items[*].status.podIP}'
$ kubectl get pods --selector=app=service_test_pod -o jsonpath='{.items[*].status.podIP}'

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts