--- title: Tanzu for Valkey on Kubernetes 3.1をインストールするメモ tags: ["Valkey", "Tanzu", "Kubernetes", "Redis", "Helm", "MicroK8s", "Spring Boot"] categories: ["Middleware", "KeyValueStore", "Valkey"] date: 2025-09-17T03:52:40Z updated: 2025-09-17T03:56:23Z --- [Tanzu for Valkey on Kubernetes 3.1](https://techdocs.broadcom.com/us/en/vmware-tanzu/data-solutions/tanzu-for-valkey-on-kubernetes/3-1/valkey-on-kubernetes/index.html)をインストールしてみます。今回はPrivate Network上のMicroK8sにインストールします。 **目次** ### Tanzu for Valkey on Kubernetes Docker Registryのアクセストークン取得 Broadcom Supportにログインして、[Tanzu for Valkey on Kubernetes](https://support.broadcom.com/group/ecx/productdownloads?subfamily=VMware%20Tanzu%20for%20Valkey%20on%20Kubernetes)のページからDockerレジストリのトークンを取得します。 ![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1852/cd07bf77-f9bb-432c-9b1d-e5eacb68f80d.png) 次のコマンドで`tanzu-valkey.packages.broadcom.com`にログインします。認証情報を自分のものに置き換えてください。 ```bash BC_SUPPORT_USERNAME=your-email@example.com BC_SUPPORT_PASSWORD=eyJ2ZX************************************* docker login tanzu-valkey.packages.broadcom.com -u ${BC_SUPPORT_USERNAME} -p ${BC_SUPPORT_PASSWORD} ``` 今回はコンテナイメージをPrivate Network上のSelf HostedなContainer Registry (ここでは`harbor.lan.ik.am`)にリロケートして使用します。 リロケート先はPrivate Network上でないとEULAに違反する恐れがあるので気をつけてください。 ### Helm ChartとコンテナイメージをContainer Registryへリロケート 次のコマンドでリロケート先のContainer Registryにログインします。認証情報は自分のものに置き換えてください。 ```bash REGISTRY_HOSTNAME=harbor.lan.ik.am REGISTRY_USERNAME=your-username REGISTRY_PASSWORD=your-password docker login ${REGISTRY_HOSTNAME} -u ${REGISTRY_USERNAME} -p ${REGISTRY_PASSWORD} ``` リロケートには[`imgpkg`](https://carvel.dev/imgpkg/)を使用します。imgpkgがインストールされていない場合は、[公式ドキュメント](https://carvel.dev/imgpkg/docs/v0.46.x/install/)を参照してインストールしてください。 ```bash imgpkg copy -i tanzu-valkey.packages.broadcom.com/tanzu-valkey-helm:3.1.0 --to-repo ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-helm ``` リロケート後のHelm Chartにアクセスして設定可能なvaluesを確認します。 ```yaml $ helm show values oci://${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-helm --version 3.1.0 kubernetesClusterDomain: cluster.local imagePullSecretName: jfrog-secret operator: image: repository: tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-operator tag: 3.1.0 resources: limits: cpu: 1 memory: 1Gi requests: cpu: 1 memory: 1Gi instanceRepo: tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-instances authRepo: tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-auth persistenceRepo: tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-persistence commanderRepo: tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-commander modulesRepo: tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-modules exporterRepo: tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-exporter enableSecurityContext: true ``` valuesに現れる各種イメージをリロケートします。各イメージのバージョンはアクセストークンが表示されたダイアログの下に表示されます。 ![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1852/50d4c15b-9021-4879-bcbc-7f8f903617d0.png) ```bash imgpkg copy -i tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-operator:3.1.0 --to-repo ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-operator imgpkg copy -i tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-instances:3.1.0-valkey-8.1.3 --to-repo ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-instances imgpkg copy -i tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-instances:3.1.0-valkey-sentinel-8.1.3 --to-repo ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-instances imgpkg copy -i tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-auth:1.1.0 --to-repo ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-auth imgpkg copy -i tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-persistence:1.2.0 --to-repo ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-persistence imgpkg copy -i tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-commander:1.2.0 --to-repo ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-commander imgpkg copy -i tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-modules:1.0.0 --to-repo ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-modules imgpkg copy -i tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-exporter:1.0.0 --to-repo ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-exporter imgpkg copy -i tanzu-valkey.packages.broadcom.com/tanzu-valkey-container/tanzu-valkey-connector:1.0.0 --to-repo ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-connector ``` ### Tanzu for Valkey on Kubernetes 3.1のインストール Valkey Operatorをインストールするためのvaluesファイルを作成します。リロケート先のContainer Registryの情報に置き換えてください。 ```yaml cat < valkey-values.yaml --- operator: image: repository: ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-operator tag: 3.1.0 resources: limits: cpu: 1 memory: 1Gi requests: cpu: 0.1 memory: 128Mi instanceRepo: ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-instances authRepo: ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-auth persistenceRepo: ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-persistence commanderRepo: ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-commander modulesRepo: ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-modules exporterRepo: ${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-exporter enableSecurityContext: true --- EOF ``` Valkey Operatorをインストールします。`valkey-system`という名前空間を作成し、Container Registryにアクセスするためのイメージプルシークレットを作成してからHelm Chartをインストールします。 ```bash kubectl create namespace valkey-system kubectl create secret docker-registry jfrog-secret \ --docker-server=${REGISTRY_HOSTNAME} \ --docker-username=${REGISTRY_USERNAME} \ --docker-password=${REGISTRY_PASSWORD} \ --namespace=valkey-system ``` 次のコマンドでValkey Operatorをインストールします。 ```bash helm upgrade --install -n valkey-system valkey oci://${REGISTRY_HOSTNAME}/tanzu-valkey/tanzu-valkey-helm --version 3.1.0 --wait -f valkey-values.yaml ``` インストールが完了したら、次のコマンドでインストール状況を確認します。 ```bash $ helm list -n valkey-system NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION valkey valkey-system 1 2025-09-16 15:23:30.145007 +0900 JST deployed tanzu-valkey-helm-3.1.0 3.1.0 ``` 次のコマンドでValkey OperatorのPodが起動していることを確認します。 ```bash $ kubectl get pod -n valkey-system NAME READY STATUS RESTARTS AGE valkey-operator-6d4d9ff4d6-gsq2p 1/1 Running 0 48s ``` 利用可能なカスタムリソースを確認します。 ```bash $ kubectl api-resources --api-group=data.tanzu.vmware.com NAME SHORTNAMES APIVERSION NAMESPACED KIND redistovalkeymigrations redistovkmigr data.tanzu.vmware.com/v1 true RedisToValkeyMigration valkeybackuplocations vkbkpl data.tanzu.vmware.com/v1 true ValkeyBackupLocation valkeybackups vkbkp data.tanzu.vmware.com/v1 true ValkeyBackup valkeybackupschedules vkbkpsch data.tanzu.vmware.com/v1 true ValkeyBackupSchedule valkeyclusterbackups vkclrbkp data.tanzu.vmware.com/v1 true ValkeyClusterBackup valkeyclusters vkclr data.tanzu.vmware.com/v1 true ValkeyCluster valkeycommanders vkcom data.tanzu.vmware.com/v1 true ValkeyCommander valkeyrdbtoaofs vkrdbtoaof data.tanzu.vmware.com/v1 true ValkeyRdbToAof valkeyreplications vkrep data.tanzu.vmware.com/v1 true ValkeyReplication valkeyrestores vkres data.tanzu.vmware.com/v1 true ValkeyRestore valkeys vk data.tanzu.vmware.com/v1 true Valkey valkeysentinels vksen data.tanzu.vmware.com/v1 true ValkeySentinel valkeyversions vkver data.tanzu.vmware.com/v1 false ValkeyVersion valkeyversionupgrades vkverupgr data.tanzu.vmware.com/v1 true ValkeyVersionUpgrade ``` 利用可能なValkeyのバージョンを確認します。 ```bash $ kubectl get valkeyversions NAME VERSION OPERATOR_VERSION valkey-7.2.10 7.2.10 3.1.0 valkey-7.2.5 7.2.5 3.1.0 valkey-7.2.6 7.2.6 3.1.0 valkey-7.2.7 7.2.7 3.1.0 valkey-7.2.8 7.2.8 3.1.0 valkey-7.2.9 7.2.9 3.1.0 valkey-8.0.0 8.0.0 3.1.0 valkey-8.0.1 8.0.1 3.1.0 valkey-8.0.2 8.0.2 3.1.0 valkey-8.0.3 8.0.3 3.1.0 valkey-8.0.4 8.0.4 3.1.0 valkey-8.1.0 8.1.0 3.1.0 valkey-8.1.1 8.1.1 3.1.0 valkey-8.1.2 8.1.2 3.1.0 valkey-8.1.3 8.1.3 3.1.0 ``` Valkey 8.1.3の詳細を確認します。 ```yaml $ kubectl get valkeyversion valkey-8.1.3 -oyaml apiVersion: data.tanzu.vmware.com/v1 kind: ValkeyVersion metadata: annotations: meta.helm.sh/release-name: valkey meta.helm.sh/release-namespace: valkey-system creationTimestamp: "2025-09-16T06:23:34Z" generation: 1 labels: app.kubernetes.io/managed-by: Helm name: valkey-8.1.3 resourceVersion: "26199867" uid: 626408c8-b1a5-4119-b963-fd77bd8d02cf spec: images: auth: harbor.lan.ik.am/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-auth:1.1.0 commander: harbor.lan.ik.am/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-commander:1.2.0 exporter: harbor.lan.ik.am/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-exporter:1.0.0 instance: harbor.lan.ik.am/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-instances:3.1.0-valkey-8.1.3 modules: harbor.lan.ik.am/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-modules:1.0.0 persistence: harbor.lan.ik.am/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-persistence:1.2.0 sentinel: harbor.lan.ik.am/tanzu-valkey/tanzu-valkey-container/tanzu-valkey-instances:3.1.0-valkey-sentinel-8.1.3 operatorVersion: 3.1.0 version: 8.1.3 ``` 今回は8.1.3のイメージしかリロけーとしていないので、8.1.3以外を使うとイメージをPullできずに失敗するでしょう。 Tanzu for Valkey on Kubernetes 3.1ではValkeyのサンプル設定ファイルが提供されているので、これを利用してValkeyインスタンスを作成します。次のコマンドでサンプル設定ファイルをダウンロードして展開します。必要に応じて参照してください。 ``` curl -sL0 https://packages.broadcom.com/artifactory/tanzu-valkey/tanzu-valkey-container/valkey-samples-3.1.0.tar.gz -u ${BC_SUPPORT_USERNAME}:${BC_SUPPORT_PASSWORD} | tar -xzvf - ``` ### Valkeyインスタンスの作成と動作確認 シングルノードのValkeyインスタンスを作成するための設定ファイルを作成します。 ```yaml cat < demo-valkey.yaml --- apiVersion: data.tanzu.vmware.com/v1 kind: Valkey metadata: name: demo-valkey namespace: demo spec: valkeyVersion: name: valkey-8.1.3 resources: instance: limits: cpu: 1 memory: 1Gi requests: cpu: 0.5 memory: 512Mi kubernetesConfig: imagePullSecrets: - name: jfrog-secret valkeySecret: name: valkey-secret key: valkey-password --- EOF ``` Valkeyインスタンスを作成するための名前空間を作成し、Container RegistryにアクセスするためのイメージプルシークレットとValkeyのパスワードを格納するシークレットを作成します。`valkey-password`の値は自分の好きなパスワードに置き換えてください。 ````bash kubectl create namespace demo kubectl create secret docker-registry jfrog-secret \ --docker-server=${REGISTRY_HOSTNAME} \ --docker-username=${REGISTRY_USERNAME} \ --docker-password=${REGISTRY_PASSWORD} \ --namespace=demo kubectl -n demo create secret generic valkey-secret \ --from-literal=valkey-password=YourStrongPassw0rd ```` Valkeyインスタンスを作成します。 ```bash kubectl apply -f demo-valkey.yaml ``` Valkeyインスタンスの作成状況を確認します。`STATUS`が`Running`になるまで待ちます。 ```bash $ kubectl get valkey -n demo NAME STATUS VERSION AGE demo-valkey Running valkey-8.1.3 47s $ kubectl get pod,svc -n demo -l app=demo-valkey NAME READY STATUS RESTARTS AGE pod/demo-valkey-0 1/1 Running 0 92s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/demo-valkey-headless ClusterIP None 6379/TCP 92s ``` Port Forwardingでローカルの6379ポートをValkey Serviceの6379ポートに転送します。 ```bash kubectl port-forward -n demo svc/demo-valkey-headless 6379:6379 ``` 別のターミナルで`redis-cli`を使用してValkeyに接続し、動作確認を行います。`YourStrongPassw0rd`は先ほど設定したValkeyのパスワードに置き換えてください。 ```bash redis-cli -h localhost -p 6379 -a YourStrongPassw0rd ``` Valkeyに接続できたら、`set`と`get`コマンドで動作確認を行います。 ```bash localhost:6379> set foo 100 OK (0.56s) localhost:6379> get foo "100" ``` ### Spring Bootアプリケーションからの接続確認 次のサンプルアプリケーションを使用して、Spring BootアプリケーションからValkeyに接続できることを確認します。 ```bash git clone https://github.com/making/demo-redis cd demo-redis ./mvnw clean package -DskipTests ``` Valkeyに接続するためのパラメータを指定してアプリケーションを起動します。`YourStrongPassw0rd`は先ほど設定したValkeyのパスワードに置き換えてください。 ```bash java -jar target/demo-redis-0.0.1-SNAPSHOT.jar --spring.data.redis.host=localhost --spring.data.redis.port=6379 --spring.data.redis.password=YourStrongPassw0rd ``` アプリケーションが起動したら、別のターミナルで次のコマンドを実行して動作確認を行います。 ```bash $ curl "http://localhost:8080?key=foo" 100 $ curl "http://localhost:8080?key=foo" -H "Content-Type: text/plain" -d Hello $ curl "http://localhost:8080?key=foo" Hello ``` ### Spring BootアプリケーションのKubernetesへのデプロイ Spring BootアプリケーションをKubernetesにデプロイし、Valkeyに接続できることを確認します。 デモアプリをK8s上にデプロイするために、https://github.com/stakater/application の汎用的なHelm Chartを使用します。 helm repo add stakater https://stakater.github.io/stakater-charts 次のvaluesファイルを作成します。`lan.ik.am`は自分のドメインに置き換えてください。 ```yaml cat < demo-redis-values.yaml --- applicationName: demo-redis deployment: image: repository: ghcr.io/making/demo-redis tag: jvm pullPolicy: Always ports: - name: http containerPort: 8080 protocol: TCP env: spring.data.redis.host: value: demo-valkey-headless.demo.svc.cluster.local spring.data.redis.port: value: "6379" spring.data.redis.password: valueFrom: secretKeyRef: name: valkey-secret key: valkey-password resources: limits: cpu: memory: 768Mi requests: cpu: memory: 768Mi livenessProbe: enabled: true httpGet: path: /actuator/health/liveness port: 8080 scheme: HTTP readinessProbe: enabled: true httpGet: path: /actuator/health/readiness port: 8080 scheme: HTTP containerSecurityContext: allowPrivilegeEscalation: false capabilities: drop: - ALL readOnlyRootFilesystem: false runAsNonRoot: true runAsUser: 1002 seccompProfile: type: RuntimeDefault affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchLabels: app.kubernetes.io/part-of: demo-redis topologyKey: kubernetes.io/hostname weight: 1 ingress: enabled: true annotations: projectcontour.io/tls-cert-namespace: projectcontour hosts: - host: demo-redis.lan.ik.am paths: - path: / pathType: Prefix tls: - hosts: - demo-redis.lan.ik.am secretName: default-tls --- EOF ``` Helm Chartを使用してアプリケーションをデプロイします。 ```bash helm upgrade --install demo-redis stakater/application -n demo -f demo-redis-values.yaml --wait ``` アプリケーションが起動したら、次のコマンドを実行して動作確認を行います。 ```bash $ curl "https://demo-redis.lan.ik.am?key=foo" 100 $ curl "https://demo-redis.lan.ik.am?key=foo" -H "Content-Type: text/plain" -d "Hello from K8s" $ curl "https://demo-redis.lan.ik.am?key=foo" Hello from K8s ``` とりあえず、ここまで。 Valkey SentinelやValkey Clusterの動作確認はまた今度。