Bu bölümde Kubernetes API'sini tüketecek istemci uygulamaların kullanacağı konfigürasyon dosyalarını oluşturacağız. Bu dosyaların (kubeconfig) temel amacı komut satırında farklı Kubertes cluster'larını yönetmemizi kolaylaştırmaktır. Bu tür bi konfigürasyon dosyası olmasaydı örneğin kubectl kullanırken Kubernetes API'sine bağlanabilmek için sertifika, güvenlik, cluster bilgileri gibi birçok parametreyi hatırlamak durumunda kalacaktık.
Kubelet'ler için kubeconfig dosyaları oluştururken, Kubelet'in node adıyla eşleşen istemci sertifikası kullanılmalıdır. Bu, Kubelet'in Kubernetes "Node Authorizer" tarafından uygun şekilde yetkilendirilmesini sağlayacaktır.
KUBERNETES_PUBLIC_ADDRESS için load balancer'larımız için oluşturduğumuz virtual ip adresini kullanıyor olacağız. Böylece Kubernetes API server için High Availability sağlamış olacağız.
Linux ve Mac için
cd ~/kubernetes
KUBERNETES_PUBLIC_ADDRESS=10.240.10.10
for instance in worker-01 worker-02 worker-03; do
kubectl config set-cluster kubernetes-the-hard-way \
--certificate-authority=ca.pem \
--embed-certs=true \
--server=https://${KUBERNETES_PUBLIC_ADDRESS}:6443 \
--kubeconfig=${instance}.kubeconfig
kubectl config set-credentials system:node:${instance} \
--client-certificate=${instance}.pem \
--client-key=${instance}-key.pem \
--embed-certs=true \
--kubeconfig=${instance}.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:node:${instance} \
--kubeconfig=${instance}.kubeconfig
kubectl config use-context default --kubeconfig=${instance}.kubeconfig
done
Windows için
cd ~/kubernetes
$instances = @{'worker-01'='10.240.10.7'; 'worker-02'='10.240.10.8';'worker-03'='10.240.10.9'}
$KUBERNETES_PUBLIC_ADDRESS="10.240.10.10"
foreach ($instance in $instances.keys)
{
.\kubectl config set-cluster kubernetes-the-hard-way `
--certificate-"authority=ca.pem" `
--embed-certs="true" `
--server=https://$KUBERNETES_PUBLIC_ADDRESS":6443" `
--kubeconfig=$instance.kubeconfig
.\kubectl config set-credentials system:node:$instance `
--client-certificate="$instance.pem" `
--client-key="$instance-key.pem" `
--embed-certs="true" `
--kubeconfig="$instance.kubeconfig"
.\kubectl config set-context default `
--cluster="kubernetes-the-hard-way" `
--user=system:node:"$instance" `
--kubeconfig="$instance.kubeconfig"
.\kubectl config use-context default --kubeconfig=$instance.kubeconfig
}
Sonuçta 3 adet kubeconfig dosyası oluşmuş olacak.
- worker-01.kubeconfig
- worker-02.kubeconfig
- worker-03.kubeconfig
Linux ve Mac için
KUBERNETES_PUBLIC_ADDRESS=10.240.10.10
kubectl config set-cluster kubernetes-the-hard-way \
--certificate-authority=ca.pem \
--embed-certs=true \
--server=https://${KUBERNETES_PUBLIC_ADDRESS}:6443 \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-credentials system:kube-proxy \
--client-certificate=kube-proxy.pem \
--client-key=kube-proxy-key.pem \
--embed-certs=true \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:kube-proxy \
--kubeconfig=kube-proxy.kubeconfig
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
Windows için
$KUBERNETES_PUBLIC_ADDRESS="10.240.10.10"
.\kubectl config set-cluster kubernetes-the-hard-way `
--certificate-authority="ca.pem" `
--embed-certs="true" `
--server=https://$KUBERNETES_PUBLIC_ADDRESS":6443" `
--kubeconfig="kube-proxy.kubeconfig"
.\kubectl config set-credentials system:kube-proxy `
--client-certificate="kube-proxy.pem" `
--client-key="kube-proxy-key.pem" `
--embed-certs="true" `
--kubeconfig="kube-proxy.kubeconfig"
.\kubectl config set-context default `
--cluster="kubernetes-the-hard-way" `
--user="system:kube-proxy" `
--kubeconfig="kube-proxy.kubeconfig"
.\kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
Sonuçta 1 adet kubeconfig dosyası oluşmuş olmalıdır.
- kube-proxy.kubeconfig
Mac ve Linux için
kubectl config set-cluster kubernetes-the-hard-way \
--certificate-authority=ca.pem \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=kube-controller-manager.kubeconfig
kubectl config set-credentials system:kube-controller-manager \
--client-certificate=kube-controller-manager.pem \
--client-key=kube-controller-manager-key.pem \
--embed-certs=true \
--kubeconfig=kube-controller-manager.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:kube-controller-manager \
--kubeconfig=kube-controller-manager.kubeconfig
kubectl config use-context default --kubeconfig=kube-controller-manager.kubeconfig
Windows için
.\kubectl config set-cluster kubernetes-the-hard-way `
--certificate-authority="ca.pem" `
--embed-certs="true" `
--server="https://127.0.0.1:6443" `
--kubeconfig="kube-controller-manager.kubeconfig"
.\kubectl config set-credentials system:kube-controller-manager `
--client-certificate="kube-controller-manager.pem" `
--client-key="kube-controller-manager-key.pem" `
--embed-certs="true" `
--kubeconfig="kube-controller-manager.kubeconfig"
.\kubectl config set-context default `
--cluster="kubernetes-the-hard-way" `
--user=system:"kube-controller-manager" `
--kubeconfig="kube-controller-manager.kubeconfig"
.\kubectl config use-context default --kubeconfig=kube-controller-manager.kubeconfig
Sonuçta 1 adet kubeconfig dosyası oluşmuş olmalıdır.
- kube-controller-manager.kubeconfig
Linux va Mac için
kubectl config set-cluster kubernetes-the-hard-way \
--certificate-authority=ca.pem \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=kube-scheduler.kubeconfig
kubectl config set-credentials system:kube-scheduler \
--client-certificate=kube-scheduler.pem \
--client-key=kube-scheduler-key.pem \
--embed-certs=true \
--kubeconfig=kube-scheduler.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:kube-scheduler \
--kubeconfig=kube-scheduler.kubeconfig
kubectl config use-context default --kubeconfig=kube-scheduler.kubeconfig
Windows için
.\kubectl config set-cluster kubernetes-the-hard-way `
--certificate-authority="ca.pem" `
--embed-certs="true" `
--server="https://127.0.0.1:6443" `
--kubeconfig="kube-scheduler.kubeconfig"
.\kubectl config set-credentials system:kube-scheduler `
--client-certificate="kube-scheduler.pem" `
--client-key="kube-scheduler-key.pem" `
--embed-certs="true" `
--kubeconfig="kube-scheduler.kubeconfig"
.\kubectl config set-context default `
--cluster="kubernetes-the-hard-way" `
--user="system:kube-scheduler" `
--kubeconfig="kube-scheduler.kubeconfig"
.\kubectl config use-context default --kubeconfig=kube-scheduler.kubeconfig
Sonuçta 1 adet kubeconfig dosyası oluşmuş olmalıdır.
- kube-scheduler.kubeconfig
Linux ve Mac için
kubectl config set-cluster kubernetes-the-hard-way \
--certificate-authority=ca.pem \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=admin.kubeconfig
kubectl config set-credentials admin \
--client-certificate=admin.pem \
--client-key=admin-key.pem \
--embed-certs=true \
--kubeconfig=admin.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=admin \
--kubeconfig=admin.kubeconfig
kubectl config use-context default --kubeconfig=admin.kubeconfig
Windows için
.\kubectl config set-cluster kubernetes-the-hard-way `
--certificate-authority="ca.pem" `
--embed-certs="true" `
--server="https://127.0.0.1:6443" `
--kubeconfig="admin.kubeconfig"
.\kubectl config set-credentials admin `
--client-certificate="admin.pem" `
--client-key="admin-key.pem" `
--embed-certs="true" `
--kubeconfig="admin.kubeconfig"
.\kubectl config set-context default `
--cluster="kubernetes-the-hard-way" `
--user="admin" `
--kubeconfig="admin.kubeconfig"
.\kubectl config use-context default --kubeconfig=admin.kubeconfig
Sonuçta 1 adet kubeconfig dosyası oluşmuş olmalıdır.
- admin.kubeconfig
LXC kullananlar için
Kubelet ve kubeproxy kubeconfig dosyalarının worker node'lara taşınması.
for instance in worker-01 worker-02 worker-03; do
lxc file push ${instance}.kubeconfig kube-proxy.kubeconfig ${instance}/home/ubuntu/
done
kube-controller-manager ve kube-scheduler kubeconfig dosyalarının controller node'lara taşınması.
for instance in controller-01 controller-02 controller-03; do
lxc file push admin.kubeconfig kube-controller-manager.kubeconfig kube-scheduler.kubeconfig ${instance}/home/ubuntu/
done
(Linux ve Mac) SSH kullananlar için
Kubelet ve kubeproxy kubeconfig dosyalarının worker node'lara taşınması.
for instance in worker-01 worker-02 worker-03; do
scp ca.pem ${instance}-key.pem ${instance}.pem ${instance}:~/kubernetes
done
kube-controller-manager ve kube-scheduler kubeconfig dosyalarının controller node'lara taşınması.
for instance in controller-01 controller-02 controller-03; do
scp ca.pem ca-key.pem kubernetes-key.pem kubernetes.pem \
service-account-key.pem service-account.pem ${instance}:~/kubernetes
done
Windows için
kubelet ve kubeproxy kubeconfig dosyalarının worker node'lara taşınması.
$instances = @{"worker-01"="10.240.10.7"; "worker-02"="10.240.10.8";"worker-03"="10.240.10.9"}
foreach ($key in $instances.keys)
{
$instance=$key
$internal_ip=$instances[$key]
scp ca.pem $instance-key.pem $instance.pem $internal_ip:~/kubernetes
}
kube-controller-manager ve kube-scheduler kubeconfig dosyalarının controller node'lara taşınması.
$instances = @{"controller-01"="10.240.10.4"; "controller-02"="10.240.10.5";"controller-03"="10.240.10.6"}
foreach ($key in $instances.keys)
{
$instance=$key
$internal_ip=$instances[$key]
scp ca.pem ca-key.pem kubernetes-key.pem kubernetes.pem `
service-account-key.pem service-account.pem $internal_ip:~/kubernetes
}
- Giriş ve Lab Ortamının Kurulması
- İstemci Araçlarının Kurulumu
- Harici Yük Dengeleyici Kurulumu
- Certificate Authority ve TLS Sertifikalarının Oluşturulması
- Kubeconfig Dosyalarının Oluşturulması
- Data Encryption Config ve Key Oluşturulması
- Etcd Cluster Kurulumu
- Control Plane'nin Kurulumu ve Konfigürasyonu
- Worker Node'ların Kurulumu ve Konfigürasyonu
- Uzak Bağlantı için Kubectl Konfigürasyonu
- Pod Network Route'larının Ayarlanması
- DNS'in Kurulumu ve Konfigürasyonu
- Smoke Test