1ノードKubenetesクラスターon CentOS 8 でCSI Pluginを試す(2021/10末現在)

##準備
とりあえずOSインストール
ダッシュボードがlocalhostでしか開けないようなのでGUI入りでインストールしたほうがいいかも？

インストールが済んだら一回あげておきましょうか。
レポジトリーを変更して
`sed -i -e 's/^mirrorlist/#mirrorlist/g' -e 's/^#baseurl=http:\/\/mirror/baseurl=http:\/\/vault/g' /etc/yum.repos.d/CentOS-*repo`
アップグレード
`dnf -y upgrade`

##OS設定

```
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
```

```
swapoff -a
vi /etc/fstab
/dev/mapper/cl-swap     swap                    swap    defaults        0 0
#この行をコメントアウト
```

```
vi /etc/hosts
192.168.1.1 master
#自分自身を名前解決できるようにする
```


###ネットワーク

```
modprobe br_netfilter

systemctl disable firewalld.service
systemctl stop firewalld
sysctl -p
#止めたくない人は下の参考文献漁ってみてください。リンク先に書いてあります。

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

sysctl --system
```

ここらで一回
`reboot`

##Docker

```
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
dnf install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

#あまり新しいのじゃないほうがよさそう
#dnf install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.4.9-3.1.el7.x86_64.rpm 

dnf install -y --nobest docker-ce
systemctl daemon-reload
systemctl start docker
systemctl enable docker

echo '{
  "exec-opts": ["native.cgroupdriver=systemd"]
}' > /etc/docker/daemon.json

systemctl restart docker
docker version
```

##k8s

```
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
exclude=kubelet kubeadm kubectl
EOF

dnf upgrade -y
dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

systemctl enable kubelet
systemctl start kubelet

kubeadm config images pull
#このあたりの順番がちょっとあやしい

kubeadm init --pod-network-cidr=10.244.0.0/16

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

#1ノードにするときの要！超大事なおまじない
kubectl taint nodes --all node-role.kubernetes.io/master-

```

##ダッシュボード
```
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
kubectl proxy --address 0.0.0.0 --accept-hosts '.*' &

#ログインするときのトークンの探し方
kubectl -n kube-system get secret | grep deploy
deployment-controller-token-xxxxx                kubernetes.io/service-account-token   3      10m

kubectl describe secret -n kube-system deployment-controller-token-xxxxx
```
メモとして残してあるけどうまくいっていない。
--accept-hosts '.*'を入れても結局localhostからしかサインインを受け付けてくれない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1839497/f98423e7-fb58-d799-9759-25288c00ade4.png)
誰か簡単な回避方法あったら教えて下さい。プロキシを立てる方法が見つかるけど重要じゃないのであとまわし。

##iSCSI

```
iscsiadm -m discovery -t sendtargets -p 192.168.1.2 —-op new
iscsiadm -m node -T iqn.2000-08.com.datacore:win-h702cvenvkf-3 -p 192.168.1.2 --login
iscsiadm -m session
```

##DataCore SANsymphonyのCSI Plugin
###やりかた1　失敗

```
kubectl create namespace datacore
```

```
vi datacoreinstall.json

{
"apiVersion" : "v1",
"IScsiTargetPortals": [ "192.168.1.2" ],
"Username" : "administrator",
"Password" : "password",
"RestServer" : "192.168.1.2",
"DataCoreArrayName" : "SSY01",
"DataCoreImage" : "datacoresoftware/csi-plugin:1.0.0",
"DeployAsPod" : false,
"Namespace" : "datacore",
"VirtualDiskTemplate" : "vdisk-template1"
}
```
↑使わない

```
wget https://demos.datacore.com/downloads/csi/csi.tar.gz
sudo chmod u+x csi.tar.gz
sudo tar -xzvf csi.tar.gz
sudo ./dcscsi -installcsi=datacoreinstall.json
```
↑なんかエラーが出るから、やっぱり使わない

###やり方2　多分成功

```
kubectl create namespace datacore
```

```
vi configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: csi-ssy-config
  namespace: datacore
data:
  rest-server: {RESTSERVER}
  storage-server: {SSVSERVER}
  vd-template: {TEMPLATE}

kubectl apply -f configmap.yaml
```

```
echo -n administrator | base64
#出力をコピーしておく
echo -n password | base64
#出力をコピーしておく
vim secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: csi-ssy-secret
  namespace: datacore
data:
  username: {USERNAME} #さっきの出力を貼り付け
  password: {PASSWORD} #さっきの出力を貼り付け

kubectl apply -f secret.yaml
```

```
kubectl apply -f https://raw.githubusercontent.com/DataCoreSoftware/csi-plugin/master/datacore-csi-1.0.1.yaml

#確認
kubectl get storageclass
kubectl describe storageclass disk.csi.ssy.datacore.com
```
###基本的な動作確認

```
vim pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: dev-pvc
  namespace: default

spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi
  storageClassName: disk.csi.ssy.datacore.com

kubectl apply -f pvc.yaml

#確認
kubectl get pvc,pv
NAME                         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
persistentvolumeclaim/pvc-test   Bound    pvc-b8bf2164-e31c-4a84-9e2f-113762cae14c   100Gi      RWO            disk.csi.ssy.datacore.com   1m

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM          STORAGECLASS                REASON   AGE
persistentvolume/pvc-b8bf2164-e31c-4a84-9e2f-113762cae14c   100Gi       RWO            Retain           Bound      default/pvc-test   disk.csi.ssy.datacore.com            1m

```

PODの作成は次に書きます。

#参考文献
##Cluster構築

https://www.tecmint.com/install-a-kubernetes-cluster-on-centos-8/

https://upcloud.com/community/tutorials/install-kubernetes-cluster-centos-8/

https://github.com/calebhailey/homelab/issues/3

##CSIまわり

https://kubernetes.io/docs/concepts/storage/

https://cstoku.dev/posts/2018/k8sdojo-12/

https://stackoverflow.com/questions/50458165/kubernetes-how-to-do-dynamic-persistentvolumeclaim-with-persistentvolumereclaim

https://qiita.com/coleyon/items/5603190f2ae97c0955b4

https://github.com/DataCoreSoftware/csi-plugin/

https://letsdocloud.com/2020/09/how-to-reuse-a-persistentvolume-pv-in-kubernetes/

##PODまわり（PVCの使い方）

https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/

https://qiita.com/ysakashita/items/4b56c2577f67f1b141e5