Vai al contenuto

Laboratorio 8: Avvio del piano di controllo Kubernetes

Info

Si tratta di un fork dell'originale "Kubernetes the hard way" scritto originariamente da Kelsey Hightower (GitHub: kelseyhightower). A differenza dell'originale, che si basa su distribuzioni simili a Debian per l'architettura ARM64, questo fork si rivolge a distribuzioni Enterprise Linux come Rocky Linux, che gira su architettura x86_64.

In questo laboratorio, verrà avviato il piano di controllo Kubernetes. Sulla macchina controller verranno installati i seguenti componenti: Kubernetes API Server, Scheduler e Controller Manager.

Prerequisiti

Connettersi alla jumpbox e copiare i file binari di Kubernetes e i file di unità systemd sull'istanza server:

scp \
  downloads/kube-apiserver \
  downloads/kube-controller-manager \
  downloads/kube-scheduler \
  downloads/kubectl \
  units/kube-apiserver.service \
  units/kube-controller-manager.service \
  units/kube-scheduler.service \
  configs/kube-scheduler.yaml \
  configs/kube-apiserver-to-kubelet.yaml \
  root@server:~/

È necessario eseguire i comandi riportati nelle sezioni seguenti di questo laboratorio sul computer server. Accedi all'istanza del controller con il comando ssh. Esempio:

ssh root@server

Fornitura del piano di controllo Kubernetes

Crea la directory di configurazione di Kubernetes:

mkdir -p /etc/kubernetes/config

Installazione dei binari del controller Kubernetes

Installare i binari Kubernetes:

  chmod +x kube-apiserver \
    kube-controller-manager \
    kube-scheduler kubectl

  mv kube-apiserver \
    kube-controller-manager \
    kube-scheduler kubectl \
    /usr/local/bin/

Configurazione del server API Kubernetes

  mkdir -p /var/lib/kubernetes/

  mv ca.crt ca.key \
    kube-api-server.key kube-api-server.crt \
    service-accounts.key service-accounts.crt \
    encryption-config.yaml \
    /var/lib/kubernetes/

Creare il file dell'unità systemd kube-apiserver.service:

mv kube-apiserver.service /etc/systemd/system/kube-apiserver.service

Configurazione del Kubernetes Controller Manager

Spostare il kubeconfig kube-controller-manager nella posizione corretta:

mv kube-controller-manager.kubeconfig /var/lib/kubernetes/

Creare il file dell'unità systemd kube-controller-manager.service:

mv kube-controller-manager.service /etc/systemd/system/

Configurazione del scheduler Kubernetes

Spostare il kubeconfig kube-scheduler nella posizione corretta:

mv kube-scheduler.kubeconfig /var/lib/kubernetes/

Creare il file di configurazione kube-scheduler.yaml:

mv kube-scheduler.yaml /etc/kubernetes/config/

Creare il file dell'unità systemd kube-scheduler.service:

mv kube-scheduler.service /etc/systemd/system/

Avvio dei servizi del controller

  systemctl daemon-reload

  systemctl enable kube-apiserver \
    kube-controller-manager kube-scheduler

  systemctl start kube-apiserver \
    kube-controller-manager kube-scheduler

Attendere fino a 10 secondi affinché il server API Kubernetes completi l'inizializzazione.

Verifica

kubectl cluster-info   --kubeconfig admin.kubeconfig
Kubernetes control plane is running at https://127.0.0.1:6443

RBAC per l'autorizzazione Kubelet

In questa sezione si configurano le autorizzazioni RBAC per consentire al server API Kubernetes di accedere all'API Kubelet su ciascun nodo di lavoro. È necessario accedere all'API Kubelet per recuperare metriche e log ed eseguire comandi nei pod.

Questo tutorial imposta il flag Kubelet --authorization-mode su Webhook. La modalità Webhook utilizza l'API SubjectAccessReview per determinare l'autorizzazione.

Eseguire i comandi riportati in questa sezione sul nodo controller, che interessano l'intero cluster.

ssh root@server

Creare il system:kube-apiserver-to-kubelet ClusterRole con le autorizzazioni per accedere all'API Kubelet ed eseguire le attività più comuni associate alla gestione dei pod:

kubectl apply -f kube-apiserver-to-kubelet.yaml \
  --kubeconfig admin.kubeconfig

Verifica RBAC

A questo punto, il piano di controllo Kubernetes è attivo e funzionante. Eseguire i seguenti comandi dalla macchina jumpbox per verificare che funzioni:

Effettuare una richiesta HTTP per ottenere le informazioni sulla versione di Kubernetes:

curl -k --cacert ca.crt https://server.kubernetes.local:6443/version
{
  "major": "1",
  "minor": "32",
  "gitVersion": "v1.32.0",
  "gitCommit": "70d3cc986aa8221cd1dfb1121852688902d3bf53",
  "gitTreeState": "clean",
  "buildDate": "2024-12-11T17:59:15Z",
  "goVersion": "go1.23.3",
  "compiler": "gc",
  "platform": "linux/amd64"
}

Successivo: Avvio dei nodi worker di Kubernetes

Author: Wale Soyinka

Contributors: Steven Spencer, Ganna Zhyrnova