使用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
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主节点上安装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

广告
将在 10 秒后关闭
bannerAds