Skip to content

Latest commit

 

History

History
executable file
·
269 lines (202 loc) · 9.8 KB

11.ETCD.md

File metadata and controls

executable file
·
269 lines (202 loc) · 9.8 KB

ETCD Cluster'ının Oluşturulması

Bu başlıkla birlikte oluşturduğumuz sertifikaları ve konfigürasyon dosyalarını kullanarak Kubernetes bileşenlerinin kurulumunu ve konfigürasyonlarını yapıyor olacağız. Bu noktadan sonra komutlar çok uzun olduğu için LXD örneğini sadece etcd kurulumda yani bu başlık altında veriyor olacağım. Diğer bileşenlerin kurulumunda da LXD kullanan arkadaşlar zaten etcd kurulumundan kendi script'lerini rahatlıkla oluşturabilirler yada lxc exec instance_name bash komutunu kullanarak ssh yapmaya gerek duymaksızın alttaki komutları çalıştırabilirler. Yada tabii ki ssh kullanmak da elinizde bir seçenek ancak LXC varken bütün makinalara ssh kurmak gereksiz bir vakit kaybı olabilir eğer öğrenmek ve daha fazla tecrübe etmek gibi bir gayeniz yoksa.

Kubernetes stateless bir yapıya sahip olduğu için depolama yapabileceği bir sisteme ihtiyaç duyar. Bunun için de etcd' yi kullanır.

Bütün controller makinalarımızda aşağıdaki kurulumları ve konfigürasyonları yapacağız. Bu kurumların hepsi contoller makinlarında yapılacağı için,

  • LXD kullanmayanlar için tek seçenek ssh ile bağlanıp contoller'larda komutları çalıştırmak olacak. Kullandığınız terminalin bağlandığınız birden fazla ssh terminalinde aynı komutu çalıştırabilmesi işinizi kolaylaştıracaktır. Linux ve Mac için bildiğim en en iyi araç tmux. Windows için de zannediyorum cmder bu işi yapabiliyor.

  • LXD kullananlar için ise ssh bağlantısı yapmadan da tek bir terminalden komutları çalıştırmak mümkün.

Ancak şunu unutmamak lazım production ortamlarında büyük ihtimalle çoğunlukla SSH kullanmak zorunda kalacaksınız.

SSH (Linux, Mac ve Windows) için

Bu başlıktaki bütün komutlar doğrudan controller makinlarına ssh ile bağlanıp çalıştırılacaktır.

Binary'leri indiriyoruz.

wget -q --show-progress --https-only --timestamping \
  "https://github.com/etcd-io/etcd/releases/download/v3.4.15/etcd-v3.4.15-linux-amd64.tar.gz"

etcd sunucusunu ve etcdctl cli'ı extract ediyoruz

tar -xvf etcd-v3.4.15-linux-amd64.tar.gz
sudo mv etcd-v3.4.15-linux-amd64/etcd* /usr/local/bin/

etcd sunucusu konfigürasyonunu yapıyoruz.

sudo mkdir -p /etc/etcd /var/lib/etcd
sudo chmod 700 /var/lib/etcd
sudo cp ca.pem kubernetes-key.pem kubernetes.pem /etc/etcd/

etcd'yi sistem servisi olarak çalıştırabilmek için systemd dosyasını oluşturuyoruz.

# declare -A CONTROLLERS_ADDRESSES=( [controller-01]=10.240.10.4 [controller-02]=10.240.10.5 [controller-03]=10.240.10.6 )

ETCD_NAME=$(hostname -s)

INTERNAL_IP=

CONTROLLERS_ADDRESSES=(controller-01,10.240.10.4 controller-02,10.240.10.5 controller-03,10.240.10.6)

INITIAL_CLUSTER=

ETCD_PORT=2380

for i in "${CONTROLLERS_ADDRESSES[@]}" ; do 
  KEY=${i%,*};
  VAL=${i#*,};
  echo $KEY" - "$VAL;
  INITIAL_CLUSTER=${INITIAL_CLUSTER},$KEY"=https://"$VAL":"$ETCD_PORT;

  if [ $KEY == $ETCD_NAME ]; then INTERNAL_IP=$VAL; fi
done

INITIAL_CLUSTER=${INITIAL_CLUSTER:1}

echo $INITIAL_CLUSTER

echo $INTERNAL_IP

echo $ETCD_NAME

cat <<EOF | sudo tee /etc/systemd/system/etcd.service
[Unit]
Description=etcd
Documentation=https://github.com/coreos

[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \
  --name ${ETCD_NAME} \
  --cert-file=/etc/etcd/kubernetes.pem \
  --key-file=/etc/etcd/kubernetes-key.pem \
  --peer-cert-file=/etc/etcd/kubernetes.pem \
  --peer-key-file=/etc/etcd/kubernetes-key.pem \
  --trusted-ca-file=/etc/etcd/ca.pem \
  --peer-trusted-ca-file=/etc/etcd/ca.pem \
  --peer-client-cert-auth \\
  --client-cert-auth \\
  --initial-advertise-peer-urls https://${INTERNAL_IP}:2380 \
  --listen-peer-urls https://${INTERNAL_IP}:2380 \
  --listen-client-urls https://${INTERNAL_IP}:2379,https://127.0.0.1:2379 \
  --advertise-client-urls https://${INTERNAL_IP}:2379 \
  --initial-cluster-token etcd-cluster-0 \
  --initial-cluster ${INITIAL_CLUSTER} \
  --initial-cluster-state new \
  --data-dir=/var/lib/etcd
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

cat /etc/systemd/system/etcd.service

Örnek olarak controller-1 için oluşan yaml dosyası şu şekilde olmalıdır.

cat /etc/systemd/system/etcd.service

[Unit]
Description=etcd
Documentation=https://github.com/coreos

[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \
  --name controller-01 \
  --cert-file=/etc/etcd/kubernetes.pem \
  --key-file=/etc/etcd/kubernetes-key.pem \
  --peer-cert-file=/etc/etcd/kubernetes.pem \
  --peer-key-file=/etc/etcd/kubernetes-key.pem \
  --trusted-ca-file=/etc/etcd/ca.pem \
  --peer-trusted-ca-file=/etc/etcd/ca.pem \
  --peer-client-cert-auth \
  --client-cert-auth \
  --initial-advertise-peer-urls https://10.240.10.4:2380 \
  --listen-peer-urls https://10.240.10.4:2380 \
  --listen-client-urls https://10.240.10.4:2379,https://127.0.0.1:2379 \
  --advertise-client-urls https://10.240.10.4:2379 \
  --initial-cluster-token etcd-cluster-0 \
  --initial-cluster controller-01=https://10.240.10.4:2380,controller-02=https://10.240.10.5:2380,controller-03=https://10.240.10.6:2380 \
  --initial-cluster-state new \
  --data-dir=/var/lib/etcd
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

etcd cluster'ımızı çalıştırıyoruz.

sudo systemctl daemon-reload
sudo systemctl enable etcd
sudo systemctl start etcd

Son olarak etcd cluster'ımızı test etmek amacıyla etcd cluster makinalarımızı listeliyoruz.

sudo ETCDCTL_API=3 etcdctl member list \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/etcd/ca.pem \
  --cert=/etc/etcd/kubernetes.pem \
  --key=/etc/etcd/kubernetes-key.pem

# sonuç oalrak üçünün de çalıştığından emin olmuş olduk
4eb6648ee4ac860f, started, controller-02, https://10.240.10.5:2380, https://10.240.10.5:2379, false
8cee39358d1220b7, started, controller-01, https://10.240.10.4:2380, https://10.240.10.4:2379, false
ef48dd293ef07137, started, controller-03, https://10.240.10.6:2380, https://10.240.10.6:2379, false

UYARI: Eğer hata aldıysanız ürettiğiniz sertifikaların bu bölümde doğru yere taşındığından ve oluşan systemd dosyasının (unit file) içeriğinden emin olunuz.

LXD Kullananlar için

Eğer LXC kullanarak yapmak isterseniz buraya kadar yaptıklarımızı host makinanızda aşağıdaki komutları çalıştırarak da yapabilirsiniz. Tek bir terminal üzerinde alttaki komutları çalıştırmak yeterli olacaktır.

cd ~/kubernetes

wget -q --show-progress --https-only --timestamping \
  "https://github.com/etcd-io/etcd/releases/download/v3.4.15/etcd-v3.4.15-linux-amd64.tar.gz"


CONTROLLERS=(controller-01 controller-02 controller-03)

for instance in "${CONTROLLERS[@]}"; do
  lxc file push etcd-v3.4.15-linux-amd64.tar.gz ${instance}/home/ubuntu/
  lxc exec ${instance} -- tar -xvf /home/ubuntu/v3.4.15/etcd-v3.4.15-linux-amd64.tar.gz -C /home/ubuntu/ 
  lxc exec ${instance} -- mv /home/ubuntu/v3.4.15/etcd-v3.4.15-linux-amd64/etcd/* /usr/local/bin/
done  


for instance in "${CONTROLLERS[@]}"; do 
  lxc exec ${instance} -- mkdir -p /etc/etcd /var/lib/etcd
  lxc exec ${instance} -- cp /home/ubuntu/ca.pem /etc/etcd/ 
  lxc exec ${instance} -- cp /home/ubuntu/kubernetes-key.pem /etc/etcd/ 
  lxc exec ${instance} -- cp /home/ubuntu/kubernetes.pem /etc/etcd/   
done  

INITIAL_CLUSTER=

for instance in "${CONTROLLERS[@]}"; do
  IP=$(lxc info ${instance} | grep eth0 | head -1 | awk '{print $3}')
  INITIAL_CLUSTER=${INITIAL_CLUSTER},${instance}=https://${IP}:2380
done

INITIAL_CLUSTER=${INITIAL_CLUSTER:1}

for instance in controller-0 controller-1 controller-2; do
  INTERNAL_IP=$(lxc info ${instance} | grep eth0 | head -1 | awk '{print $3}')
  ETCD_NAME=$(lxc exec ${instance} -- hostname -s)

cat <<EOF | sudo tee /etc/systemd/system/etcd.service
[Unit]
Description=etcd
Documentation=https://github.com/coreos

[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \
  --name ${ETCD_NAME} \
  --cert-file=/etc/etcd/kubernetes.pem \
  --key-file=/etc/etcd/kubernetes-key.pem \
  --peer-cert-file=/etc/etcd/kubernetes.pem \
  --peer-key-file=/etc/etcd/kubernetes-key.pem \
  --trusted-ca-file=/etc/etcd/ca.pem \
  --peer-trusted-ca-file=/etc/etcd/ca.pem \
  --peer-client-cert-auth \
  --client-cert-auth \
  --initial-advertise-peer-urls https://${INTERNAL_IP}:2380 \
  --listen-peer-urls https://${INTERNAL_IP}:2380 \
  --listen-client-urls https://${INTERNAL_IP}:2379,https://127.0.0.1:2379 \
  --advertise-client-urls https://${INTERNAL_IP}:2379 \
  --initial-cluster-token etcd-cluster-0 \
  --initial-cluster ${INITIAL_CLUSTER} \
  --initial-cluster-state new \
  --data-dir=/var/lib/etcd
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

done
}

cat /etc/systemd/system/etcd.service