自宅 minipc でいろいろあそぶ
上記の再挑戦を行う
wifi において固定アドレスを設定する
network:
version: 2
wifis:
wlp1s0:
access-points:
ACCESS_POINT_NAME:
password: hogefuga
# 自分の固定アドレス
addresses:
- 192.168.11.100/24
# DNS サーバ
nameservers:
addresses:
- 192.168.11.1
search: []
# デフォルトゲートウェイ
routes:
- to: default
via: 192.168.11.1
cloudflared をローカル pc に導入する
misskey files でエラーが出る場合
- misskey が動くようになった
- オブジェクトは cloudflare r2
- ローカルPCの公開には cloudflare tunneling
- argocd で misskey をデプロイ
- シークレット情報は google cloud secret manager
cloudflare r2 の設定については個人 notion にまとめています。
NAS, NFS などの用語がよくわからなかったので調べた
わかりやすい
Service の各 type の説明
Service の loadBalancer は l4, Ingress は l7
忘れないようにメモ
DNS を設定する
[Resolve]
DNSStubListener=no
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl restart systemd-resolved
上記の設定によって coredns と「systemd-resolved」が 53 番ポートで衝突しなくなった。
つまり、 sytemd-resolved の stubListener 機能をやめて、 ubuntu server が直接 192.168.11.1 に通信するようになり、 53 番ポートが未使用になった。
(元に戻したい場合は /run/systemd/resolve/stub-resolv.conf にシンボリックリンクを貼る & DNSStubListner=yes に戻せばいい。)
k3s には ServiceLB という組み込みの LoadBalancer が導入されている。
そのため、 MetalLB を入れなくても Service type:LoadBalancer が自動で利用できる。
Ingress もつかえるらしい
miniPC の容量は 500 GB のハズだったが、 100G しか使えなかった。
Volume Group > Logical Volume
の構成になっており、 Logical Volume に 100G しか割り当てられていなかった。
そのため、 Logical Volume に +100.0 G をすることで容量を増やした。
sudo lvextend -L +100.0G /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
Pixie をつかって、ローカル ubuntu server の通信の可視化や cpu の可視化を行えるようにした。
ローカル k8s には通信を監視するエージェントを入れて、該当のエージェントは Cosmic Cloud に通信内容を送るらしい(おそらく、定期的に Cosmic Cloud に HTTP POST している。これであればローカル ubuntu server はポートを新たに開けなくてよく、安全に行える)。
grafana + prometheus と比べてどちらがよいか考える。
やりたいことリスト
-
mDNS を試す
- 正直これでいい
- jenkins を建てる
-
prometheus + grafana で監視できるようにする
- pixie を削除する
- DNS を完成させる
- 温度が高くなったら自動でシャットダウンするようにする
- 他のミニPCを追加する
mDNS
ubuntu-server に avahi-daemon をいれることで mDNS が有効になる。
これによって、ローカルネットワークにおいてホスト名で DNS 解決ができる。
(avahi は zeroconf の OSS 実装)。
http://ganyariya-ubuntu.local:xxx のようにアクセスできる
(ubuntu-server のホスト名は ganyariya-ubuntu。ここに .local
をつけることでアクセスできる)
http://ganyariya-ubuntu ではアクセスできないことに注意。
ホスト名は /etc/hostname をみるとわかる
sudo apt update
sudo apt install avahi-daemon
sudo systemctl enable avahi-daemon
sudo systemctl start avahi-daemon
linux における 名前解決順序は nsswitch.conf に書いてある。
下記の場合は- files (/etc/hosts)
- mdns4_minimal
- ipv4 のみ
-
*.local
場合のみ mDNS を有効にする
- dns サーバに問い合わせる
を表す
❯ cat /etc/nsswitch.conf --plain
# /etc/nsswitch.conf
hosts: files mdns4_minimal [NOTFOUND=return] dns
jenkins-master を pod として建てたので、その設定を備忘録としてまとめておく
http://ganyariya-ubuntu.local:32000/manage/cloud/kubernetes/configure
Kubernetes Plugin で Pod が作成される手順としては
- Jenkins Job が Pod を作成して、 50000 ポートで Pod が立ち上がるまで待つ
- kubernetes pod は作成されたのちに、 jenkins-master:50000 に通信を送って「じぶんをエージェントとして登録してください〜」をつたえる。
3. Jenkins Job は 50000 に通信が来たので、該当の pod をエージェントとして登録する - 該当の pod で処理を実行する
このとき、 jenkins url としては http://jenkins-service.jenkins.svc.cluster.local:8080
を指定すればよい。
また注意点として、 jenkins-service には 50000 のエージェント通信用のポートも設定しておく必要がある。
どうやら作成された Kubernetes pod は jenkins-service.jenkins.svc.cluster.local:8080
に HTTP API 通信をしたあとに、その後該当の endpoint で jenkins-service.jenkins.svc.cluster.local:50000
もそのまま通信するっぽい。
apiVersion: v1
kind: Service
metadata:
name: jenkins-service
annotations:
prometheus.io/scrape: "true"
prometheus.io/path: /
prometheus.io/port: "8080"
spec:
selector:
app: jenkins-master
type: NodePort
ports:
# 8080 は HTTP 通信で利用する
# UI と API リクエスト
- name: httpport
port: 8080
targetPort: 8080
nodePort: 32000
# master が 50000 で待ち受けている
# slave が master:50000 にアクセスすることで
# 「自分を登録してください〜」と master につたえている
- name: jnlpport
port: 50000
targetPort: 50000
nodePort: 32001
jenkins を建て終わったので、次は prometheus + grafana による観測環境を作っていく
done!
- prometheus + grafana
- loki + promtail
メトリクス+ログをモニタリングできるようになって安心感が高まった
トレースはアプリケーションを開発したときかな...
ここまでのまとめ
いったん ISUCON の勉強にうつる