Kubernetes: 클러스터 구축 단순화 kubeadm

14533 단어 kubernetes
Kubernetes1.4의 새로운 기능으로kubernetes 집단 구축kubeadm을 대폭 간소화하는 메커니즘을 추가했다.1.4에 알파 기능으로 인해 생산 환경의 구축은 향후 버전을 기다려야 한다.
수첩를 따라 구글 컴퓨터 엔진의 가상 기기에서 실제로 시도해 보았다.

개요


다음 4단계를 통해 간단하게 Kubernetes 클러스터를 만들 수 있습니다.(Docker의 이미지swarm join/init
  • 관련 패키지 설치
  • kubeadm init 호스트 초기화
  • kubeadm join --token xxxx yyy.yyy.yyy.yyy 직원 추가
  • Pod 네트워크 배포
  • 이제 클러스터 구축이 완료됩니다.

    준비


    GCP에 다음 가상 머신 3대(Master*1, Worker*2)가 생성되었습니다.

  • 컴퓨터 유형: n1-1

  • OS: Ubuntu 16.04 LTS(amd64 xenial image built on 2016-09-30)
  • 먼저 다음 명령을 사용하여 필요한 패키지를 설치합니다.
    sudo su -
    curl 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 docker.io kubelet kubeadm kubectl kubernetes-cni
    

    주 서버 설정


    Maste에서 만kubeadm init.
    마스터에 로그인하여 다음을 수행합니다kubeadm init.IP 주소가 여러 개인 경우 --api-advertise-addresses 에 공개된 IP 주소를 지정해야 합니다.
    sudo kubeadm init
    
    1분도 안 돼서 Kubermetes의 주인이 초기화되었습니다.워커가 사용하는join 명령이 표시되기 때문에 제어해야 합니다.
    <master/tokens> generated token: "59fd3a.744950d511c9cd4b"
    <master/pki> created keys and certificates in "/etc/kubernetes/pki"
    <util/kubeconfig> created "/etc/kubernetes/kubelet.conf"
    <util/kubeconfig> created "/etc/kubernetes/admin.conf"
    <master/apiclient> created API client configuration
    <master/apiclient> created API client, waiting for the control plane to become ready
    <master/apiclient> all control plane components are healthy after 26.083726 seconds
    <master/apiclient> waiting for at least one node to register and become ready
    <master/apiclient> first node is ready after 5.002739 seconds
    <master/discovery> created essential addon: kube-discovery, waiting for it to become ready
    <master/discovery> kube-discovery is ready after 10.002818 seconds
    <master/addons> created essential addon: kube-proxy
    <master/addons> created essential addon: kube-dns
    Kubernetes master initialised successfully!
    You can now join any number of machines by running the following on each node:
    
    # worker用のコマンドが表示される
    kubeadm join --token 59fd3a.744950d511c9cd4b 10.240.0.5
    
    /etc/kubernetes 아래 파일이 생성되었습니다.인증서 등도 자동으로 만들어져서 좋아요.
    # 証明書
    /etc/kubernetes/pki/apiserver-key.pem
    /etc/kubernetes/pki/ca.pem
    /etc/kubernetes/pki/apiserver-pub.pem
    /etc/kubernetes/pki/ca-pub.pem
    /etc/kubernetes/pki/tokens.csv
    /etc/kubernetes/pki/sa-pub.pem
    /etc/kubernetes/pki/apiserver.pem
    /etc/kubernetes/pki/sa-key.pem
    /etc/kubernetes/pki/ca-key.pem
    # Masterコンポーネントの設定
    /etc/kubernetes/manifests/kube-scheduler.json
    /etc/kubernetes/manifests/kube-controller-manager.json
    /etc/kubernetes/manifests/kube-apiserver.json
    /etc/kubernetes/manifests/etcd.json
    # kubeletの設定
    /etc/kubernetes/admin.conf
    /etc/kubernetes/kubelet.conf
    
    Kubelet은 용기에서 시작됩니다. Kubernetes의 마스터 구성 요소 (scheduler, controller,apiserver, etcd) 는 다음과 같습니다.
    /usr/bin/kubelet \
      --kubeconfig=/etc/kubernetes/kubelet.conf \
      --require-kubeconfig=true \
      --pod-manifest-path=/etc/kubernetes/manifests \
      --allow-privileged=true \
      --network-plugin=cni \
      --cni-conf-dir=/etc/cni/net.d \
      --cni-bin-dir=/opt/cni/bin \
      --cluster-dns=100.64.0.10 \
      --cluster-domain=cluster.local \
      --v=4
    

    작업자 설정


    작업자에 로그인하고 kubeadm init 에 표시된 명령을 사용하여 작업자 가상 시스템에서 실행합니다.
    sudo kubeadm join --token 59fd3a.744950d511c9cd4b 10.240.0.5
    
    아래와 같이 노드 추가는 순식간에 완성될 것이다.아주 간단해요.
    <util/tokens> validating provided token
    <node/discovery> created cluster info discovery client, requesting info from "http://10.240.0.5:9898/cluster-info/v1/?token-id=59fd3a"
    <node/discovery> cluster info object received, verifying signature using given token
    <node/discovery> cluster info signature and contents are valid, will use API endpoints [https://10.240.0.5:443]
    
    <node/csr> created API client to obtain unique certificate for this node, generating keys and certificate signing request
    <node/csr> received signed certificate from the API server, generating kubelet configuration
    <util/kubeconfig> created "/etc/kubernetes/kubelet.conf"
    
    Node join complete:
    * Certificate signing request sent to master and response
      received.
    * Kubelet informed of new secure connection details.
    
    Run 'kubectl get nodes' on the master to see this machine join.
    
    두 번째도 같은 절차를 밟는다.
    생성된 /etc/kubernetes/kubelet.conf을 보면 다음과 같이 인증서와 API 서버 등이 자동으로 설정됩니다.(일부 클리든 샤르 생략)
    /etc/kubernetes/kubelet.conf
    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: LS0...Qo=
        server: https://10.240.0.5:443
      name: kubernetes
    contexts:
    - context:
        cluster: kubernetes
        user: kubelet-kube-worker2
      name: kubelet-kube-worker2@kubernetes
    current-context: kubelet-kube-worker2@kubernetes
    kind: Config
    preferences: {}
    users:
    - name: kubelet-kube-worker2
      user:
        client-certificate-data: LS0...o=
        client-key-data: LS0t...o=
    
    kubelet은 다음과 같이 일어서서 용기kube-proxy에서 일어난다.
    /usr/bin/kubelet \
      --kubeconfig=/etc/kubernetes/kubelet.conf \
      --require-kubeconfig=true \
      --pod-manifest-path=/etc/kubernetes/manifests \
      --allow-privileged=true \
      --network-plugin=cni \
      --cni-conf-dir=/etc/cni/net.d \
      --cni-bin-dir=/opt/cni/bin \
      --cluster-dns=100.64.0.10 \
      --cluster-domain=cluster.local \
      --v=4
    

    마스터 측 확인 및 Pod 네트워크 설정


    주 서버에 로그인하여 노드를 추가했는지 확인하십시오.
    kubectl get nodes
    
    다음 노드가 추가되었는지 확인할 수 있습니다.
    NAME           STATUS    AGE
    kube-master    Ready     5m
    kube-worker1   Ready     4m
    kube-worker2   Ready     3m
    
    마지막으로 Pod 네트워크를 설치합니다.Pod 네트워크 몇 개를 선택할 수 있습니다. 여기에서 매뉴얼에 따라 선택했습니다Weave Net.현재 Canal, Calico 선택 가능(참조: Networking and Network Policy
    kubectl apply -f https://raw.githubusercontent.com/weaveworks/weave-kube/master/weave-daemonset.yaml
    
    Pod은 다음과 같습니다.
    kubectl get pods --all-namespaces
    
    NAMESPACE     NAME                                  READY     STATUS    RESTARTS   AGE
    kube-system   etcd-kube-master                      1/1       Running   0          5m
    kube-system   kube-apiserver-kube-master            1/1       Running   0          6m
    kube-system   kube-controller-manager-kube-master   1/1       Running   0          6m
    kube-system   kube-discovery-982812725-vr5or        1/1       Running   0          6m
    kube-system   kube-dns-2247936740-qclp0             2/3       Running   0          6m
    kube-system   kube-proxy-amd64-a6niu                1/1       Running   0          5m
    kube-system   kube-proxy-amd64-cgqz5                1/1       Running   0          4m
    kube-system   kube-proxy-amd64-mf3m7                1/1       Running   0          6m
    kube-system   kube-scheduler-kube-master            1/1       Running   0          5m
    kube-system   weave-net-kkipk                       2/2       Running   0          26s
    kube-system   weave-net-xxtgw                       2/2       Running   0          26s
    kube-system   weave-net-yyb64                       2/2       Running   0          26s
    

    동작 확인


    행위를 검사하기 위해 배치예제 응용 프로그램.이것은 데이터베이스를 포함하는 10개 이상의 마이크로서비스 지점을 배치한 좋은 예이다.
    마스터에서 다음을 수행합니다.
    git clone https://github.com/microservices-demo/microservices-demo
    kubectl apply -f microservices-demo/deploy/kubernetes/manifests
    
    모든 Pod이 실행되는지 확인합니다.
    kubectl get pods
    
    NAME                           READY     STATUS    RESTARTS   AGE
    cart-3694116665-ethb2          1/1       Running   0          20m
    cart-db-2305146297-k860k       1/1       Running   0          20m
    catalogue-11453786-gs9k9       1/1       Running   0          20m
    catalogue-db-393939662-bx08x   1/1       Running   0          20m
    front-end-3820830240-3pvn7     1/1       Running   0          20m
    orders-3498886496-jymtz        1/1       Running   0          20m
    orders-db-1775353731-bsfa4     1/1       Running   0          20m
    payment-3012088042-e7xn6       1/1       Running   0          20m
    queue-master-936560853-omntu   1/1       Running   0          20m
    rabbitmq-1897447621-fhb8y      1/1       Running   0          20m
    shipping-1232389217-7aqn7      1/1       Running   0          20m
    user-3090014237-y64z3          1/1       Running   0          20m
    user-db-1338754314-q7mv9       1/1       Running   0          20m
    
    NodePort를 사용하여 서비스 정보를 보고 예제 응용 프로그램에 액세스합니다.
    kubectl describe svc front-end
    
    Name:                   front-end
    Namespace:              default
    Labels:                 name=front-end
    Selector:               name=front-end
    Type:                   NodePort
    IP:                     100.69.60.103
    Port:                   <unset> 80/TCP
    NodePort:               <unset> 31992/TCP # このPortを使う
    Endpoints:              10.38.0.3:8079
    Session Affinity:       None
    
    노드 포트를 사용하여 액세스합니다.오픈 포트의 시간을 절약하기 위해 SSH PortForward를 로컬로 실행합니다.(NodePort는 매번 바뀌는데 이번에는 31992)
    ssh -L 31992:127.0.0.1:31992 <ユーザ名>@<VMのPublic IP>
    
    방문http://localhost:31992/, 아래와 같은 샘플 네트워크 응용 프로그램 작업을 확인했다.

    제한


    수첩에서 보듯이 현황은 다음과 같은 제한이 있다.
  • cloud-provider를 설정할 수 없음
  • Persistent Volume 또는 Load Balancer 등의 기능을 사용할 수 없음
  • 마스터 한 대만 가능
  • kubectl logs부동

  • 간단히 취득할 수 없음kubectlkubeconfig
  • Master/etc/kubernetes/admin.conf를 먼저 복제하는 방법
  • 참조 정보

  • 공식 안내서
  • http://kubernetes.io/docs/getting-started-guides/kubeadm/
  • kubeadm의 원본 코드
  • https://github.com/kubernetes/kubernetes/tree/master/cmd/kubeadm
  • 좋은 웹페이지 즐겨찾기