কুবারনেটিস প্রাক্টিক্যালঃ ইন্সটল - ২

ansibleinstallkubectlkubernetes

১। একটা ফোল্ডার তৈরি করে ফেলুন, যেখানে আপনার সব ফাইল জমা রাখবেন।

$ mkdir kuber-cluster 
$ cd kuber-cluster


২। একটা হোস্ট ফাইল তৈরি করে ফেলুন, এন্সিবল এর কাজে লাগবে

$ touch hosts


hosts এর নিচের সেটিং কপি পেস্ট করে আপনার সার্ভার অনুযায়ী আইপি পরিবর্তন করে নেন

[masters]
master ansible_host=<মাস্টার নোডের আইপি>  ansible_user=root

[workers]
worker1 ansible_host=<ওয়ার্কার নোডের আইপি> ansible_user=root

[all:vars]
ansible_python_interpreter=/usr/bin/python3


৩। initial.yml নামের আরেকটা ফাইল তৈরি করেন

$ touch initial.yml


এখন এর ভিতর নিচের সেটিং কপি করে পেস্ট করে দেন।

  • এন্সিবল এই ফাইল পরে, সব সার্ভারে ubuntu নামে একটা ইউজার বানাবে
  • ubuntu ইউজারে পাসওয়ার্ডে ছাড়া sudo ইউজার বানাবে
  • উবুন্টু ইউজারকে আপনার কম্পিউটার এর সাথে কাজ করার জন্য পাবলিক কি যুক্ত করে দেয়া হবে


- hosts: all
  become: yes
  tasks:
    - name: create the 'ubuntu' user
      user: name=ubuntu append=yes state=present createhome=yes shell=/bin/bash

    - name: allow 'ubuntu' to have passwordless sudo
      lineinfile:
        dest: /etc/sudoers
        line: 'ubuntu ALL=(ALL) NOPASSWD: ALL'
        validate: 'visudo -cf %s'

    - name: set up authorized keys for the ubuntu user
      authorized_key: user=ubuntu key="{{item}}"
      with_file:
        - ~/.ssh/id_rsa.pub


৪। kube-dependencies.yml নামের আরেকটা ফাইল খুলে ফেলুন

$ touch kube-dependencies.yml


এর ভিতর নিচের সেটিং কপি পেস্ট করে দেন

  • এখানে দুই লেভেল কাজ হবে, প্রথম লেভেলে সব সার্ভারের জন্য, দ্বিতীয় লেভেলে শুধুমাত্র মাস্টার এর জন্য
  • প্রথমে ডকার ইন্সটল দেয়া হল তারপর নিশিত করা হল ডকার চলছে
  • তারপর কিছু লাইব্রেরি, যেগুলা কুবানেটিস চালাতে অপরিহার্য
  • কিউব্লেট ও কিউবএডিএম সবার জন্য
  • কিউবসিটএল শুধুমাত্র মাস্টারের জন্য


- hosts: all
  become: yes
  tasks:
    - name: install Docker
      apt:
        name: docker.io
        state: present
        update_cache: true

    - name: Ensure docker deamon is running
      service:
        name: docker
        state: started

    - name: install APT Transport HTTPS
      apt:
        name: apt-transport-https
        state: present

    - name: add Kubernetes apt-key
      apt_key:
        url: https://packages.cloud.google.com/apt/doc/apt-key.gpg
        state: present

    - name: add Kubernetes' APT repository
      apt_repository:
        repo: deb http://apt.kubernetes.io/ kubernetes-xenial main
        state: present
        filename: 'kubernetes'

    - name: install kubelet
      apt:
        name: kubelet=1.14.0-00
        state: present
        update_cache: true

    - name: install kubeadm
      apt:
        name: kubeadm=1.14.0-00
        state: present

- hosts: master
  become: yes
  tasks:
    - name: install kubectl
      apt:
        name: kubectl=1.14.0-00
        state: present
        force: yes


৫। শুধু মাস্টার স্পেসিফিক সেটআপের জন্য master.yml একটা ফাইল বানান

$ touch master.yml


এর ভিতর নিচের সেটিং কপি পেস্ট করে দিন। এখানে

  • মাস্টারে কিউব এডিএম ইনিশিয়ালাইজ করা হচ্ছে
  • .kube ফোল্ডার তৈরি করে সেখানে কনফিগারেশন কপি করা হচ্ছে
  • আইপি টেবিলের সেটিং করা
  • নেটওয়ার্ক প্লাগিন ইন্সটল করা হচ্ছ
- hosts: master
  become: yes
  tasks:
    - name: initialize the cluster
      shell: kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU >> cluster_initialized.txt
      args:
        chdir: $HOME
        creates: cluster_initialized.txt

    - name: create .kube directory
      become: yes
      become_user: ubuntu
      file:
        path: $HOME/.kube
        state: directory
        mode: 0755

    - name: copy admin.conf to user's kube config
      copy:
        src: /etc/kubernetes/admin.conf
        dest: /home/ubuntu/.kube/config
        remote_src: yes
        owner: ubuntu

    - name: set iptable
      become: yes
      become_user: ubuntu
      shell: sysctl net.bridge.bridge-nf-call-iptables=1

    - name: install Pod network
      become: yes
      become_user: ubuntu
      shell: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml >> pod_network_setup.txt
      args:
        chdir: $HOME
        creates: pod_network_setup.txt


৬। শুধু ওয়র্কার স্পেসিফিক সেটআপ এর জন্য workers.yml নামে ফাইল খুলে ফেলু

$ touch workers.yml


এর ভিতর নিচের সেটিং কপি করে পেস্ট করে দিন। এখানে

  • মাস্টারে একটা কমান্ড চালিয়ে সেটার আউটপুট একটা ফাইলে সেভ করা হয়েছ
  • ওয়র্কারে আরেকটা কমান্ড চালিয়ে মাস্টার নোডের সাথে যুক্ত হওয়ার আবেদন করা হয়েছে


- hosts: master
  become: yes
  gather_facts: false
  tasks:
    - name: get join command
      shell: kubeadm token create --print-join-command
      register: join_command_raw

    - name: set join command
      set_fact:
        join_command: "{{ join_command_raw.stdout_lines[0] }}"


- hosts: workers
  become: yes
  tasks:
    - name: join cluster
      shell: "{{ hostvars['master'].join_command }} >> node_joined.txt"
      args:
        chdir: $HOME
        creates: node_joined.txt


কাজ প্রায় শেষ। এখন এই ফোল্ডার থেকে নিচের মত করে একটা একটা করে এন্সিবল কমান্ড দিয়ে দিন। আশা করি সব ঠিক ঠাক থাকলে কুবারনেটিস ক্লাস্টার ইন্সটল হয়ে যায়

$ansible-playbook -i hosts initial.yml 
$ ansible-playbook -i hosts kube-dependencies.yml 
$ ansible-playbook -i hosts master.yml 
$ ansible-playbook -i hosts workers.yml



কৃতজ্ঞতা স্বীকারঃ ডিজিটাল ওশেন এর টিউটরিয়াল গুলা অসাধারণ। প্রায় সব কিছুই ঠিকঠাক মত কাজ করে। এখানের প্রায় সব কিছু ডিজিটাল ওশেন থেকে নেয়া। প্রথমে আমি নিজেই একটা বানিয়েছিলাম, তারপর দেখি ওদেরটা ভাল, কিন্তু ওদেরটা এক্সাক্টলি কাজ করে না, তাই আমি সসামান্য মডিফিকেশন করেছি। কোথায় মডিফিকেশন করতে হবে, সেটা জানার জন্য অন্তত এক সপ্তাহে ৩০ ঘণ্টা পরিশ্রম করেছি :) এক সময়ের সেফালোর কলিগ, জার্মান প্রবাসী আরিফ ভাইও হেল্প করেছেন।



এখানেই শেষ। ধন্যবাদ।