[지속 업데이트] 필기정리-20170714-Kubernetes 입문

오랫동안 블로그를 하지 않았기 때문에 주말에 전에 입수한 k8s를 정리하기로 했습니다. 정리하지 않으면 또 잊어버릴 것입니다.
Docker부터 시작
무엇 때문에 왔는가
Paas는 유래가 오래되었지만 엄청난 건설 비용을 면할 수 없다.마찬가지로 소프트웨어 프로젝트에서 (기술 창고 구축->기초 기술 구축->시뮬레이션 테스트) 전체 과정은 시간이 길고 자원 격리가 철저하지 않으며 배치 대가가 크다. Docker는 이런 측면에서 매우 큰 장점을 가진다.
Docker의 몇 가지 중요한 개념
namespace
cgroup
서브시스템(자원 컨트롤러), 관리 cpu, iops,network,memory,device access
LXC
방향 비교
결실
성능
LXC >> KVM >> XEN
메모리 사용률
LXC >> KVM >> XEN
격리 정도
XEN >> KVM >> LXC
AUFS
공유 파일 시스템
전체 생명주기 개발 모델
Build + Ship + Run
App 패키지
Kernel + BaseImage + Self Images + Container
Daemon
로컬 포트 바인딩을 위한 RESTful API(k8s 기반)
Docker 기본 명령
docker version
  • /etc/sysconfig/docker
  • /usr/lib/systemd/system/docker.service

  • OPTIONS= - -H
    -H=unix:///var/run/docker.sock
    -H=tcp://0.0.0.0:2375
  • – registry-mirror 미러 주소
  • - insecure-registry 로컬 개인 Docker Registry 주소(:5000)
  • –selinux-enabled가 SELinux를 켜는지 여부, 기본 켜기(=true)
  • – bip 브리지 docker0에서 지정된 CIDR 네트워크 주소 사용
  • -b 이미 만들어진 브리지
  • http_proxy = xx.xx.xx.xx:8080
    https_proxy = xx.xx.xx.xx:8080
    docker search xxx
    docker pull xxx [repo:tag]
    docker images
    docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG]
  • -d 백그라운드 실행
  • -it 데이터 상호작용
  • –name
  • – cidfile= "container-id를 지정한 파일로 출력
  • - privileged 특권 모드(용기 삭제 후 디렉터리 존재)
  • -v [ ]
  • docker inspect [containerId] //      Volume   
    docker create/start/stop/pause/unpause
    docker ps //                 
    docker run -rm //    ,       remove  
    
    docker commit <container> [repo:tag] //     ,    ,      ,       buildfile   (supervisor)
    docker build -t xx/xx .

    Docker 친선 프로그램 구조
    etcd/zookeeper를 사용하여 Docker Image에서 구성 분리
    컨테이너 상호 연결
    Volume 기반 연결
  • /var/lib/docker/graph 로컬 이미지의 층별 정보
  • /var/lib/devicemapper/devicemapper/data Image와Container의 2진 데이터 파일
  • /var/lib/devicemapper/devicemapper/metadata 관련 메타데이터
  • 단일 호스트 용기 간 상호 연결 -volumes-from=[containerId]
  • 호스트 간 공유 상호 연결
  • iscsi
  • nfs
  • ceph
  • 분산 파일 시스템

  • 링크 기반 연결
  • – icc=true 닫기 호환
  • – link=name:alias 연결 지정container(/etc/hosts에서 대응하는 IP 맵 생성)
  • - iptables=true 방화벽 열기(iptables-save)
  • 네트워크 기반 연결
    docker-proxy - 포트 매핑NAT: docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8066 -container-ip 172.17.0.15 -container-port 3306 - 숙박 호스트 네트워크host-only (같은 포트에서 시작하는 두 개의 프로세스를 시작할 수 없음) [부하 균형을 시작할 수 없음] 유한하고 중복 사용이 불가능: – net=host - 용기 공용 IP 네트워크: - net=container: mysqlserver (같은 IP 사용 localhost 상호 방문)이 개념은 k8s에서 중요한 의미를 가진다. 호스트 간에 임의의 프로세스에 접근할 수 있다.
    컨테이너 네트워크 메커니즘
    Linux 라우팅 메커니즘 네트워크 연결
    systemctl daemon-reload #             
    iptables -F; iptables -t nat -F
    tshark -f icmp; tshark -i docker0 -f icmp
  • 기존 네트워킹
  • 듀얼 NIC 독립/대용량 Layer 2 스위칭 Linux Bridge
  • Overlay 네트워크: GRE(tcp)/VXLAN(udp)
  • OVS 기반 Overlay 네트워크: GRE Tunnel
  • Neutron 네트워크
  • Libnetwork(New -> In k8s Used)는 서로 다른 Container 간 공용 네트워크 세그먼트를 편리하게 사용
  • Linux Namespace
    Namespace 간 통신 사용veth pair/Linux Bridge
    brctl show
    docker inspect -f '{{state.pid}}' containerId
    mkdir -p /var/run/netns; ln -s /proc/xx/ns/net /var/run/netns/xx
    ip netns exec xxx ethtool -S eth0

    OVS + Docker
    Open vSwitch (Security/Monitoring/QoS/Automated Control)
    ovs-vsctl add-br br0
    ovs-vsctl add-port br0 gre1 --set-interface gre1 type=gre option:remote_ip=192.168.18.128
    brctl addif br0 docker0
    ip link set dev br0 docker0
    ip link set dev br0 up
    ip link set dev docker0 up
    iptables -t nat -F; iptables -F
    ip route add 172.17.0.0/16 dev docker0

    Docker 관리 도구
  • Docker Machine
  • Swarm
  • Docker Compose
  • Tutum
  • Shipyard -> 웹 기반
  • cAdvisor -> 실시간 모니터링
  • Kubernetes
    중요 개념
    Namespace
    다임자 자원 격리
    Resource
    어떤 NS에서 상태 연결/한정 할당/etcd로 지속 가능한 자원 대상
    Label
    리소스를 필터링하고 선택하는 데 사용되는 임의의 K-V 페어
    Volumes
    여러 컨테이너에 사용할 수 있는 Pod 스토리지 볼륨
    마스터 노드
    리소스 액세스 포털에 대한 관리 노드 제공
    Node
    Linux 작업 노드(부하 노드) 자체 복구, 마스터 관리 및 Pod 인스턴스 시작 및 관리
    Pod
    k8s의 최소 작업 스케줄러로 모든 Node에서 Pod 내 공유 자원(네트워크/Volumes)을 복구할 수 있습니다.
    Service
    마이크로 서비스 컨테이너/컨테이너 격리/TCP/무상태/다중 인스턴스/기본 외부 액세스 불가/스크롤 업그레이드
    Replication Controller
    Pod 던전 컨트롤러, 현재 실례 개수 한정, 스크롤 업그레이드 공급자, 서비스 집단 제어 범주에 속한다
    클러스터 배포
    kubectl get pods/namespace/...
    kubectl cluster-info
    kubectl describe pods/...
    --rollback
    kubectl scale #   
    kubectl rolling-update #     
  • 서비스 등록 및 발견-> 변하지 않는 가상 IP + 포트
  • 로드 밸런싱 -> kube-proxy
  • 규모 배치 -> 실례수 확정, 시스템 자동 스케줄링
  • 자체 모니터링, 자체 복구
  • 분산 네트워크 시나리오
  • openvswitch 유연성/기존 물리적 네트워크에 대한 요구 없음/업계 주류/성능 저하/복잡도 높음/Troubleshooting 어려움
  • 라우팅 기술 일반 라우팅 기술/기존 네트워크 기술 사용/단순/고성능/유연성 저하/기존 네트워크와 통합
  • Flannel은 루트 메커니즘과 터널 기술을 결합(UDP 봉인-> etcd 저장 서브넷 토폴로지와 루트 테이블)FLANNELETCD=”http://xx.xx.xx.xx:4001”

  • 부하 균형과 네트워크 토폴로지
    Service
  • 단일 프로그램:
  • 선천적으로 분산 배포 및 확장이 어려움
  • 시스템성, 구성 결함으로 인한 프로세스 붕괴
  • 운영 위험, 시스템 업그레이드/bug 복구/고장 수리 모두 위험
  • 지속 가능하고 기존 서비스 재사용이 어려움
  • 마이크로서비스 아키텍처
  • 선천분포식
  • 무상태-> 부드러운 확장
  • 적목식발전

  • Proxy 네트워크 에이전트 & 부하 균형기
  • 각 Node에서 실행
  • 서비스당 요청 에이전트
  • 세션/자동 문제 해결 유지
  • API
    swagger-ui ku8-eye (ku8 eye-web/ku8 eye-ansible)
    기존 docker + k8s 변경 및 제출 방법
    docker ps | grep xxx
    docker commit {docker id}
    kubectl exec -it xxx /bin/bash

    Mark
    filename 모든 텍스트의 previous를 new로 바꾸기
    sed -i 's/previous/new/g' filename

    좋은 웹페이지 즐겨찾기