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.