y-ohgi's blog

TODO: ここになにかかく

PipeCDを試してみる

これはなに

PipeCD というOSS のCD ツールがリリースされたようなので雑に試してみるだけの記事です。

構築

https://pipecd.dev/docs/quickstart/ を参考にGKE 上にPipeCD を構築してみます。

環境

  • Cloud Shell
    • GCP のCloud Shell 上で作業します
  • kubectl
    • v1.19.2
  • helm
    • v3.2.1

GKE の作成

雑にクラスタを構築

$ gcloud beta container clusters create "cluster-1" --zone "asia-northeast1-a"

PipeCD の構築

まずはドキュメント通りPipeCD をGKE へ立ち上げてみる

$ git clone https://github.com/pipe-cd/manifests.git
$ cd manifests
$ kubectl create namespace pipecd
$ helm install pipecd ./manifests/pipecd \
  --namespace pipecd \
  --values ./quickstart/control-plane-values.yaml

何がたったのかみてみる

$ kubectl get all -n pipecd                                          
NAME                                   READY   STATUS              RESTARTS   AGE
pod/pipecd-api-5f57548649-g7j7g        0/1     ContainerCreating   0          21s
pod/pipecd-cache-5458449b5-95dvg       1/1     Running             0          21s
pod/pipecd-gateway-5bff6f657d-qxggr    0/1     Running             0          21s
pod/pipecd-minio-6c8b74bbbb-rhsm7      1/1     Running             0          21s
pod/pipecd-mongodb-7845d88b8f-nvpbf    0/1     ContainerCreating   0          21s
pod/pipecd-operator-6695c5dbdb-zqv6t   1/1     Running             0          21s
pod/pipecd-web-d6b66cb87-qvvns         1/1     Running             0          21s

NAME                      TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                               AGE
service/pipecd            NodePort    10.3.250.251   <none>        443:32062/TCP,8443:32591/TCP          22s
service/pipecd-api        ClusterIP   None           <none>        9080/TCP,9081/TCP,9082/TCP,9085/TCP   22s
service/pipecd-cache      ClusterIP   10.3.245.56    <none>        6379/TCP                              22s
service/pipecd-gateway    ClusterIP   10.3.244.97    <none>        9095/TCP                              22s
service/pipecd-minio      ClusterIP   10.3.242.69    <none>        9000/TCP                              22s
service/pipecd-mongodb    ClusterIP   10.3.255.205   <none>        27017/TCP                             22s
service/pipecd-operator   ClusterIP   None           <none>        9082/TCP,9085/TCP                     22s
service/pipecd-web        ClusterIP   None           <none>        9082/TCP,9085/TCP                     22s

NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/pipecd-api        0/1     1            0           22s
deployment.apps/pipecd-cache      1/1     1            1           22s
deployment.apps/pipecd-gateway    0/1     1            0           22s
deployment.apps/pipecd-minio      1/1     1            1           22s
deployment.apps/pipecd-mongodb    0/1     1            0           22s
deployment.apps/pipecd-operator   1/1     1            1           22s
deployment.apps/pipecd-web        1/1     1            1           22s

NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/pipecd-api-5f57548649        1         1         0       22s
replicaset.apps/pipecd-cache-5458449b5       1         1         1       22s
replicaset.apps/pipecd-gateway-5bff6f657d    1         1         0       22s
replicaset.apps/pipecd-minio-6c8b74bbbb      1         1         1       22s
replicaset.apps/pipecd-mongodb-7845d88b8f    1         1         0       21s
replicaset.apps/pipecd-operator-6695c5dbdb   1         1         1       22s
replicaset.apps/pipecd-web-d6b66cb87         1         1         1       21s

雑にGCP のMonitoring から使用率をみてみる

f:id:y-ohgi:20201009185908p:plain

PipeCD の管理画面

port-forward でpipecdの管理画面を8080へ持ってくる

$ kubectl port-forward svc/pipecd -n pipecd 8080:443 &

今回はCloud Shell を使用しているので、"Webプレビュー"機能を使い、pipecd の管理画面を見てみる。

f:id:y-ohgi:20201009190011p:plain

デフォルトだと以下を入力するとログインできる模様。

Project Name: quickstart
Username: hello-pipecd
Password: hello-pipecd

ID/PWなログインだけでなく、GitHub でのログインもサポートされていてgood 👍

PipeCD でGKE へデプロイしてみる

引き続き https://pipecd.dev/docs/quickstart/ を参考に。

  1. ヘッダーの"Settings" から"Environment" を選択し、"dev" という命名のEnvironmentを作成する
  2. 左タブの"Piped" からpiped を作成する
  3. プロジェクト作成後に表示されるid とsecret を控える
  4. https://github.com/pipe-cd/examples をFork する
  5. ./quickstart/piped-values.yaml ファイルを編集する
    • FORKED_REPO_URL をFork したリポジトリのURL へ書き換える
    • YOUR_PIPED_ID を"3" で控えたid へ書き換える
  6. helm からデプロイ対象のリポジトリを登録
    • $ helm -n pipecd install piped ./manifests/piped --values ./quickstart/piped-values.yaml --set secret.pipedKey.data=YOUR_PIPED_SECRET_KEY
  7. ヘッダーの"Applications" を選択肢、左側にある"ADD" ボタンから新規Application を作成する
    • Name: canary-example
    • Kind: KUBERNETES
    • Environment:
      • "1" で作成したEnvironment と、"2" で作成したPiped を指定
    • Repository
      • "6" で登録したリポジトリ("examples") と、用意されているサンプルコードのパス"kubernets/canary" を指定
    • Cloud Provider: kubernetes-default
  8. Applications 画面に"8" で作成したcanary-example が確認できる
    • "7" で作成ボタン押したあとずっとぐるぐるしてたので、別タブで開いてみたらいつの間にかできていた
    • f:id:y-ohgi:20201009190159p:plain

その他

Ingressを追加してみる

雑に以下の ingress.yaml をリポジトリの kubernetes/canary 配下に追加(Service Type をNodePort にもした)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: canary

spec:
  backend:
    serviceName: canary
    servicePort: 9085

自動で検知してingressのデプロイしてくれた。
ログも見れた

f:id:y-ohgi:20201009190222p:plain

(いちおうIngress からのアクセスができることも確認)

イメージのバージョンを上げてみる

https://console.cloud.google.com/gcr/images/pipecd/GLOBAL/helloworld?gcrImageListsize=30&gcrImageListpage=$*120 を見たらいろいろあったので、exampleリポジトリに指定されていた v0.5.0 からv0.6.0 へ変えてみる

とりあえずGitHubから直接編集。
https://github.com/y-ohgi/examples/commit/38407374b7e5ba4f36ea01ca40c1ee73b4f39db7

pipecd 見に行ったらなんかいい感じにタグの変更を検知してくれている。賢い。

Sync progressively because of updating image helloworld from v0.5.0 to v0.6.0

f:id:y-ohgi:20201009190246p:plain

雑に触った感想

  • デプロイ機能が豊富なうえに、そのドキュメントが豊富でやりたいことはコード付きでサンプルがある
    • デプロイでやりたくなることは何でもできる勢い
  • .pipecd.yaml が簡潔にかける
  • ユーザー管理周りが豊富
    • GitHubログインやSSO、RBACなどが最初からのっている
  • PipeCD のフロント周りがたまに死ぬので焦る
    • Environment やPiped を追加する時に画面に表示されなかったり、Applicationの作成時にレスポンス返ってこなかったりした
  • PipeCD の管理画面で作業していたら急にhelm を使いデプロイ対象リポジトリの登録をすることになりびびるなど
    • Environment 、Piped 、Application まわりもhelmなどのコードで管理したい