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.ftresource "google_compute_disk" "drone" {
  name = "drone-data-disk"
  type = "pd-ssd"
  zone = "${var.zone}"
  size = 10
}
또한 PD 마운트를 위해 노드 인스턴스에 컴퓨팅 권한을 추가해야합니다 (oauth_scopes에 추가).
container_cluster.tfresource "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.ymlapiVersion: 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.ymlapiVersion: 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에 대해서는 별도.
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(OSS 버전 drone.io 0.4의 환경을 Kubernetes로 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/quickguard/items/06747c1762a0373b8204
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
컨테이너 클러스터만 만들 수 있습니다.
이전 작성한 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.ymlapiVersion: 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.ymlapiVersion: 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에 대해서는 별도.
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(OSS 버전 drone.io 0.4의 환경을 Kubernetes로 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/quickguard/items/06747c1762a0373b8204
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
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
$ 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
소비자 키 등록
오른쪽 상단 메뉴의 "Settings"→ "OAuth"에서 소비자 키를 추가.
입력 내용
Name: 적당히
콜백 URL: http://{이전에 확인한 LB의 IP 주소}/authorize
권한: 다음과 같이

저장하고 "키"와 "Secret"의 정보를 잡아 둔다.
kubernetes로 ReplicationController 생성
복제 컨트롤러용 매니페스트 만들기
drone-rc.ymlapiVersion: 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에 대해서는 별도.
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(OSS 버전 drone.io 0.4의 환경을 Kubernetes로 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/quickguard/items/06747c1762a0373b8204
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
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
$ kubectl create -f rc.yml
replicationcontroller "drone" created
Drone의 UI에 액세스합니다.
http://{이전에 확인한 LB의 IP 주소}/

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

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

우선 초기 구축은 여기까지.
CI에 대해서는 별도.
Reference
이 문제에 관하여(OSS 버전 drone.io 0.4의 환경을 Kubernetes로 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/quickguard/items/06747c1762a0373b8204텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)