zlabjp/kubernetes-resource: Kubernetes의 Concourse 자원 사용하기

10955 단어 Concoursekubernetes

개요


세트 랩은 몇 가지 CI/CD 도구를 사용했는데 그 중 하나가 Concourse입니다.Concourse는 Pivotal에서 개발한 파이프라인 기반 CI/CD 도구입니다.응용 프로그램을 Concourse에서 Kubernetes로 배치하는 데 사용되는 Concourse 자원은 우리의 요구를 충족시키는 자원이 존재하지 않기 때문에 새로 개발하여 OSS(MIT License)로 공개합니다.
  • zlabjp/kubernetes-resource: A Concourse resource for controlling the Kubernetes cluster
  • Kubernetes에 애플리케이션 배포 방법


    Kubernetes에 애플리케이션을 배포하려면 Kubernetes의 CLI kubectl을 사용합니다.
  • kubectlrun: 집단에서 특정 용기 이미지 실행
  • kubectlcreate: 자원 만들기 (창설된 경우 실행 실패)
  • kubectl delete: 자원 삭제
  • kubectl apply: 자원에 맞게 설정
  • kubectlget: 하나 이상의 자원에 대한 정보 보이기
  • 이 외에도 여러 개의 하위 명령이 조합되어 응용 프로그램을 배치합니다.Kubernetes는 Pod, Service, Volume 등 여러 "자원"을 조합하여 응용 프로그램의 구성을 나타냅니다.따라서 배치는 운영 자원과 같다.
    다음은 이 하위 명령을 사용하여 자원을 관리하는 세 가지 방법을 소개한다.

    Imperative command


    Imperative command는 주로 kubectl run 등 일회용 명령을 사용하여 응용 프로그램을 배치하는 방법이다.다음 예는 nginx:latest 이미지를 만들고 복사본 수는 5이며 이름은 myapp입니다.이 방법은 응용 프로그램의 설정을 상세하게 설정할 수 없기 때문에 개발 용도 등이 일시적으로 실행되고 싶은 상황에서 사용됩니다.
    # Start a replicated contianer of nginx
    $ kubectl run myapp --image=nginx:latest --replicas=5
    

    Imperative object configuration


    Imperative object configuration은 자원의 설정을 선언 파일로 YAML 또는 JSON으로 기록하고 kubectl create 또는 kubectl delete 등을 이용하여 자원을 창설, 삭제합니다.Imperative command에 비해 이 방법은 프로그램 설정을 파일로 설명하기 때문에 버전 제어를 할 수 있습니다.그러나 리소스가 생성되었거나 삭제되었고 존재하지 않으면 명령을 실행할 수 없습니다.
    # Create a resource by a manifest file
    $ kubectl create -f nginx-deployment.yaml
    

    Declarative object configuration


    목록 파일kubectl apply만 사용하여 자원을 만들고 삭제합니다.kubectl apply kubectl create 에 비해 리소스가 이미 있으면 업데이트하고 리소스가 없으면 생성합니다.또한 업데이트 방법도 다른 명령이 자원에 대한 조작을 방해하지 않기 때문에 CD로 응용 프로그램을 계속 배치하는 데 가장 적합하다.
    # Create/Update a resource by a manifest file
    $ kubectl apply -f nginx-deployment.yaml
    
    kubectl apply 에 대한 자세한 내용은 kubectl apply의 구조 / How kubectl apply works 를 참조하십시오.

    Concourse에서 Kubernetes에 애플리케이션 지속 배포


    zlabjp/kubernetes-resource를 사용하여 Concourse에서 Kubernetes를 조작할 수 있습니다.이것은 Concourse 자원으로 실행되며, 그룹에kubectl을 사용하는 모든 명령을 실행할 수 있습니다.그것은 또한 응용 프로그램을 배치하는 편리한 기능을 제공했다.

    Versions


    이 자원은 다음과 같은 여러 버전을 제공합니다.버전은kubectl 버전과 연결되어 있기 때문에 Kubernetes 군집 버전과 같은 버전을 사용하는 것을 권장합니다.
  • zlabjp/kubernetes-resource:1.8 ( stable-1.8 )
  • zlabjp/kubernetes-resource:1.7 ( stable-1.7 )
  • zlabjp/kubernetes-resource:1.6 ( stable-1.6 )
  • zlabjp/kubernetes-resource:latest ( latest )
  • 소스 구성


    kubeconfig 파일을 직접 전달하는 방법과 군집 설정을 설정하는 방법 두 가지를 제공합니다.

    kubeconfig

  • kubeconfig: 임의.레이블 파일yaml kubeconfig: | apiVersion: v1 clusters: - cluster: ...
  • zlabjp/kubernetes-scripts에 포함된 create-kubeconfig 스크립트를 사용하여kubeconfig 파일을 생성하는 데 매우 유용합니다.
    # Create a kubeconfig to access the apiserver with the specified serviceaccount and outputs it to stdout.
    $ ./create-kubeconfig <serviceaccount-name> <kubectl-options>
    

    클러스터 설정

  • server: 임의.API 서버, 주소 및 포트.token가 필요합니다.(e.g. https://192.168.99.100:8443
  • token: 임의.API 서버 인증을 위한 토큰입니다.server가 필요합니다.(e.g. eyj....
  • namespace: 임의.이름 공간.기본값은 default 입니다.
  • certificate_authority: 임의.인증 기관의 인증서.
  • insecure_skip_tls_verify: 임의.true 인 경우 API 서버 인증서의 유효성이 검증되지 않습니다.HTTPS가 안전하지 않습니다.기본값은 false 입니다.
  • 행위


    out 구현만 가능합니다.

    check:아무것도 안 해요.


    아무것도 안 해


    out: 클러스터를 사용하는 Kubernetes

    kubectl apply, kubectl delete, kubectl label 등 Kubernetes 집단의 조작을 진행한다.
    매개 변수
  • kubectl: 필수입니다.kubectl 이후 명령을 지정합니다.(e.g. apply -f ...
  • wait_until_ready: 임의.모든 Pods가 준비될 때까지 기다리는 초입니다.0이면 기다리지 않습니다.기본값은 30 입니다.
  • wait_until_ready_interval: 임의.모든 Pods가 준비되었는지 확인하는 시간 간격(초).기본값은 3 입니다.
  • wait_until_ready_selector: 임의.축소 태그 선택기 완료 여부를 확인하는 Pods.기본값은 이름 공간의 모든 Pods입니다.
  • Kubernetes는 비동기 분포식 시스템이기 때문에 규격을 충족시키면 자원 조작은 명령으로 성공하지만 실제 배치는 실패할 수 있습니다. 예를 들어 용기 이미지 버전이 존재하지 않는 경우를 지정합니다.이런 상황에서 작업을 실패하게 하기 위해 준비했다wait_until_ready.이것은 이름 공간의 Pod가 실행될 때까지 기다립니다.지정된 시간 내에 Pod이 모두 실행되지 않으면 작업이 실패합니다.객체의 Pod 범위를 좁히려면 wait_until_ready_selector 를 사용합니다.이 기능은 배치 후 e2e 테스트를 실행할 때 용기가 시작되기 전에 테스트를 실행하는 것을 방지할 수 있습니다.

    파이프라인 예

    repo 저장소에 포함된 목록 파일을 업데이트하는 트리거prod로 클러스터 실행kubectl apply.
    resource_types:
    - name: kubernetes
      type: docker-image
      source:
        repository: zlabjp/kubernetes-resource
        tag: "1.8"
    resources:
    - name: prod
      type: kubernetes
      source:
        kubeconfig: ((prod-kubeconfig))
    - name: repo
      type: git
      source:
        ...
    jobs:
    - name: prod-deploy
      plan:
      - get: repo
        trigger: true
      - put: prod
        params:
          kubectl: apply -f repo/deploy -f repo/deploy/prod
          wait_until_ready_selector: app=myapp
    
    kubectl 매개변수는 명령 대체에 해당하므로 다음 방법을 사용할 수도 있습니다.
    jobs:
    - name: force-update-deployment
      serial: true
      plan:
      - put: mycluster
        params:
          kubectl: |
            patch deploy nginx -p '{"spec":{"template":{"metadata":{"labels":{"updated_at":"'$(date +%s)'"}}}}}'
          wait_until_ready_selector: run=nginx
    

    총결산


    zlabjp/kubernetes-resource는 Kubernetes 클러스터를 처리하는 데 사용되는 Concourse 리소스입니다.쿠벨의 각 피드 명령을 사용하여 그룹을 조작할 수 있습니다.다음 저장소에서는 이 리소스를 사용하는 데모 파이프라인을 제공합니다.이쪽도 참고해주세요.
  • https://github.com/zlabjp/concourse-meetup-tokyo-7-demo
  • 끝내다


    본 항목은 당사 ZLab의 구성원Z Lab Advent Calendar 2017으로서 업무 시간에 작성한 것입니다.다음 날은 @Ladicle Istio의 시작입니다.

    참고 자료

  • Kubernetes Object Management | Kubernetes
  • Continuous Delivery with Concourse and Kubernetes // Speaker Deck
  • https://github.com/zlabjp/concourse-meetup-tokyo-7-demo
  • 좋은 웹페이지 즐겨찾기