自分備忘録用メモ。前の記事でデプロイしたArgo CD、TBS, Contour を利用し、Spring Petclinic のアプリケーションをデプロイした際の手順です。
前提条件
こちらの手順と同じ様な形で、Tanzu Kubernetes Grid(TKGm) 上に、Contour, TBS, Argo CD がデプロイ済である事。
手順
Spring Petclinic の準備
TBS を利用したコンテナイメージの作成
既にデプロイしてあるTBS を利用し、Petclinic のコンテナイメージを作成します。
今回はapplications
というNamespace を利用し、コンテナイメージの作成と、Petclinic アプリのデプロイを実施します。
TBS で利用するコンテナレジストリ用の(今回はHarbor を利用)のSecret を作成します。
kp create secret my-registry --registry registry.<MYDOMAIN> --registry-user devops --namespace applications
kp
CLI を用いて、コンテナイメージを作成します。--git
オプションでの指定するURL はPetclinic をFork した自分のGitHub のURL を指定します。
$ kp -n applications image create petclinic --tag registry.<MYDOMAIN>/spring/petclinic \
--git https://github.com/<github-account>/spring-petclinic.git \
--git-revision main --wait
以下の通り、イメージが作成されている事が確認出来ます。※以下のコマンド出力や、Harbor UI は、何回かGit を更新し、Commit が入った後のものであるため、複数回コンテナイメージが作成されています。
$ kp -n applications image list
NAME READY LATEST REASON LATEST IMAGE NAMESPACE
petclinic True COMMIT registry.<MYDOMAIN>/spring/petclinic@sha256:c24a4d5e6a4984fa6913b1b27a5a49b6605adc17289663f5ae43ec7f5488b9c4 applications
$ kp -n applications build list
BUILD STATUS IMAGE REASON
1 SUCCESS registry.<MYDOMAIN>/spring/petclinic@sha256:3f92eec571d1efb12f42c52e64c3e7c9df6173dde1a6fd37c1f05070e8591bfe CONFIG
2 SUCCESS registry.<MYDOMAIN>/spring/petclinic@sha256:d46f1c874d4f6803ad38ca48eff58f8cae901fdc7c949840a8172a730bc9c884 COMMIT
3 SUCCESS registry.<MYDOMAIN>/spring/petclinic@sha256:1f9c7b3f5c28285db33fe475f32782a09ad483b1a4a0f9433960cf9c565d5c39 COMMIT
4 SUCCESS registry.<MYDOMAIN>/spring/petclinic@sha256:311ac6857014f19e7bf914661a71a0d49404496f968f0919fa43bbcf5047f844 COMMIT
5 SUCCESS registry.<MYDOMAIN>/spring/petclinic@sha256:0cb63be1db66e6a37e4c98a995d77342f0608c60b741326bfddbff76956d4ac1 BUILDPACK+
6 SUCCESS registry.<MYDOMAIN>/spring/petclinic@sha256:a52158cd64c2455a5b46c083d1d124894a464d5070ec7a0c713f0473b3d2969e COMMIT
7 SUCCESS registry.<MYDOMAIN>/spring/petclinic@sha256:c5c895090e85934b3029adec638bfcf9aa76b9720045f6f7457bc2bb603f9e2d COMMIT
8 SUCCESS registry.<MYDOMAIN>/spring/petclinic@sha256:30dbca55ec8c4d7f5f5f60525ac4a497a64ce988e0bdb67eae12989eb4e84c6d COMMIT
9 SUCCESS registry.<MYDOMAIN>/spring/petclinic@sha256:c24a4d5e6a4984fa6913b1b27a5a49b6605adc17289663f5ae43ec7f5488b9c4 COMMIT
ちゃんとコンテナレジストリ上でもイメージがストアされている事が確認出来ます。
マニフェストファイルの作成
作成したコンテナをデプロイするためのマニフェストファイルを作成します。その前にTLS アクセス用のSecret を作成しておきます。
$ k -n applications create secret tls petclinic-tls-secret \
--cert=./lab-cert/<cluster-name>/cfg/live/<MYDOMAIN>/fullchain.pem \
--key=./lab-cert/<cluster-name>/cfg/live/<MYDOMAIN>/privkey.pem
続いて、Petclinic アプリ用のDeployment リソース、Service リソース、Ingress リソースを作成しています。
$ cat 01-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: petclinic
name: petclinic
namespace: applications
spec:
replicas: 1
selector:
matchLabels:
app: petclinic
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: petclinic
spec:
containers:
- image: registry.<MYDOMAIN>/spring/petclinic:latest
name: petclinic
ports:
- containerPort: 8080
resources: {}
status: {}
$ cat 02-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: petclinic
name: petclinic
namespace: applications
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 8080
selector:
app: petclinic
type: ClusterIP
$ cat 03-ingress-tls.yaml
apiVersion: projectcontour.io/v1
kind: HTTPProxy
metadata:
name: ingress-tls-petclinic
namespace: applications
spec:
virtualhost:
fqdn: petclinic.<MYDOMAIN>
tls:
secretName: petclinic-tls-secret
routes:
- services:
- name: petclinic
port: 8080
Fork したGitHub リポジトリ配下にk8s-manifest
というディレクトリを作成し、その配下に作成したマニフェストを置きました。
Argo CD を利用してのデプロイ
デプロイ済のArgo CD を利用して、Petclinic アプリをデプロイします。
Application をArgo CD のUI から作成していきます。以下の通り設定しました。
- PROJECT: default
- CLUSTER: Argo CD が稼働しているクラスタと同じなので、in-cluster(https://kuberntes.default.svc) を指定
- NAMESPACE: applications
- REPOURL: https://github.com/<github-account>/spring-petclinic.git
- PATH: k8s-manifest
この設定で、CREATE -> SYNC しました。以下の通り無事にデプロイできました。
Petclinic アプリに関しても、https://petclinic.<MYDOMAIN> でWeb ブラウザからアクセスする事が出来ました。