はじめに
v0.60.3 で検証済み。コマンドは、動作する Kubernetes クラスタと設定済みの
kubectlを想定する。
前提
- cluster-admin 権限で到達できる Kubernetes クラスタ (ローカルの
kindやminikubeで十分)。 - そのクラスタを指すよう設定された
kubectl。
インストール
リリースマニフェストを適用して kapp-controller をインストールする。
bash
kubectl apply -f https://github.com/carvel-dev/kapp-controller/releases/latest/download/release.ymlこれにより kapp-controller デプロイメント、そのカスタムリソース定義 (App・PackageInstall・PackageRepository)、集約 API サービスが作られる。
最初の動く構成
中核の仕事は、App を宣言してコントローラに fetch・template・deploy させることだ。以下の例は公開された Carvel サンプルリポジトリを使う。
コントローラが ready になるのを待つ。
bashkubectl rollout status deployment/kapp-controller -n kapp-controllerAppがデプロイに使うサービスアカウントと namespace スコープの RBAC を作る。これをrbac.ymlとして保存する。yamlapiVersion: v1 kind: ServiceAccount metadata: name: default-ns-sa namespace: default --- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: default-ns-role namespace: default rules: - apiGroups: ["*"] resources: ["*"] verbs: ["*"] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: default-ns-role-binding namespace: default subjects: - kind: ServiceAccount name: default-ns-sa namespace: default roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: default-ns-role適用する。
bashkubectl apply -f rbac.ymlgit から fetch し、
yttで template し、kappで deploy するAppを宣言する。これをapp.ymlとして保存する。yamlapiVersion: kappctrl.k14s.io/v1alpha1 kind: App metadata: name: simple-app namespace: default spec: serviceAccountName: default-ns-sa fetch: - git: url: https://github.com/k14s/k8s-simple-app-example ref: origin/develop subPath: config-step-2-template template: - ytt: {} deploy: - kapp: {}適用する。
bashkubectl apply -f app.yml
動作確認
App の status を確認する。DESCRIPTION 列が各 reconcile の結果を報告する。
bash
kubectl get app simple-app -n default正常なら Reconcile succeeded が表示される。status に記録された段ごとの詳細 (fetch・template・deploy の出力と終了コード) を見るには次のようにする。
bash
kubectl get app simple-app -n default -o yamlサンプルがレンダリングしたリソース (Deployment と Service) が default namespace に存在するはずだ。
bash
kubectl get deployment,service -n default次に読むもの
- kapp-controller ドキュメント は、パッケージング (
PackageRepositoryとPackageInstall)、プライベートレジストリ認証、エアギャップ環境でのインストールを扱う。 - デプロイ用サービスアカウントの制限、
--namespaceフラグによる namespace スコープ化、サイドカーのセキュリティモデルといった本番運用の関心事は、同ドキュメントと メインリポジトリ から始めるとよい。