Edited at

ansibleでkubernetes環境の構築 1

More than 1 year has passed since last update.


はじめに

前回の記事でubuntuを使用したMAAS環境を構築することができた

次はkubernetes(以下k8s)を実行するための環境を準備する

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は機能してくれた

続き→ansibleでkubernetes環境の構築 2


参考ページ

Ubuntu 16.04: KVMをインストールして仮想マシンを起動する

Ansible入門しました。【入門編】

kubernetes 公式ページ

kubernetesによるDockerコンテナ管理入門

kubeadm で kubernetes v1.8 + Flannel をインストール