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
- Giriş ve Lab Ortamının Kurulması
- İstemci Araçlarının Kurulumu
- Harici Yük Dengeleyici Kurulumu
- Certificate Authority ve TLS Sertifikalarının Oluşturulması
- Kubeconfig Dosyalarının Oluşturulması
- Data Encryption Config ve Key Oluşturulması
- Etcd Cluster Kurulumu
- Control Plane'nin Kurulumu ve Konfigürasyonu
- Worker Node'ların Kurulumu ve Konfigürasyonu
- Uzak Bağlantı için Kubectl Konfigürasyonu
- Pod Network Route'larının Ayarlanması
- DNS'in Kurulumu ve Konfigürasyonu
- Smoke Test