Post

Linux 쿠버네티스(1)

Linux 쿠버네티스(1)

쿠버네티스

쿠버네티스 소개

  1. 쿠버네티스
    • 2014 구글 안에서 사용하던 컨테이너 오케스트레이션 시스템을 오픈 소스 소프트웨어로 공개한 것이다.
  2. 쿠버네티스 특징
    1. 선언적
      • 컨테이너가 어떤 상태일지 정하면 지속해서 컨테이너 상태가 해당 설정에 부합하는지 확인한다. 만약 설정한 상태가 아니라면 그것에 맞게 맞춘다.
    2. 워크로드 분리
      • 쿠버네티스를 사용하면 분산 시스템을 제공한다. 분산된 프로세스가 점검과 복구처리를 각각 담당한다.
    3. 어디서나 실행가능
      • 개인 컴퓨터에 설치 가능하며, 퍼블릭 클라우드에서도 실행이 가능하고 설치없이 웹에서도 바로 사용이 가능하다.

쿠버네티스 설치

  1. 온라인상에서 사용하는 쿠버네티스
    • play with kubernetes
    • killercoda
  2. 개발자를 위한 간단한 쿠버네티스 설치
    • docker desktop
    • minikube
    • kind
  3. 클라우드 업체에서 제공하는 쿠버네티스 서비스
    • AWS - EKS
    • MS Azure -AKS
    • google GCP - GKE
  4. 쿠버네티스 클러스트를 직접 구성하는 도구
    • kubeadm CMD 이용한 쿠버네티스 클러스터 구성
    • kOps 이용한 쿠버네티스 클러스터 구축
    • kubespray 이요한 쿠버네티스 클러스터 구축 (가장 안정적)

쿠버네티스 컨테이너 실행

  • 외워야하는 명령어
    • 파드 실행
      • kubectl run myweb –image-nginx –port=80
      • kubectl create svc clusterip mydeploy –clusterip=’10.233.10.10’ –tcp=”80:80”
      • kubectl scale deploy web 관련자료
      • kubectl exec myewb -it – /bin/bash
      • kubectl run backend –image=busybox -l app=backend – sleep 1d
    • api 생성
      • kubectl applycreate deploy mydeploy –image –replicas=3
    • 포트포워딩
      • kubectl port-forward web 8080:80
    • 동작중이 아닌 파드를 dry-run=client 옵션을 써서 yaml파일로 저장
      • kubectl run myweb –image-nginx –port=80 –dry-run=client -o yaml > myweb.yml
    • 동작중인 파드를 yaml파일로 저장
      • kubectl get pods myweb -o yaml > myweb.yaml
  • cka 준비하면서 빨리빨리 yaml파일을 만들고 편집할 줄 알아야한다.

쿠버네티스 아키텍쳐

  1. 쿠버네티스 아키텍처
    • 쿠버네티스 구성 요소
      • Control Plane(master-node)
        • api-server
        • scheduler
        • control manager
        • etcd
      • Worker Node
        • kube-proxy
        • kubelet
        • container engine
  2. 네임스페이스(NameSpace)
  • NameSpace vs LABEL
    • Namespace: 쿠버네티스 클러스터 내에서 자원을 격리하는 용도
    • LABEL: 네임스페이스 안에서 자원을 구분하는 용도
  • NameSpace
    • namespace 설정

      kubectl create ns testns

    • namespace 목록 확인

      kubectl get ns

    • namespace 삭제

      kubectl delete ns testns

  • 클러스터의 NameSpace 바꾸기
    • 네임스페이스와 이름 확인

      kubectl config get-contexts

    • 변경

      kubectl config set-context NAME(or –current) –namespace=NAME

    • 디폴트 값으로 바꾸기

      kubectl config set-context NAME(or –current) –namespace=”default”(–namespace=”“로 해도 무관)

[참고] kubens, kubectx 스크립트 찾아보기
[참고] kubectl krew

  • kubectl krew intall ctx ns
  • kubectl ns
  • kubectl ctx
  1. 참고사항: YAML 파일
  • 앤서블 참고
  1. API 버전
  • 과정
    1. namespace 변경(실무에서 필요)
    2. context 변경

kubectl explain pod > pod에 관한 옵션 보여줌 kubectl explain pod.xxx.xxx pod > 옵션 중 하나의 다른 옵션 보여줌

  • kube-api-server : 교통정리해주는 서버
    • client 요청 > api server > etcd > scheduler daemon > Node > Kubelet: 노드관리 > container engine
  • kube-control-manage : node 개수를 유지하기 위해 관찰하는 서버

  • etcd : 모든 정보(상태나 파드 정보 등)의 저장소

  • 스케쥴링 데몬 : 스케쥴링 해주는 데몬

  • Kubelet : 노드 관리

  • 노드안에는 여러 엔진(컨테이너)이 있고 그 위에 파드가 있음

CNI: container network interface

네트워크 플러그인은 CNI 사양을 구현하는 소프트웨어 구성 요소이다. 포트에 IP 주소를 할당하고 클러스터 내에서 서로 통신할 수 있도록 한다

컨텍스트 정보는 무조건 처음에 바꿔줘야한다.

cat ~/.kube/config

하나의 pod에 여러개의 container가 동작가능하다.

파드의 상태

  • pending -> running -> Succeeded/Failed

kubectl describe pod {name-of-pod}

모르면 쿠버네티스 공식 문서 보기

This post is licensed under CC BY 4.0 by the author.