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.tf
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
権限: 以下の通り
保存して、「鍵」と「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 については別途。