Kubespray ile Kubernetes Kurulum
Ö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
- k8s-cluster.yml dosyası içindeki cluster_name karşısındaki cluster.local değerini CLUSTER_FQDN karşılığı olarak değiştiriyoruz.
- k8s-cluster.yml dosyası içindeki kube_api_anonymous_auth karşısındaki True değerini False yapıyoruz
- k8s-cluster.yml dosyası içindeki kube_basic_auth ve kube_token_auth başındaki # silindikten sonra false değeri true yapılır.
- k8s-cluster.yml dosyası içindeki kube_network_plugin karşısındaki calico, weave olarak değiştirilir.
- 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