OSS 버전 drone.io 0.4의 환경을 Kubernetes로 구축

개요



drone0.4 의 plugin 가 증가해 왔으므로, 0.3 으로부터의 버전 업을 검토중.
플러그인 목록은 여기에서 확인할 수 있습니다.

drone0.4 환경에 대해서는, Docker화의 뒤에 kubernetes로 구축한다.
kubernetes의 구축은 귀찮기 때문에 GKE를 이용한다.

리포지토리는 Bitbucket 을 이용.

kubernetes 환경 구축



컨테이너 클러스터만 만들 수 있습니다.

이전 작성한 terraform 의 코드를 이용.
drone sqlite 데이터베이스 용 Persistent Disk 용 tf 파일을 추가합니다.
디스크 이름 (여기서는 drone-data-disk)은 kubernetes를 설정할 때도 사용되므로 따로 보관하십시오.

disk.ft
resource "google_compute_disk" "drone" {
  name = "drone-data-disk"
  type = "pd-ssd"
  zone = "${var.zone}"
  size = 10
}

또한 PD 마운트를 위해 노드 인스턴스에 컴퓨팅 권한을 추가해야합니다 (oauth_scopes에 추가).

container_cluster.tf
resource "google_container_cluster" "default" {
  name = "${var.cluster_name}"
  zone = "${var.zone}"
  network = "${var.network}"
  initial_node_count = "${var.initial_node_count}"

  node_config {
    machine_type = "${var.machine_type}"
    disk_size_gb = "${var.disk_size}"
    oauth_scopes = [
      "https://www.googleapis.com/auth/compute"
    ]
  }

  master_auth {
    username = "${var.master_auth_username}"
    password = "${var.master_auth_password}"
  }

}

terraform apply가 완료되면 kubectl 자격 증명을 가져옵니다.
$ gcloud container clusters get-credentials cluster-1

kubernetes로 드론 서비스 만들기



우선 서비스용 매니페스트를 작성

drone-service.yml
apiVersion: v1
kind: Service
metadata:
  name: drone
  labels:
    name: drone
spec:
  type: LoadBalancer
  selector:
    name: drone
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80

서비스 만들기
$ kubectl create -f drone-service.yml
service "drone" created

LB의 IP 주소 확인(EXTERNAL_IP)
$ kubectl get svc
NAME         CLUSTER_IP     EXTERNAL_IP       PORT(S)   SELECTOR     AGE
drone        10.55.252.25   xxx.xxx.xxx.xxx   80/TCP    name=drone   2m

Bitbucket 설정



소비자 키 등록
오른쪽 상단 메뉴의 "Settings"→ ​​"OAuth"에서 소비자 키를 추가.

입력 내용
Name: 적당히
콜백 URL: http://{이전에 확인한 LB의 IP 주소}/authorize
권한: 다음과 같이


저장하고 "키"와 "Secret"의 정보를 잡아 둔다.

kubernetes로 ReplicationController 생성



복제 컨트롤러용 매니페스트 만들기

drone-rc.yml
apiVersion: v1
kind: ReplicationController
metadata:
  name: drone
  labels:
    name: drone
spec:
  replicas: 1
  selector:
    name: drone
  template:
    metadata:
      labels:
        name: drone
    spec:
      containers:
      - name: drone
        image: drone/drone:0.4
        env:
        - name: SERVER_ADDR
          value: ":80"
        - name: DATABASE_DRIVER
          value: sqlite3
        - name: DATABASE_CONFIG
          value: /var/lib/drone/drone.sqlite
        - name: REMOTE_DRIVER
          value: bitbucket
        - name: REMOTE_CONFIG
          value: https://bitbucket.org?client_id={Bitbucketの鍵}&client_secret={BitbucketのSecret}&open=true
        ports:
          - containerPort: 80
            protocol: TCP
        volumeMounts:
          - mountPath: /var/lib/docker
            name: docker
          - mountPath: /var/run/docker.sock
            name: docker-socket
          - mountPath: /var/lib/drone
            name: drone-db
      volumes:
        - name: docker
          hostPath:
            path: /var/lib/docker
        - name: docker-socket
          hostPath:
            path: /var/run/docker.sock
        - name: drone-db
          gcePersistentDisk:
            pdName: drone-data-disk
            fsType: ext4

ReplicationController 작성
$ kubectl create -f rc.yml
replicationcontroller "drone" created

계정 등록



Drone의 UI에 액세스합니다.
http://{이전에 확인한 LB의 IP 주소}/



로그인을 눌러 Bitbucket 계정으로 로그인하여 액세스 권한을 부여합니다.


대시보드에 리포지토리 목록이 표시되면 OK.


우선 초기 구축은 여기까지.
CI에 대해서는 별도.

좋은 웹페이지 즐겨찾기