一日で学ぶクラウドネイティブ技術実践ハンズオン 2023 を途中までやった

CloudNative Days Summer 2024 CNDS2024 Hands-on の話題を見かけて、僕もクラウドネイティブなOSSを触ってみたいと思いました。リストアップされていたのは以下のOSSです。

  • Docker
  • Kubernetes
  • Prometheus
  • Grafana
  • Pyroscope
  • Loki
  • Tempo
  • Open Telemetry
  • Cilium
  • Argo CD
  • Argo Rollouts
  • Istio
  • Hubble

この中で動かしたことがあるのはDocker, Kubernetes, Prometheus, Grafanaくらいでした。

cloudnativedaysjp/cnd-handson

以前も似たようなクラウドネイティブなOSSのハンズオンあったなと思って調べると cloudnativedaysjp/cnd-handson: 『一日で学ぶクラウドネイティブ技術実践ハンズオン』by CloudNative Days Tokyo 2023 実行委員会のドキュメントです。 が見つかりました。去年のハンズオンのリポジトリのようなのでこれをやります。

やったこと

minisforumのミニPCにProxmoxを入れます。

Proxmoxを入れる

  • USBにProxmoxのISOを焼く
  • インストール

CIDR周りの理解が浅くて困りました。ずっとネットワークに苦手意識があるのでまとまった時間で勉強しないと…

Ubuntu Serverだとnetplanなのですが、Proxmoxの場合は /etc/network/interfaces をいじると良いようです。結局DHCPにしました。

キタキタ

ISO Imageをuploadできるようなので、手元PCからアップロード

Ubuntu 24.04 をproxmoxのVMとして入れました。

Ubuntu Serverは入れる時にgithubからpublic keyを取ってこれるので、そこで設定をしてSSHの疎通まで行いました。

これでProxmoxのインストールは良し。

cnd-handsonをやる

https://github.com/cloudnativedaysjp/cnd-handson

kindを入れる

遭遇したエラー: read: connection reset by peer - error from a previous attempt:…

初手でつまづきました。

sudo kind create cluster --config=kind-config.yaml

kubectl cluster-info でエラー

error: Get "http://localhost:8080/version?timeout=32s": read tcp 127.0.0.1:58230->127.0.0.1:8080: read: connection reset by peer - error from a previous attempt:...

バージョンを上げたり色々試していましたが、うまくいかず

~/cnd-handson/chapter01_cluster-create$ kubectl cluster-info dump
The connection to the server localhost:8080 was refused - did you specify the right host or port?

良くみたらUbuntuユーザなので認証必要そうと思い、以下を試したら通った

KUBECONFIG=$HOME/.kube/config
sudo kind get kubeconfig > ~/.kube/config

よくみたらNoteに書いてある


ブラウザアクセスまで行けた

感動

Prometheus, Grafanaを入れるところはスイスイ行けました

この時点でVMに割り当てたメモリのうち8GBを使っていたので、ミニPCのメモリは16, 24くらい積んでおかないと足りなくなるかもしれません。

デフォルトダッシュボードを眺めて楽しいです Slackへのアラートはskipしました

OpenTelemetryへ行きます。

まずインストール段階で詰まりました。

helmでエラー

helmで色々入れるところでエラー

COMBINED OUTPUT:
  WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/uta8a/.kube/config
  WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /home/uta8a/.kube/config
  Release "jaeger-operator" does not exist. Installing it now.
  Error: 2 errors occurred:
  	* Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": dial tcp *.*.*.*: connect: operation not permitted
  	* Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": dial tcp *.*.*.*: connect: operation not permitted

なんかよく分からない

バージョンを上げたらupgrade guide見てねと言われた。破壊的変更によりvaluesのyamlを書き換える必要があるみたい。

> UPGRADE FAILED: execution error at (opentelemetry-operator/templates/NOTES.txt:2:3): [ERROR] 'manager.collectorImage.repository' must be set. See https://github.com/open-telemetry/opentelemetry-helm-charts/blob/main/charts/opentelemetry-operator/UPGRADING.md for instructions.

exampleを見ながら書き換えた

また違うエラー

COMBINED OUTPUT:
  WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /home/uta8a/.kube/config
  WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /home/uta8a/.kube/config
  Error: UPGRADE FAILED: Unable to continue with update: CustomResourceDefinition "opentelemetrycollectors.opentelemetry.io" in namespace "" exists and cannot be imported into the current release: invalid ownership metadata; label validation error: missing key "app.kubernetes.io/managed-by": must be set to "Helm"; annotation validation error: missing key "meta.helm.sh/release-name": must be set to "opentelemetry-operator"; annotation validation error: missing key "meta.helm.sh/release-namespace": must be set to "monitoring"

丸ごとエラー文をGitHub Copilot Chatに投げる

kubectl delete crd opentelemetrycollectors.opentelemetry.io

を提示してきたので実行

さらに似たエラーが出たので

kubectl delete crd instrumentations.opentelemetry.io

を実行

もう一度helm syncしたら成功した。


fileのexporterをやるところはうまくいった。

でもprometheusに送るところでエラー

prometheusremotewrite

なんかstatusがエラーなので嫌な予感がする

$ kubectl get daemonsets,pods -l app.kubernetes.io/name=metrics-collector-collector
NAME                                         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/metrics-collector-collector   2         2         0       2            0           <none>          22s

NAME                                    READY   STATUS   RESTARTS      AGE
pod/metrics-collector-collector-2wt7h   0/1     Error    2 (21s ago)   22s
pod/metrics-collector-collector-wsgqv   0/1     Error    2 (21s ago)   22s

ログを見ると案の定だめだった

$ kubectl logs -l app.kubernetes.io/name=metrics-collector-collector -f
Error: failed to get config: cannot unmarshal the configuration: 1 error(s) decoding:

* error decoding 'exporters': unknown type: "prometheusremotewrite" for id: "prometheusremotewrite" (valid values: [otlphttp file loadbalancing debug nop otlp])

exporterのkeyに prometheusremotewrite を指定できないのかな?と思って調べると、contribというのを入れる必要があるみたい。

参考: https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30791

curl --proto '=https' --tlsv1.2 -fOL https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.102.1/otelcol_contrib_0.102.1_linux_amd64.tar.gz

バイナリは手に入れたけど続きがよく分からない… chapter04にあるように、これはプラグインの機構をしているはずなのでcontribのバイナリをどこかからロードできるようにしてあげる必要がありそうなんだけど…

というわけで詰まってしまって時間かけても無理だったので諦めた。1週間後に2024年版のcnd-handsonがあるっぽいのでそこでの資料公開を待とう。