使用Ansible来构建Kubernetes环境
首先
尽可能使用Ansible来自动化Node上的k8s安装等操作,执行Ansible的机器和k8s的主节点将使用MAAS服务器的KVM。
终点
使用Ansible来构建到可以安装K8s的状态。
环境。
MBP操作系统为Sierra。
MAAS服务器为192.168.100.152。
k8s-master服务器为KVM:192.168.100.191。
ansible服务器为KVM:192.168.100.192。
Ansible 版本为 2.5.1,Kubernetes 版本为 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

在这里创建一个具有以下规格的新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主节点上安装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中添加主机配置。
$ sudo vi /etc/ansible/hosts
k8s-master
使用sudo命令,打开/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