k8sに入門した(その5)「Helmを使ってwordpressを動かす」
ThinkpadにインストールしたUbuntu Server 20.04上のmicrok8sを使う。
今回はhelmのversion 3を利用してそのへんのapplicationを実際に動かすことを目標にする。
まずインストール
snap install microk8s --classic
snap install helm --classic
--classic
ってのはsnapのセキュリティを無効化する?みたいなオプションらしい。これをつけないとインストール出来ない。
これでmicrok8s
が使えるようになる。ただ、kubectl
はmicrok8s kubectl
と長々打たなきゃいけない。そのため以下のようにaliasを設定する。
snap alias microk8s.kubectl kubectl
これでk8s環境は準備完了。microk8s
の機能でmicrok8s reset
を使うと全てをリセット出来るので勉強環境としては最適。
次に、Helm
を使うためにconfigを指定する必要がある。
microk8s config > .kube/config
chmod o-r ~/.kube/config
chmod g-r ~/.kube/config
これは、Helmにこちらのk8s環境を教えるために設定だと思う。
repoを追加する。
helm repo add stable https://charts.helm.sh/stable
これが必要なのかはよくわかってない。
wordpressをinstallしてみる。
helm install stable/wordpress --generate-name
bitnamiのwordpressがインストールされる。
動いてるか確認する。
kubectl get all
deploymentsやらservicesは作成されているがStatusはPendingになっている。
詳細情報を確認すると
kubectl describe pod/wordpress-1645767693-5c985cdf66-ctcc5
0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.
と書いてある。状態を持つApplicationはPersistentVolumeを設定しないとだめらしい。
k8sのvolume周りが良くわからん。
一旦削除
helm delete wordpress-1645767693
よくわからないけど、microk8sのstorageアドオンを有効化してないのげ原因な気がする。
microk8s enable storage
有効化した後にinstallしたら動いた。
helm install stable/wordpress --generate-name
kubectl get all
ただLoadBalancerがPendingになってるからアクセス出来ない。
k8sのLoadBalancer周りも良くわからん。
microk8s status
を見たらLoadBalancerと関係ありそうなmetalib
が有効になってない。有効にしてみる。
microk8s enable metallb
ip adressのrangeを設定する必要がある。適当に使われてないIPのrangeを指定。
再度起動してみる。
helm install stable/wordpress --generate-name
kubectl get all
LoadBalancerにIPが割り当てられてるように見える。
でもなんか、pod/wordpress-1645770777-798d4b6cff-lnhcq 0/1 Running 1 (2m53s ago) 6m23s
となってて正常ではない。
状態を確認。
kubectl describe pod/wordpress-1645770777-798d4b6cff-lnhcq
なんかClusterIPのエラーで接続が出来てないとか言われてる?
k8sのClusterIP周りも良くわからん。
勘でdns addonを有効化してみる。
microk8s enable dns
再起動してみる。
helm install stable/wordpress --generate-name
kubectl get all
全部動いてるように見える。
LoadBalancerに割り当てられたIPにブラウザからhttpでアクセスしてみるとどうやら動いてる。
とりあえずdeployに成功した。
http://[LoadBalancer IP]/wp-login.phpにアクセスする。
usernameはuserで、passwdは以下のコマンドで取得できる。
echo $(kubectl get secret --namespace default wordpress-1645771303 -o jsonpath="{.data.wordpress-password}" | base64 --decode)
https://zenn.dev/derbuihan/scraps/512cd99a4feb15 で勉強したsecretが使われてる。こういうふうに使うんだ。
とりあえずLoginは出来た。
まとめると、microk8sだけで使える知識だけど、
- PersistentVolumeClaimsのエラー →
microk8s enable storage
- LoadBalancerのエラー →
microk8s enable metallb
- ClusterIPのエラー →
microk8s enable dns
が必要らしい。あと、microk8sにはhelm3ってアドオンがあるからsnapのじゃなくてこっち使うのが正しいのかもしれない。あとあと、毎回describeって打ってerror探すの面倒だからdashboard的なGUI管理ツールは使いこなせないとだめだな。
成果としてvolumeとLoadBalancerとClusterIP周りの勉強もしないといけないことがわかった。
何度かdeployしたからvolumeとか無駄なデータが残ってるはず。一旦環境を綺麗にしてから設定し直す。あとsnapでインストールしたhelmも削除する
microk8s reset
snap remove helm
アドオンを有効化する。
microk8s enable dns storage metallb
helmもmicrok8sのやつを用いる。
microk8s enable helm3
snap alias microk8s.helm3 helm
chmod o-r /var/snap/microk8s/current/credentials/client.config
chmod g-r /var/snap/microk8s/current/credentials/client.config
helm list
でエラー出来ないことを確認する。
さてwordpressをインストールしてみる。
helm install stable/wordpress --generate-name
kubectl get all
で動いてることが確認出来る。(repoの追加とかはいらなかったようだ)
非常に簡単だ。
helmfileとかいうツールもあるのか。
helmでinstallする際の環境変数の設定をfileにするみたいなツールなのかな?
すごいなぁ
何万個のコンテナをdocker-composeで管理するのとか無理
↓
k8sならmanifestにyamlで書けば理想の状態を定義して自動的にその状態を維持してくれる。
↓
yamlの設定が複雑だからhelmというpackage maneger作って設定をみんなで共有出来るようにしよう。
↓
package mangerからinstallするときに設定をファイルとして残せるようにhelmfileを書こう。
みたいな感じかな。
本番環境と開発環境のmanifestを分けるためにkustomize.yamlとかいうツールもあるみたいだし、色々混沌としてるなぁ。