조사/학습 #12739
오 지호님이 2달 전에 변경
### 테스트 설정 방법
- 설치한 패키지는 가능한 최신 패키지로 사용
```
# Rocky linux 9 minimal standard installation
# dnf upgrade -y만 진행
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
systemctl disable --now firewalld
swapoff -a
sed -i '/swap/d' /etc/fstab
modprobe overlay
modprobe br_netfilter
# 재부팅시에도 커널 모듈 올라오게
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
# 필요한 sysctl 파라미터를 설정하면, 재부팅 후에도 값이 유지된다.
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 재부팅하지 않고 sysctl 파라미터 적용하기
sysctl --system
# 도커 전체 말고 containerd만 설치
dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf install containerd.io
systemctl enable --now containerd
# /etc/containerd/config.toml에서 cri diabled_plugins에서 지우기
# 안지우면 k8s init 할 때, 에러남
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.34/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.34/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable --now kubelet
# 쿠버네티스 클러스터 초기화
kubeadm init --pod-network-cidr=10.244.0.0/16
# 이건 쉘 나가면 풀리니까 .bashrc에 넣기
export KUBECONFIG=/etc/kubernetes/admin.conf
# 네트워크 플러그인 설치 (Flannel)
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
# 마스터 노드에서도 워커 역할 수행
kubectl taint nodes --all node-role.kubernetes.io/control-plane:NoSchedule-
# helm 설치
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-4 | bash
helm version
# metal-stack lvm csi driver 설치
dnf install -y git
git clone https://github.com/metal-stack/csi-driver-lvm.git
cd csi-driver-lvm/charts/csi-driver-lvm
vim values.yaml
...
devicePattern: /dev/sd[b-d]
...
cd ..
helm install csi-driver-lvm ./csi-driver-lvm
# 확인
kubectl get pods -n default
kubectl get ds -n default
cd csi-driver-lvm
kubectl apply -f examples/csi-pvc-raw.yaml
kubectl apply -f examples/csi-pod-raw.yaml
kubectl apply -f examples/csi-pvc.yaml
kubectl apply -f examples/csi-app.yaml
kubectl delete -f examples/csi-pod-raw.yaml
kubectl delete -f examples/csi-pvc-raw.yaml
kubectl delete -f examples/csi-app.yaml
kubectl delete -f examples/csi-pvc.yaml
# pv 확인
kubectl get pv
# 실제 확인
lvs
# nfs csi driver 설치
helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts
helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --set controller.runOnControlPlane=true --version 4.12.0
```
- nfs의 경우, 다른 장비에서 nfs server를 띄우고 k8s에서 nfs 드라이버로 storage class 만들어서 테스트 진행
- 참고한 flexa csi driver repo: https://gitlab.gluesys.com/exastor/flexa-csi/-/tree/develop?ref_type=heads
- 재환씨가 참고하라고 준 일감: https://redmine.gluesys.com/issues/9467
### ASE에 적용
개별 pod이 pvc를 통해서 pv를 얻는데 ase와 pod이 다른 장비에서 동작하기 때문에 pvc하나에서 lv까지 생성 및 nfs 공유 만들기 필요할 것 같음
뒤로