Daily Bo Shu Kubernetes v1.10.0 documentation d'installation de cluster

La Chine préoccupée par le nombre global OSC open source, obtenir les dernières informations techniques

En raison des exigences de travail, a récemment commencé à étudier docker et K8S informations pertinentes, le principal processus d'installation de Kubernetes papier d'enregistrement et de la fosse à gradins. Pit est beaucoup, vient très bien! Si des erreurs, l'espoir de me corriger.

Environnement système

CentOS 7.4

Environnement matériel

l'adresse IP du nom de la machine du rôle 10.8.51.76server 10.8.51.77node-1 du noeud de noeud maître depuis le noeud 10.8.51.78node-2

Initialiser l'environnement

Après l'initialisation de l'environnement, il est recommandé de redémarrer la machine

Modifier le nom d'hôte, l'unité proposée

hostnamectl serveur set-nom d'hôte

node-1 set-nom d'hôte hostnamectl

node-2 set-nom d'hôte hostnamectl

Modifier / etc / hosts pour augmenter le mappage d'hôte

# Node-2 est le nom d'hôte du noeud courant

127.0.0.1 localhost noeud-2 localhost4 localhost4.localdomain4

:: 1 localhost noeud-2 localhost6 localhost6.localdomain6

10.8.51.76 serveur

10.8.51.77 noeud-1

10.8.51.78 noeud-2

authentification libre (recommandé pour obtenir sur, principalement pour faciliter)

Entrez ssh-keygen # tout le chemin à

serveur ssh-copy-id

node-1 ssh-copy-id

node-2-ssh-id de copie

Éteignez le pare-feu, échange à proximité, à proximité Selinux

# Éteignez le pare-feu

firewalld d'arrêt systemctl

systemctl désactiver firewalld

# Fermez la mémoire d'échange, doit être fermé. Aucun sujet aux erreurs

swapoff -a

sed -i 's /.* swap. * / # & /' / etc / fstab

# Désactiver SELinux

setenforce 0

sed -i "s / ^ = SELINUX faire observer / SELINUX = désactivé / g" / etc / sysconfig / selinux

sed -i "s / ^ = SELINUX faire observer / SELINUX = désactivé / g" / etc / selinux / config

sed -i "s / ^ SELINUX = permissive / SELINUX = désactivé / g" / etc / sysconfig / selinux

sed -i "s / ^ SELINUX = permissive / SELINUX = désactivé / g" / etc / selinux / config

# Changez le nombre maximal de fichiers ouverts

echo "* doux nofile 65536" > >  /etc/security/limits.conf

echo "* hard nofile 65536" > >  /etc/security/limits.conf

echo "* nproc doux 65536" > >  /etc/security/limits.conf

echo "* dur nproc 65536" > >  /etc/security/limits.conf

echo "* memlock doux illimité" > >  /etc/security/limits.conf

echo "* dur memlock illimité" > >  /etc/security/limits.conf

# Configurer le routage IP, la charge Xu

fichier Modifier, augmentation

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

# Après l'achèvement de son entrée en vigueur

sysctl -p /etc/sysctl.d/k8s.conf

Installation Docker

Kubernetes 1.10.0 et phase attachée version docker, ne spécifiez pas une version provoque la version docker est trop élevée, K8S démarre pas correctement

# Télécharger la version spécifiée docker

wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm

wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm

# Installation

rpm Docker-ce-SELinux-17.03.2.ce-1.el7.centos.noarch.rpm

rpm Docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm

# Set démarrage de Kai

systemctl permettre docker

# Début docker

systemctl commencer docker

# Afficher l'état

informations docker

# Voir la version

Version docker

Ici, il peut être configuré pour miroir pour accélérer domestiques

Ali images de nuages grâce à l'accélérateur: Ali hub conteneur nuage https://dev.aliyun.com/search.html; Une fois connecté au Centre d'administration - > accélérateur Miroir - > Opération Document, vous pouvez définir les invites. suit la figure:

configuration Docker

Ouvrir la table filtre iptables chaîne FORWARD

Modifier /lib/systemd/system/docker.service, dans ExecStart = .. Ce qui précède a été ajouté ce qui suit:

ExecStartPost = / usr / sbin / iptables -I VERS L'AVANT -s -j ACCEPT 0.0.0.0/0

ExecStart = / usr / bin / dockerd

Tirez le miroir, parce que le pays ne peut pas se connecter à Google (k8s.gcr.io) services connexes, nécessaires à l'avance de la traction d'image requis sur. Ici, si elle peut être sur le mur, les étapes peuvent être omises

noeud de serveur

# Pull Miroir

docker traction keveon / Kube-apiserver-amd64: v1.10.0

docker traction keveon / Kube-scheduler-amd64: v1.10.0

docker traction keveon / Kube contrôleur-manager-amd64: v1.10.0

docker traction keveon / Kube-proxy-amd64: v1.10.0

docker traction keveon / K8S-dns-Kube-dns-amd64: 1.14.8

docker traction keveon / K8S-dns-dnsmasq-nounou-amd64: 1.14.8

docker traction keveon / K8S-dns-sidecar-amd64: 1.14.8

docker traction keveon / ETCD-amd64: 3.1.12

docker traction keveon / flanelle: v0.10.0-amd64

docker traction keveon / pause-amd64: 3.1

# Modifier le nom d'image, conformément à la demande de l'image originale de services

tag docker keveon / Kube-apiserver-amd64: v1.10.0 k8s.gcr.io/kube-apiserver-amd64:v1.10.0

tag docker keveon / Kube-scheduler-amd64: v1.10.0 k8s.gcr.io/kube-scheduler-amd64:v1.10.0

tag docker keveon / Kube contrôleur-manager-amd64: v1.10.0 k8s.gcr.io/kube-controller-manager-amd64:v1.10.0

tag docker keveon / Kube-proxy-amd64: v1.10.0 k8s.gcr.io/kube-proxy-amd64:v1.10.0

tag docker keveon / K8S-dns-Kube-dns-amd64: 1.14.8 k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8

tag docker keveon / K8S-dns-dnsmasq-nounou-amd64: 1.14.8 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.8

tag docker keveon / K8S-dns-sidecar-amd64: 1.14.8 k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.8

tag docker keveon / ETCD-amd64: 3.1.12 k8s.gcr.io/etcd-amd64:3.1.12

tag docker keveon / flannel: v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64

tag docker keveon / pause-amd64: 3.1 k8s.gcr.io/pause-amd64:3.1

# Supprimer l'image d'origine

docker rmi keveon / Kube-apiserver-amd64: v1.10.0

docker rmi keveon / Kube-planificateur-amd64: v1.10.0

docker rmi keveon / Kube contrôleur-manager-amd64: v1.10.0

docker rmi keveon / Kube-proxy-amd64: v1.10.0

docker rmi keveon / K8S-dns-Kube-dns-amd64: 1.14.8

docker rmi keveon / K8S-dns-dnsmasq-nounou-amd64: 1.14.8

docker rmi keveon / K8S-dns-sidecar-amd64: 1.14.8

docker rmi keveon / ETCD-amd64: 3.1.12

docker rmi keveon / flannel: v0.10.0-amd64

docker rmi keveon / pause-amd64: 3.1

 noeud de noeud, en tirant le miroir, le tableau de bord et qui peut être placé sur le noeud maître de heapster

noeud de noeud

# Pull Miroir

docker traction keveon / Kube-proxy-amd64: v1.10.0

docker traction keveon / flanelle: v0.10.0-amd64

docker traction keveon / pause-amd64: 3.1

docker traction keveon / Kubernetes-tableau de bord amd64: v1.8.3

docker traction keveon / heapster-influxdb-amd64: v1.3.3

docker traction keveon / heapster-grafana-amd64: v4.4.3

docker traction keveon / heapster-amd64: v1.4.2

# Modifier le nom de l'image

tag docker keveon / flannel: v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64

tag docker keveon / pause-amd64: 3.1 k8s.gcr.io/pause-amd64:3.1

tag docker keveon / Kube-proxy-amd64: v1.10.0 k8s.gcr.io/kube-proxy-amd64:v1.10.0

tag docker keveon / Kubernetes-tableau de bord amd64: v1.8.3 k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3

tag docker keveon / heapster-influxdb-amd64: v1.3.3 k8s.gcr.io/heapster-influxdb-amd64:v1.3.3

tag docker keveon / heapster-grafana-amd64: v4.4.3 k8s.gcr.io/heapster-grafana-amd64:v4.4.3

tag docker keveon / heapster-amd64: v1.4.2 k8s.gcr.io/heapster-amd64:v1.4.2

# Supprimer l'image d'origine

docker rmi keveon / Kube-proxy-amd64: v1.10.0

docker rmi keveon / flannel: v0.10.0-amd64

docker rmi keveon / pause-amd64: 3.1

docker rmi keveon / Kubernetes-tableau de bord amd64: v1.8.3

docker rmi keveon / heapster-influxdb-amd64: v1.3.3

docker rmi keveon / heapster-grafana-amd64: v4.4.3

docker rmi keveon / heapster-amd64: v1.4.2

configuration d'installation Kubernetes

Chaque noeud doit effectuer

La source Modifier

chat >  /etc/yum.repos.d/kubernetes.repo < < EOF

name = Kubernetes

baseurl = https: //mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled = 1

gpgcheck = 0

repo_gpgcheck = 0

EOF

Installation kubeadm

La dernière version en utilisant yum installer l'installation -y kubeadm, nous devons installer la version spécifiée, l'exécution

# Vérifiez ces versions peuvent être installées

Yum liste kubeadm --showduplicates

# Installez la version spécifiée

yum install kubeadm-1.10.0 kubectl-1.10.0-0 kubelet-1.10.0-0

# Boot

systemctl permettre kubelet

# Début

systemctl commencer kubelet

À ce moment, le système démarre, se plaindra, pas le contrôle. Parce que non initialisé. Après l'initialisation bien.

Kubeadm modifier les fichiers de configuration

# Pit ici beaucoup, assurez-vous de faire attention au format de codage de fichier, pas la fin de la ligne il n'y a pas d'autres caractères invisibles. Sinon, l'initialisation du temps à essayer de trouver à redire

vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

# Modifier cette ligne, ici cgroupfs être compatible avec l'info docker

Environnement = "KUBELET_CGROUP_ARGS = - cgroup-driver = cgroupfs"

# Ajoutez cette ligne

Environnement = "KUBELET_EXTRA_ARGS = - v = 2 --fail-swap sur = false --pod-conteneur infra-image = registry.cn-hangzhou.aliyuncs.com / k8sth / pause-amd64: 3.0"

# Version complète suit

Environnement = "KUBELET_KUBECONFIG_ARGS = - bootstrap-kubeconfig = / etc / Kubernetes / bootstrap-kubelet.conf --kubeconfig = / etc / Kubernetes / kubelet.conf"

Environnement = "KUBELET_SYSTEM_PODS_ARGS = - pod-manifeste-path = / etc / Kubernetes / --allow privilégié se manifeste = true"

Environnement = "KUBELET_NETWORK_ARGS = - réseau-plugin = cni---cni-dir = conf / etc / cni / net.d --cni-bin-dir = / opt / cni / bin"

Environnement = "KUBELET_DNS_ARGS = - cluster dns = 10.96.0.10 --cluster-domain = cluster.local"

Environnement = "KUBELET_AUTHZ_ARGS = - autorisation en mode = webhook --client-ca-file = / etc / Kubernetes / pki / ca.crt"

Environnement = "KUBELET_CADVISOR_ARGS = - cadvisor-port = 0"

Environnement = "KUBELET_CGROUP_ARGS = - cgroup-driver = cgroupfs"

Environnement = "KUBELET_CERTIFICATE_ARGS = - Pivoter certificats = true --cert-dir = / var / lib / kubelet / pki"

Environnement = "KUBELET_EXTRA_ARGS = - v = 2 --fail-swap sur = false --pod-conteneur infra-image = registry.cn-hangzhou.aliyuncs.com / k8sth / pause-amd64: 3.0"

ExecStart =

ExecStart = / usr / bin / kubelet $ KUBELET_KUBECONFIG_ARGS $ KUBELET_SYSTEM_PODS_ARGS $ KUBELET_NETWORK_ARGS $ KUBELET_DNS_ARGS $ KUBELET_AUTHZ_ARGS $ KUBELET_CADVISOR_ARGS $ KUBELET_CGROUP_ARGS $ KUBELET_CERTIFICATE_ARGS $ KUBELET_EXTRA_ARGS $ KUBELET_EXTRA_ARG

Une fois configuré en utilisant

scp racine /etc/systemd/system/kubelet.service.d/10-kubeadm.conf @ node-1: /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

fichiers de transfert à votre commande noeud enfant

Configuration Recharger

# Recharger la configuration

systemctl démon-reload

# Redémarrer le service kubelet

systemctl restart kubelet

initialisation Cluster

# Initialiser un cluster, pour augmenter leur adresse IP locale, le serveur devant nous pour plusieurs cartes réseau, vous pouvez spécifier des principaux IP

kubeadm --apiserver-initialisation de la publicité adresse 10.8.51.76 --pod-network-cidr = 10.244.0.0 / 16 --kubernetes version = v1.10.0

# Commande de réinitialisation Échec de l'initialisation

kubeadm reset

Voici la clé, j'ai plusieurs fois à cet endroit est mort. Ne vous inquiétez pas des erreurs, évitez les éléments suivants peuvent augmenter considérablement les chances de succès

1. Le même profil est pourvu /etc/systemd/system/kubelet.service.d/10-kubeadm.conf cgroupfs l'info docker

2. Modifiez le fichier de configuration, attention à la fin des caractères de la ligne invisible ******* en particulier ctrl + c + ctrl amis v

Après avoir pris le nom du miroir 3. Ne pas oublier de changer la traction

4. Voir journal des erreurs / var / log / messages

Après le succès de leurs interprétations comme suit :( coupure oublier, c'est l'Internet à la recherche de)

Les informations sur la carte

# Cela signifie que les K8S pour configurer les variables d'environnement, dans ce répertoire peuvent commander soit K8S d'utilisation, ce fichier peut également l'équipement d'essai à d'autres nuds sur les nuds enfants du cluster sont également commandes exécutables

ACCUEIL / .kube de $ de mkdir

sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config

chown $ sudo (id -u): $ (id -G) $ HOME / .kube / config

# Ceci est bon de se rappeler, le nud enfant se joint à la commande nud maître à exécuter, la commande suivante se produira dans node-1, node-2, peut être node-1, node-2 et ajouté au cluster

kubeadm rejoindre 10.8.51.76:6443 --token tncyyh.jycputhrslcs6f6d SHA256 --discovery-token-ca-cert-hachage: 099ebf2e5b7d07f35e ********** ********** fb7b20cdf9239fa70734f6acc73a48

Afficher l'état du cluster

kubectl obtenir cs

NOM DE STATUT DE MESSAGE ERREUR

planificateur santé ok

contrôleur-manager santé ok

ETCD-0 santé { "santé": "true"}

fiche réseau Installation flannel

# Fin tant que le serveur peut être installé

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubectl appliquer -f Kube-flannel.yml

clusterrole.rbac.authorization.k8s.io "flannel" créé

clusterrolebinding.rbac.authorization.k8s.io "flannel" créé

ServiceAccount "flannel" créé

ConfigMap "Kube-cfg flanelle" créé

daemonset.extensions "Kube-ds-flanelle" créé

Une fois l'installation terminée, vous pouvez utiliser kubectl get pod --all-namespaces Voir

kubectl get pod --all-namespaces

NAMESPACE NOM PRÊT STATUT AGE DE REDEMARRAGES

Kube système ETCD-serveur 1/10 Exécution 4h

Kube système heapster-676cc864c6-g4jfj 1/10 Exécution 4h

Kube système Kube-apiserver-server 1/10 Exécution 4h

Kube système Kube-contrôleur-manager-serveur 1/10 Exécution 4h

Kube-système Kube-dns-86f4d74b45-pm8z23/30 Exécution 4 h

Kube-système Kube-ds-Flannel-amd64-6xlzz 1/10 en cours 4h

Kube-système Kube-ds-Flannel-amd64-78clr 1/10 en cours 4h

Kube-système Kube-ds-flanelle amd64-qgjp21/10 en cours 3h

Kube système Kube-proxy-5pqsw 1/10 Exécution 4h

Kube système Kube-proxy-85m2p 1/10 Exécution 3h

Kube système Kube-proxy-zgns81/10 Exécution 4h

Kube système Kube-programmateur serveur 1/10 Exécution 4h

kube-système Kubernetes-tableau de bord 7d5dcdb6d9-bv8l21/1 de course 03h

Système Kube surveillance grafana-69df66f668-ndcwk 1/10 Exécution 4h

Système Kube surveillance influxdb-78d4c6f5b6-pgb891/10 Exécution 4h

 Laissez-serveur pour participer à la charge

kubectl taint noeuds de serveur node-role.kubernetes.io/master-

 Joignez-vous à nud au cluster

# Ceci est affiché après l'initialisation

kubeadm rejoindre 10.8.51.76:6443 --token tncyyh.jycputhrslcs6f6d --discovery-token ca-cert-hachage SHA256: 099ebf2e5b7d07f35e3ace5809f ******** ******* 3c2f758ab9f 73a48

Voir les nuds du cluster

kubectl get noeuds

NOM RÔLES STATUT VERSION AGE

node-1 Prêt < aucun >  4h v1.10.0

le noeud 2-Ready < aucun >  3h v1.10.0

serveur maître Prêt v1.10.04h

Voir le service api

# Exécution du navigateur

https://10.8.51.76:6443

Ce ne se limite pas, et vous pouvez configurer un proxy, vous pouvez utiliser un accès non https

proxy nohup de kubectl --port = 8081 --address = 10.8.51.76 --accept-hôtes = ^ * $ &

# Exécution du navigateur

Un bon .. si vous pouvez coller ici, le cluster il montre, a construit un succès. Lire le contenu suivant peut être sélectionné

Tableau de bord de plug-in d'installation

# Télécharger Kubernetes profil

wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

# Modifier fichier Kubernetes-dashboard.yaml, spécifiez le port

Depuis K8S après la Kube-apiserver version 1.6 a permis l'autorisation RBAC, et le répertoire de source officielle tableau de bord controller.yaml ne définit pas ServiceAccount d'autorisation, il sera rejeté lorsque l'API serveur API accès ultérieur

ServiceAccount créer un tableau de bord Kubernetes-admin et Octroyer des autorisations admin cluster pour créer Kubernetes-tableau de bord admin.rbac.yaml

---

apiVersion: v1

genre: ServiceAccount

métadonnées:

 étiquettes:

 K8S-application: Kubernetes-tableau de bord

 Nom: Kubernetes-tableau de bord-admin

 namespace: Kube-système

---

apiVersion: rbac.authorization.k8s.io/v1beta1

genre: ClusterRoleBinding

métadonnées:

 Nom: Kubernetes-tableau de bord-admin

 étiquettes:

 K8S-application: Kubernetes-tableau de bord

roleRef:

 apiGroup: rbac.authorization.k8s.io

 genre: ClusterRole

 Nom: cluster admin

sujets:

- genre: ServiceAccount

 Nom: Kubernetes-tableau de bord-admin

 namespace: Kube-système

# Run

kubectl créer -f Kubernetes-dashboard.yaml

kubectl créer -f Kubernetes-tableau de bord admin.rbac.yaml

Installation plug-in heapster

mkdir heapster

wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/grafana.yaml

wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/rbac/heapster-rbac.yaml

wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/heapster.yaml

wget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/influxdb.yaml

# Voir plus qui configuration de version à télécharger en miroir de la même chose que lors du téléchargement, la version coûts de modification incompatibles miroir

kubectl créer -f ./

Voir le jeton

kubectl obtenir un secret -n Kube système | grep tableau de bord-admin

kubectl décrire un secret -n-système Kube / Kubernetes-tableau de bord-admin-jeton 4lk94

Tableau de bord d'accès

# Entrée du navigateur, cette fin 30000 nous venez de spécifier

https://10.8.51.76:30000

jeton d'entrée jeton sélectionné ici juste à la vue, cliquez sur Connexion

Ok. Donc, c'est la poubelle.

Si votre navigateur ne peut pas accéder https, reportez-vous aux chrmoe du navigateur de diverses façons, j'ai essayé, ne fonctionnera pas, et enfin utiliser peut être vu le succès de la connexion suivante.

Tableau de bord en utilisant un certificat personnalisé

https://blog.csdn.net/chenleiking/article/details/81488028

Cet article se référant au nombre total d'histoires de succès en ligne.

Référence Source:

https://www.jianshu.com/p/42772740f09a

https://www.kubernetes.org.cn/3808.html

version Java de l'utilisation de l'API

Je l'utiliser pour obtenir des documents ymal pod ajouter, supprimer, modifier et certaines opérations de base

https://github.com/fabric8io/kubernetes-client

YMAL Format Description

################################################## ##################

apiVersion: v1 // Version

type: pod // type pod

métadonnées: // métadonnées

 name: String // métadonnées, nom du module

 namespace: String // métadonnées, espace de noms pod

 étiquettes: // liste de balise de métadonnées

 - name: String Nom // des balises de métadonnées

 annotations: // métadonnées, liste des annotations personnalisées

 - name: String // métadonnées, nom d'annotation personnalisée

spec: // définition détaillée de la nacelle dans le récipient

 conteneurs: // Liste pod dans le conteneur, il peut y avoir plusieurs conteneurs

 - name: String Nom du navire //

 Image: String // miroir de récipient

 imagesPullPolicy: // Obtenez la stratégie miroir, la valeur par défaut est toujours, toujours essayer de re-télécharger l'image

 commande:  Liste d'conteneur de début de commandes (si pas configuré pour utiliser la commande de miroir interne)

 args:  // commencer la liste des arguments

 WorkingDir: String // répertoire de travail du conteneur

 volumeMounts: // monter le volume de stockage est prévu à l'intérieur du récipient

 - name: String

 mountPath: String // chemin absolu d'un volume de stockage à l'intérieur de la cuve mont

 readOnly: booléen // La valeur par défaut est de lire et d'écrire

 ports: // besoins de conteneurs à être exposés dans la liste des numéros de port

 - name: String

 containerPort: int // port de conteneurs à être exposé

 hostPort: int // vaisseau hôte où le port d'écoute (conteneur de mappage de port est exposé au port hôte, le même hôte ne peut pas démarrer la deuxième copie du récipient lorsque hostPort disposé)

 Protocole: String // TCP et UDP, la valeur par défaut TCP

 // liste environnementale du conteneur supérieur à être réglé pour fonctionner: env

 - name: String

 Valeur: String

 ressources:

 // nombre de contraintes de ressources, les ressources de conteneurs disponibles maximum: limites

 cpu: Srting

 mémoire: String

 requeste: Le montant initial des ressources disponibles // contraintes de ressources, le conteneur commence

 cpu: String

 mémoire: String

 livenessProbe: // navire pod paramètres de contrôle de la santé

 exec:

 commande:  // commande ou un script exec la façon dont vous devez spécifier

 HttpGet: // Examen de la santé par HttpGet

 path: String

 Port: numéro

 hôte: String

 système: Srtring

 httpHeaders:

 - Nom: Stirng

 Valeur: String

 TCPSocket: // Examen de la santé par TCPSocket

 Port: numéro

 initialDelaySeconds: 0 // première fois de contrôle

 timeoutSeconds: 0 // délai d'attente de vérification

 periodSeconds: 0 // vérifier l'intervalle de temps

 successThreshold: 0

 FailureThreshold: 0

 SecurityContext: // configuration de sécurité

 privilégiée: Falae

 restartPolicy: // stratégie de redémarrage, la valeur par défaut est toujours

 nodeSelector: objet // sélection de nud, représente le Pod contenant le nud prévu These étiquette à la clé: valeur format spécifié

 imagePullSecrets:

 - name: String

 hostNetwork: false // si vous souhaitez utiliser le mode réseau hôte, pont Docker abandonné, aucun défaut

 volumes: // définissent un volume de stockage partagé dans la liste de la nacelle

 - name: String

 emptyDir: {} // avec un cycle de vie avec un volume de stockage Pod, un répertoire temporaire, est vide

 cheminServeur: // répertoire sur l'hôte où le Pod, le navire sera utilisé pour monter le répertoire

 chemin: string

 secret: // type de volume de stockage secret,

 secretName: String

 article:

 - key: String

 path: String

 configMap: // type de configMap volume de stockage

 name: String

 produits

 - key: String

 path: String

répertoire Kubernetes est monté

Docker lui-même a son propre répertoire est monté, mais la fonction est trop simple, monter en général seulement un répertoire local, K8S en tant que services de gestion des conteneurs Docker, en plus de monter également un répertoire de stockage de fichiers en ligne local, par exemple, nfs

1. Annuaire local montage

suivant fichier de configuration YML

apiVersion: extensions / v1beta1

genre: déploiement

métadonnées:

 Nom: goserver

spec:

 répliques: 2

 modèle:

 métadonnées:

 étiquettes:

 exécuter: goserver

 spec:

 conteneurs:

 - Nom: goserver

 Image: registry.cn-hangzhou.aliyuncs.com/magina-centos7/goserver:1.0

 ports:

 - containerPort: 4040

 volumeMounts:

 - mountPath: / mnt / logs

 nom: go-logs

 volumes:

 - nom: go-logs

 cheminServeur:

 Chemin: / mnt / logs / Kubernetes / goserver

Les volumes finaux précisent le nom et le chemin du répertoire de montage, le répertoire est local, ce pod ne monter répertoire de l'hôte actuel, mais quand nous avons plusieurs nuds, et ces noeuds ont la même course projet, et nous avons besoin de journaux virés de ces projets, un moyen monté localement est lourd, bien sûr, nous pouvons utiliser la fonction de journalisation distribuée à traiter, d'introduire une autre façon, nfs système de fichiers réseau ici

2. nfs système de fichiers réseau

suivant fichier de configuration YML

apiVersion: extensions / v1beta1

genre: déploiement

métadonnées:

 Nom: goserver

spec:

 répliques: 2

 modèle:

 métadonnées:

 étiquettes:

 exécuter: goserver

 spec:

 conteneurs:

 - Nom: goserver

 Image: registry.cn-hangzhou.aliyuncs.com/magina-centos7/goserver:1.0

 ports:

 - containerPort: 4040

 volumeMounts:

 - mountPath: / mnt / logs

 nom: go-logs

 volumes:

 - nom: go-journal

 nfs:

 serveur: nfs4.yinnote.com

 Chemin: / prod / logs / goserver

Celui-ci utilise la balise, qui est, le répertoire courant est monté sur un système de fichiers distant, où le serveur fait référence au chemin du système de fichiers à distance, vous devez configurer, ou directement acheter d'autres système de fichiers de fournisseur de services cloud, les avantages de le faire est , quel que soit le noeud qui pod, peut placer le journal hit single

De plus, si l'on utilise le système de fichiers nfs nfs-utils doit être installé sur chaque kit de nud ci-dessus, sinon la nacelle ne démarre pas

yum install nfs-utils

miroir importation et conteneur d'exportation

pas tirer vers le bas l'image.

Mirroring peut fournir un mécanisme permettant d'exporter le fichier d'exportation (sauvegarde de sauvegarde) par docker, de sorte que vous pouvez copier l'image à tout endroit.

1. export d'exportation - importation d'importation

Format: docker exportation CONTAINER (conteneur)

Utilisez docker ps -a vue conteneur natif existant, tel que:

# Docker ps -a

CONTAINER ID COMMANDE D'IMAGE CRÉÉE PORTS STATUT NOMS

dd43b6de6b33 weblogic: jdk1.6 "/run.sh" Il y a 3 jours Jusqu'à 3 jours 0.0.0.0:32771- > 22 / tcp, 0.0.0.0:32770- > 7001 / tcp peaceful_saha

aca388afeddf sshd: CentOS "/run.sh" il y a 4 jours Jusqu'à 4 jours 0.0.0.0:32769- > 22 / tcp grave_turing

......

# Docker exportation dd43b6de6b33 > /home/weblogic:jdk1.6.tar

# Cd / home

# Ls

weblogic: jdk1.6.tar

Lorsque l'exportation est terminée, vous pouvez utiliser l'importation importée

# Docker import - /home/weblogic:jdk1.6.tar

2. Enregistrer Enregistrer - Charge de charge

Format: docker Enregistrer l'image (Miroir)

Utilisez des images de docker pour afficher la mise en miroir de la machine existante (vous pouvez aussi utiliser docker commit < CONTENIR-ID >   < IMAGE NOM > Commande pour enregistrer un conteneur en cours d'exécution en miroir), tels que:

# images Docker

ID TAG REFERENTIEL IMAGE TAILLE CRÉÉ

......

docker.io/tutum/lamp derniers 3d49e175ec0022 mois il y a 426,9 MB

......

# Docker sauver 3d49e175ec00 > lamp.tar

# Ls

Dockerfile lamp.tar

# Sz lamp.tar

rz

À partir de transfert zmodem. Appuyez sur Ctrl + C pour annuler.

Transfert lamp.tar ...

 100% 430366 KB 14.345 KB / sec 00:00:300 erreurs

Un peu lent, attendez un peu, n'a pas averti des informations cela signifie sauver OK. 3d49e175ec00 est un identifiant de miroir

Maintenant, vous pouvez charger l'image que vous venez d'enregistrer de docker partout chargés

# Docker charge <  /lamp/lamp.tar

3. Exporter enregistrer la différence entre l'exportation et d'économie

 (1) la taille du fichier de l'image dérivée .export est plus petite que l'image stockée enregistrer

 (2) l'exportation .export (importation d'importation) est d'obtenir un récipient selon le Mirror, Mirror perd toute l'histoire à nouveau lors de l'importation, il est possible rollback (balise docker < ID COUCHE >   < NOM DE L'IMAGE > ), Tandis que la mise en miroir Enregistrer pour enregistrer (charge de charge), il n'y a pas de perte de l'histoire de l'image, peut reculer à la couche précédente (couche). (Voir: images docker --tree)

REMARQUE: l'introduction de charge inappropriée peut être utilisé que viennent docker rm ID conteneur, docker rmi ID d'image à supprimer.

Retirez tous les conteneurs et le miroir (nettoyage):

Code est la suivante:

docker $ kill (docker ps -q); docker rm $ (docker ps -a -q); docker rmi $ (images docker -q -a)

L'auteur du blog: la vie amoureuse de l'amour JAVA _

Une colonne de blog quotidien, les articles techniques de qualité avec d'excellents blogueurs quotidien recommandé pour vous. Tout en se félicitant de la présentation de l'utilisateur, une fois que l'article est inclus dans le compte officiel, nous recommanderons oh à la maison et d'autres endroits. attention Open Source Chine OSC accès quotidien à pousser la qualité, cliquez sur « En savoir plus » pour lire l'article original.

Stephen Chow, Teng Shen, Huang Bo sites sur stalle Nouvel An chinois, qui est le nouveau roi de la comédie? localisation précise jour de l'an
Précédent
La principale différence entre l'exemple d'interprétation et python3 python2
Prochain
MIX 2S exposition prix de revient de mil 3K +! Lei Jun a dit franchement: 845 Xiaolong vraiment cher
Vous êtes mes yeux: conducteur de train Xiangyang sur Harbin pour prendre soin des passagers aveugles entiers
L'apprentissage de la machine après un nombre N de la publicité des produits de luxe, Lexus avec AI a pris la première annonce | Technologie dit
l'inventaire de l'information Voyage hebdomadaire électrique: délimitation Pékin des essais de conduite automatique route
voiture de nuages matin | secrète Lyft soumettre le projet IPO pertinentes, les propriétaires de Tesla et de faire une grosse blague
Les notes de concert du Nouvel An publié! Hunan Satellite TV a remporté les cinq premières années de perte
Découvrez le premier parc AI du monde: Haidian Park est pas les seuls Baidu véhicules sans pilote
expérience utilisateur innovantes pour répondre aux points névralgiques de l'industrie! série Hirota P sagesse intelligente dans l'évaluation de l'expérience de contrôle
interaction vocale multi-fonctions Baidu matériel intelligents publié le premier son de la vidéo
logiciels complets et des mises à niveau matérielles! LivingLab expérience de la vie au printemps 2019 blockbuster frappe nouvelle conférence
WeChat lourd Alipay fonctionnalité en ligne, les conducteurs âgés, comme la colère: n'ont plus à vous soucier de faire la queue!
Hommage à 40 ans de réforme et d'ouverture Ding « trois sagesse » pilote stratégique prochain voyage