Open19

自宅 minipc でいろいろあそぶ

ganyariyaganyariya

wifi において固定アドレスを設定する

/etc/netplan/00-installer-config-wifi.yaml
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

ganyariyaganyariya

https://misskey.ganyariya.dev/

  • misskey が動くようになった
  • オブジェクトは cloudflare r2
  • ローカルPCの公開には cloudflare tunneling
  • argocd で misskey をデプロイ
  • シークレット情報は google cloud secret manager

cloudflare r2 の設定については個人 notion にまとめています。

ganyariyaganyariya

DNS を設定する

https://scrapbox.io/ganyariya/Linux_における_DNS_問い合わせ

https://qiita.com/shora_kujira16/items/31d09b373809a5a44ae5

/etc/systemd/resolved.conf
[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 に戻せばいい。)

ganyariyaganyariya

https://blog.denet.co.jp/linux_lvm/
https://atmarkit.itmedia.co.jp/ait/articles/1910/04/news021.html

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
ganyariyaganyariya

https://work.getcosmic.ai/
https://docs.px.dev/installing-pixie/install-guides/hosted-pixie/cosmic-cloud

Pixie をつかって、ローカル ubuntu server の通信の可視化や cpu の可視化を行えるようにした。
ローカル k8s には通信を監視するエージェントを入れて、該当のエージェントは Cosmic Cloud に通信内容を送るらしい(おそらく、定期的に Cosmic Cloud に HTTP POST している。これであればローカル ubuntu server はポートを新たに開けなくてよく、安全に行える)。

grafana + prometheus と比べてどちらがよいか考える。

ganyariyaganyariya

やりたいことリスト

  • mDNS を試す
    • 正直これでいい
  • jenkins を建てる
  • prometheus + grafana で監視できるようにする
    • pixie を削除する
  • DNS を完成させる
  • 温度が高くなったら自動でシャットダウンするようにする
  • 他のミニPCを追加する
ganyariyaganyariya

mDNS

https://ja.wikipedia.org/wiki/マルチキャストDNS
https://book.hacktricks.xyz/jp/network-services-pentesting/5353-udp-multicast-dns-mdns
https://john-rama01.hatenablog.com/entry/2018/06/14/072049
https://xtech.nikkei.com/it/article/Keyword/20110601/360936/

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 に書いてある。
https://linuc.org/study/knowledge/508/
下記の場合は

  • files (/etc/hosts)
  • mdns4_minimal
    • ipv4 のみ
    • *.local 場合のみ mDNS を有効にする
  • dns サーバに問い合わせる

を表す

❯ cat /etc/nsswitch.conf --plain
# /etc/nsswitch.conf

hosts:          files mdns4_minimal [NOTFOUND=return] dns
ganyariyaganyariya

jenkins-master を pod として建てたので、その設定を備忘録としてまとめておく

http://ganyariya-ubuntu.local:32000/manage/cloud/kubernetes/configure


Kubernetes Plugin で Pod が作成される手順としては

  1. Jenkins Job が Pod を作成して、 50000 ポートで Pod が立ち上がるまで待つ
  2. kubernetes pod は作成されたのちに、 jenkins-master:50000 に通信を送って「じぶんをエージェントとして登録してください〜」をつたえる。
    3. Jenkins Job は 50000 に通信が来たので、該当の pod をエージェントとして登録する
  3. 該当の 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

ganyariyaganyariya

jenkins を建て終わったので、次は prometheus + grafana による観測環境を作っていく

ganyariyaganyariya

done!

  • prometheus + grafana
  • loki + promtail

メトリクス+ログをモニタリングできるようになって安心感が高まった
トレースはアプリケーションを開発したときかな...