Kubernetes Üzerinde Hyperledger Fabric Ağının Kurulumu
Tags: kubernetes, docker, blockchain
Published: 2024-01-02 11:26:10

**Not:** Bu rehberde belirttiğim komutların ve yapılandırmaların doğrudan çalışması için gerekli olan portların (80 ve 443) kullanılmadığından emin olun. Eğer bu portlar zaten kullanılıyorsa, bu rehber çalışmayacaktır.

#1. Docker Kurulumu

```
sudo nano /etc/fstab
```
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gjy75mttqzm3rbxuhwe2.png)

```
sudo swapoff -a
```

```
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

sudo tee /etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sudo sysctl --system
```


**Docker'ın Apt Deposunu Kurma:**

Bir makinede ilk defa Docker Engine'i kurmadan önce Docker deposunu kurmanız gerekmektedir. Bu işlemden sonra Docker'ı bu depodan kurabilir ve güncelleyebilirsiniz.

<u>1. Docker'ın Apt Deposunu Ayarlama:</u>

a. Docker'ın resmi GPG anahtarını ekleyin:

Bu anahtar, Docker paketlerinin doğrulamasında kullanılır.

```
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
```
Yukarıdaki komutlar, Docker'ın resmi anahtarını eklemek için gereken bazı paketleri kurar.


```
sudo install -m 0755 -d /etc/apt/keyrings
```
Bu komutla /etc/apt/keyrings adında bir dizin oluşturulur.

```
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
```
Bu komut, Docker'ın resmi GPG anahtarını indirir ve /etc/apt/keyrings/docker.gpg adlı bir dosyada saklar.


```
sudo chmod a+r /etc/apt/keyrings/docker.gpg
```
Bu komut, oluşturduğunuz anahtar dosyasının okunabilir olduğundan emin olmak için gerekli izinleri ayarlar.

b. Deposu Apt kaynaklarına ekleyin:
Bu, Docker'ın resmi depo adresini sisteminize ekler.


```
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```
Bu komut, sisteminizin mimarisine ve sürümüne göre Docker deposunu ekler.


```
sudo apt-get update
```
Bu komut, depo bilgilerini günceller.

<u>2. Docker Paketlerini Kurma:</u>

a. En Son Sürümü Kurma:

Eğer Docker'ın en son sürümünü kurmak istiyorsanız, aşağıdaki komutu çalıştırın:

```
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```
Bu komut, Docker'ın en son sürümünü, Docker CLI'yi (Komut Satırı Arayüzü), containerd.io'yu ve bazı eklentileri kurar.

Bu adımların hepsini takip ederek Docker'ı Ubuntu sisteminize başarıyla kurmuş olacaksınız.

#2. KinD Kurulumu

<u>Linux için:</u>

AMD64 / x86_64 için:

Bu komut, mevcut makinenizin mimarisinin x86_64 (genelde modern bilgisayarlar için) olup olmadığını kontrol eder. Eğer öyleyse, kind adlı dosyayı belirtilen URL'den indirir.


```
[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.18.0/kind-linux-amd64
```

İndirilen kind dosyasını çalıştırılabilir yapmak için:


```
chmod +x ./kind
```
Son olarak, kind dosyasını global olarak erişilebilir bir konuma taşıyın:


```
sudo mv ./kind /usr/local/bin/kind
```

```
curl -LO "https://dl.k8s.io/release/v1.23.5/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv ./kubectl /usr/local/bin/
```

Bu adımları takip ederek kind ve kubectl'i Linux sisteminize başarıyla kurmuş olacaksınız.

#3. Kubernetes Kümesini Oluşturma

```
cat << EOF > kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  image: kindest/node:v1.25.8
  extraPortMappings:
  - containerPort: 30949
    hostPort: 80
  - containerPort: 30950
    hostPort: 443
EOF

```
Yukarıda verdiğiniz kind-config.yaml dosyasını kullanarak Kubernetes kümesini oluşturabilirsiniz. Eğer bu dosya zaten oluşturulmuşsa, aşağıdaki komutu çalıştırarak kümeyi başlatın:
```
kind create cluster --config=./kind-config.yaml
```


#4. Helm Kurulumu

Helm, Kubernetes için bir paket yöneticisidir.

```
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
```

Daha sonra belirttiğiniz Helm depo adresini ekleyin ve operatörü yükleyin:


```
helm repo add kfs https://kfsoftware.github.io/hlf-helm-charts --force-update
helm install hlf-operator kfs/hlf-operator --version=1.9.0
```

Bu adımların ardından, Fabric için Kubernetes operatörü kurulmuş olacaktır. Operatörün doğru bir şekilde kurulduğunu kontrol etmek için:


```
kubectl get pods
```
komutunu çalıştırarak hlf-operator pod'unun çalışıp çalışmadığını kontrol edebilirsiniz. Ayrıca, CRD'lerin doğru bir şekilde kurulup kurulmadığını kontrol etmek için:


```
kubectl get crds | grep hlf.kungfusoftware.es
```
komutunu çalıştırabilirsiniz. Bu, Fabric ile ilgili CRD'lerin listesini döndürecektir.
#5. Kubectl ve Krew Kurulumu

Krew, kubectl için bir eklenti yöneticisidir.

Öncelikle kubectl kurmalısınız:

```

sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
```

Sonra Krew'i kurabilirsiniz:


```
(
  set -x; cd "$(mktemp -d)" &&
  OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
  ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
  KREW="krew-${OS}_${ARCH}" &&
  curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/download/v0.4.4/krew-linux_amd64.tar.gz" &&
  tar zxvf "${KREW}.tar.gz" &&
  ./"${KREW}" install krew
)
```

```
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
```
Eklentiyi kurun:

```

kubectl krew install hlf
```

#6. Istio Kurulumu

Öncelikle Istio'nun ikili dosyalarını indirin:

```

curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.16.1 TARGET_ARCH=x86_64 sh -
export PATH="$PATH:$PWD/istio-1.16.1/bin"
istioctl install --set profile=default -y
kubectl get svc -n istio-system
kubectl get pods -n istio-system
```

Kubernetes'e Istio'yu yüklemek için:


```
kubectl create namespace istio-system

istioctl operator init

kubectl apply -f - <<EOF
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  name: istio-gateway
  namespace: istio-system
spec:
  addonComponents:
    grafana:
      enabled: false
    kiali:
      enabled: false
    prometheus:
      enabled: false
    tracing:
      enabled: false
  components:
    ingressGateways:
      - enabled: true
        k8s:
          hpaSpec:
            minReplicas: 1
          resources:
            limits:
              cpu: 500m
              memory: 512Mi
            requests:
              cpu: 100m
              memory: 128Mi
          service:
            ports:
              - name: http
                port: 80
                targetPort: 8080
                nodePort: 30949
              - name: https
                port: 443
                targetPort: 8443
                nodePort: 30950
            type: NodePort
        name: istio-ingressgateway
    pilot:
      enabled: true
      k8s:
        hpaSpec:
          minReplicas: 1
        resources:
          limits:
            cpu: 300m
            memory: 512Mi
          requests:
            cpu: 100m
            memory: 128Mi
  meshConfig:
    accessLogFile: /dev/stdout
    enableTracing: false
    outboundTrafficPolicy:
      mode: ALLOW_ANY
  profile: default

EOF
```