Bu doküman, Openshift Origin 3.11 platformu üzerine Apinizer kurulumunu anlatmaktadır.

Lütfen topoloji örneklerini inceleyerek MongoDB ve Elasticsearch uygulamalarını Openshift sunucularından ayrı olacak şekilde kurmayı gözden geçirdiğinize emin olun.

  • Replicaset MongoDB versiyon 4.2.0 olarak kurulacaktır.
  • Elasticsearch versiyon 7.9.2 olarak kurulacaktır.


#1) İşletim Sistemi Konfigürasyonları (Tüm Sunucularda Yapılacaktır)



sudo apt update

# Aşağıdaki araçların tüm sunucular üzerinde kurulu olması tavsiye edilmektedir
sudo apt install -y curl wget net-tools gnupg2 software-properties-common apt-transport-https ca-certificates

# Apinizer kullanıcısı oluşturulur ve yetkilendirilir.
sudo adduser apinizer
sudo usermod -aG sudo apinizer

# Kullanıcıya geçilerek işlemlere devam edilir.
su - apinizer

#Güvenlik duvarı kapatılır.
sudo systemctl stop ufw
sudo systemctl disable ufw

# Kubernetes, MongoDB ve Elasticsearch ortak olarak işletim sisteminde swap kullanımını istememektedirler. Bunun için swap'i devre dışı bırakalım.
# Çalışan sistemde swap devre dışı bırakmak için
sudo swapoff -a

# Sistem baştan başladığın swap'ın açılmaması için /etc/fstab dosyası içindeki swap satırı silinir ya da yoruma alınır.
# Daha sonra vi dosyasını kapatılır (:wq)
sudo vi /etc/fstab
POWERSHELL

#2) Docker Kurulumu


#2.1) Konteyner Kurulumu (Tüm Openshift Sunucularında Yapılacaktır)


Apinizer kurulumuna geçmeden önce sistemi hazırlamak ve Docker'ı yüklemek için aşağıdaki adımlar izlenir.

#Modüllerin kalıcı yüklenmesi için
sudo tee /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF

#Modüllerin çalışmakta olan sistemde yüklenmeleri için
sudo modprobe overlay
sudo modprobe br_netfilter
POWERSHELL

sysctl ayarları

sudo vi /etc/sysctl.d/k8s.conf
POWERSHELL

Buradaki ilk üç satır zorunlu olup, diğerleri ihtiyaca göre değiştirilebilinir.

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
net.ipv4.tcp_max_syn_backlog=40000
net.core.somaxconn=40000
net.core.wmem_default=8388608
net.core.rmem_default=8388608
net.ipv4.tcp_sack=1
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_fin_timeout=15
net.ipv4.tcp_keepalive_intvl=30
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_moderate_rcvbuf=1
net.core.rmem_max=134217728
net.core.wmem_max=134217728
net.ipv4.tcp_mem=134217728 134217728 134217728
net.ipv4.tcp_rmem=4096 277750 134217728
net.ipv4.tcp_wmem=4096 277750 134217728
net.core.netdev_max_backlog=300000
YML

Docker kurulumu yapılır.

sudo apt update

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt update

sudo apt install -y containerd.io docker-ce docker-ce-cli

sudo mkdir -p /etc/systemd/system/docker.service.d

sudo tee /etc/docker/daemon.json <<EOF
{
  "insecure-registries" : [ "172.30.0.0/16" ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
POWERSHELL

Docker servisi son ayarlarla birlikte başlatılır.

sudo systemctl daemon-reload 
sudo systemctl restart docker
sudo systemctl enable docker

sudo groupadd docker

sudo gpasswd -a $USER docker
POWERSHELL

#2.2) Openshift Origin Kurulumu (Master sunucularda)


wget https://github.com/openshift/origin/releases/download/v3.11.0/openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit.tar.gz
#Uncompress downloaded file.
tar xvf openshift-origin-client-tools*.tar.gz

cd openshift-origin-client*/
sudo mv  oc kubectl  /usr/local/bin/

#Verify installation of OpenShift client utility.
oc version

sudo systemctl restart docker

oc cluster up --public-hostname=YOURHOSTIP

oc login -u system:admin

oc adm policy add-cluster-role-to-user cluster-admin developer

oc login
POWERSHELL

#2.2.1) Bash Auto-Completion (İsteğe Bağlı, Herhangi Bir Openshift Master Sunucusunda)


Bu işlem ile kubernetes komutlarının yazımında hız kazanılabilir.

apt install bash-completion
source /usr/share/bash-completion/bash_completion
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null 
POWERSHELL


#2.2.2) Openshift Master Sunucusunda kubectl Komutunun Kullanıcı Konfigürasyonunu Ayarlama (Openshift Master Sunucularında)


kubectl komutlarını çalıştıracak kullanıcı için tanımlar yapılır

mkdir -p $HOME/.kube
sudo chown -R $(id -u):$(id -g) $HOME/.kube
POWERSHELL

#2.2.3) Kubernetes Ağ Eklentisini Kurun (Openshift Master Sunucularında)


Bu kılavuzda Flannel ağ eklentisini kullanacağız. Desteklenen diğer ağ eklentilerini seçebilirsiniz. Flannel, Kubernet'ler için tasarlanmış bir katman 3 ağ yapısını yapılandırmanın basit ve kolay bir yoludur.

oc apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
POWERSHELL

Önemli

Eğer Master'ı initialize ederken podCIDR olarak 10.244.0.0/16 değerini kullanmadıysanız yukarıdaki yaml dosyasını indirip network ayarlarını burada da düzenlemelisiniz.


#2.2.4) Kurulum Kontrol (Herhangi Bir Openshift Master Sunucusunda)


Master'dan aşağıdaki kod çalıştırıldığında Master'a ek olarak oluşturulan Node da görünüyorsa kurulum başarıyla tamamlanmış demektir.

İki dakika sonunda NotReady durumundan Ready durumuna geçmezse "oc describe node NODENAME" komutu ile sorun incelenmelidir.

oc get node

NAME         STATUS   ROLES    AGE   VERSION
localhost    Ready    <none>   5d    v1.11.0+d4cacc0   
BASH

#2.2.5) Openshift Yetkilerinin Tanımlanması (Openshift Master Sunucularında)


Openshift küme verilerinizi korumak için, varsayılan olarak en az bir RBAC yapılandırması ile konuşlandırır. Şu anda, Dashboard yalnızca Bearer Token ile giriş yapmayı destekler. Aşağıdaki adımları sırası ile uygulayınız.

vi service.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
YML

vi adminuser.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system
YML
oc apply -f service.yaml

oc apply -f adminuser.yaml

oc create clusterrolebinding permissive-binding --clusterrole=cluster-admin --user=admin --user=kubelet --group=system:serviceaccounts

oc create clusterrolebinding apinizer -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:apinizer
POWERSHELL


#2.3) DNS Test (İsteğe Bağlı, Herhangi Bir Openshift Master Sunucusunda)


https://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/#inheriting-dns-from-the-node

oc apply -f https://k8s.io/examples/admin/dns/dnsutils.yaml
POWERSHELL


#3) MongoDB Kurulumu


#3.1) İşletim Sistemi Konfigürasyonları ve MongoDB Uygulamasının Kurulması (Tüm MongoDB Sunucularında)


wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list

sudo apt update

sudo apt install mongodb-org -y
POWERSHELL


#3.2) MongoDB Konfigürasyonları (Tüm MongoDB Sunucularında)


sudo vi /etc/mongod.conf
ip: 0.0.0.0
port: 25080

replication:
 replSetName: apinizer-replicaset

security:
    authorization: "enabled"

setParameter:
  transactionLifetimeLimitSeconds: 300
POWERSHELL

Sonrasında MongoDB uygulaması başlatılır

sudo systemctl start mongod

sudo systemctl enable mongod
POWERSHELL

#3.3) ReplicaSet Konfigürasyonu ve Yetkili Kullanıcı Tanımı (MongoDB Primary Master Sunucusunda)


Replicaset'i aktifleştirme

mongo mongodb://localhost:25080 
#Bu aşamada eğer bağlantı hatası verirse /etc/hosts altına server adresi ile sunucu adı eklenmeli ve 127.0.0.1 ifadesinin değerlerinden biri de localhost mu diye bakılmalı

rs.initiate()
rs.status()
POWERSHELL

Apinizer uygulaması için yetkili kullanıcı oluşturma

use admin
db.createUser(
  {
    user: 'apinizer',
    pwd: '<YOUR_PASSWORD>',
    roles: [ { role: 'root', db: 'admin' } ],
	mechanisms:["SCRAM-SHA-1"]   }
 );

exit;
POWERSHELL

Şifre değiştirilmek istenirse

use admin
db.changeUserPassword("apinizer", passwordPrompt())
POWERSHELL
mongo  mongodb://localhost:25080 --authenticationDatabase "admin" -u "apinizer" -p

cfg = rs.conf()
cfg.members[0].host = "<MONGO_IP_ADDRESS>:25080"
rs.reconfig(cfg)
rs.status()
POWERSHELL

Daha önce oluşturulmuş olan MongoDB üzerinde bir kullanıcıya aşağıdaki komut satırlarını kullanarak yetki verin.

mongo mongodb://localhost:25080

use admin;
db.grantRolesToUser('admin', [{ role: 'root', db: 'admin' }])
POWERSHELL

#3.4) Birden Çok Sunucu Üzerinde MongoDB ReplicaSet Kurulumu (MongoDB Slave Sunucularında)


MongoDB kurulumu yapıldıktan sonra Ana node'da oluşturulmuş olan anahtarlar klasörü tüm node'lara taşınır ve aynı yetkiler verilir.


sudo openssl rand -base64 756 > /home/apinizer/mongo-key
sudo chmod 400 /home/apinizer/mongo-key
sudo chown -R mongodb:mongodb /home/apinizer/mongo-key
BASH

mongo-key dosyasını /home/apinizer/mongo-key konumundaki tüm ikincil düğümlere (mongoDb02, mongoDb03) kopyalayın

Tüm Mongo sunucularında mongod.conf dosyası aşağıdaki gibi olmalı.

Nod 1 üzerinde => mongoDb01

# network interfaces
net:
	port: 25080
	bindIp: "127.0.0.1,mongoDb02,mongoDb03,k8sWorkerIP"
#security:
security:
	authorization: enabled
	keyFile:  /home/apinizer/mongo-key
#replication:
replication:
	replSetName: "apinizer-replicaset"
YML

Mongod servisleri restart edildikten sonra Secondary sunucular Primary üzerinden bağlanır.

mongo  mongodb://localhost:25080 --authenticationDatabase "admin" -u "apinizer" -p 

rs.add("mongoDb02:25080")
rs.add("mongoDb03:25080")
BASH


#4) Elasticsearch Kurulumu


#4.1) İşletim Sistemi Konfigürasyonları ve Elasticsearch Uygulamasının Kurulması (Tüm Elasticsearch sunucularında)


sudo adduser elasticsearch
sudo usermod -aG sudo elasticsearch
 
sudo vi /etc/security/limits.conf
elasticsearch  -  nofile  65535
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
 
sudo sysctl -w vm.swappiness=1
sudo sysctl -w vm.max_map_count=262144
 
sudo vi /etc/sysctl.conf
vm.max_map_count=262144 elasticsearch
  
sudo sysctl -p
sudo sysctl vm.max_map_count
BASH

#4.2) Elasticsearch Kurulumu (Tüm Elasticsearch Sunucularında)


sudo mkdir /opt/elasticsearch
cd /opt/elasticsearch
sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz
sudo tar -xzf elasticsearch-7.9.2-linux-x86_64.tar.gz
 
sudo chown -Rf elasticsearch:elasticsearch /opt/elasticsearch
sudo chmod -Rf 775 /opt/elasticsearch
 
##At this point, pay attention to where the appropriate disk is mounted or tell the system administrators to add the disk to the following path
#The commands below can be used for this purpose
df -h
lsblk
 
sudo mkdir /mnt/elastic-data/
sudo mkdir /mnt/elastic-snapdata/
 
sudo chown -Rf elasticsearch:elasticsearch /mnt/elastic-*
sudo chmod -Rf 775 /mnt/elastic-*
BASH

#4.3) Elasticsearch Parametrelerinin Ortama Göre Ayarlanması (Tüm Elasticsearch Sunucularında)


Aşağıdaki parametrelerin kendi ortamınıza uygun olarak ayarlanarak eklenmesi gerekmektedir.

  • cluster.initial_master_nodes
  • network.host
  • node.name


sudo vi /opt/elasticsearch/elasticsearch-7.9.2/config/elasticsearch.yml 
BASH

Important

Here, the path.data address should be given as the address of the disk in the system where your log file is added.

cluster.name: ApinizerEsCluster

node.name: "<ELASTICSEARCH_IP_ADDRESS>"
node.master: true
node.data: true

network.host: <ELASTICSEARCH_IP_ADDRESS>
http.port: 9200
 
cluster.initial_master_nodes: ["<ELASTICSEARCH_IP_ADDRESS>"]
 
discovery.seed_hosts: []
path.data: /mnt/elastic-data/
path.repo: ["/mnt/elastic-snapdata"]

bootstrap.memory_lock: true
 
http.cors.enabled : true
http.cors.allow-origin : "*"
http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers : X-Requested-With,X-Auth-Token,Content-Type, Content-Length
BASH


Elasticseach'in kullanacağı JVM (Java Sanal Makinesi) değerleri ve diğer JVM parametrelerini aşağıdaki gibi ayarlayabilirsiniz.

sudo vi /opt/elasticsearch/elasticsearch-7.9.2/config/jvm.options
BASH

Önemli

Burada işletim sisteminin sahip olduğu RAM miktarının yarısına kadar çıkılabilir ve bu değer 32GB'ı aşmamalıdır

-Xms8g
-Xmx8g
YML

#4.4) Elasticsearch'i Linux Service Olarak Ayarlama (Tüm Elasticsearch Sunucularında)


sudo vi /opt/elasticsearch/elasticsearch-7.9.2/bin/elasticsearch-service.sh
BASH
#!/bin/sh
SERVICE_NAME=elasticsearch
PATH_TO_APP="/opt/elasticsearch/elasticsearch-7.9.2/bin/$SERVICE_NAME"
PID_PATH_NAME="/opt/elasticsearch/elasticsearch-7.9.2/bin/$SERVICE_NAME.pid"
SCRIPTNAME=elasticsearch-service.sh
ES_USER=$SERVICE_NAME
ES_GROUP=$SERVICE_NAME
 
case $1 in
    start)
        echo "Starting $SERVICE_NAME ..."
        if [ ! -f $PID_PATH_NAME ]; then
        mkdir $(dirname $PID_PATH_NAME) > /dev/null 2>&1 || true
            chown $ES_USER $(dirname $PID_PATH_NAME)
            $SUDO $PATH_TO_APP -d -p $PID_PATH_NAME
        echo "Return code: $?"
            echo "$SERVICE_NAME started ..."
        else
            echo "$SERVICE_NAME is already running ..."
        fi
    ;;
    stop)
        if [ -f $PID_PATH_NAME ]; then
            PID=$(cat $PID_PATH_NAME);
            echo "$SERVICE_NAME stopping ..."
            kill -15 $PID;
            echo "$SERVICE_NAME stopped ..."
            rm $PID_PATH_NAME
        else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
    restart)
        if [ -f $PID_PATH_NAME ]; then
            PID=$(cat $PID_PATH_NAME);
            echo "$SERVICE_NAME stopping ...";
            kill -15 $PID;
        sleep 1;
            echo "$SERVICE_NAME stopped ...";
            rm -rf $PID_PATH_NAME
            echo "$SERVICE_NAME starting ..."
            mkdir $(dirname $PID_PATH_NAME) > /dev/null 2>&1 || true
            chown $ES_USER $(dirname $PID_PATH_NAME)
            $SUDO $PATH_TO_APP -d -p $PID_PATH_NAME
            echo "$SERVICE_NAME started ..."
         else
            echo "$SERVICE_NAME is not running ..."
        fi
    ;;
  *)
    echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
    exit 3
    ;;
esac
BASH
sudo chmod -Rf 775 /opt/elasticsearch/elasticsearch-7.9.2/*

sudo vi /etc/systemd/system/elasticsearch.service
BASH
[Unit]
Description=ElasticSearch Server
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
Type=forking
ExecStart=/opt/elasticsearch/elasticsearch-7.9.2/bin/elasticsearch-service.sh start
ExecStop=/opt/elasticsearch/elasticsearch-7.9.2/bin/elasticsearch-service.sh stop
ExecReload=/opt/elasticsearch/elasticsearch-7.9.2/bin/elasticsearch-service.sh restart
LimitNOFILE=65536
LimitMEMLOCK=infinity
User=elasticsearch
BASH
sudo systemctl daemon-reload
sudo systemctl start elasticsearch
sudo systemctl status elasticsearch
sudo systemctl enable elasticsearch
BASH

Uyumlu Kibana versiyonu için aşağıdaki linki kullanabilirsiniz.

https://www.elastic.co/downloads/past-releases/kibana-oss-7-9-2
POWERSHELL

#5) Apinizer Kurulumu

Apinizer Kurulum için bakınız →  E Apinizer Kurulumu ve Ayarları