Skip to content

Commit 375cfe6

Browse files
authored
Hyper-V Üzerinde K8S Kümesi(Cluster) (#49)
* test * Gereksinimler * Kaynak türkçeleştirmesi yapıldı. * Satırlar düzenlendi. * Ana başlıklar ve alt başlıklar düzenlendi. * İçindekiler kısmı güncellendi. * Başlıklar düzeltilmesi.
1 parent ee1c032 commit 375cfe6

File tree

1 file changed

+236
-0
lines changed

1 file changed

+236
-0
lines changed

docs/hyper-v.md

+236
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
# Hyper-V Üzerinde K8S Kümesi(Cluster)
2+
<!--<details>
3+
<summary><b>İçindekiler</b> (Tıklayınız)</summary>-->
4+
5+
1. [Ön Bilgi](#onbilgi)
6+
2. [Hyper-V Nedir?](#hyper-v)
7+
3. [Gereksinimler](#gereksinimler)
8+
4. [Kurulum Özet](#kurulumozet)
9+
5. [Hyper-V Üzerinde Sunucuların Ayarlanması](#hyper-vsunucuayarlari)
10+
* 5.1 [Ana Düğüm Ayarları](#anadugumayarlari)
11+
* 5.2 [İşçi Düğüm Ayarları](#iscidugumayarlari)
12+
6. [Küme Kurulumu](#kumekurulumu)
13+
* 6.1 [Sunucu Paket Güncellemeleri](#sunucupaket)
14+
* 6.2 [Docker Kurulumu](#dockerkurulumu)
15+
* 6.3 [Kubectl ve Kubeadm Kurulumu](#kubectlkubeadmkurulumu)
16+
* 6.4 [Ana Sunucu Ayarlamaları](#anasunucuayarlari)
17+
* 6.4.1 [IP Bloğu Ayarlanması](#ipbloguayarlanmasi)
18+
* 6.4.2 [Kubeconfig Dosya Yolu Değişikliği](#kubeconfig)
19+
* 6.5 [İşçi Sunucu Ayarlamaları](#iscisunucuayarlari)
20+
* 6.4.1 [İşçi Sunucunun Ana Sunucu'ya Katılması](#iscisunucuanasunucu)
21+
* 6.5 [Koza(Pod) Ağ Yapısı Oluşturulması](#kozapodagayarlari)
22+
6. [Küme Kurulumu Sonrası Dağıtım Örneği](#dagitimornegi)
23+
* 7.1 [Nginx Dağıtımı](#nginxdagitimi)
24+
25+
26+
<!--</details>-->
27+
28+
# Ön Bilgi <a name="onbilgi"></a>
29+
30+
K8s küme kurulumu anlatımında ingilizce terimlerin türkçe terimleri ile anlatım yapıldı. İnternette farklı kaynak ararken zorlanılmaması için türkçe olarak kullanılan terimlerin ingilizce karşılıkları aşağıda verilmiştir.
31+
32+
- Küme = Cluster
33+
- Düğüm = Node
34+
- Ana = Master
35+
- İşçi = Worker
36+
- Koza = Pod
37+
38+
# Hyper-V Nedir? <a name="hyper-v"></a>
39+
40+
Hyper-V, Microsoft Hyper-V, Viridian kod adındaki ve önceleri Windows Sunucu Sanallaştırma olarak bilinen, x64 bilgisayarlar için hypervisor tabanlı bir sanallaştırma sistemidir. Birden fazla sunucu rolünü tek bir fiziksel ana makinede çalışan ayrı sanal makineler olarak birleştirerek sunucu donanımı yatırımlarını iyileştirmek için bir araç sağlar. Hyper-V ayrıca, Windows haricinde Linux gibi işletim sistemleri de dahil olmak üzere birden fazla işletim sistemini verimli bir şekilde tek bir sunucuda çalıştırmak ve 64-bit bilgi işlemin gücünden faydalanmak için de kullanılabilir.Windows Server 2008'in belirli x64 sürümleriyle birlikte Hyper-V'nin bir betası sevk edilmiş ve kesinleşmiş sürüm 26 Haziran 2008'de piyasaya çıkmıştır. Yeni çıkacak olan Windows Server 2012® Hyper-V® ile de birden fazla işletim sisteminin paralel olarak aynı sunucu üzerinde çalıştırılmasını sağlamaktadır.
41+
{Kaynak: wikipedia.com}
42+
43+
# Kurulum için Genel Bilgilendirme:
44+
45+
## Gereksinimler:<a name="gereksinimler"></a>
46+
47+
- Hazır Hyper-V
48+
- Docker
49+
- Kubectl
50+
- Kubeadm
51+
## Kurulum Özet<a name="kurulumozet"></a>
52+
Cluster için 1 adet Ana ve 1 adet İşçi düğüm kuracağız. Her adım için kodlar ve kod çıktıları ekran görüntüleri ile desteklenecek. Kuruluma geçmeden önce ortamınızda Hyper-V kurulu olması gerekmektedir.
53+
54+
## Hyper-V Üzerinde Sunucuların Ayarlanması:<a name="hyper-vsunucuayarlari"></a>
55+
56+
### Ana Düğüm Ayarları<a name="anadugumayarlari"></a>
57+
58+
İşletim Sistemi: Ubuntu 20.04
59+
60+
![1 5bBGGCJnSl5IVLxi5lyVMw.png](https://miro.medium.com/max/700/1*5bBGGCJnSl5IVLxi5lyVMw.png)
61+
62+
### İşçi Düğüm Ayarları:<a name="iscidugumayarlari"></a>
63+
İşletim Sistemi: Ubuntu 20.04
64+
65+
![1 j2mTdlZN3kbjMgog01W9fQ.png](https://miro.medium.com/max/700/1*j2mTdlZN3kbjMgog01W9fQ.png)
66+
67+
68+
## 1 - Küme Kurulumu <a name="kumekurulumu"></a>
69+
70+
### 1.1 - Sunucu Paket Güncelleme <a name="sunucupaket"></a>
71+
Her iki sunucuda da aşağıdaki kod parçacığını çalıştırarak, paketlerin güncellenmesini sağlıyoruz.
72+
73+
```bash
74+
$ apt-get update -y && apt-get upgrade -y
75+
```
76+
Her iki sunucunuzdada aşağıdaki gibi kod çıktısı ile karşılaşmalısınız;
77+
78+
![1 B0oA7UlIuS1Gjctp1rRbIQ.png](https://miro.medium.com/max/700/1*B0oA7UlIuS1Gjctp1rRbIQ.png)
79+
80+
### 1.2 - Docker Kurulumu <a name="dockerkurulumu"></a>
81+
Docker kurulumu için aşağıdaki komutları çalıştırarak Docker resmi komut dosyasını çalıştırarak kuruyoruz
82+
83+
```bash
84+
$ curl -fsSL https://get.docker.com -o get-docker.sh
85+
$ sudo sh get-docker.sh
86+
```
87+
88+
Yukarıdaki işlemleri her iki sunucunuzdada çalıştırdıktan sonra aşağıdaki komut ile servisin çalışıp çalışmadığını kontrol edebilirsiniz.
89+
90+
```bash
91+
$ systemctl status docker
92+
```
93+
94+
Ana Sunucu
95+
![1 uEnKXv0iDIuQSVOshjotYQ.png](https://miro.medium.com/max/700/1*uEnKXv0iDIuQSVOshjotYQ.png)
96+
97+
İşçi Sunucu
98+
![1 67-WmTZQ4AgLFrVJQZ0L1w.png](https://miro.medium.com/max/700/1*67-WmTZQ4AgLFrVJQZ0L1w.png)
99+
100+
### 1.3 - Kubectl ve Kubeadm Kurulumu <a name="kubectlkubeadmkurulumu"></a>
101+
Kubernetes ortamınıza bağlanmak, yönetmek kubectl'i kullanıyoruz. Kubernetes API ile haberleşerek bu işlemleri yapabiliyoruz.
102+
103+
Kubeadm, kubernetes kümesinin kurulması, upgrade edilmesi gibi işlevleri sağlayan Kubernetes tarafından geliştirilmiş bir araçtır.
104+
105+
```bash
106+
$ sudo apt-get install -y apt-transport-https ca-certificates curl
107+
```
108+
```bash
109+
$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
110+
```
111+
```bash
112+
$ echo “deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main” | sudo tee /etc/apt/sources.list.d/kubernetes.list
113+
```
114+
```bash
115+
$ sudo apt-get install -y kubelet kubeadm kubectl
116+
```
117+
Yukarıdaki adımda “No apt package “kubeadm”, but there is a snap with that name.” hatası alırsanız, aşağıdaki komut ile çözebilirsiniz.
118+
```bash
119+
$ sudo apt-add-repository “deb http://apt.kubernetes.io/ kubernetes-xenial main”
120+
```
121+
Yukarıdaki komutu çalıştırdıktan sonra ve kurulumlarda herhangi bir hata almadığınızı varsayarak devam ediyoruz.
122+
123+
```bash
124+
$ sudo apt-mark hold kubelet kubeadm kubectl
125+
```
126+
Sunucularınızda son durum aşağıdaki gibi olmalı;
127+
128+
Ana Sunucu
129+
![1 zDvjiuFnZvqfeTb7Qw2xvQ.png](https://miro.medium.com/max/700/1*zDvjiuFnZvqfeTb7Qw2xvQ.png)
130+
131+
İşçi Sunucu
132+
![1 67-WmTZQ4AgLFrVJQZ0L1w.png](https://miro.medium.com/max/700/1*Gd-Us6c_Pml1kXAs_jNbMg.png)
133+
134+
Versiyon kontrolü için aşağıdaki kodu çalıştırıyoruz;
135+
136+
```bash
137+
$ kubeadm version
138+
```
139+
Yukarıdaki komutu çalıştırdıktan sonra aşağıdaki çıktıyı almasınız. Eğer farklı bir çıktı aldıysanız kurulum adımlarında bir hata almış olmalısınız lütfen yukarıya dönüp kontrol ediniz.
140+
141+
###Swap'ı kapatalım;
142+
143+
```bash
144+
$ sudo swapoff -a
145+
```
146+
### 1.4 - Ana Sunucu Ayarları <a name="anasunucuayarlari"></a>
147+
148+
Önce aşağıdaki adımlar ile Ana Sunucumuzda gerekli ayarları yapıp sonrasında İşçi Sunucumuz'a geçeceğiz.
149+
150+
#### 1.4.1 - IP Bloğu Ayarlanması <a name="ipbloguayarlanmasi"></a>
151+
152+
Kubernetes kümesi için IP bloğu tanımlamamız gerekiyor. Aşağıdaki komut ile bunu sağlayabiliriz. Siz burada kendi bloğunuzu tanımlayabilirsiniz;
153+
154+
```bash
155+
sudo kubeadm init — pod-network-cidr=10.244.0.0/16
156+
```
157+
158+
![1 Ug88fmeq9yOdj5kDUoZCvQ.png](https://miro.medium.com/max/700/1*Ug88fmeq9yOdj5kDUoZCvQ.png)
159+
160+
#### 1.4.2 - Kubeconfig Dosya Yolu Değişikliği <a name="kubeconfig"></a>
161+
Kubernetes kümemize kubectl ile (veya geliştirdiğimiz bir uygulama tarafından) erişmek istediğimizde, küme bilgilerini barındıracağımız bir yere ihtiyacımız var. Kubeconfig tam bu noktada karşımıza çıkıyor. Varsayılan olarak ~/.kube/config dosya yolunda yer alır fakat istersek kubectl'e farklı dosya yollarında kubeconfig belirtebiliriz. Aşağıdaki komut ile bunu sağlıyoruz.
162+
163+
```bash
164+
export KUBECONFIG=/etc/kubernetes/admin.conf
165+
```
166+
### 1.5 - İşçi Sunucu Ayarları <a name="iscisunucuayarlari"></a>
167+
168+
Ana Sunucumuzda gerekli ayarlamaları yaptık. Sıra işçi rolü üstlenen sunucumuzda gerekli ayarlamaları yapmakta.
169+
170+
#### 1.5.1 - İşçi Sunucu Ana Sunucu'ya Katılması <a name="iscisunucuanasunucu"></a>
171+
172+
Ana sunucu kurulumunda, "1.4.1 - IP Bloğu Ayarlanması" adımında ekranınızda aşağıdaki gibi bir komut bloğu çıktısı olmalı,
173+
174+
```bash
175+
kubeadm join xx.xx.xx.xx:6443 — token r3e6pp.3thxv2ze1aehvm7j \
176+
— discovery-token-ca-cert-hash sha256:5ce2e1ba5e84ce3ca9212089aaf0f282e23a741ed3ba7dd5c6576fdede43c9e1
177+
```
178+
179+
yukarıdaki kod benim geliştirme ortamıma özel sizdeki token farklı olacaktır. Bu kodu kopyalayarak işçi sunucusuna giriyoruz. Çıktı aşağıdaki gibi olmalı;
180+
181+
![1 GDdvSNmarzCOHelpB502AA.png](https://miro.medium.com/max/700/1*GDdvSNmarzCOHelpB502AA.png)
182+
183+
Ana Sunucuda aşağıdaki komutu çalıştırıp küme durumunu kontrol ediyoruz;
184+
185+
```bash
186+
kubectl get nodes
187+
```
188+
![1 lcFBAYPXscZ1IkAqiDW2Hg.png](https://miro.medium.com/max/700/1*lcFBAYPXscZ1IkAqiDW2Hg.png)
189+
190+
### 1.6 - Koza(Pod) Ağ Yapısı Oluşturulması <a name="kozapodagayarlari"></a>
191+
192+
Öncelikle Pod'un türkçeye tam olarak nasıl çevirileceğini bilmiyorum. Ben bu dökümanda Koza olarak bahsettim. Ama daha anlamlı veya tam anlamına karşılık gelen kelime olursa güncelleyebiliriz.
193+
194+
Aşağıdaki komut ile küme durumunu kontrol ettiğimizde "NotReady" ifadesini görmüştük.
195+
196+
```bash
197+
kubectl get nodes
198+
```
199+
200+
Şimdi Ana Sunucumuz üstünde ağ yapılandırmasını yapalım ve sonrasında ilk dağıtımımızı gerçekleştirelim.
201+
202+
```bash
203+
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
204+
```
205+
![1 K0p5NUnDSZp90qOnxFZXYw.png](https://miro.medium.com/max/700/1*K0p5NUnDSZp90qOnxFZXYw.png)
206+
207+
## 2 - Küme Kurulumu Sonrası Dağıtım Örneği <a name="dagitimornegi"></a>
208+
209+
Kubernetes kümesi kurulumu tamamlandığına göre artık ilk örneğimizi gerçekleştirebiliriz. Ben bu örnekte Nginx dağıtımı yapmak istiyorum.
210+
211+
### 2.1 - Nginx Dağıtımı <a name="nginxdagitimi"></a>
212+
213+
Aşağıdaki komutları takip ederek ilk dağıtımımızı yapalım;
214+
215+
```bash
216+
kubectl create deployment nginx — image=nginx
217+
```
218+
![1 FGdWukx2mFv27SSgEMNRJQ.png](https://miro.medium.com/max/640/1*FGdWukx2mFv27SSgEMNRJQ.png)
219+
220+
```bash
221+
kubectl expose deploy nginx — port 80 — target-port 80 — type NodePort
222+
```
223+
![1 hBp_VUdX4fXgikJr9aAQIQ.png](https://miro.medium.com/max/700/1*hBp_VUdX4fXgikJr9aAQIQ.png)
224+
225+
Dağıtımı tamamladık. Şimdi bu kozanın hangi düğümde ayağa kalktığını ve durumunu kontrol edelim;
226+
227+
```bash
228+
kubectl get pod -o wide
229+
```
230+
![1 XZmcSy1JDCEuu3joD_eiHQ.png](https://miro.medium.com/max/700/1*XZmcSy1JDCEuu3joD_eiHQ.png)
231+
232+
Gördüğünüz gibi bir sorun yok. Tarayıcınızdada aşağıdaki gibi bir çıktı elde edebilirsiniz;
233+
234+
![1 mMewo5k_TFB3VgzeKdYQJg.png](https://miro.medium.com/max/700/1*mMewo5k_TFB3VgzeKdYQJg.png)
235+
236+
Kubernetes kümesini oluşturduk ve ilk dağıtım gerçekleştirdik.

0 commit comments

Comments
 (0)