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