これはなに
PipeCD というOSS のCD ツールがリリースされたようなので雑に試してみるだけの記事です。
Excited to announce the open-source availability of PipeCD! 🚀
— pipecd (@pipecd_dev) October 6, 2020
A unified continuous delivery solution for declarative Kubernetes, Serverless, and Infrastructure applications.#kubernetes #devops #gitops #terraform #serverless #istio #golang #srehttps://t.co/2bIqJoaaWe
構築
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 から使用率をみてみる
PipeCD の管理画面
port-forward でpipecdの管理画面を8080へ持ってくる
$ kubectl port-forward svc/pipecd -n pipecd 8080:443 &
今回はCloud Shell を使用しているので、"Webプレビュー"機能を使い、pipecd の管理画面を見てみる。
デフォルトだと以下を入力するとログインできる模様。
Project Name: quickstart
Username: hello-pipecd
Password: hello-pipecd
ID/PWなログインだけでなく、GitHub でのログインもサポートされていてgood 👍
PipeCD でGKE へデプロイしてみる
引き続き https://pipecd.dev/docs/quickstart/ を参考に。
- ヘッダーの"Settings" から"Environment" を選択し、"dev" という命名のEnvironmentを作成する
- 左タブの"Piped" からpiped を作成する
- プロジェクト作成後に表示されるid とsecret を控える
- https://github.com/pipe-cd/examples をFork する
./quickstart/piped-values.yaml
ファイルを編集するFORKED_REPO_URL
をFork したリポジトリのURL へ書き換えるYOUR_PIPED_ID
を"3" で控えたid へ書き換える
- helm からデプロイ対象のリポジトリを登録
$ helm -n pipecd install piped ./manifests/piped --values ./quickstart/piped-values.yaml --set secret.pipedKey.data=YOUR_PIPED_SECRET_KEY
- ヘッダーの"Applications" を選択肢、左側にある"ADD" ボタンから新規Application を作成する
- Name: canary-example
- Kind: KUBERNETES
- Environment:
- "1" で作成したEnvironment と、"2" で作成したPiped を指定
- Repository
- "6" で登録したリポジトリ("examples") と、用意されているサンプルコードのパス"kubernets/canary" を指定
- Cloud Provider: kubernetes-default
- Applications 画面に"8" で作成したcanary-example が確認できる
- "7" で作成ボタン押したあとずっとぐるぐるしてたので、別タブで開いてみたらいつの間にかできていた
その他
Ingressを追加してみる
雑に以下の ingress.yaml
をリポジトリの kubernetes/canary
配下に追加(Service Type をNodePort にもした)
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: canary spec: backend: serviceName: canary servicePort: 9085
自動で検知してingressのデプロイしてくれた。
ログも見れた
(いちおう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
雑に触った感想
- デプロイ機能が豊富なうえに、そのドキュメントが豊富でやりたいことはコード付きでサンプルがある
- デプロイでやりたくなることは何でもできる勢い
.pipecd.yaml
が簡潔にかける- ユーザー管理周りが豊富
- GitHubログインやSSO、RBACなどが最初からのっている
- PipeCD のフロント周りがたまに死ぬので焦る
- Environment やPiped を追加する時に画面に表示されなかったり、Applicationの作成時にレスポンス返ってこなかったりした
- PipeCD の管理画面で作業していたら急にhelm を使いデプロイ対象リポジトリの登録をすることになりびびるなど
- Environment 、Piped 、Application まわりもhelmなどのコードで管理したい