Distribuire un cluster Kubernetes con CoreOS
it:Distribuire un cluster Kubernetes con CoreOS
he:לפרוס את אשכול Kubernetes עם CoreOS
ru:Развертывание кластера Kubernetes с CoreOS
ja:クラスター コア Os と Kubernetes を展開します。
ar:نشر مجموعة كوبيرنيتيس مع CoreOS
zh:部署群集与 CoreOS Kubernetes
ro:Implementaţi un cluster Kubernetes cu CoreOS
pl:Wdróż klaster Kubernetes z CoreOS
de:Bereitstellen eines Clusters Kubernetes mit CoreOS
nl:Implementeer een cluster Kubernetes met CoreOS
pt:Implantar um cluster Kubernetes com CoreOS
es:Implementar un clúster Kubernetes con CoreOS
en:Deploy a cluster Kubernetes with CoreOS
fr:Deployer un cluster Kubernetes avec CoreOS
Questa procedura viene descritto come distribuire rapidamente e semplicemente un cluster Kubernetes multi-nodi con 3 istanze CoreOS. Kubernetes funziona in modalità client - Server, client Kubernetes è denominato "Kubernetes Minion " e il server di "Master Kubernetes ". L'istanza di Kubernetes Master è l'istanza che si orchestrano centralmente istanze Kubernetes Minion s. Nel nostro esempio, un'istanza CoreOS interpreterà il ruolo di Master Kubernetes e le altre due istanze interpreterà il ruolo di nodo Kubernetes (Minion ).
Kubernetes è un sistema di origine di orchestrazione aperta creato da Google per la gestione di applicazione contenitore con Docker su un cluster di host multipli (3 CoreOS VM nel nostro esempio ). Permette la distribuzione, la manutenzione e la scalabilità delle applicazioni. Per ulteriori informazioni si può andare GitHub Kubernetes
Partiamo dal presupposto che il tuo 3 CoreOS istanze già distribuite, qu 'possono comunicare con a vicenda e che si è connessi ssh con il nucleo di utente.
Se questo non è già fatto, aggiornare le istanze di CoreOS affinché siano almeno nella versione CoreOS 653.0.0 e includono DCE 2 (Consulta le nostre FAQ Aggiornare manualmente CoreOS). Nel nostro caso tutti i nostri corpi sono in stabile CoreOS 681.2.0.
$ cat /etc/lsb-release
DISTRIB_ID=CoreOS
DISTRIB_RELEASE=681.2.0
DISTRIB_CODENAME="Red Dog"
DISTRIB_DESCRIPTION="CoreOS 681.2.0"
Dobbiamo anche garantire che tutte le nostre istanze CoreOS dispone di un ID di macchina diversa per cluster di contesto di corretto funzionamento. Semplicemente eliminare il file /etc/machine-id e riavviare tutte le istanze CoreOS entrambi :
$ sudo rm -f /etc/machine-id && sudo reboot
Configurazione dell'istanza Master Kubernetes :
Sovrascrivere il cloud file - default config. yml nella nostra configurazione Kubernetes principale eseguendo i seguenti comandi (solo sull'istanza che agirà come master e nello stesso ordine di seguito ) :
core@Kube-MASTER ~ $ sudo wget -O /usr/share/oem/cloud-config.yml http://mirror02.ikoula.com/priv/coreos/kubernetes-master.yaml
--2015-06-22 15:55:48-- http://mirror02.ikoula.com/priv/coreos/kubernetes-master.yaml
Resolving mirror02.ikoula.com... 80.93.X.X, 2a00:c70:1:80:93:81:178:1
Connecting to mirror02.ikoula.com|80.93.X.X|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8913 (8.7K) [text/plain]
Saving to: '/usr/share/oem/cloud-config.yml'
<!--T:11-->
/usr/share/oem/cloud-config.yml 100%[===================================================================================================>] 8.70K --.-KB/s in 0s
<!--T:12-->
2015-06-22 15:55:48 (148 MB/s) - '/usr/share/oem/cloud-config.yml' saved [8913/8913]
core@Kube-MASTER ~ $ export `cat /etc/environment`
core@Kube-MASTER ~ $ sudo sed -i 's#PRIVATE_IP#'$COREOS_PRIVATE_IPV4'#g' /usr/share/oem/cloud-config.yml
On redémarre notre instance afin que sa configuration entrambi effective :
core@Kube-MASTER ~ $ sudo reboot
Controlliamo che il nostro corpo è stato inizializzato correttamente :
core@Kube-MASTER ~ $ sudo fleetctl list-machines
MACHINE IP METADATA
aee19a88... 10.1.1.138 role=master
core@Kube-MASTER ~ $ sudo etcdctl ls --recursive
/coreos.com
/coreos.com/updateengine
/coreos.com/updateengine/rebootlock
/coreos.com/updateengine/rebootlock/semaphore
/coreos.com/network
/coreos.com/network/config
/coreos.com/network/subnets
/coreos.com/network/subnets/10.244.69.0-24
/registry
/registry/ranges
/registry/ranges/serviceips
/registry/ranges/servicenodeports
/registry/namespaces
/registry/namespaces/default
/registry/services
/registry/services/endpoints
/registry/services/endpoints/default
/registry/services/endpoints/default/kubernetes
/registry/services/endpoints/default/kubernetes-ro
/registry/services/specs
/registry/services/specs/default
/registry/services/specs/default/kubernetes
/registry/services/specs/default/kubernetes-ro
/registry/serviceaccounts
/registry/serviceaccounts/default
/registry/serviceaccounts/default/default
È anche possibile vedere Servizi /Ascolta porti (Non ci sono componenti server /Master Kubernetes ):
core@Kube-MASTER ~ $ sudo netstat -taupen | grep LISTEN
tcp 0 0 10.1.1.138:7001 0.0.0.0:* LISTEN 232 16319 634/etcd2
tcp 0 0 10.1.1.138:7080 0.0.0.0:* LISTEN 0 19392 1047/kube-apiserver
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 0 19142 973/python
tcp 0 0 127.0.0.1:10251 0.0.0.0:* LISTEN 0 20047 1075/kube-scheduler
tcp 0 0 10.1.1.138:6443 0.0.0.0:* LISTEN 0 19406 1047/kube-apiserver
tcp 0 0 0.0.0.0:5355 0.0.0.0:* LISTEN 245 14794 502/systemd-resolve
tcp 0 0 127.0.0.1:10252 0.0.0.0:* LISTEN 0 19653 1058/kube-controlle
tcp 0 0 10.1.1.138:2380 0.0.0.0:* LISTEN 232 16313 634/etcd2
tcp6 0 0 :::8080 :::* LISTEN 0 19390 1047/kube-apiserver
tcp6 0 0 :::22 :::* LISTEN 0 13647 1/systemd
tcp6 0 0 :::4001 :::* LISTEN 232 16321 634/etcd2
tcp6 0 0 :::2379 :::* LISTEN 232 16320 634/etcd2
tcp6 0 0 :::5355 :::* LISTEN 245 14796 502/systemd-resolve
Configurazione delle istanze Kubernetes Minion s :
Sovrascrivere il cloud file - default config. yml alla nostra configurazione Kubernetes Minion eseguendo i seguenti comandi su tutti l'istanza che svolgerà il ruolo di Kubernetes Minion (solo su istanze che giocheranno il ruolo del nodo /Minion et dans le même ordre d'exécution que celui ci-dessous) :
core@Kube-MINION1 ~ $ sudo wget -O /usr/share/oem/cloud-config.yml http://mirror02.ikoula.com/priv/coreos/kubernetes-minion.yaml
--2015-06-22 16:39:26-- http://mirror02.ikoula.com/priv/coreos/kubernetes-minion.yaml
Resolving mirror02.ikoula.com... 80.93.X.X, 2a00:c70:1:80:93:81:178:1
Connecting to mirror02.ikoula.com|80.93.X.X|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5210 (5.1K) [text/plain]
Saving to: '/usr/share/oem/cloud-config.yml'
<!--T:25-->
/usr/share/oem/cloud-config.yml 100%[===================================================================================================>] 5.09K --.-KB/s in 0s
<!--T:26-->
2015-06-22 16:39:26 (428 MB/s) - '/usr/share/oem/cloud-config.yml' saved [5210/5210]
core@Kube-MINION1 ~ $ export `cat /etc/environment`
Attenzione è necessario adeguare l'indirizzo ip privato del tuo istanza master kubernetes nel seguente comando (sostituire 10.1.1.138 dall'ip privato della vostra istanza master kubernetes ) il seguente comando :
core@Kube-MINION1 ~ $ sudo sed -i 's#MASTER_PRIVATE_IP#10.1.1.138#g' /usr/share/oem/cloud-config.yml
Infine una volta si sono eseguire questi comandi in modo identico su ciascuna delle istanze /nodes kubernetes Minion , redémarrez celles-ci afin que leur configuration soient effectives et quelles joignent le cluster.
core@Kube-MINION1 ~ $ sudo reboot
Verifichiamo che il nostro 2 instances kubernetes Minion ont bien rejoint notre cluster (il seguente comando peut être exécuté sur n'importe laquelle de vos instances membre de votre cluster) :
core@Kube-MASTER ~ $ sudo fleetctl list-machines
MACHINE IP METADATA
5097f972... 10.1.1.215 role=node
aee19a88... 10.1.1.138 role=master
fe86214c... 10.1.1.83 role=node
core@Kube-MINION1 ~ $ sudo etcdctl ls --recursive
/coreos.com
/coreos.com/updateengine
/coreos.com/updateengine/rebootlock
/coreos.com/updateengine/rebootlock/semaphore
/coreos.com/network
/coreos.com/network/config
/coreos.com/network/subnets
/coreos.com/network/subnets/10.244.69.0-24
/coreos.com/network/subnets/10.244.38.0-24
/coreos.com/network/subnets/10.244.23.0-24
/registry
/registry/ranges
/registry/ranges/serviceips
/registry/ranges/servicenodeports
/registry/namespaces
/registry/namespaces/default
/registry/services
/registry/services/specs
/registry/services/specs/default
/registry/services/specs/default/kubernetes
/registry/services/specs/default/kubernetes-ro
/registry/services/endpoints
/registry/services/endpoints/default
/registry/services/endpoints/default/kubernetes
/registry/services/endpoints/default/kubernetes-ro
/registry/serviceaccounts
/registry/serviceaccounts/default
/registry/serviceaccounts/default/default
/registry/events
/registry/events/default
/registry/events/default/10.1.1.215.13ea16c9c70924f4
/registry/events/default/10.1.1.83.13ea16f74bd4de1c
/registry/events/default/10.1.1.83.13ea16f77a4e7ab2
/registry/events/default/10.1.1.215.13ea16c991a4ee57
/registry/minions
/registry/minions/10.1.1.215
/registry/minions/10.1.1.83
core@Kube-MINION2 ~ $ sudo etcdctl ls --recursive
/coreos.com
/coreos.com/updateengine
/coreos.com/updateengine/rebootlock
/coreos.com/updateengine/rebootlock/semaphore
/coreos.com/network
/coreos.com/network/config
/coreos.com/network/subnets
/coreos.com/network/subnets/10.244.69.0-24
/coreos.com/network/subnets/10.244.38.0-24
/coreos.com/network/subnets/10.244.23.0-24
/registry
/registry/ranges
/registry/ranges/serviceips
/registry/ranges/servicenodeports
/registry/namespaces
/registry/namespaces/default
/registry/services
/registry/services/specs
/registry/services/specs/default
/registry/services/specs/default/kubernetes
/registry/services/specs/default/kubernetes-ro
/registry/services/endpoints
/registry/services/endpoints/default
/registry/services/endpoints/default/kubernetes
/registry/services/endpoints/default/kubernetes-ro
/registry/serviceaccounts
/registry/serviceaccounts/default
/registry/serviceaccounts/default/default
/registry/events
/registry/events/default
/registry/events/default/10.1.1.83.13ea16f77a4e7ab2
/registry/events/default/10.1.1.215.13ea16c991a4ee57
/registry/events/default/10.1.1.215.13ea16c9c70924f4
/registry/events/default/10.1.1.83.13ea16f74bd4de1c
/registry/minions
/registry/minions/10.1.1.215
/registry/minions/10.1.1.83
Sulle nostre istanze Kubernetes Minion qui Servizi /Ascolta porti (dont le service Kubelet par lequel l'échange d'informations se fait avec le Master Kubernetes ) :
core@Kube-MINION1 ~ $ sudo netstat -taupen | grep LISTEN
tcp 0 0 127.0.0.1:10249 0.0.0.0:* LISTEN 0 18280 849/kube-proxy
tcp 0 0 0.0.0.0:5355 0.0.0.0:* LISTEN 245 14843 500/systemd-resolve
tcp6 0 0 :::49005 :::* LISTEN 0 18284 849/kube-proxy
tcp6 0 0 :::10255 :::* LISTEN 0 19213 1025/kubelet
tcp6 0 0 :::47666 :::* LISTEN 0 18309 849/kube-proxy
tcp6 0 0 :::22 :::* LISTEN 0 13669 1/systemd
tcp6 0 0 :::4001 :::* LISTEN 232 16106 617/etcd2
tcp6 0 0 :::4194 :::* LISTEN 0 19096 1025/kubelet
tcp6 0 0 :::10248 :::* LISTEN 0 19210 1025/kubelet
tcp6 0 0 :::10250 :::* LISTEN 0 19305 1025/kubelet
tcp6 0 0 :::2379 :::* LISTEN 232 16105 617/etcd2
tcp6 0 0 :::5355 :::* LISTEN 245 14845 500/systemd-resolve
Verifica della comunicazione con l'API di Kubernetes Master :
L'interfaccia utente Kubernetes :
Per accedere alla dashboard Kubernetes, devi consentire le connessioni alla porta 8080 (Master Kubernetes API server) ed effettuato una porta se necessario inoltro (trasmettere la zona ) porta 8080 de votre instance Master Kubernetes . Ensuite, il vous suffit d'accéder à l'url http://adresse_ip_publique_instance_kubernetes_master:8080/static/app/#/dashboard/ nel tuo browser :
Da questo dashboard, sei tra altri possibili per visualizzare le informazioni sui nodi di (Kubernetes Minion ). Per questo, è possibile fare clic su "Viste " :
Fare clic su "I nodi " :
La liste de vos nodes Kubernetes Minion apparait :
Fare clic su l'un d'eux pour afficher les informations relatives à ce node (versione di Docker, sistema, KubeProxy e Kubelet, ecc. |) :
Kubernetes CLI :
È inoltre possibile utilizzare gli strumenti Kubectl deQuindi votre instance Master Kubernetes . Pour se faire, vous devez installer cette utilitaire comme suit :
Une fois connecté en ssh sur votre instance Master Kubernetes saisissez les commandes suivantes :
core@Kube-MASTER ~ $ sudo wget -O /opt/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/v0.17.0/bin/linux/amd64/kubectl
--2015-06-23 11:39:09-- https://storage.googleapis.com/kubernetes-release/release/v0.17.0/bin/linux/amd64/kubectl
Resolving storage.googleapis.com... 64.233.166.128, 2a00:1450:400c:c09::80
Connecting to storage.googleapis.com|64.233.166.128|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 20077224 (19M) [application/octet-stream]
Saving to: '/opt/bin/kubectl'
<!--T:54-->
/opt/bin/kubectl 100%[===================================================================================================>] 19.15M 1.18MB/s in 16s
<!--T:55-->
2015-06-23 11:39:26 (1.18 MB/s) - '/opt/bin/kubectl' saved [20077224/20077224]
core@Kube-MASTER ~ $ sudo chmod 755 /opt/bin/kubectl
Prova di una buona comunicazione con il vostro API Kubernetes :
core@Kube-MASTER ~ $ kubectl get node
NAME LABELS STATUS
10.1.1.215 kubernetes.io/hostname=10.1.1.215 Ready
10.1.1.83 kubernetes.io/hostname=10.1.1.83 Ready
core@Kube-MASTER ~ $ kubectl cluster-info
Kubernetes master is running at http://localhost:8080
Così noi possiamo distribuire un primo contenitore Nginx in nostro cluster :
core@Kube-MASTER ~ $ kubectl run-container nginx --image=nginx
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
nginx nginx nginx run-container=nginx 1
Poi ci può o anche su cui i nostri padroni di questo contenitore viene distribuito, il nome del pod e l'ip che è stato è stato influenzato :
core@Kube-MASTER ~ $ kubectl get pods
POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS CREATED MESSAGE
nginx-zia71 10.244.38.2 10.1.1.215/10.1.1.215 run-container=nginx Running 3 minutes
nginx nginx Running 1 minutes
Troviamo queste stesse informazioni tramite la dashboard Kubernete UI andando "Viste " Quindi "Baccelli " :
Possiamo vedere l'ip dell'host su cui è distribuito questo contenitore, con il nome del Pod e il suo indirizzo ip :
Facendo clic su di esso ottiene maggiori dettagli sul nostro Pod :
Possiamo fermare il nostro contenitore semplicemente :
core@Kube-MASTER ~ $ kubectl stop rc nginx
replicationcontrollers/nginx
Noi possiamo anche distribuire il nostro contenitore con 2 repliche :
core@Kube-MASTER ~ $ kubectl run-container nginx --image=nginx --replicas=2
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
nginx nginx nginx run-container=nginx 2
core@Kube-MASTER ~ $ kubectl get pods
POD IP CONTAINER(S) IMAGE(S) HOST LABELS STATUS CREATED MESSAGE
nginx-7gen5 10.244.38.3 10.1.1.215/10.1.1.215 run-container=nginx Running About a minute
nginx nginx Running 39 seconds
nginx-w4xue 10.244.23.3 10.1.1.83/10.1.1.83 run-container=nginx Running About a minute
nginx nginx Running About a minute
Per ulteriori informazioni, l'architettura, componenti e funzionamento di un cluster Kubernetes vi invitiamo a leggere la documentazione ufficiale "Kubernetes architettura" :
Attivare l'aggiornamento automatico dei commenti