ansible로 kubernetes 환경 구축 1

소개





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



여기에서 다음 사양의 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 설치

좋은 웹페이지 즐겨찾기