Upgrade to Pro — share decks privately, control downloads, hide ads and more …

KubernetesのマニフェストをそれなりにCIしたい

stormcat24
December 10, 2019

 KubernetesのマニフェストをそれなりにCIしたい

CircleCI ユーザーコミュニティミートアップ #2

stormcat24

December 10, 2019
Tweet

More Decks by stormcat24

Other Decks in Programming

Transcript

  1. whois ‣ CyberAgent, Inc. ‣ Backend Engineer ‣ OpenSaaS Studio

    Tech Lead ‣ Docker/Kubernetes 実践コンテナ開発入門 Akinori Yamada stormcat24
  2. apiVersion: apps/v1 kind: Deployment metadata: name: echo labels: app: echo

    spec: replicas: 3 selector: matchLabels: app: echo template: metadata: labels: app: echo spec: containers: - name: echo image: gcr.io/your-organization/your-service:v0.0.1-01-g39f376a env: - name: HOGE value: fuga ports: - containerPort: 8080 マニフェストファイル deployment.yaml ※マニフェストファイルを Kubernetesクラスタに適用=デプロイ
  3. apiVersion: apps/v1 kind: Deployment metadata: name: echo labels: app: echo

    spec: replicas: 3 selector: matchLabels: app: echo template: metadata: labels: app: echo spec: containers: - name: echo image: gcr.io/your-organization/your-service:v0.0.1-01-g39f376a env: - name: HOGE value: fuga ports: - containerPort: 8080 PRでの人力レビューには限界がある
  4. +

  5. version: 2 jobs: kind: machine: image: circleci/classic:201808-01 steps: - checkout

    - run: name: Install kubernetes cluster with kind command: | curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/v0.6.1/kind- linux-amd64 chmod +x kind sudo mv kind /usr/local/bin - run: name: Start cluster command: | kind create cluster --name test-cluster --image kindest/node:v1.14.9 - run: name: Waiting for ready command: | READY="" while [ "$READY" != "True" ] do sleep 2 READY=`kubectl get node -o=jsonpath='{range .items[*]}{range @.status.conditions[? (@.type == "Ready")]}{@.status}{end}{end}'` done echo "Node is ready" echo "Current running pods are the follows:" kubectl get --all-namespaces pod machineモードで kindインストール クラスタ起動  クラスタ起動待ち
  6. 考えられるワークロード ‣ マニフェストの反映でエラーでないかチェック ‣ 実行時エラー確認 ‣ マニフェスト反映 → クラスタに対してE2Eテストの実行 ‣

    マニフェストの妥当性のチェック ‣ Open Policy Agent(OPA) / gatekeeper ‣ 必須なlabelやannotationのチェック ‣ イメージや環境変数のチェック etc