LoginSignup
10
22

More than 3 years have passed since last update.

ansibleでkubernetes環境の構築 1

Last updated at Posted at 2020-04-26

はじめに

nodeに対してのk8sのインストールなどは極力ansibleで自動化していく
ansibleの実行機やk8sのマスターはMAASサーバーのKVMを使用する

ゴール

ansibleでk8sをインストールできる状態まで構築する

環境

MBP OS Sierra
MAASサーバー(192.168.100.152)
k8s-masterサーバー(KVM:192.168.100.191)
ansibleサーバー(KVM:192.168.100.192)

ansible Ver.2.5.1
kubernetes Ver.1.10.3

MAASサーバーにKVMをインストールする

ansibleサーバー、k8sサーバーを作るためのKVMを土台となるMAASサーバーにインストールする
インストール後はlibvirtグループに参加し、sudoなしでも実行できるようにする

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

KVMの作成はデスクトップ環境を使用した方が便利なため、MAASサーバーにデスクトップをインストールする

$ sudo apt -y install ubuntu-desktop

デスクトップのインストールは時間がかかるためしばし待つ
インストールが完了して再起動すれば自動でデスクトップが表示される

デスクトップ上のターミナルでKVMを起動すれば作成用ウィンドウが起動される

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

ここで下記スペックのKVMを新規作成する

ホスト名:ansible
メモリ:4GB
CPU:2
ストレージ:30GB

ホスト名:k8s-master
メモリ:8GB
CPU:4
ストレージ:40GB

ansibleの構築

KVMで作成したansibleサーバーに実際にansibleをインストールする

$ 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

今回はhome直下にansibleフォルダを作成し、各種ファイルを管理する

$ sudo mkdir ansible

k8s-masterにk8sをインストールするためのplaybookを作成する

$ sudo vi k8s-master.yaml

---
- hosts: k8s-master
  remote_user: $user名
  become: yes
  tasks:
    - name: Install prerequisites and Docker.io #dockerインストール
      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: Add K8S GPG key #k8sインストール準備
      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: Remove swapfile from /etc/fstab #swapを消しておかないと失敗する
      mount:
        name: swap
        fstype: swap
        state: absent
    - name: Disable swap
      command: swapoff -a
      when: ansible_swaptotal_mb > 0
    - name: Set docker service to start on boot. #再起動後もdockerを自動起動させる
      service: name=docker enabled=yes
    - name: Set kubelet service to start on boot. #再起動後もk8sを自動起動させる
      service: name=kubelet enabled=yes
    - name: 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
        owner: $オーナー
        group: docker
        mode: 0755
    - name: Copy the .kube config
      become: yes
      file:
        src: /home/$ユーザ名/ansible/admin.conf
        dest: ~/.kube/config
        owner: $オーナー
        group: docker
        mode: 0600
    - name: Export Kubernetes
      lineinfile:
        path: /home/$ユーザ名/.kube/config
        state: absent
        regexp: '^%KUBECONFIG'
    - name: Apply Flannel $flannelのネットワークを作成
      sudo: yes
      shell: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

次はansibleのhostsを追加設定

$ sudo vi /etc/ansible/hosts
[master]

k8s-master $ sudo vi /etc/hosts 192.168.100.191 k8s-master

準備ができたらansibleのplaybook実行
python3をしようする場合は"-e"以降のオプションが必要

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

エラーが出なければ完了

おわりに

k8sはバージョンの移り変わりが早く、ubuntuも18.04と新しいバージョンでエラーが多くどうなるかと思ったが初期化の成功にひとまず安心した

つまづいたところ

dockerのバージョン

k8sの初期化をする際、最新のdocker(18.03)を入れていると、対応しているバージョンは17.03までだからダウングレードしろとメッセージが出たため、17.03を入れ直した
しかし失敗するのは変わらなかったため、docker.ioをいれたところ成功した

kube-dnsが機能しなかった

ansibleファイル内で実行しているkubeadm initのコマンドにおいて、--pod-network-cidrのネットワーク表記を当初「10.0.0.0」にしていたが、その設定だとパッケージに入っているkube-dnsが機能しなかった
各ページを確認したところこのネットワークは「10.244.0.0」が正しそうだということがわかり、そちらの設定でコマンドを実行したところ正常にkube-dnsは機能してくれた

参考ページ

Ubuntu 16.04: KVMをインストールして仮想マシンを起動する
Ansible入門しました。【入門編】
kubernetes 公式ページ
kubernetesによるDockerコンテナ管理入門
kubeadm で kubernetes v1.8 + Flannel をインストール

10
22
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
22