RKE ile Kubernetes altyapısını hazırlama
Tags: rke, kubernetes, k8s
Published: 2023-05-03 19:58:35

RKE, **Rancher Kubernetes Engine** olarak, **CNCF** sertifikalı bir Kubernetes altyapısıdır. Özellikle Rancher **Kubernetes** yönetim sistemleri ile entegre çalışabilmesi nedeniyle tercih edilebilmektedir.

# Temel kurulumlar
## Kubectl kurulumu

Kubectl, Kubernetes ortamınıza bağlanabilmek ve Kubernetes ortamınızı yönetebilmek için gerekli olan bir cli aracıdır. Kurulumu ise oldukça basittir ve aşağıdaki gibidir.

```bash
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" -k
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
```

Bu komutlarla birlikte artık kubectl komutunu kullanabilir durumda olacaksınız. Bu aracı kubernetes olmayan bir ortama da kolaylıkla kurup, kubeconfig yapılandırması yaparak uzaktaki bir kubernetes ortamına da bağlanıp, yönetebilirsiniz.

Kurulumu kontrol etmek için ise aşağıdaki komut çalıştırılır:

```bash
kubectl version --client  --output=json
```

Bu komutun çıktısı ise aşağıdaki gibi ifadeleri içermektedir.

```json
{
  "clientVersion": {
    "major": "1",
    "minor": "27",
    "gitVersion": "v1.27.1",
    "gitCommit": "4c9411232e10168d7b050c49a1b59f6df9d7ea4b",
    "gitTreeState": "clean",
    "buildDate": "2023-04-14T13:21:19Z",
    "goVersion": "go1.20.3",
    "compiler": "gc",
    "platform": "linux/amd64"
  },
  "kustomizeVersion": "v5.0.1"
}
```

## RKE kurulumu (yapılandırması değil)
RKE, başlıkta da belirttiğimiz gibi "Rancher Kubernetes Engine" ortamını hazırlayacak olan pakettir. Bir sonraki yazıda bu konuda örnek bir yapılandırma dosyası kullanılarak kubernetes kümesi ayağa kaldırılacaktır.

İlgili RKE paketinin kurulabilmesi için aşağıdaki komutlar kullanılabilir.

```bash
curl -fsSL -o rke_linux-amd64 -k https://github.com/rancher/rke/releases/download/v1.4.3/rke_linux-amd64
chmod +x rke_linux-amd64
sudo mv rke_linux-amd64 /usr/local/bin/rke
```

Bu komutla birlikte artık rke komut satırı kullanılabilir olacaktır. Versiyon bilgisini öğrenmek için ise aşağıdaki komut kullanılabilmektedir.

```bash
rke --version
```

İlgili komutun çıktısı da aşağıdaki gibidir.

```
rke version v1.4.3
```

## Helm paket yöneticisinin kurulumu

Helm, Kubernetes ortamları için en çok kullanılan paket yöneticisidir. Helm Chartlar ile yüklemeler yapılabilmektedir. Kurulum için ise aşağıdaki komut tek başına kullanılabilir. Bu komut bir betik indirerek bu betiği çalıştırmaktadır.

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

Aynı zamanda eğer betik ,ndirmek yerine elle de yapılabilir. Üstteki komut yapılı ise diğeri yapılması gerekmemektedir.

```
wget https://get.helm.sh/helm-v3.11.2-linux-amd64.tar.gz --no-check-certificate
tar xvf helm-v3.11.2-linux-amd64.tar.gz 
cd linux-amd64/
sudo mv helm /usr/local/bin/
sudo chmod +x /usr/local/bin/helm 
```

Bu iki seçenek sonrasında helm cli uygulaması kurulmuş olacaktır. Sürüm kontrolü için aşağıdaki komut kullanılabilir:

```
helm version
```

Bu komutun çıktısı da aşağıdaki gibidir.

```
version.BuildInfo{Version:"v3.11.3", GitCommit:"323249351482b3bbfc9f5004f65d400aa70f9ae7", GitTreeState:"clean", GoVersion:"go1.20.3"}
```

## Docker kurulumu

Kubernetes altyapısında Docker kullanmak istemeniz durumunda da aşağıdaki gibi kurulumları yapabilirsiniz.

```bash
curl https://releases.rancher.com/install-docker/20.10.sh -k | sudo bash -
sudo systemctl enable --now docker
```

Kurulum sonrasında sürüm kontrolü için de aşağıdaki komut kullanılabilir:

```bash
sudo docker version --format '{{.Server.Version}}'
```

Çıktısı da aşağıdaki gibidir:

```
20.10.23
```

# RKE kullanıcısı ayarları

Özellikle RKE node'larının birbiriyle konuşabilmesi için RKE kullanıcısı olması gerekmektedir. Bu kullanıcı oluşturmak için aşağıdaki gibi komutlar kullanılabilir.

```
sudo useradd -m rke
sudo passwd rke
sudo usermod -s /bin/bash rke
sudo echo "rke    ALL=(ALL:ALL) ALL" > /etc/sudoers.d/rke
sudo usermod -aG docker rke
```

Bu komutlarla birlikte rke kullanıcısı ve parolası belirlenip, login olunduğunda bash ortamının açılması sağlanmaktadır. Ayrıca rke kullanıcısını sudo yetkisine sahip yapılması da çeşitli durumlarda faydalı olabilmektedir.

# Temel yapılandırma ayarları

Öncelikle çeşitli modprobe seçeneklerini açmak için aşağıdaki komut kullanılabilmektedir.

```bash
for module in br_netfilter ip6_udp_tunnel ip_set ip_set_hash_ip ip_set_hash_net iptable_filter iptable_nat iptable_mangle iptable_raw nf_conntrack_netlink nf_conntrack nf_conntrack_ipv4   nf_defrag_ipv4 nf_nat nf_nat_ipv4 nf_nat_masquerade_ipv4 nfnetlink udp_tunnel veth vxlan x_tables xt_addrtype xt_conntrack xt_comment xt_mark xt_multiport xt_nat xt_recent xt_set  xt_statistic xt_tcpudp;      do        if ! lsmod | grep -q $module; then          echo "module $module is not present";          sudo modprobe $module;        fi; done
```

Bu ayarlar yapıldıktan sonra SWAP'in kapatılması önerilmektedir. Bunun için  /etc/fstab dosyası içerisindeki swap bulunan satırın başına diyez "#" konularak kapatılması önerilmektedir.

```
#/swap.img      none    swap    sw      0       0
```

Bu adımdan sonra aşağıdaki komutla da swap'in kapatılması verimli olacaktır.

```bash
sudo swapoff -a
```

Bunlar dışında ağ ayarları ile ilgili /etc/sysctl.d/99-kubernetes.conf dosyasında aşağıdaki 3 satır olacak şekilde kaydedilmesi doğru olacaktır.

```
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
```

Bu dosya oluşturulduktan sonra aşağıdaki komut çalıştırılır.

```bash
sudo sysctl --system
```

# Son söz

Bu adımlarla birlikte işletim sisteminin bir Kubernetes kümesi içerisinde node olarak hizmet verebilmesi için altyapı hazırlanmış olacaktır. Makinenin yeniden başlatılması özellikle rke kullanıcısının konteynır yapısı ile entegrasyon kurması için güzel olabilir. Fakat bu haliyle de çalışabilecektir. Bir sonraki yazıda yapılandırma ayarlarıyla birlikte küme ayağa kaldırılacaktır.