Kubernetes Cluster Kurulumu 2 – Kubeadm, Kubelet ve Kubectl
  1. Anasayfa
  2. Container

Kubernetes Cluster Kurulumu 2 – Kubeadm, Kubelet ve Kubectl

0

Kubernetes Cluster serimizin ilk yazısında birlikte ön hazırlıkları gerçekleştirdik. Vagrantfile ile Virtualbox üzerinde Cluster node’larını ayaklandırmıştık. Tekrar göz atmak isterseniz, ilk yazımızı buradan kontrol edebilirsiniz.

Kubernetes’in ikinci yazısında Kubeadm, Kubelet ve Kubectl kurulumlarını gerçekleştireceğiz.
Hadi başlayalım! Proje dizinine geliyor ve vagrant ile tüm node’ları UP edelim.

sudo su
cd /home/ugur/Documents/vagrant/18
vagrant up
vagrant status
Current machine states:

mast running (virtualbox)
node running (virtualbox)

Sunucular çalışır duruma geldi. Kubernetes Cluster mimarisinde master diye bir kavram olmamasına rağmen çoğu dokümanda bu ayrıma yer verilmiş. Bu durumun başlıca sebeblerinden bazıları, kolay anlaşılabilir olması ve Kubernetes Cluster’ın ilk sunucusunda güvenlik nedeniyle Pod’lara yer vermemesidir.

Biz de Kubernetes’i kuracağımız ilk sunucuya Master, dahil edeceğimiz sunuculara ise node (minion) diyeceğiz. Adım adım ilerlerken bu ayrıntılara da değineceğiz.

Resim-1

[star_list]

  • Sunucular üzerinde işlemlere başlayabiliriz. Burada yapacağımız işlem adımları, 1- 6 tüm node’larda, 7-9 sadece Node, 10 sadece Master sunucularında uygulanmalıdır.

[/star_list]

Tüm Node’lar

Adım -1 Hostname düzenleme

vagrant ssh master / node
sudo hostnamectl set-hostname master / node

Adım -2 Docker kurulumu

Gerekli paketleri kuruyoruz.

apt update && apt upgrade -y
apt install -y apt-transport-https ca-certificates curl software-properties-common

Docker kuruyor ve servisi enable yapıyoruz.

apt upgrade -y docker.io
systemctl enable docker.service

Repository’e ekliyoruz.

add-apt-repository "deb https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable"
docker version

 

 

 

 

 

 

 

 

 

Resim-2

Adım -3 Docker yeni versiyonlarında cgroup driver olarak “systemd” değiştirme

Docker yeni kurulumlarda cgroup driver, systemd olmasını öneriyor. Systemd servisleri systemctl ile yönetilebilir.

cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
mkdir -p /etc/systemd/system/docker.service.d

Docker’ı restart ediyoruz.

systemctl daemon-reload
systemctl restart docker

Adım -4 Normal kullanıcıların, Docker komutlarına çalıştırmasına izin verin

Vagrant box’lar genellikle normal user’ı vagrant olarak oluşturuyor.

usermod -aG docker vagrant

Adım -5 Kubeadm, Kubelet ve Kubctl kurulumu

Not: Sadece Ubuntu 16.04 Xenial Kubernetes deposu hazır. Ubuntu 18.04 Kubernetes deposu kullanıma sunulduğunda, aşağıdaki xenial değerini Bionic kod adıyla değiştirin. Hold parametresi paketlerin güncellenmesini engeller. Güncellemelerde her zaman yapı uyum kontrolü yapılması gerekir.

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt update
apt install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

Adım -6 Swap’ın devre dışı bırakılması

Geçerli oturumda swap alanını kapatmak için,

swapoff -a

Değişikliğin kalıcı olması için,

sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
reboot

Swap alanını kontrol ettiğimizde boş gelmeli.

cat /proc/swaps

Sadece Master

Adım -7 Kubernetes Master kurulumu

Kubeadm komutunun ardından bir Kubernetes master’ı kuracak ve yapılandıracaksınız. Bu adım biraz uzun olacak, Kubeadm’da biraz detaya iniyoruz.

Değişkenler

Daha anlaşılır ve kullanılabilir olması adına değişkenleri kullanıyoruz. Dilerseniz direkt kubeadm init komutundan hardcoded yapabilirsiniz.

Vagrantfile ile mast sunucusunda 192.168.1.150 IP adresini verdik ve ifconfig ile bu IP adresini hangi ağ adaptörü almış görebiliriz. Tercihlerimize göre düzenleyerek uygulayalım.

export API_ADR=`ifconfig enp0s8 | grep 'inet'| cut -d':' -f2 | awk '{print $2}'`
export DNS_DOMAIN="mast.ms"
export POD_NETW="10.4.0.0/16"
export SRV_NETW="10.5.0.0/16"

Değişkenleri belirledikten sonra Kubeadm yapılandırma işlemini başlatabiliriz.

  • –service-cidr Servisler için Network,
  • –pod-network-cidr Podlar için Network,
  • –service-dns-domain Servis alternatif DNS,
  • –apiserver-advertise-address Master IP, Aksi belirtilmedikçe, kubeadm, master’ın IP’sini tanıtmak için varsayılan ağ geçidiyle ilişkili ağ arayüzünü kullanır. Vagrant’ın kullandığı network dışında kullanacağımız için ağ geçidi belirtiyoruz.

Artık kubeadm’i yapılandırabiliriz. Diğer adımlarda kubeadm init çıktısına göre ilerleyeceğiz.

kubeadm init \
     --apiserver-advertise-address=${API_ADR} \
     --pod-network-cidr=${POD_NETW} \
     --service-cidr=${SRV_NETW} \
     --service-dns-domain=${DNS_DOMAIN}

Başarılı olarak Master nod oluşturuldu. Çıktıyı kontrol ettiğimizde kullanıcı izni (bkz. Adım -4), Pod Network eklentisinin kurulması gerektiğini ve bu Master’a başka node join etmek için gerekli çıktıyı görüyoruz. kubeadm join tokeni saklıyoruz. Adım adım inceleyeceğiz.

 

 

 

 

 

 

 

 

 

 

 

 

 

Resim-3

Adım -8 Normal kullanıcının Kubectl komutlarını çalıştırmasına izin verin

Kubectl komutlarını sudo ayrıcalıkları olmadan çalıştırabilmek için vagrant (bkz. Adım -4) kullanıcının ana dizinine kopyalayacağım.

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Adım -9 Pod Network kurulumu

Yapılandırma işleminde son olarak bir network modülünün kurulu olması gerektiğini söylüyor. Ben kurulumda Weave’i kuruyorum. Dilerseniz alternatif olarak Calico, Flannel, Cilium ya da Kube-router’ı deneyebilirsiniz.

su - vagrant
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"


serviceaccount/weave-net created
clusterrole.rbac.authorization.k8s.io/weave-net created
clusterrolebinding.rbac.authorization.k8s.io/weave-net created
role.rbac.authorization.k8s.io/weave-net created
rolebinding.rbac.authorization.k8s.io/weave-net created
daemonset.extensions/weave-net created

Adım – Opsiyonel

Varsayılan olarak, Kubernetes Cluster güvenlik nedenleriyle master pod üzerinde uygulama deploy ettirmiyor. Master üzerinde deploy etmek için taint işlemini yapıyoruz.

kubectl taint nodes --all node-role.kubernetes.io/master-

Sadece Node’ler

Adım -10 Master node’a Join

Token’imizi saklamıştık (bkz. Adım -7). Bundan sonra ne kadar Node kullanıyorsak, join komutunu çalıştırıyoruz

kubeadm join 192.168.1.150:6443 --token mc6dxx.xxxxx --discovery-token-ca-cert-hash xxxxxxxxxxxxxxxxxxxxxxx

Kontrol

Kubectl ile tüm podların durumunu kontrol ediyoruz.

kubectl get pods --all-namespaces

kube-system space’de coredns ve kube-proxy podları 2 node üzerine ayrı ayrı çalıştırdı. Kurduğumuz Network modülü Weave-net ise 2 node üzerinde 2 replica ile çalışıyor.

 

 

 

 

 

 

Resim-4

Gelecek yazımızda Kubernetes üzerinde Uygulama Deploy ve ReplicaSet işlemlerini uygulayacağız.

Şimdilik sanal sunuuclarımızı kapatabiliriz.

vagrant halt

Bir sonraki yazıda up etmek üzere.

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

https://github.com/ugurcivak/

https://kubernetes.io/docs/home/

Bu İçeriğe Tepkin Ne Oldu?
  • 4
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Uğur, İstanbul'da doğdu. Ayvansaray Üniversitesi & Bilge Adam tarafından hazırlanan İnternet ve Ağ Teknolojileri bölümünü bitirdi. AYU Siber Güvenlik Yüksek Lisansını tamamladı. Bilge Adam, İsimtescil, Medisana, BDH\NETAŞ firmalarının sistem birimlerinde çeşitli görevler aldı. Kariyerine Deutsche Telekom firmasında Kıdemli Sistem Uzmanı olarak devam ediyor.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir