チャチャチャおもちゃの抹茶っちゃ

ゲームのこととかプログラミングのこととか。気が向いたら書く。ブログタイトルは友人が考えました。

【kubernetes】自作PCにシングルマスタークラスターの構築してみる

はじめに

前回の記事でも書いたように、余ったPCパーツで新しくPCを組み立てました。何に使おうかなーとおもっていたのですが、ちょうどkubernetesを最近触っていて、自由にいじれるクラスタ欲しいなーと思い試してみることにしました*1

コンセントが余っていた廊下に直置き

昨今では気軽に試せるようにminikubeとかkind とかありますが、違うんです。開発環境使ってkubernetesの使い方を知りたいんじゃなくて、オンプレとかの本番環境は実際にはどう構築するんだろう?みたいなのを知りたかったんです。

その前に: kubernetesってなんだよ?

コンテナオーケストレーションツールと呼ばれる、コンテナの運用管理やスケーリングを助けるツールです。コンテナ化されたアプリケーションに対して、負荷が大きかったら複製したり、複数のアプリケーションをまとめてデプロイしたり、みたいなのを簡単にすることができます。

kubernetesではクラスタと呼ばれる、通常複数台からなるマシンの集合を用意して、そこにコンテナを乗せて、そのコンテナを管理します。

kubernetesアーキテクチャ

https://d33wubrfki0l68.cloudfront.net/2475489eaf20163ec0f54ddc1d92aa8d4c87c96b/e7c81/images/docs/components-of-kubernetes.svg

公式サイト に行くと、こんな感じの図が出てきます。各コンポーネントに対する説明も載っているので、読んでみるのが良いかと思います。

今回やりたいこと

先述したminikubeやkindは擬似的なクラスターを作成して、いい感じにkubernetesが使える環境を提供してくれます。ただ、今回はこのクラスター自体を自分でセットアップして、kubernetesクラスターとして使えるようにすることを目指します。クラスターと言いつつ、手元の自由に破壊できるPCは1台なので、1つのノードがコントロールプレーンでもありワーカーノードでもある†最強†*2クラスターを作ります。この操作を通してkubernetesアーキテクチャをより理解できたらいいな、という感じ。

kubernetesクラスターの構築

基本的には公式ドキュメントにならっていきます。 kubeadmのインストール | Kubernetes

事前準備

ぼくの環境は以下です。

[root@mattyan1053 ~]# cat /etc/redhat-release 
Rocky Linux release 8.8 (Green Obsidian)

インストールするのはkubernetes 1.27系でした。

kubernetesではswapを無効にしないといけないので無効((man systemd.swap))にします。ちなみにどのコンポーネントがswapにNGを出しているかというと、kubeletらしいです(kubeletの設定を変えればswap有効でもいけるらしいですが、自分の環境はメモリが16GBと潤沢にあるので無効にします)。

[root@mattyan1053 ~]# vi /etc/fstab # swapの行(おそらく末尾行)を削除
[root@mattyan1053 ~]# systemctl mask "dev-dm-1.swap"
Unit dev-dm-1.swap does not exist, proceeding anyway.
Created symlink /etc/systemd/system/dev-dm-1.swap → /dev/null.
[root@mattyan1053 ~]# reboot
[root@mattyan1053 ~]# swapon -s
[root@mattyan1053 ~]# systemctl --type swap
0 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

特定のポートがあいていれば実は大丈夫なんですが*3、その後もNodePortとか設定して個別に開けたり面倒なので(kuernetesはnftablesに互換性はないようです)、firewalldまたはnftablesを止めます。*4。自分の環境では元々firewalldが動いていて、iptablesは使っていませんでした。

[root@mattyan1053 ~]# rpm -qa | grep -E "firewalld|iptables|nftables"
firewalld-filesystem-0.9.3-13.el8.noarch
iptables-1.8.4-24.el8.x86_64
python3-nftables-0.9.3-26.el8.x86_64
iptables-libs-1.8.4-24.el8.x86_64
firewalld-0.9.3-13.el8.noarch
iptables-ebtables-1.8.4-24.el8.x86_64
nftables-0.9.3-26.el8.x86_64
[root@mattyan1053 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2023-06-08 09:53:06 JST; 9h ago
     Docs: man:firewalld(1)
 Main PID: 866 (firewalld)
    Tasks: 2 (limit: 100272)
   Memory: 40.0M
   CGroup: /system.slice/firewalld.service
           └─866 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid

 608 09:52:58 mattyan1053.rocky.local systemd[1]: Starting firewalld - dynamic firewall daemon...
 608 09:53:06 mattyan1053.rocky.local systemd[1]: Started firewalld - dynamic firewall daemon.
 608 09:53:07 mattyan1053.rocky.local firewalld[866]: WARNING: AllowZoneDrifting is enabled. This is considered a>
[root@mattyan1053 ~]# ^status^stop
systemctl stop firewalld
[root@mattyan1053 ~]# ^stop^disable
systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@mattyan1053 ~]# systemctl status nftables
● nftables.service - Netfilter Tables
   Loaded: loaded (/usr/lib/systemd/system/nftables.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:nft(8)

selinuxを無効化します。よく知られているやつです。今のところ使いこなせないのと、LAN内でしか公開しないので無効化。

[root@mattyan1053 ~]# getenforce
Enforcing
[root@mattyan1053 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
[root@mattyan1053 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@mattyan1053 ~]# reboot
[root@mattyan1053 ~]# getenforce
Disabled

kubernetesはブリッジを作成して、pod間の通信はブリッジを経由して行います。そのため、iptablesがブリッジを通過するトラフィックを処理できるようにしておく必要があるようです。 ここにかかれていました。

[root@mattyan1053 ~]# cat << EOF | tee /etc/modules-load.d/containerd.conf
> overlay
> br_netfilter
> EOF
overlay
br_netfilter
[root@mattyan1053 ~]# cat << EOF | tee /etc/sysctl.d/99-kubernetes-cri.conf
> net.ipv4.ip_forward = 1
> net.bridge.bridge-nf-call-iptables = 1
> net.bridge.bridge-nf-call-ip6tables = 1
> EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
[root@mattyan1053 ~]# modprobe overlay
[root@mattyan1053 ~]# modprobe br_netfilter
[root@mattyan1053 ~]# sysctl --system

* Applying /etc/sysctl.d/99-kubernetes-cri.conf ...
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

tcコマンドが必要らしい((先の手順でkubeadm initしようとしたら「ないぞ!」って怒られた))ので、インストールしておきます。帯域制御みたいのがいるんだろうか、誰か教えてください。

[root@mattyan1053 ~]# dnf install iproute-tc

kubernetesのインストール

さて、いよいよkubernetesクラスタをつくります。

コンテナランタイムの用意

まず、コンテナランタイムを用意しておきます。コンテナランタイムとしてはDockerやcontainerdを使うことができます。Dockerをインストールするとcontainerdも一緒についてくるので、Dockerをいれます。

[root@mattyan1053 ~]# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@mattyan1053 ~]# dnf -y install docker-ce
[root@mattyan1053 ~]# systemctl enable docker --now
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@mattyan1053 ~]# cp -p /etc/containerd/config.toml /etc/containerd/config.toml_bak
[root@mattyan1053 ~]# containerd config default | tee /etc/containerd/config.toml
[root@mattyan1053 ~]# vi /etc/containerd/config.toml
          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            BinaryName = ""
            CriuImagePath = ""
            CriuPath = ""
            CriuWorkPath = ""
            IoGid = 0
            IoUid = 0
            NoNewKeyring = false
            NoPivotRoot = false
            Root = ""
            ShimCgroup = ""
            SystemdCgroup = true # ←ここをfalseからtrueに書き換えた
[root@mattyan1053 ~]# systemctl restart containerd
[root@mattyan1053 ~]# systemctl restart docker

Dockerとcontainerdが両方検出されたときはDockerが優先されるらしいです*5。今回はcontainerdを使ってみます(特に理由はないけど)。 公式ドキュメントにもあるように、cgroupを変えてあげないといけないみたいです。コントロールグループ、まだよくわかっていないんですよね。

kubernetesのインストール

リポジトリを追加してインストールします。

  • kubeadm: kubernetesクラスター自体を起動するコマンド群
  • kubelet: クラスタの各ノードで実行されるエージェントで、各コンテナがPodで実行されていることを保証する
  • kubectl: クラスターにアクセスするためのコマンドラインツール、クラスター本体にインストールする必要はないかもしれない(あるかもしれない)
[root@mattyan1053 ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
> [kubernetes]
> name=Kubernetes
> baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
> enabled=1
> gpgcheck=1
> repo_gpgcheck=1
> gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
> EOF
[root@mattyan1053 ~]# less /etc/yum.repos.d/kubernetes.repo 
[root@mattyan1053 ~]# dnf repolist
repo id                                               repo の名前
appstream                                             Rocky Linux 8 - AppStream
baseos                                                Rocky Linux 8 - BaseOS
docker-ce-stable                                      Docker CE Stable - x86_64
extras                                                Rocky Linux 8 - Extras
kubernetes                                            Kubernetes
[root@mattyan1053 ~]# dnf install kubelet kubeadm kubectl

依存関係が解決しました。
=====================================================================================================================
 パッケージ                          アーキテクチャー    バージョン                    リポジトリー            サイズ
=====================================================================================================================
インストール:
 kubeadm                             x86_64              1.27.2-0                      kubernetes               11 M
 kubectl                             x86_64              1.27.2-0                      kubernetes               11 M
 kubelet                             x86_64              1.27.2-0                      kubernetes               20 M
依存関係のインストール:
 conntrack-tools                     x86_64              1.4.4-11.el8                  baseos                  203 k
 cri-tools                           x86_64              1.26.0-0                      kubernetes              8.6 M
 kubernetes-cni                      x86_64              1.2.0-0                       kubernetes               17 M
 libnetfilter_cthelper               x86_64              1.0.0-15.el8                  baseos                   23 k
 libnetfilter_cttimeout              x86_64              1.0.0-11.el8                  baseos                   23 k
 libnetfilter_queue                  x86_64              1.0.4-3.el8                   baseos                   30 k
 socat                               x86_64              1.7.4.1-1.el8                 appstream               322 k

トランザクションの概要
=====================================================================================================================
インストール  10 パッケージ

初回起動時の設定を少しだけします。設定用yamlを出力して、一部書き換え。

[root@mattyan1053 ~]# kubeadm config print init-defaults | tee ClusterConfiguration.yaml
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 1.2.3.4
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///var/run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: node
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.k8s.io
kind: ClusterConfiguration
kubernetesVersion: 1.27.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
scheduler: {}
[root@mattyan1053 ~]# sed -i 's/ advertiseAddress: 1.2.3.4/ advertiseAddress: 192.168.50.120/' ClusterConfiguration.yaml # ネットワークインターフェースのIPを指定する
[root@mattyan1053 ~]# cat << EOF | cat >> ClusterConfiguration.yaml
> ---
> apiVersion: kubelet.config.k8s.io/v1beta1
> kind: KubeletConfiguration
> cgroupDriver: systemd
> EOF

これで準備完了です。

うおお起動じゃ

[root@mattyan1053 ~]# kubeadm init --config=ClusterConfiguration.yaml
略
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
略
[root@mattyan1053 ~]# systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
[root@mattyan1053 ~]# systemctl stop docker
Warning: Stopping docker.service, but it can still be activated by:
  docker.socket
[root@mattyan1053 ~]# systemctl disable docker
Removed /etc/systemd/system/multi-user.target.wants/docker.service.
[root@mattyan1053 ~]# systemctl enable containerd
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /usr/lib/systemd/system/containerd.service.

これをするとkubernetesクラスタが構築されて、kubeletも起動しています。ついでにコンテナランタイムはcontainerdを使うので、Dockerはもう落としてしまいましょう。逆にcontainerdはenableしておきます。

更にetcdなどの必要なpodは自動でつくられるようですね。次に、kubectl使えるようにしたいので、kubectlの向き先を自分のクラスタに向けるために、言われた通りにやります。もうそろそろroot権限じゃなくていいし、kubectlはユーザーから打ちたいのでconfigはユーザー配下のところに作ります。

[mattyan1053@mattyan1053 ~]$ mkdir -p $HOME/.kube
[mattyan1053@mattyan1053 ~]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[mattyan1053@mattyan1053 ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
[mattyan1053@mattyan1053 ~]$ kubectl get nodes
NAME   STATUS     ROLES           AGE     VERSION
node   NotReady   control-plane   7m19s   v1.27.2

これでクラスタができました!

さて、コンテナ同士が通信するには、Container Network Interface (CNI) が必要らしいです*6

[mattyan1053@mattyan1053 ~]$ kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.0/manifests/calico.yaml
[mattyan1053@mattyan1053 ~]$ kubectl get pods --all-namespaces
NAMESPACE     NAME                                       READY   STATUS     RESTARTS   AGE
kube-system   calico-kube-controllers-786b679988-qpcjn   0/1     Pending    0          40s
kube-system   calico-node-w6bss                          0/1     Init:0/3   0          40s
kube-system   coredns-5d78c9869d-4tbnc                   0/1     Pending    0          12m
kube-system   coredns-5d78c9869d-5sg8w                   0/1     Pending    0          12m
kube-system   etcd-node                                  1/1     Running    0          12m
kube-system   kube-apiserver-node                        1/1     Running    0          12m
kube-system   kube-controller-manager-node               1/1     Running    0          12m
kube-system   kube-proxy-ksxll                           1/1     Running    0          12m
kube-system   kube-scheduler-node                        1/1     Running    0          12m

準備が整うと、STATUSがReadyになります。

[mattyan1053@mattyan1053 ~]$ kubectl get nodes
NAME   STATUS   ROLES           AGE   VERSION
node   Ready    control-plane   16m   v1.27.2

もし、ROLESにmasterがいたら、削除してあげないとPodがこのノードに作成できないので削除してあげましょう。

$ kubectl taint nodes --all node-role.kubernetes.io/master-

最後に、コントロールプレーンノードしかないのに、Taintでコントロールプレーンノードには通常だとPodがデプロイできないようになっているので、外します。

[mattyan1053@mattyan1053 k8s-dashboard]$ kubectl describe node node | grep NoSchedule
Taints:             node-role.kubernetes.io/control-plane:NoSchedule
[mattyan1053@mattyan1053 k8s-dashboard]$ kubectl taint nodes node node-role.kubernetes.io/control-plane:NoSchedule-
node/node untainted

試しになにかデプロイしてみる

kubernetesWeb UIダッシュボードが使えるみたいです。これでkubernetesクラスタの状況がGUIで見れます。デフォルトだと入っていないみたいなので、デプロイしてみましょう。

[mattyan1053@mattyan1053 ~]$ wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml
[mattyan1053@mattyan1053 ~]$ vi recommended.yaml
---

  kind: Service
  apiVersion: v1
  metadata:
    labels:
      k8s-app: kubernetes-dashboard
    name: kubernetes-dashboard
    namespace: kubernetes-dashboard
  spec:
+   type: NodePort
    ports:
      - port: 443
        targetPort: 8443
+       nodePort: 30843
    selector:
      k8s-app: kubernetes-dashboard

  ---

ServiceがClusterIPだと、外部からアクセスできないので、NodePortにしてあげます。 あとは実際に https://<マシンのIP>:30843にアクセスしてあげましょう。Chromeだと警告が出ますが、そりゃそうです。暗号化できていないので。LANなら特に傍受の心配はないとおもうので、警告の画面でthisisunsafeと入力して進みます。

最初の画面

ダッシュボードにログインするためのアカウント作成が必要なので、公式ドキュメントに従ってつくります。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
[mattyan1053@mattyan1053 k8s-dashboard]$ vi dashboard-adminuser.yaml
[mattyan1053@mattyan1053 k8s-dashboard]$ kubectl apply -f dashboard-adminuser.yaml 
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
[mattyan1053@mattyan1053 k8s-dashboard]$ kubectl -n kubernetes-dashboard create token admin-user

出てきたトークンを入力します。

トークン入力画面

これで無事表示できました!

Pod 一覧

さいごに

無事できたでしょうか?自分もまだまだkubernetesのことを理解できていないので、作った環境つかっていろいろやっていきたいなーと思っています。

廊下に転がしておくにはなかなかスペック高めなので、結構きついこともできるんじゃないかなー

参考文献

*1:自宅サーバーなんてあるわけがないだろ!!

*2:可用性ゼロの最弱

*3:公式ドキュメント:ポートとプロトコル

*4:nftablesとfirewalldはどちらかしか起動していないです。どうやら、Rocky Linux の firewalldでは裏でnftablesを使っているはずなのですが、firewalldを起動していてもnftablesのstatusはinactiveになるようです。これでハマっている人を見たことがあります

*5:公式ドキュメント:ランタイムのインストール

*6:公式ドキュメント:Podネットワークアドオンのインストール

【Rocky Linux】Rocky Linux 8 で有線接続をせず最初からWiFiを使う

TL;DR

Rocky Linux をディスクインストールし、インターネットに接続したいが、なんらかの事情で有線接続できない状況にある。WiFiモジュールを取り付けて、WiFiを使ってインターネットに接続したいが、クリーンインストールの状況だとWiFiを使うことができない状況を解決したい。

My Old Gear...

ここ2年くらいで、自分のデスクトップPCのパーツを一新した。主な変更内容はこんな感じ

古いパーツがたまってきたので、古いパーツかき集めて1台PC組み立てました。

廊下に鎮座するPC

PCケースは黄ばんでるのを塗装したりとかしました。グラボはGTX 1060を父に譲渡してしまって、かわりに父に譲ってもらったGTX750が入っています。HDDはどこかから生まれてきた(なんかあった)

自室はコンセントがもういっぱいっぱいだったので、コンセントの余っていた2Fの廊下に鎮座させています。夜中たまに足ぶつけてる。

WiFiを使いたい

せっかく組み立てたので、CentOS 7の後継として期待されているOSの一つであるRocky Linux をMinimalインストールしました。手順はよく知られているUSBドライブをインストールディスクとして使えるよう作って、そこからインストールするやつです。割愛。

さて、こんなところにおいてしまったPCなんですが、このままでは有線LANが伸ばせません。手元にはLinux 対応のWiFI子機があります。「よっしゃ、これ使っちゃうか」が事の発端です。

当然かもしれませんが、最初の状態ではWiFi使えません。つなげる先を見てみます。 (インストールしたOSはRocky Linux 8.8 minimalです)

[root@mattyan1053 ~]# nmcli con show
NAME       UUID                                  TYPE      DEVICE          
enp4s0     73a863a2-d4fd-4003-8fcb-3339d32087c7  ethernet  --

となり、WiFiSSIDなどは出てきてくれません。 そもそもWiFiが有効化されていないので、使うことができないんですね。

解決策: NetworkManager-wifiをローカルインストールする

実は、ネットワーク接続で動いているNetworkManagerは、標準でWiFiに対応していません。なので、追加でインストールを実施する必要があります。

[root@mattyan1053 ~]# rpm -q NetworkManager-wifi

NetworkManager-wifiパッケージがインストールされていないことを確認します(私の確認したminimalパッケージではインストールされていませんでした)。

通常なら、有線接続して dnf install NetworkManager-wifiするところですが、まだこのPCはインターネットに接続していません。 そこで、OSインストールと同様にUSB経由でrpmパッケージを直接渡してインストールします。

https://pkgs.org/download/NetworkManager-wifi

普段使っているような別のPCからブラウザでダウンロードします。適切なパッケージを選び、ダウンロードします。 ダウンロードしたrpmをUSB経由でLinuxの中に配置しましょう(mountするだけです)。 ただ、これだけだと残念ながらインストールできません。依存パッケージすらインストールされていないからです。自分の環境では、追加で同じサイトから下記rpmもダウンロードしました。

  • iw-4.14-5.el8.x86_64.rpm
  • crda-3.18_2020.04.29-1.el8.noarch.rpm
  • wpa_supplicant-2.10-1.el8.x86_64.rpm
  • NetworkManager-wifi-1.40.16-1.el8.x86_64.rpm

上から順にインストールする必要があります。

[root@mattyan1053 ~]# rpm -ivh iw-4.14-5.el8.x86_64.rpm
以下同様

インストール終わったら、NetworkManagerを再起動しておきましょう。

[root@mattyan1053 ~]# systemctl restart NetworkManager

これで準備完了です。

WiFiで接続する

あとは通常通りの手順です

[root@mattyan1053 ~]# nmcli device status # WiFiのdeviceが有効になっていることを確認します
[root@mattyan1053 ~]# nmcli device wifi rescan
[root@mattyan1053 ~]# nmcli device wifi list
[root@mattyan1053 ~]# nmcli connect [SSID] password [password] iface 
[root@mattyan1053 ~]# nmcli connection add con-name [任意の名前 SSIDと同じにしました] ifname [nmcli device statusで見たdevice名] type wifi ssid [SSID]
[root@mattyan1053 ~]# nmcli device con [SSID] password [password]
[root@mattyan1053 ~]# nmcli device status
接続情報が出る
[root@mattyan1053 ~]# nmcli con mod [SSID] autoconnect yes

これでネットワーク問題なくつなげるかと思います。 chronyの設定や dnf update も問題なく行けるかと思うので、構築再開できると思います。お疲れ様でした!

【雑記】気がついたら一年経っていた

はじめに

昨日Twitterを見ていたら、社会人一年経ったのを期にブログを書いている人がちらほら見受けられたので書いてみることにした。

一番わかりやすくて好きだったのがやまむーくんの記事だったので切り口はこれにならってみる。

kotaka-1008.hatenablog.com

とはいえ、去年末に少しこのへんの話は書いているので、本当に今回はシンプルに書くつもり。

mattyan1053.hatenablog.com

勤務地 無問題

東京に会社があります。家からドアtoドアで片道1時間半くらい。往復三時間って考えると結構面倒だけれど、実際のところはほとんどリモートワークなので、一切気になっていません。リモートワーク最高!!!!

起床時間 最高

出社する日だと7時半とかに家を出るので6時半とかに起きてる。在宅なら8時で一切問題なし。

最悪9時に起きたらフレックス使ってずらせばいいや

ポイントは朝9時に会議を入れないこと。

通勤・退勤 良くはないけど無問題

出社するとなると座れずそれなりに混雑する電車に乗る事になる。スマホすら持たずじっとしていることもちらほら。

気にせずいられるのは出社頻度がめちゃくちゃ低いからなので、出社増えたらさすがに「カス」って言ってそう。

勤務内容 普通

仕事内容はそこまで悪くない。おおよそ就職前からの想定通りのことをしている感じ。ちょっと会議が多すぎるのが気になるかも。自分の作業時間、朝と夕方以降しかなくて昼が埋まる、ありがち。たまに作業しないで一日会議詰めで退勤する日ある。

急に会議入ったりすることも結構多くて、ある期日までに終わらせる予定だった作業がきつくなることがそれなりにあるのは気になるポイントかも。でもそんなもんだよね。

同僚 普通

リモートワークのよくないところかも。普通に仕事をするぶんにはそんなに気にならないけど、仕事以外の話全然していない。趣味とか全然知らない。みんな休みの日とか何してすごしてるのかな......。

毎日一緒に仕事してる人でも対面であったことなかったりする。

上長はおそらく僕はかなりうまくやれてる方。正確がたぶん似てる。でも人によっては苦手な人もいそうな気がするのよね。合う合わないがかなりありそう。

人間関係 普通

温厚な人が多いのでやりづらいとかはあんまり感じていない。ただ上記のように仕事以外の話をしないので、厚い人間関係があるかといえば絶対にない。

同期とか部署が違うと何してるかもうわからん。こんなもんなんかな......?

福利厚生 良好

部署によるのか知らないけれど、自分はかなり有給休暇取得できてる。割とみんな自由にとってるかな?体調悪い以外でも旅行とかなんやらで結構柔軟に取れていると思います。

午前休とかの半休も結構みんな気軽に取っている印象。

21年度は自分は8.5日使っていたみたいです。

残業時間 良好

障害とか起きなければ基本なし。作業のキリのいいところでやめる感じ。一日30分以内には収まるかな。定時退社も作業のキリの良さを気にしなければできる環境ではある。ただキリの悪いところでやめると翌日思い出せないため......。残業させられているわけではない。

残業 多い日はカス

当然至極。ガッツリ残業する日はその日がもう終わるってことを意味している。

30分以内ぐらいだと残業って感覚がない。というか、ピッタリ終わるほうが難しい。え?みんな定時ジャストで退勤してんの?

連勤 時と場合に寄る

仕事したい気分のときと仕事したくない気分のときがある。したくないときは当然......ね?

給料 たぶん普通

手取り20弱で、自分は財形とかいろいろいれてるのでもう少し使える額は少ない感じ。

なんだかんだ家に入れたり使ったりしているので、財形以外の貯蓄は学生時代からほぼ変わってない。本当はもっと貯金したい......。

総評 悪くない

仕事って考えると結構カスな気がするけれど、割と生活の一部って感覚が強い。生きてたら給料もらってる。

たぶん会社の人間関係が悪いとこうはいかないので、人間関係はかなり大事にしたほうがいいと思います。最重要視してもいいとおもっている。

あとはリモートワークですよ。これ最高です。今後も続いてください。