docker 관리 도구: Kubernetes 노트 없음

6372 단어 Dockerkubernetes

거치다


docker를 도입한 후, 나는 점점 그것의 편리성을 느꼈다.정말 컨테이너 나리만 생각했어요.그러나 용기 수량은 웹 서비스stack의 증가에 따라 증가하고 관리도 복잡해진다.
또 중요한 데이터 분석 농장의 GPU 자원의 이용 상황은 이상적이라고 할 수 없다.
목표는 GPU 일정 기능입니다.

갑시다


시스템 구성

  • ubuntu 16.04
  • docker1.13.1 및 17.09
  • nvidia 그래픽 및 드라이버
  • Kubernetes 설치


    Kubernetes라는 이름이 좀 길어요. 다행히 개발 커뮤니티에서 k8s라는 별명을 부르기 시작했어요.아래에도 k8s를 쓰세요.
    정부문서에 기재된 절차를 추천합니다.

    kubeadm,kubelet,kubectl 설치


    docker를 설치한 전제에서 호스트에kubeadm,kubelet,kubectl를 설치합니다.
    pre-install.sh
    apt-get update && apt-get install -y apt-transport-https
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
    cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb http://apt.kubernetes.io/ kubernetes-xenial main
    EOF
    apt-get update
    apt-get install -y kubelet kubeadm kubectl
    

    클러스터 생성



    k8s로 구축된 집단, 용기의 관리는 POD 단위로 진행된다.하나의 용기는 하나 이상의 용기를 포함한다.
    k8s를 통해 군집 중의 노드에 플레이어를 던지면 부하 균형을 쉽게 할 수 있다.

    마스터 노드 설치


    클러스터를 시작하는 첫 번째 단계는 마스터를 확인하는 것입니다.노드의 자원 이용 상태 감시와 용기 관리는 모두 주 노드에서 진행된다.
    $ kubeadm init
    

    네트워크 박스 설치


    이 절차는 매우 중요하다. 만약 잘못하면 군집에 여러 가지 문제가 발생할 수 있다.
    문서는 몇 가지네트워크 추가 모듈를 소개했는데 여기서 사용합니다Weave Net.
    Adon이라고 하는데 실제로는 컨테이너화되어 일련의 Pod가 되었다.
    $ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
    
    대부분 bash에 이상의 명령을 입력하고 설치를 완료합니다
    가상 머신과 물리 머신의 연결 환경에 따라 나는 그렇게 순조롭지 않을 것이라고 생각한다.
    따라서pod 정의 파일을 다운로드하고 필요한 부분을 편집하며 네트워크pod를 설정하는 것이 상책이다.
    다운로드네트워크 패키지 정의 파일$ Curl -O -L https://cloud.weave.works/k8s/v1.7/net예: 전용 IP 주소 편집
    net.yaml
    ...
    containers:
            - name: weave
              env:
                - name: IPALLOC_RANGE
                  value: 10.0.0.0/16
    ...
    
    편집된 정의 파일을 클러스터에 적용합니다.
    $ kubectl apply -f net.yaml
    
    다음은 작업자 노드를 주 노드에 등록합니다.

    GPU 기능 활성화


    작업자 노드에 설치된 GPU를 사용하려면 해당 설정이 필요합니다.nano /etc/systemd/system/kubelet.service.d/10-kubeadm.conf설정 파일을 열면 그 안에 이런 느낌이 든다.

    10-kubeadm.conf
    ...
    ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS --feature-gates="Accelerators=true [...]"
    ...
    
    
    구성이 완료되면 서비스를 다시 시작합니다.
    restart-kubelet.sh
    systemctl daemon-reload
    systemctl restart kubelet
    

    - 호스트 하나만 있음


    광범위한 의미에서 호스트 한 대만 사용하면 군집을 구축할 수 있다.또는 마스터 노드 자체도 Worker 노드로 작동합니다.
    $ kubectl taint nodes --all node-role.kubernetes.io/master-
    

    - 2개 이상의 호스트


    일반적으로 집단은 주 노드와 작업기 노드로 나뉜다.Worker 노드에서 등록하려면 마스터 노드 설정 완료 메시지에서 다음 명령을 입력합니다.
    $ kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>
    

    설치 후 단계


    여기까지 대략 알아차렸습니다. 위의 명령에는 sudo가 없습니다.k8s 설치부터 군집 설치까지 모두 루트 권한입니다.
    사실 그룹을 설정할 때 sudo 권한만 있으면 돼요.루트 권한이 대단하지만 눈치채지 못할 때 어떤 파일이 삭제되는 경우도 있습니다.
    그래서 가능한 한 루트 권한을 사용하지 않습니다.
    여기에서 sudo 권한이 있는 계정에 k8s 접근 권한을 부여합니다.
    post-install.sh
    cp /etc/kubernetes/admin.conf $HOME/
    chown $(id -u):$(id -g) $HOME/admin.conf
    echo "export KUBECONFIG=$HOME/admin.conf" >> ~/.bashrc
    echo "source <(kubectl completion bash)" >> ~/.bashrc
    

    총결산


    k8s를 사용하면 다중 호스트의 용기 관리가 수월해지겠죠.
    그러나 호스트 수가 적으면 k8s의 본래 목적은 데이터 센터와 같은 규모이고 용기 관리 기능은 실감이 나지 않을 것이다.
    갑자기 k8s에 뛰어들어 벽에 부딪힐 수도 있다.그래서 상황에 따라 적당한 도구를 이용하는 것이 오케스트라다.
    다음은 역시docker 용기 관리 도구입니다. 둘 다 용기의 상태 설정을 유지할 수 있습니다.
    portainer ( github )
    rancher ( github )
    참고 자료
    - Kubernetes 공식 문서

    좋은 웹페이지 즐겨찾기