[LINUX] Créer un environnement Kubernetes avec Ansible 1

Introduction

Installez k8s sur le nœud et automatisez-le autant que possible avec ansible.
L'exécuteur ansible et le maître k8s utilisent KVM du serveur MAAS.

Objectif

Construire jusqu'à un état où les k8 peuvent être installés avec ansible

Environnement

MBP OS Sierra
Serveur MAAS (192.168.100.152)
serveur maître k8s (KVM: 192.168.100.191)
serveur ansible (KVM: 192.168.100.192)

ansible Ver.2.5.1
kubernetes Ver.1.10.3

Installer KVM sur le serveur MAAS

Installez KVM pour créer un serveur ansible et un serveur k8s sur le serveur MAAS de base
Après l'installation, rejoignez le groupe libvirt afin qu'il puisse être exécuté sans sudo

$ sudo apt install -y qemu-kvm libvirt0 libvirt-bin virt-manager bridge-utils
$ sudo systemctl enable libvirt-bin
$ sudo gpasswd libvirtd -a <username>

Installez le bureau sur le serveur MAAS car il est plus pratique d'utiliser l'environnement de bureau pour créer KVM

$ sudo apt -y install ubuntu-desktop

L'installation sur le bureau prend du temps, alors attendez un peu
Le bureau s'affiche automatiquement lorsque l'installation est terminée et redémarrée.

Démarrez KVM dans le terminal sur le bureau pour démarrer la fenêtre de création

$ virt-manager
0001_New-Virtual-Machine.png

Ici, créez un nouveau KVM avec les spécifications suivantes

  Nom d'hôte: ansible
 Mémoire: 4 Go
CPU:2
 Stockage: 30 Go

 Nom d'hôte: k8s-master
 Mémoire: 8 Go
CPU:4
 Stockage: 40 Go  



 

Bâtiment ansible

Installer effectivement ansible sur le serveur ansible créé par KVM

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible

Cette fois, créez un dossier ansible directement sous home et gérez divers fichiers

$ sudo mkdir ansible

Créez un playbook pour installer k8s sur k8s-master

$ sudo vi k8s-master.yaml

---
- hosts: k8s-master
 remote_user: $ nom d'utilisateur
  become: yes
  tasks:
 --name: Installer les prérequis et Docker.io #docker Install
      become: yes
      apt: name={{item}} update_cache=yes
      with_items:
        - apt-transport-https
        - ca-certificates
        - curl
        - software-properties-common
        - docker.io
    - name: user add to docker group
      user: name=gauss group=docker append=yes
 --name: Ajout de la clé GPG K8S # k8s Préparation à l'installation
      apt_key:
        url: https://packages.cloud.google.com/apt/doc/apt-key.gpg
    - name: Add K8S APT repository
      apt_repository:
        repo: deb http://apt.kubernetes.io/ kubernetes-xenial main
    - name: Install K8S
      apt: name={{item}} update_cache=yes
      with_items:
        - kubelet
        - kubeadm
        - kubectl
 --name: supprimer le fichier d'échange de / etc / fstab #swap doit être supprimé sinon cela échouera
      mount:
        name: swap
        fstype: swap
        state: absent
    - name: Disable swap
      command: swapoff -a
      when: ansible_swaptotal_mb > 0
 --name: configurez le service docker pour qu'il démarre au démarrage. # Démarre automatiquement le docker même après le redémarrage
      service: name=docker enabled=yes
 --name: configurez le service kubelet pour qu'il démarre au démarrage. # Démarre automatiquement les k8s même après le redémarrage
      service: name=kubelet enabled=yes
 --name: initialisation Init k8s-master # k8sm
      become: yes
      shell: kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.100.191
    - name: Make Directory .kube
      file:
        path: /.kube
        state: directory
 propriétaire: $ owner
        group: docker
        mode: 0755
    - name: Copy the .kube config
      become: yes
      file:
 src: /home/$username/ansible/admin.conf
        dest: ~/.kube/config
 propriétaire: $ owner
        group: docker
        mode: 0600
    - name: Export Kubernetes
      lineinfile:
 chemin: /home/$username/.kube/config
        state: absent
        regexp: '^%KUBECONFIG'
 --name: Apply Flannel $ Créer un réseau de flanelle
      sudo: yes
      shell: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

Ensuite, ajoutez des hôtes ansibles

$ sudo vi /etc/ansible/hosts

[master]

k8s-master

$ sudo vi /etc/hosts 192.168.100.191 k8s-master

Exécutez le playbook ansible lorsque vous êtes prêt
Si vous souhaitez utiliser python3, vous avez besoin de l'option après "-e"

~/ansible$ sudo ansible-playbook --private-key=id_rsa_common k8s-master.yml -e 'ansible_python_interpreter=/usr/bin/python3'

Terminé si aucune erreur

Conclusion

La version de k8s change rapidement, et ubuntu est 18.04, donc je me demandais ce qui allait se passer avec la nouvelle version, mais j'étais soulagé du succès de l'initialisation.

J'ai trébuché

version du docker

Lors de l'initialisation de k8s, si le dernier docker (18.03) est installé, la version prise en charge est jusqu'à 17.03, donc un message s'est affiché me demandant de rétrograder, j'ai donc réinstallé 17.03
Cependant, cela a toujours échoué, j'ai donc ajouté docker.io et cela a réussi.

kube-dns ne fonctionnait pas

Dans la commande kubeadm init exécutée dans le fichier ansible, la notation réseau de --pod-network-cidr était initialement définie sur "10.0.0.0", mais avec ce paramètre, kube- dans le paquet DNS n'a pas fonctionné
Lorsque j'ai vérifié chaque page, j'ai trouvé que "10.244.0.0" semble être correct pour ce réseau, et lorsque j'ai exécuté la commande avec ce paramètre, kube-dns fonctionnait normalement.

Page de référence

Ubuntu 16.04 : Installez KVM et démarrez la machine virtuelle
Introduction à Ansible. [Introduction]
page officielle de kubernetes
Introduction à la gestion des conteneurs Docker avec kubernetes
Installez kubernetes v1.8 + Flannel avec kubeadm

Recommended Posts