ラベル raspberry pi の投稿を表示しています。 すべての投稿を表示
ラベル raspberry pi の投稿を表示しています。 すべての投稿を表示

2024年12月13日金曜日

Raspberry pi(k8s)のネットワーク変更

rasuberry pi3台をwifi接続からethernetに変更することにしました。(なんか動作不安定なので) 


1)以下、3台のraspberry piの修正後、以下実施
sudo netplan apply

<Before>
cat > /etc/netplan/99-manual.yaml <<EOF
network:
version: 2
renderer: networkd
wifis:
wlan0:
dhcp4: false
addresses:
- $IP_ADDRESS/24
routes:
- to: default
via: 192.168.10.1
nameservers:
addresses:
- 8.8.8.8
access-points:
xxxxxxxx5g:
password: xxxxxxxxxxx
EOF

<After>

cat > /etc/netplan/99-manual.yaml <<EOF
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: false
addresses:
- $IP_ADDRESS/24
routes:
- to: default
via: 192.168.10.1
nameservers:
addresses:
- 8.8.8.8

EOF


ネットワーク変更後、以下のエラーがk8sのイベントに表示されまくったので
トラブルシューを行なっていく
[error message]
Nameserver limits were exceeded, some nameservers have been omitted, the applied nameserver line is: 8.8.8.8 2409:11:9aa0:500:8222:a7ff:fe20:14f4 192.168.10.1


2)まず、CoreDNSのコンフィグマップの修正を行いデプロイ実施
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
hosts {
192.168.10.11 prometheus.local
192.168.10.11 prometheus.local.default.svc.cluster.local
fallthrough
}
forward . 8.8.8.8 8.8.4.4
cache 300
reload
loadbalance
bind 0.0.0.0
}

3)次に、CoreDNSの再起動を行う
kubectl -n kube-system rollout restart deployment coredns

raspberry pi側:
4)ipv6の設定を無効化させるために以下を実施
sudo sysctl -p

5)無効化されているか以下のコマンドを実施して、何も表示されてないことを確認
ip -6 addr show

2022年9月19日月曜日

k8s 初期設定(windows)

kubectl get nodeを投入すると、以下のメッセージが出てしまう。

メッセージ:
Unable to connect to the server: dial tcp [::1]:8080: connectex: No connection could be made because the target machine actively refused it.


原因:
windowsのローカル環境に.kube/configが無いのが原因なので
k8sのmaster nodeから入手してくる必要がある。



2022年9月16日金曜日

k8s install (Raspberry pi 2022版)

ソフトウェア構成
  • Raspberry Pi OS 11
  • Kubernetes 1.25
  • コントロールプレーンノード 1台、ワーカーノード 2台構成
  • コンテナランタイムにはCRI-Oを使う
k8sの推進環境にruntimeがcri-oなどの変更になっているので
改めての導入方法を以下に記載する。


◆◇手順◆◇
以下の手順で、行う。
ホスト名およびIPアドレスについては、環境に合わせること!

# IPの設定
raspi-config nonint do_hostname raspi-master
sudo raspi-config nonint do_change_timezone Asia/Tokyo
sudo raspi-config  --expand-rootfs
sudo apt-get update && sudo apt-get dist-upgrade -y
sudo apt-get update && sudo apt-get upgrade -y

cat <<EOF >> /etc/dhcpcd.conf
static ip_address=192.168.13.xx/24
static routers=192.168.13.99
static domain_name_servers=192.168.10.1 8.8.8.8
EOF


# cgroup settings
sudo sed -i 's/$/ cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory/g' /boot/cmdline.txt


# swap setting
sudo swapoff --all
sudo systemctl stop dphys-swapfile
sudo systemctl disable dphys-swapfile
systemctl status dphys-swapfile


# ip tables settings
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sudo apt-get install -y iptables arptables ebtables
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo update-alternatives --set arptables /usr/sbin/arptables-legacy
sudo update-alternatives --set ebtables /usr/sbin/ebtables-legacy
sudo sysctl --system


# crio(runtime for Docker) setting
cat <<EOF | sudo tee /etc/modules-load.d/crio.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

sudo sysctl --system


OS=Debian_10
CRIO_VERSION=1.23
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS/Release.key | sudo apt-key add -
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key add -
sudo apt update
sudo apt update
sudo apt upgrade -y
sudo apt install cri-o cri-o-runc -y
sudo systemctl daemon-reload
sudo systemctl enable crio
sudo systemctl start crio


# k8s install
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
cat <<EOF | sudo tee /etc/default/kubelet
KUBELET_EXTRA_ARGS=--container-runtime-endpoint='unix:///var/run/crio/crio.sock'
EOF

systemctl daemon-reload
systemctl restart kubelet

sudo reboot


◇calico(CNIの追加)

curl https://docs.projectcalico.org/manifests/calico.yaml -O

kubectl apply -f calico.yaml



◇Prometheus&Grafana

kubectl create ns monitoring

git clone https://github.com/prometheus-operator/kube-prometheus.git

cd kube-prometheus/

kubectl create -f manifests/setup

kubectl create -f manifests/



◇Argo CD

kubectl create namespace argocd

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

2022年1月14日金曜日

環境切り替え for k8s

 以下の環境(k8s)があるので、必要に応じて切り替えを行いたいと思う。


1)docker-desktop(Mac)

2)Raspberry pi



手順:


1)Mac側の以下のファイルにRaspberry piの環境を追加する。

  ->青枠(Raspberry pi)のconfigを追加する


注意)

赤枠のcurrent-context:については、触れないこと!


~/.kube/config
































2)追記を終えたら、docker desktopのメニューからkubernetes > Contextを選択して

必要に応じて、環境の切り替えが行えるようになる。



2021年10月27日水曜日

Calico (CNI) for Raspberry pi

flannnel(CNI)の利用だと、名前解決に問題があったので
Calicoを導入することにした。


課題:

以下、flannel(CNI)の利用していると、digコマンドで名前解決できない






<calicoプラグインのインストール>

以下の手順で導入を行う。

curl https://docs.projectcalico.org/manifests/calico.yaml -O

kubectl apply -f calico.yaml



<calicoctlのインストール>

1)リソースをダウンロード

curl -o calicoctl -O -L  "https://github.com/projectcalico/calicoctl/releases/download/v3.20.2/calicoctl-darwin-amd64" 


2)権限の変更を行う

chmod +x calicoctl


3)以下にコマンドを移動する

sudo mv calicoctl /usr/local/bin/


4) calicoctlのソースコードをダウンロードする

curl -o kubectl-calico -O -L  "https://github.com/projectcalico/calicoctl/releases/download/v3.20.2/calicoctl-darwin-amd64" 


5)権限の変更を行う

chmod +x kubectl-calico


6)以下にコマンドを移動する

sudo mv kubectl-calico /usr/local/bin/


7)バージョンの確認を行う。







名前解決も出来た





metallb for k8s

公式:

https://metallb.universe.tf/installation/


導入の経緯:

ローカルIPをExternal IPに割り振れる方法がないか探ったところ

metallbで解決しているという情報知ったので実施を行ってみる



手順:

1)namespaceを作成

kubectl create namespace metallb-system



2)argoCDでhelm経由でデプロイを行う。

レポジトリURL:

https://charts.helm.sh/stable

















3)metalbで割り当てるIPのレンジ幅用のマニュフェストを作成



<ConfigMapの作成>

addresses:レンジ幅を指定する。































確認:

External IP にローカルIPが追加されていることが把握できた。

(ブラウザからも、ローカルIPから接続の確認が出来きる)

























































NFS for ubuntu

環境:
MacOS:11.6
Raspberry pi(Ubuntu)


<ubuntu側>


手順:

1)nfsのインストールを行う。

apt -y install nfs-kernel-server

  

2)以下、ドメイン名を記載します。

vi /etc/idmapd.conf









3)nfs用のマウントディレクトリを作成

mkdir /home/nfsshare 

chmod 777 /home/nfsshare



4)nfsのマウント対象のパス(権限)を記載

vi /etc/exports


ポイント:

以下の権限の付与が不十分だと、volumeの作成ができないので注意
















5)サービスの再起動を行う。

sudo systemctl restart nfs-server rpcbind

sudo systemctl enable nfs-server rpcbind



オプション:

クライアント版を導入(k8s node:全台対象)

sudo apt-get install nfs-common




<mac側>

手順:

1)ボリューム作成

sudo mkdir /Volumes/nfs


2)マウントを行う

sudo mount -o vers=4,resvport -t nfs 192.168.13.30:/home/nfsshare /Volumes/nfs



無事、マウント完了。



nfs-subdir-external-provisioner for K8S

公式:
https://github.com/kubernetes-retired/external-storage/blob/master/nfs-client/README.md


nfs-subdir-external-provisioner:

上記のPodを経由して、NFS配下にマウントしてくれるプラグイン的な存在。

(ボリュームの変更が出来ないので、注意)



手順:

1)helmのレポジトリを追加する

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/



2)Helmでインストールを行う。

以下の指定したURLは、実際に稼働中のNFSのアドレス


helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \

    --set nfs.server=192.168.13.30 \

    --set nfs.path=/home/nfsshare \

    --set storageClass.name=nfs








<マニュフェストの作成>

①Pod

volumeMounts:マウントするディレクトリを指定する。

volumes:claimNameにはPersistentVolumeClaimのnameと一致していること!


②PersistentVolume

server:nsfのアドレス又はサーバー名を指定

path:nfsで作成済みのディレクトリを指定


③PersistentVolumeClaim

labels:nginxのlabels名と一致していること





































メモ:

persistentVolumeReclaimPolicyについて 

①Retain:  データの保持

②Recycle:persistentVolume(削除) - persistentVolumeClaim(保持)

③Delete:  persistentVolume(削除) - persistentVolumeClaim(削除)


確認:

1)以下、簡単なファイルを作成する

touch nginx-test


NFSのフォルダを確認してみると、上記で作成したファイルが確認できる。













Dynamic provisioner for k8s(ボリュームの拡張)

公式:
https://github.com/helm/charts/tree/master/stable/nfs-client-provisioner


<概要>

nfs-client-provisioner:

nfs-client-provisionerというPodを経由して可変可能なボリュームの作成を

NFSにマウントしてくれるプラグイン的な存在。



イメージ図:

NFSにマウントする場合、nfs-client-provisionerのPodに経由する必要がある。


手順:

1)helmを使って導入を行う。

①nfs:192.16.13.30

②path:/home/nfsshare


helm install nfs-client-provisioner --set nfs.server=192.168.13.30 --set nfs.path=/home/nfsshare stable/nfs-client-provisioner




2)annotationsに以下の値を記載します。

 volume.beta.kubernetes.io/storage-class: nfs-client






























検証:

1)可変可能になっているので、容量の変更を行います。(1Gi ->2Gi)











































2)実行してみると、エラーもなく変更できました。



Lambda + SSM Run Commandで、数十台のEC2のuserdata結果を一括確認する

コードを1枚貼って、テストイベントを実行するだけで、 全台の確認結果が返ってくる手順です。 [ゴール] Nameタグが web-* / api-* / batch-* のEC2すべてに確認コマンドを流し、 NGの台だけ を結果に表示します。確認対象のuserdata(Ubu...