LoginSignup
15
12

More than 5 years have passed since last update.

OSS 版 drone.io 0.4 の環境を Kubernetes で構築

Last updated at Posted at 2016-01-06

概要

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 を作成

まずはサービス用マニフェストを作成

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

Service 作成

$ 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: 適当に
Callback URL: http://{先ほど確認した LB の IP アドレス}/authorize
権限: 以下の通り
01.png

保存して、「鍵」と「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 アドレス}/

02.png

ログインを押して、Bitbucket アカウントでログインして、アクセス許可する。
03.png

ダッシュボードにレポジトリの一覧が表示されたらOK。
04.png

とりあえず初期構築はここまで。
CI については別途。

15
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
12