Kubespray ile Kubernetes Kurulum

Akif
Devops Türkiye☁️ 🐧 🐳 ☸️
3 min readMar 1, 2019

Ön hazırlık

En az 3 adet Centos 7 sunucu kurulur ve güncelleştirmeleri yapılır.

Her sunucu için;

setenforce 0 && \
sed -i "s/^SELINUX\=enforcing/SELINUX\=disabled/g" /etc/selinux/config && \
sed -i "s/^SELINUX\=permissive/SELINUX\=disabled/g" /etc/selinux/config && \systemctl disable firewalld; systemctl stop firewalld; systemctl mask firewalld

Kubespray kullanıcı oluşturuyoruz

adduser kubespray
sed -i '/visiblepw/i Defaults \!requiretty' /etc/sudoers
echo 'kubespray ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/kubespray

sunucular reboot yapılır.

Eğer sunucuların hostname’i birbirini görmüyorsa her sunucunun hostname’i ve IPleri bütün sunucuların hosts dosyasına yazılır.

Ansible hazırlık

Sunuculardan birine (master) ansible kurmak için aşağıdaki işlemleri yapıyoruz.

yum install -y epel-release && \
yum install -y git python-pip python-devel openssl-devel gcc libffi-devel wget nano && \
pip install --upgrade pip

Kubespray indiriliyor ve ansible kurulumu

su - kubespraywget https://github.com/kubernetes-incubator/kubespray/archive/v2.8.0.tar.gz && \
tar xvfz v2.8.0.tar.gz && \cd kubespray-2.8.0

Veya aşağıdaki komut ile kubespray indirilir.

git clone https://github.com/kubernetes-sigs/kubespray.git

aşağıdaki komut ile ansible kurulur.

sudo pip install -r requirements.txt

Ansible ayarlama

CLUSTER_NAME="cluster-name"
CLUSTER_DOMAIN="domain"
CLUSTER_FQDN="$CLUSTER_NAME.$CLUSTER_DOMAIN"
mkdir inventory/$CLUSTER_NAME
cp -rfp inventory/sample/* inventory/$CLUSTER_NAME/
inventory/$CLUSTER_NAME/group_vars/k8s-cluster/k8s-cluster.yml
  1. k8s-cluster.yml dosyası içindeki cluster_name karşısındaki cluster.local değerini CLUSTER_FQDN karşılığı olarak değiştiriyoruz.
  2. k8s-cluster.yml dosyası içindeki kube_api_anonymous_auth karşısındaki True değerini False yapıyoruz
  3. k8s-cluster.yml dosyası içindeki kube_basic_auth ve kube_token_auth başındaki # silindikten sonra false değeri true yapılır.
  4. k8s-cluster.yml dosyası içindeki kube_network_plugin karşısındaki calico, weave olarak değiştirilir.
  5. k8s-cluster.yml dosyası içindeki kube_apiserver_insecure_port başındaki # silinir.
inventory/$CLUSTER_NAME/group_vars/k8s-cluster/k8s-net-weave.yml

içindeki weave_password başında # silindikten sonra karşına rastgele bir şifre girilir.

inventory/rk8snode1/group_vars/all/all.yml

içindeki kube_read_only_port başında # silinir.

cp inventory/$CLUSTER_NAME/hosts.ini inventory/$CLUSTER_NAME/inventory.cfginventory/$CLUSTER_NAME/inventory.cfg

içine aşağıdaki node1 kısımları düzeltilerek yazılır.

[kube-master]
k8snode1
k8snode2
k8snode3
[etcd]
k8snode1
k8snode2
k8snode3
[kube-node]
k8snode1
k8snode2
k8snode3
[k8s-cluster:children]
kube-master
kube-node

SSH key hazırlama

Ansible kurulu olduğu sunucuda kubespray kullanıcı olarak aşağıdaki gibi giriş yapıyoruz ve ssh-key oluşturuyoruz.

su - kubespray
ssh-keygen -b 4096 -t rsa -f ~/.ssh/id_rsa
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Diğer sunucularda;
Ansible’ın kurulu olduğu sunucunun kubespray kullanıcı altında bulunan ~/.ssh/id_rsa.pub dosyanın içindeki key dieğr sunuculardaki kubespray kullanıcısı altındaki ~/.ssh/authorized_keys içine yazılır.

su - kubespray
mkdir ~/.ssh
vi ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Test için kubespray kullanıcısı ile giriş yapmış olduğunuz ansible kurulu sunucudan ssh bağlantısı yapabilirsiniz.

Kubespray kurulum

Ansible kurulu olan sunucuya kubespray kullanıcısı olarak giriş yapıyoruz.

su - kubesprayansible-playbook -u $(whoami) -b -i inventory/$CLUSTER_NAME/inventory.cfg cluster.ymlansible-playbook -u $(whoami) -b -i inventory/node1/inventory.cfg cluster.yml

ile kurulum başlatıyoruz.

Kurulum sonrası master sunucuya SSH ile bağlanıp aşağıdaki komut ile sunucuların hazır olup olmadığını kontrol edebilirsiniz.

kubectl get node

Kubeconfig ile uzaktan bağlanmak.

Öncelikli olarak aşağıdaki adresten bilgisayarınıza kubectl kurmanız gerekiyor.
https://kubernetes.io/docs/tasks/tools/install-kubectl/

kubeconfig isminde bir dosya oluşturun. İçine aşağıki satırları kopyalayın.

apiVersion: v1
kind: Config
current-context: admin-$CLUSTER_FQDN
preferences: {}
contexts:
- context:
cluster: $CLUSTER_FQDN
user: admin.$CLUSTER_FQDN
name: admin.$CLUSTER_FQDN
clusters:
- cluster:
certificate-authority-data: $CLUSTER_CA_PEM_BASE64_IN_ONE_LINE
server: https://kubernetes.default.svc.$CLUSTER_FQDN:6443
name: $CLUSTER_FQDN
users:
- name: admin.$CLUSTER_FQDN
user:
username: kube
password: $PASSWORD

Master sunucusuna SSH ile bağlanın ve aşağıki komutu çalıştırın.

Çıktıyı $CLUSTER_CA_PEM_BASE64_IN_ONE_LINE yerine yazınız.

cat /etc/kubernetes/ssl/ca.pem |base64 -w 0

$CLUSTER_FQDN yerine= master sunucu hostname,
$PASSWORD yerine de aşağıdaki dosyanın içindeki password yazılır.

inventory/$CLUSTER_NAME/credentials/kube_user.creds

Kubeconfig ile Kubectl

export KUBECONFIG=/path/to/kubeconfig

Dosyayı yukarıdaki komut ile export ettikten sonra aşağıdaki gibi sunucuya ulaşabilirsiniz.

kubectl get no -o wide

Kaynak: https://bitbucket.org/secopstech/kubernetes-lab/src/ea57dadbfea1/docs/?at=master

--

--