끝내주는 사이트 찾음
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 [서비스 이름] |
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}' |
'Docker' 카테고리의 다른 글
[Kubernetes] ingress-nginx 사용 실습 링크 (0) | 2020.11.25 |
---|---|
[Kubernetes] NodePort vs LoadBalancer vs Ingress 링크 (0) | 2020.11.25 |
[Kubernetes] Certified Kubernetes Administrator 자격증 준비 링크 (0) | 2020.11.17 |
[Kubernetes] 네트워크 설명 링크 (0) | 2020.11.16 |
[Docker] Ubuntu 에 Docker 설치하는 방법 (0) | 2020.11.12 |